Tuesday, February 13, 2007

Confusion About The "Joke Post"

It seems that many people didn’t fully understand why I wrote cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous post – Vista Security Model – A Big Joke... There are two things which should be distinguished:

1) The fact that UAC design assumes that every setup executable should be run elevated (and that a user doesn't really have a choice to run it from a non-elevated account),

2) The fact that UAC implementation contains bug(s), like e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bug I pointed out in my article, which allows a low integrity level process to send WM_KEYDOWN messages to a command prompt window running at high integrity level.

I was pissed off not because of #1, but because Microsoft employee - Mark Russinovich - declared that all implementation bugs in UAC are not to be considered as security bugs.

True, I also don't like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that UAC forces users to run every setup program with elevated privileges (fact #1), but I can understand such a design decision (as being a compromise between usability and security) and this was not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reason why I wrote "The Joke Post".

Monday, February 12, 2007

Vista Security Model – A Big Joke?

[Update: if you came here from ZDNet or Slashdot - see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post about confusion above!]

Today I saw a new post at Mark Russinovich’s blog which I take as a response to my recent musings about Vista security features, where I pointed out several problems with UAC, like e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack that allows for a low integrity process to hijack cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 high integrity level command prompt. Those who read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole article undoubtedly noticed that my overall opinion of vista security changes was still very positive – after all everybody can do mistakes and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact UAC is not perfect, doesn’t diminish cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that it’s a step into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 right direction, i.e. implementing least-privilege policy in Windows OS.

However, I now read this post by Mark Russinovich (a Microsoft employee), which says:
"It should be clear cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, that neicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r UAC elevations nor Protected Mode IE define new Windows security boundaries. Microsoft has been communicating this but I want to make sure that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 point is clearly heard. Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r, as Jim Allchin pointed out in his blog post Security Features vs Convenience, Vista makes tradeoffs between security and convenience, and both UAC and Protected Mode IE have design choices that required paths to be opened in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 IL wall for application compatibility and ease of use."

And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we read:
"Because elevations and ILs don’t define a security boundary, potential avenues of attack, regardless of ease or scope, are not security bugs. So if you aren’t guaranteed that your elevated processes aren’t susceptible to compromise by those running at a lower IL, why did Windows Vista go to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trouble of introducing elevations and ILs? To get us to a world where everyone runs as standard user by default and all software is written with that assumption."

Oh, excuse me, is this supposed be a joke? We all remember all those Microsoft’s statements about how serious Microsoft is about security in Vista and how all those new cool security features like UAC or Protected Mode IE will improve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 world’s security. And now we hear what? That this flagship security technology (UAC) is in fact… not a security technology!

I understand that implementing UAC, UIPI and Integrity Levels mechanisms on top of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing Windows OS infrastructure is a hard task and it would be much easier to design cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole new OS from scratch and that Microsoft can’t do this for various of reasons. I understand that all, but that doesn’t mean that once more people at Microsoft realized that too, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y should turn everything into a big joke? Or maybe I’m too much of an idealist…

So, I will say this: If Microsoft won’t change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir attitude soon, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n in a couple of months cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security of Vista (from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 typical malware’s point of view) will be equal to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security of current XP systems (which means, not too impressive).

Sunday, February 04, 2007

Running Vista Every Day!

More cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n a month ago I have installed Vista RTM on my primary laptop (x86 machine) and have been running it since that time almost every day. Below are some of my reflections about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new security model introduced in Vista, its limitations, a few flaws and some practical info about how I configured my system.

UAC – The Good and The Bad

User Account Control (UAC) is a new security mechanism introduced in Vista, whose primary goal is to force users to work using restricted accounts, instead working as administrators. This is, in my opinion cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most important security mechanism introduced in Vista. That doesn’t mean it can not be bypassed in many ways (due to implementation flaws), but just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that such a design change has been made into Windows is, without doubt, a great step towards securing consumer OSes.

When UAC is active (which is a default setting) even when user logs in as an administrator, most of her programs run as restricted processes, i.e. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y have only some very limited subset of privileges in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir process token. Also, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y run at, so called, Medium integrity level, which, among ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r things, should prevent those applications from interacting with higher integrity level processes via Window messages. This mechanism also got a nice marketing acronym, UIPI, which stands for User Interface Privilege Isolation. Once cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system determines that a given program (or a given action) requires administrative privileges, because e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user wants to change system time, it displays a consent window to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user, asking her whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r she really wants to proceed. In case cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user logged in as a normal user (i.e. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 account does not belong to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Administrators group), 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 user is also asked to enter password for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 administrator's accounts. You can find more background information about UAC, e.g. at this page.

Many people complain about UAC, saying that it’s very annoying for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to see UAC consent dialog box to appear every few minutes or so, and claim that this will discourage users from using this mechanism at all (and yes, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re’s an option to disable UAC). I strongly disagree with such opinion - I’ve been running Vista more cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n a month now and, besides cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first few days when I was installing various applications, I now do not see UAC prompt more cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n 1-2 times per day. So, I really wonder what those people are doing that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y see UAC constantly appearing every ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r minute…

One thing that I found particularly annoying though, is that Vista automatically assumes that all setup programs (application installers) should be run with administrator privileges. So, when you try to run such a program, you get a UAC prompt and you have only two choices: eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r to agree to run this application as administrator or to disallow running it at all. That means that if you downloaded some freeware Tetris game, you will have to run its installer as administrator, giving it not only full access to all your file system and registry, but also allowing e.g. to load kernel drivers! Why Tetris installer should be allowed to load kernel drivers?

How Vista recognizes installer executables? It has a compatibility database as well as uses several heuristics to do that, e.g. if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file name contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 string “setup” (Really, I’m not kidding!). Finally it looks at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executable’s manifest and most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 modern installers are expected to have such manifest embedded, which may indicate that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executable should be run as administrator.

To get around this problem, e.g. on XP, I would normally just add appropriate permissions to my normal (restricted) user account, in such a way that this account would be ale to add new directories under C:\Program Files and to add new keys under HKLM\Software (in most cases this is just enough), but still would not be able to modify any global files nor registry keys nor, heaven forbid, to load drivers. More paranoid people could chose to create a separate account, called e.g. installer and use it to install most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 applications. Of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 real life is not that beautiful and you sometimes need to play a bit with regmon to tweak cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 permissions, but, in general it works for majority of applications and I have been successfully using this approach for years now on my XP box.

That approach would not work on Vista, because every time Vista detects that an executable is a setup program (and believe me Vista is really good at doing this), it will only allow running it as administrator… Even though it’s possible to disable heuristics-based installer detection via local policy settings – see picture below:



that doesn’t seem to work for those installer executables which have embedded manifest saying that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y should be run as administrator.

I see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above limitation as a very severe hole in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 design of UAC. After all, I would like to be offered a choice whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r to fully trust given installer executable (and run it as full administrator) or just allow it to add a folder in C:\Program Files and some keys under HKLM\Software and do nothing more. I could do that under XP, but apparently I can’t under Vista, which is a bit disturbing (unless I’m missing some secret option to change that behavior).

Integrity Levels – Protect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS but not your data!

Integrity Levels (IL) mechanism has been introduced to help implementing UAC. This mechanism is very simple – every process can be assigned one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 four possible integrity levels:

• Low
• Medium
• High
• System

Similarly, every securable object in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system, like e.g. a directory, file or registry key, can also be assigned an integrity level. Integrity level is nothing else cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n just an ACE of a special type assigned to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SACL list. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re’s no such ACE at all, 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 integrity level of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 object is assumed to be Medium. You can use icacls command to see integrity levels on file system objects:
C:\>icacls \Users\joanna\AppData\LocalLow
\Users\joanna\AppData\LocalLow silverose\joanna:(F)
silverose\joanna:(OI)(CI)(IO)(F)
NT AUTHORITY\SYSTEM:(F)
NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
BUILTIN\Administrators:(F)
BUILTIN\Administrators:(OI)(CI)(IO)(F)
Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)
BTW, I don’t know any tool/command to see and modify integrity levels assigned to registry keys (I think I know how to do this in C though). Anybody?

Now, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole concept behind IL is that a process can only get write-access to those objects which have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same or lower integrity level 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 process itself.

Update (March 5th, 2007): This is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 default behavior of IL and is indicated by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 “(NW)” symbol on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 picture above, which stands for NoWriteUp policy. I have just learned that one can use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chml tool by Mark Minasi to set also a different policy, i.e. NoReadUp (NR) or NoExecuteUp (NX), which would result that IL mechanism will not allow a lower integrity process to read or execute cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 objects marked with higher IL. See also my recent post about this tool.

UAC is implemented using IL – even if you log in as administrator, all your processes (like e.g. explorer.exe) run with Medium IL. Once you elevated to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 “real admin” your process runs at High IL. System processes, like e.g. services, runs at System IL. From cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security point of view High IL seems to be equivalent to System IL, because once you are allowed to execute code at High IL you can compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole system.

Internet Explorer’s protected mode is implemented using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 IL mechanism. The iexplore.exe process runs at Low IL and, in a system with default configuration, can only write to %USERPROFILE%\AppData\LocalLow and HKCU\Software\AppDataLow because all ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r objects have higher ILs (usually Medium).

If you don’t like surfing using IE, you can very easily setup your Firefox (or ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r browser of your choice) to run as Low integrity process (here we assume that Firefox user’s profile is in j:\config\firefox-profile):
C:\Program Files\Mozilla Firefox>icacls firefox.exe /setintegritylevel low
J:\config>icacls firefox-profile /setintegritylevel (OI)(CI)low
Because firefox.exe is now marked as a Low integrity file, Vista will also create a Low integrity process from this file, unless you are going to start this executable from a High integrity process (e.g. elevated command prompt). Also, if you, for some reason (see below), wanted to use runas or psexec to start a Low integrity process, it won’t work and will start cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process as Medium, regardless that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executable is marked as Low integrity.

It should be stressed that IL, by default, protects only against modifications of higher integrity objects. It’s perfectly ok for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Low IL process to read e.g. files, even if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are marked as Medium or High IL. In ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r words, if somebody exploits IE running in Protected Mode (at Low IL), she will be able to read (i.e. steal) all user’s data.

This is not an implementation bug, this is a design decision and it’s cleverly called cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 “read-up policy”. If we think about it for a while, it should become clear why Microsoft decided to do it that way. First, we should observe, that what Microsoft is most concerned about, is malware which permanently installs itself in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system and that could later be detected by some anti-malware programs. Microsoft doesn’t like it, because it’s cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source of all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 complains about how insecure Windows is and also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 A/V companies can publish cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir statistics about how many percent of computers is compromised, etc… All in all, a very uncomfortable situation, not only for Microsoft but also for all those poor users, who now need to try all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 various methods (read buy A/V programs) to remove cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 malware, instead just focus on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir work…

On 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 hand, imagine a reliable exploit (i.e. not crashing a target too often) which, after exploiting e.g. IE Protected Mode process, steals all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user’s DOC and XLS files, sends cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m back somewhere and afterwards disappears in an elegant fashion. Our user, busy with his every day work, does not even notice anything, so he can continue working undisturbed and focus on his real job. The A/V programs do not detect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exploit (why should cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y? – after all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re’s no signature for it nor cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 shellcode uses any suspicious API) so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do not report cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 machine as infected – because, after all it’s not infected. So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 statistics look better and everybody is generally happier. Including cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 competition, who now has access to stolen data ;)

User Interface Privilege Isolation and some little Fun

UAC and Integrity Levels mechanism makes it possible for processes running with different ILs to share cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same desktop. This raises potential security problem, because Windows implements a mechanism to allow one process to send a “window message”, like e.g. WM_SETTEXT, to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r process. Moreover, some messages, like e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 infamous WM_TIMER, could be used cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 redirect execution flow of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target thread. This has been popular a few years ago in so called “Shatter Attacks”.

UIPI, introduced in Vista, is for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rescue. UIPI basically enforces cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 obvious policy that lower integrity processes can not send messages to higher integrity processes.

Interestingly, UIPI implementation is a bit “unfinished” I would say… For example, in contrast to design assumption, on my system at least, it is possible for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Low integrity process to send e.g. WM_KEYDOWN to e.g. open Administrative shell (cmd.exe) running at High IL and gets arbitrary commands executed.

One simple scenario of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack is that a malicious program, running at Low IL, can wait for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to open elevated command prompt – it can e.g. poll cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 open window handles e.g. every second or so (Window enumeration is allowed even at Low IL). Once it finds cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 window, it can send commands to execute… Probably not that cool as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 recent “Vista Speech Exploit”, but still something to play with ;)

It’s my feeling that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are more holes in UAC, but I will leave finding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m all as an exercise for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 readers...

Do-It-Yourself: Implementing Privilege Separation

Because of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 limitations of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 UAC and IL mentioned above (i.e. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 read-up policy), I decided to implement a little privilege-separation policy in my system. The first thing we need, is to create a few more accounts, each for a specific type of applications or tasks. E.g. I decided that I want a separate account to run my web browser, a different one for running my email client as well as IM client (which I occasionally run) and a whole ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r account to deal with my super-secret projects. And, of course, I need a main account, that is, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one which I will use to log in to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system. All in all, here is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 list of all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 accounts on my Vista laptop:

admin
joanna
joanna.web
joanna.email
joanna.sensitive

So, joanna is used to log into system (this is, BTW, a truly limited account, i.e. it doesn’t belong to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Administrators group) and Explorer and all applications like e.g. Picassa are started using this account. Firefox and Thunderbird run as joanna.web and joanna.email respectively. However, a little trick is needed here, if we want to start those applications as Low IL processes (and we want to do this, because we want UIPI to protect, at least in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ory, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r applications from web and mail clients if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y got compromised somehow). As it was mentioned above, if one uses runas or psexec cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 created process will run as Medium IL, regardless cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 integrity level assigned to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executable. We can get around this, buy using this simple trick (note cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 nested quotations):
runas /user:joanna.web "cmd /c start \"c:\Program Files\Mozilla Firefox\firefox.exe\""
c:\tools\psexec -d -e -u joanna.web -p l33tp4ssw0rd "cmd" "/c start "c:\Program Files\Mozilla Firefox\firefox.exe""
Obviously, we also need to set appropriate ACLs on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 directories containing Firefox and Thunderbird user’s profiles, so that each of those two users get full access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 respective directories as well as to a \tmp folder, used to store email attachments and downloaded files. No ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r personal files should be accessible to joanna.web and joanna.email.

Finally, being a paranoid person as I am, I have also a special user joanna.sensitive, which is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only one granted access to my \projects directory. It may come as a surprise, but I decided to make joanna.sensitve a member of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Administrators group. The reason for that is that I need to make all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 applications which run as joanna.sensitve (e.g. gvim, cmd, Visual Studio, KeePass, etc) to have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir UI isolated from all ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r normal applications, which run as joanna at Medium IL. It seems like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only way to start a processes at High IL is to make it part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Administrators group and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n use ‘Run As Administrator’ or runas command to start it.

That way we have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 highly dangerous applications, like web browser or email client, run at Low IL and as very limited users (joanna.web and joanna.email), who have access only to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 necessary profile directories (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 restriction, this time, applies both to read- and write- accesses, because it’s enforced by normal ACLs on file system objects and not by IL mechanism). Then we have all ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r applications, like Explorer, various Office applications, etc. running as joanna at Medium IL and finally cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most critical programs, those running as joanna.sensitve, like KeePass and those which get access to my \projects directory, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y all run at High IL.

Thunderbird, GPG and Smart Cards

Even though cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above configuration might look good, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re’s still a problem with it I haven’t solved yet. The problem is related to mail encryption and how to isolate email client from my PGP private keys. I use Thunderbird togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r with Enigmail’s OpenPGP extension. The extension is just a wrapper around gpg.exe, a GnuPG implementation of PGP. When I open encrypted email, my Thunderbird processes spawns a new gpg.exe process and passes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 passphrase to it as an argument. There are two alarming things here – first Thunderbird process needs to know my passphrase (in fact I enter it into a dialog box displayed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Enigmail’s extension) and second, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 gpg.exe process runs as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same user and at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same IL level as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 thunderbird.exe process. So, if thunderbird.exe gets compromised, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 malicious code executing inside thunderbird.exe will not only be able to get to know my passphrase, but will also be free to read my private key from disk (because it has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same rights as gpg.exe).

Theoretically it should be possible to solve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem with passphrase stealing by using GPG Agent, which could run in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 background as a service and gpg.exe would ask cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 agent for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 passphrase instead asking thunderbird.exe process, which will never be in possession of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 passphrase. Ignoring cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re doesn’t seem to be a working GPG Agent implementation for Win32 environment, this still is not a good solution, because thunderbird.exe still gets access to gpg.exe process, which is its own child after all – so it’s possible for thunderbird.exe to read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 contents of gpg.exe memory and to find a decrypted PGP private key cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re.

It would help if GPG was implemented as a service running in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 background and thunderbird.exe would only communicate with it using some sort of LPC to send request to encrypt, decrypt, sign and verify buffers. Unfortunately I’m not aware of such implementation, especially for Win32.

The only practical solution seems to be to use a Smart Card, which would perform all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365
necessary crypto operations using its own processor. Unfortunately, GnuPG supports only, a so called, OpenPGP smart cards, but it seems that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only two cards which implements this standard (i.e. Fellowship card and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 g10 card) implement only 1024 bits RSA keys, which is definitely not enough for even a moderately paranoid person ;)

In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last hope, I turned to commercial PGP, downloaded cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trial of PGP Desktop and… it turned out that it doesn’t support Vista yet (what a shame, BTW).

So, for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time being I’m defenseless like a baby against all those mean people who would try to exploit my thunderbird.exe and steal my private PGP key :(

The forgotten part: Detection

One might think that it’s a pretty secure system configuration… Well, more precisely, it could be considered as pretty secure, if UIPI was not buggy and UAC didn’t force me to run random setup programs with full administrator rights and if GPG supported Smart Cards with RSA keys > 1024 (or alternatively PGP Desktop supported Vista). But let’s not be that scrupulous and forgot about those minor problems…

Still, even though that might look like a secure configuration, this is all just an illusion of security! The whole security of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system can be compromised if attacker finds and exploits e.g. a bug in kernel driver.

It should be noted that Microsoft has also implemented several anti-exploitation techniques in Vista, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two most advertised are Address Space Layout Randomization (ASLR) and Data Execution Prevention (DEP). However, ASLR does not protect against local kernel exploitation, because it’s possible, even for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Low IL process, to query system about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 list of loaded kernel modules togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir base addresses (using ZwQuerySystemInformation function). Also, hardware DEP, which works only on 64-bit processors, is not applied to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole non-paged pool (as well as some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r areas, but non-paged pool is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 biggest one). In ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r words, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware NX bit is not set on all pages comprising cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 non-paged pool. BTW, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a reason for Microsoft doing this and this is not due to compatibility issues (at least I believe so). I wonder who else can guess... ;)

UPDATE (see above): David Solomon, pointed out, that Hardware DEP is also available on many modern 32-bit processors (as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 NX bit is implemented in PAE mode).

It’s very good that Microsoft implemented those anti-exploitation technologies (besides ASLR and NX, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are also some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs). However cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 point is, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y could be bypassed by a clever attacker under some circumstances. Now think about how many 3rd party kernel drivers are typically present in an average Windows systems – all those graphics card drivers, audio drivers, SATA drivers, A/V drivers, etc... and try answering cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 question how many possible bugs could be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re? (BTW, it should be mentioned that Microsoft did a clever step by moving some classes of kernel drivers into user mode, like e.g. USB drivers – this is called UMDF).

When attacker successfully exploits kernel bug, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security scheme implemented by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS is just worth nothing. So, what can we do? Well, we need to complement all those cool prevention technologies with effective detection technology. But has Microsoft done anything to make systematic detection possible? This is a rhetoric question of course and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 negative answer applies unfortunately not only to Microsoft products but also to all ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r general purpose operating systems I’m aware of :(

My favorite quote of all those people who negate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of detection is this: “once cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system is compromised we can’t do anything!”. BS! Even though it might be true today – because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Operating System are not designed to be verifiable, but that doesn’t mean we can’t change this!

Bottom Line

Microsoft did a good job with securing Vista. They could do better, of course, but remember that Windows is a system for masses and also that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y need to take care about compatibility issues, which sometimes can be a real pain. If you want to run Microsoft OS, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n I believe that Vista is definitely a better choice cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n XP from a security standpoint. It has bugs, but which OS doesn't? What I wish for, is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y paid more attention to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir system verifiable...

Acknowledgements

I would like to thank John Lambert and Andrew Roths, both of Microsoft, for answering my questions about UAC design.