Saturday, May 21, 2011

The App-oriented UI Model and its Security Implications


Most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 desktop OSes today, such as Windows or Mac, expose and encourage a File-oriented UI model. You pick a file in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file manager, click it, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file manager automagically determines cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best app to handle cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file, starts cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app, and passes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file to it.

Back in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 MS-DOS days we used a different model: an app-oriented model – you started an app first, e.g. Word Perfect, or Lotus 1-2-3, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you opened a file from within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app (Norton Commander and similar programs somehow changed that later).

Interestingly this very same app-oriented model is now becoming popular again thanks to systems such as iOS and Android. There is no such thing as a global File Explorer or Finder on an iPad. Only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 apps. One must first pick an app, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application's responsibility to expose an option for opening one of your “files”, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app supports it (e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 calendar or task list apps would always open your default calendar or task list without asking for anything).

I actually like this app-oriented model a lot! It's much less confusing to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user. Just think about all those attacks in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 past where an attacker could prepare a file with some innocently-looking extension but which in fact was an MZ executable. Or how many times people are not even aware which app cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y use! One might argue that user should not be distracted by such “unimportant” things as what app he or she uses for her work, but I disagree. Apparently Apple, and millions of iPhone and iPad users, disagree too.

But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main reason why I like this app-oriented model is because it just fits greatly into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Security by Isolation philosophy.

Just think about it: if it's possible to get users to consciously select an app, and we now know it is possible thanks to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 millions of app-oriented devices sold, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it should be not much more difficult to get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to also consciously select cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain or area, such as “work”, or “personal”, which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y wish to use. Just imagine that instead of one “Mail” app, you would have two apps (and two icons): “Mail Work”, and “Mail Personal”.

There are some technicalities here – such as e.g. how to isolate apps between each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r? Do we need to build anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r layer of isolation in a form of VMs to isolate “Mail Work” from “Mail Personal”, or should cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (new) OSes and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (new) APIs be designed in such a way, that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y were thin and secure, and allow for very good isolation between processes without using virtualization?

In Qubes we must use this additional layer of abstraction (virtualization), because we want to use Linux apps (and in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future also Windows apps), and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y require huge POSIX/X API (and Win32 API) to work correctly. And those APIs are not easily isolate-able. So we use VMs as “API providers”. Same with isolating networking drivers and stacks – we need Linux kernel API to get those drivers and stacks running, so that's why we use a Linux-based “NetVM” for isolating networking. For this reason we expect users to explicitly define domains, such as “work”, “personal”, etc. This is because we cannot afford to run every single app in a separate AppVM (more precisely we cannot afford to create a working copy of this huge POSIX/X API for each app).

But we could very well imagine a well constructed API for apps that would just be easily isolate-able (I'm not saying iOS or Android has such an API), and so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re would be no need to define domains explicitly. Still, we would need a possibility to define more than one instance of each app – such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previously mentioned “Mail Work” and “Mail Personal”.


The app-oriented model seems to be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future. And so seems cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Security by Isolation philosophy!

7 comments:

Anonymous said...

From a UI design perspective, neicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se is good, though cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file-oriented approach is likely better.

What should be in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 foreground is not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 software you're using, or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data you're manipulating, but what you're doing.

That requirement is fulfilled by some apps in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app-oriented model. A TODO list app is a decent example; you're not expecting to manipulate a file, you don't massively care what software it is you're using, what you do care about is that you're writing your TODO list.

But for e.g. word processors, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app-oriented model fails because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no intrinsic link between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 task. To put it differently, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TODO list example works because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is only ever one file to manage, not N.

UI design research has pretty clearly shown that having to break down a task into a verb-subject form like "edit filename" than just a subject like "filename" is a much harder concept for Joe Average to grok.

That's not to say people don't get it. It's to say it's slightly jarring, it interrupts workflow. Good UI aims to never interrupt workflow.

From a security point of view, I can't argue with you. It *is* much easier to pick a known safe program if you have to explicitly name it.

Incidentally, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 situation isn't half as clear on Android as it is on iOS. As apps are generally split into various Activities, and each Activity can respond to an Intent such as "open this URL", it's really a very mixed approach. On cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 home screen it looks clearly app-oriented, but behind cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 scenes it's entirely intent-oriented.

Shmerl said...

Hm, I'm still happily using Midnight Commander whenever I can :)

saso said...

I would be interested what are your thoughts about "Rethinking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Library OS from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Top Down":

http://research.microsoft.com/apps/pubs/default.aspx?id=141071

http://channel9.msdn.com/Forums/Coffeehouse/MSR-OS-Project-DrawBridge--OS-services-as-libraries

http://www.reddit.com/r/ReverseEngineering/comments/gqd0p/rethinking_cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365_library_os_from_cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365_top_down/

(link to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paper in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last link)

If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y would do this to Windows, how far would that bring Windows (in your view) to what you would define as a great os (os architecture)? Or how would it compare to Qubes?

Joanna Rutkowska said...

@saso: After quick look at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paper it seems like all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "novelty" in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir approach is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y tune cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 amount of Windows code to put into each (para) VM so that only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parts required by a given app are used (e.g. only those DLLs that Power Point uses), and everything else discarded. This surely offers advantage of saving some memory per VM.

Essentially you can cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same in Qubes -- you can build any customized template you want -- e.g. some very small template only suited for running Firefox, with some very thin Xorg running cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. This would save on RAM usage per VM. In Qubes we don't care about saving on disk usage, because we use root fs sharing between AppVMs.

Besides cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re doesn't seem to be anything really interesting in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir system -- it still keeps all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 drivers in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TCB (like e.g. VMWare). They also don't provide any secure form of clipboard or file copy between VMs. They don't consider safe GPU virtualiation.

Harry said...

Personally, I dislike cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app model. (I particularly hate it when using a Mac, or a Mac-like application on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PC, and closing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 window associated with one document also closes all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r documents associated with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same app. YMMV.)

Ideally, I think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 document model can be made even more secure than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 apps model, by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 simple expedient of isolating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 documents from one anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r.

Obviously this requires a more granular model than that which I gacá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Qubes uses, and would have poor compatibility with existing application code. But it would have significant advantages, such as being naturally resistant to macro viruses.

Anonymous said...

"This is because we cannot afford to run every single app in a separate AppVM (more precisely we cannot afford to create a working copy of this huge POSIX/X API for each app)."

At least in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case of Windows XP, you're wrong on that one.

A VM of well stripped XP starts in about 20 MB RAM, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system less than 10 MB. It runs well under 50 and perfectly at about 70. Add more per each app's requirements. And that doesn't take into account sharing of OS memory among VMs, available in VirtualBox. The VMs share a single base file system with differencing. And since saving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 state releases memory, in practice you can afford to have as many VMs as you require.

Using thousands of VMs is no problem on today's systems, though cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number of running instances is limited by RAM. If not, you're not doing it right.

Anonymous said...

Go hard core with minimizing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 UI. Limit user interaction to only what's necessary. Hide everything.

Don't let cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r an appVM is running or not, or whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r it has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 right software. Don't involve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir creation and maintenance. Create a GUI that allows cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to express a wish to do something and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n make it happen. The user brings cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appVMs, works on it, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system does cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rest. Make it as appliance-like as possible.

Provide a secure system that does everything a normal user might want to do out of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 box. Don't allow cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to make stupid choices.

Btw, does it backup and restore everything automatically?