Tuesday, August 17, 2010

Skeletons Hidden in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Linux Closet: r00ting your Linux Desktop for Fun and Profit

A couple of months ago, while working on Qubes GUI virtualization, Rafal has come up with an interesting privilege escalation attack on Linux (a user-to-root escalation), that exploits a bug in... well, actually it doesn't exploit any concrete bug, which makes it so much more interesting.

The attack allows a (unpriviliged) user process that has access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 X server (so, any GUI application) to unconditionally escalate to root (but again, it doesn't take advantage of any bug in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 X server!). In ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r words: any GUI application (think e.g. sandboxed PDF viewer), if compromised (e.g. via malicious PDF document) can bypass all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Linux fancy security mechanisms, and escalate to root, and compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole system. The attack allows even to escape from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SELinux's "sandbox -X" jail. To make it worse, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack has been possible for at least several years, most likely since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 introduction of kernel 2.6.

You can find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 details of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack, as well as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 discussion of possible solutions, including cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one that has eventually been implemented, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Rafal's paper.

One important aspect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack demonstrates, is how difficult it is to bring security to a desktop platform, where one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 biggest challenges is to let applications talk to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GUI layer (e.g. X server in case of Linux), which usually involves a very fat GUI protocol (think X protocol, or Win32 GUI API) and a very complex GUI server, but at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time keep things secure. This was one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key priories for us when designing Qubes OS architecture. (So, we believe Qubes is much more secure than ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r sandboxing mechanisms, such as BSD jails, or SELinux-based sandboxes, because it not only eliminates kernel-level exploits, but also dramatically slims down GUI-level attacks).

The kernel-level "patch" has been implemented last week by Linus Torvalds, and pushed upstream into recent stable kernels. RedHat has also released an advisory for this attack, where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y rated its severity as "high".

ps. Congrats to Brad Spengler for some good guessing :)

29 comments:

Anonymous said...

Unusually good for a guess, wouldn't you say? ;)

Linus screwed up cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fix (that's what happens when you try to push a silent fix out before it's been reviewed and tell -stable to pull it too) so people will have to wait till cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next stable release or pull specific commits.

-Brad

Anonymous said...

More importantly, how have you "eliminate[d] kernel-exploits"? Seems like you're getting a little ahead of yourselves.

It takes actual work and code to accomplish this, not hand-waving and an additional (buggy) layer of abstraction.

-Brad

Joanna Rutkowska said...

@Brad: For more detailed analysis see chapter 8 in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Qubes arch spec:

http://qubes-os.org/files/doc/arch-spec-0.3.pdf

In short: we don't care about user->ring0 attacks in Qubes' AppVMs.

We do care about VM->Xen attack of course, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are quite a different animal.

Joanna Rutkowska said...

@Brad: In Qubes we're not *adding* an additional layer of abstraction -- we're *replacing* cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 buggy Linux monolithic kernel, with something orders of magnitude less buggy (Xen, guid, and a few more discussed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 spec).

Joanna Rutkowska said...

Correction:

"In short: we don't care about user->ring0 attacks in Qubes' AppVMs."

should be:

"In short: we don't care about user->kernel attacks in Qubes' AppVMs."

Of course kernel runs in Ring3 on Xen x64.

Anonymous said...

Root in a VM is still root.
Which user maintains extra-security twice or more often within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VMs?

For modern client sided attacks it doesn't matter whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r you isolate your VMs. If an attacker is after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data he'll simply get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mails/files/whatever from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work/home online VM. So what's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 difference... you have to keep your data accessible to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VMs able to interact with each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r (on a desktop operating system).

Currently Desktops evolve to a semantic usability experience, which practically means: people want cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir data indexed, available, and easily accessible. And not isolated within some VM that's offline or not interacting.

Last but not least one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main problems is, that you will introduce improved reliability for exploits. Within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VMs kernel hardending is practically impossible. So it'll be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (older) standard kernel, with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 standard devices.
Means for me: nice for my home lab ;) Great project.

Joanna Rutkowska said...

@Anonymous:

1) Root in a VM is still root.

In Qubes OS we assume cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker already has root in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AppVM that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y have compromised (e.g. "random" AppVM). We don't care. Root is *not* root any more in Qubes!

2) If an attacker is after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data he'll simply get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mails/files/whatever from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work/home online VM. So what's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 difference... you have to keep your data accessible to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VMs able to interact with each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r (on a desktop operating system).

That's simply not true, and I encourage you to check cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previously mentioned Qubes spec for explanations why.

3) Currently Desktops evolve to a semantic usability experience, which practically means: people want cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir data indexed, available, and easily accessible. And not isolated within some VM that's offline or not interacting.

I would argue that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no need to mix e.g. my work data with my personal data, with my healthcare data, with my banking data, etc...

But Qubes (in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future version) will allow to present all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user data as if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y were all on one system, but still to maintain decent isolation (right now it does it with apps, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user must use different file manager, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re will be just one file manager).

4) Last but not least one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main problems is, that you will introduce improved reliability for exploits. Within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VMs kernel hardending is practically impossible.

We *really* don't care about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker going from user-to-root in a VM.

Anonymous said...

I don't think anything useful will come of any discussion on this topic, as Joanna is playing a security shell game, normally reserved for confused academics and SELinux zealots.

Let's count it up:
1. Redefining "kernel" away from "most privileged code"
2. Applying very odd threat models to Linux desktops
3. Ignoring attacker characteristics associated with said threat models (see 5,6.)
4. Passing TCB problem onto buggy hypervisor
5. Hypervisor isn't protected, except by code removal -- assumption being also that bugs weren't introduced by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 modifications
6. Actual hypervisor (host->self, host->guest) protection left as an academic-style "future work"
7. Ignoring persistent VM-compromise (unless you have unique *stateless* VMs for each individual site or document you process; sorry no saving bookmarks)
8. Ignoring userland compromise, ignoring kernel guest compromise (even though this opens up more Xen attack surface)
9. Claiming to not care about "root" while redefining "root" to something most attackers don't care or need to obtain, particularly on desktops
(people care about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir mailspools, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir saved usernames/passwords, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 privacy of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir encrypted communications, etc)
10. Some functionality dependent upon hardware not used by most people (desktop environment)
11. Isolation provided highly dependent upon proper use in opposition to usability
(this is useful as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 architecture document can be pointed to to inform cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 compromised user how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y don't care about security because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y didn't split
up cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir usage into 10+ AppVMs, aka blame cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user for any failure of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system/inapplicability to real life)
12. Old system: buggy userland -> buggy privileged linux kernel
New system: buggy userland -> same buggy unprivileged (sortof) linux kernel -> buggy xen -> buggy privileged linux kernel

(splitting this up as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comment's too long)

Anonymous said...

(continued...)

Not only is it false to say kernel-level exploits are eliminated, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole sentence doesn't say anything. I can just as accurately and vacuously say "I believe a physical air-gap is much more secure than ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r sandboxing mechanisms." You miss something very important if you miss this extension of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logic. Talking about security of sandboxes where you've just shifted around cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack surface demonstrates nothing. Usability, performance, complex applications, real life -- cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se things matter.

So again I say, it takes actual work and code to accomplish what you've claimed, not hand-waving and an additional (buggy) layer of abstraction.

Or as Wittgenstein said, "now you are only playing with words."

-Brad

PaX Team said...

Hi Joanna,

i think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's a misunderstanding regarding 'kernel exploits'. to explain i'll give you an analogy.

so-called return-to-libc attacks have been publicly known since at least solar_diz's famoust post on bugtraq in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous millennium. i think it's obvious to anyone skilled in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 art that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 technique itself has never prevented anyone from writing an exploit that relied on anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r piece of code, or even arbitrary chunks of code (vs. libc API calls). in fact we know it for a fact since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re're even public exploits that do just that, many years before cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 current marketing distractment called ROP/JOP/etc entered cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public mind as if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y were something new. so what we can see here is an exploit technique named after its first public incarnation but that doesn't mean it wasn't meant to cover cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole set of techniques that relies on executing existing code, wherever it may be in memory.

now cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 analogy is that 'kernel exploits' never meant 'guest kernel exploits' (regardless of ring-0 or ring-3, or whatever), but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y always meant 'exploits against bugs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TCB'. and since in a traditional OS where such exploits were written originally cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel code running in ring-0 happens to be part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TCB, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name stuck.

now what this means for Qubes is that your claim about eliminating 'kernel-level exploits' would require no exploitable bugs in Xen (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor) and dom0 at least (be that by provable construction or just intrusion prevention techniques). and i think we all agree that you don't have such a thing, nor does anyone else to date ;). cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 alternative intrepretation of your claim would be that you solved cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem by declaring it not to be a problem (e.g., "we don't care about user->ring0 attacks in Qubes ' AppVMs", "In Qubes OS we assume cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker already has root in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AppVM" or "We *really* don't care about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker going from user-to-root in a VM.") and i don't think you really meant that ;).

Joanna Rutkowska said...

@PaX Team:

I don't agree that one can extend cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 meaning of "kernel exploits" to also cover "hypervisor exploits", especially in case of such a thin hypervisor as Xen, or even "TCB exploits" (in Qubes TCB is not much more than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Xen hypervisor).

The main difference is that Xen has at least 2 orders of magnitude less code than a typical monolithic kernel (Linux, Windows, Mac), and this is possible because, unlike a normal OS, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (decent) hypervisor doesn't need to implement a whole lot of services (filesystems, hundreds or drivers, netoworking stacks, etc). This difference cannot be underestimated -- it's a huge security win.

In Qubes architecture we don't care whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker has "just" user privileges, or full root privileges in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AppVM -- because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no gain for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker in having root over having "just" user. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker gained user access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AppVM, this AppVM is considered to be *fully* compromised, period.

One can argue, like Brad, that having root is usually needed to start a furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r attack from VM to Xen (or e.g. guid perhaps), but Xen has been designed with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 assumption that it should withstand attacks from fully compromised (root-ed) VMs. So, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re was a bug in Xen that required a root in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AppVM to compromise Xen, it would be a fatal bug in Xen, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only way around this would have to be patch it. If I was to make bets, I would say we would see "a few more" VM->Xen bugs over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next two years. So far we have seen just one: cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 heap overflow in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (optional) NSA's Flask extension to Xen found by Rafal in 2008.

As for "exploitable bugs in Dom0" -- please note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interface between AppVMs and Dom0 is very thin -- it comes down to 2 (3) things:
1) Qubes GUI protocol (served by some 2k LOC server, guid, in Dom0 side)
2) xenstored (similarly simple)
3*) storage backends, that will be eliminated in Qubes 2.0 when TXT will finally become widespread (and fixed -- think: STM) and we will be able to have truly unprivileged storage domain.

Mikael Ståldal said...

> In Qubes architecture we don't care
> whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker has "just" user
> privileges, or full root privileges
> in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AppVM -- because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no
> gain for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker in having root
> over having "just" user.

You imply that we should care about root privilege on a normal Linux machine. But why should we?

On a normal Linux desktop machine with only one user account, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is little gain for an attacker to get root privilege, much damage can be done with only user privilege.

(Servers and desktop machines with several user accounts is a different story though.)

The main security problem here is in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PDF/whatever viewer if it is possible to do malicious stuff with a PDF/whatever document.

Joanna Rutkowska said...

@Mikael:

Well, one might argue that when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker has root access on a normal Linux desktop, it would be easier for her to install all sorts of various persistent rootkits, even such that would survive reinstall. On Qubes this is not possible, because each VM get a fresh root filesystem upon start.

Joanna Rutkowska said...

@Mikeal: ps. obviously cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (widespread) model of a desktop system where all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 apps run with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same user account/domain/privilege is sick. Yes, all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mainstream OSes implement it.

kryptart said...

I use FreeBSD.
Is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack possible so also under FreeBSD (without jails)?

Rafal Wojtczuk said...

@kryptart: Most probably cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack is not possible under FreeBSD; last time I looked it provided stack/heap separation, so is immune to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 root issue. It would be good to check cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 current version, though.

Joanna Rutkowska said...

@kryptart, @rafal:

Nevercá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365less, please note that FreeBSD (nor any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r UNIX system AFAIK) makes any effort to protect against GUI-level attacks performed by one GUI application towards ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs, such as input sniffing/spoofing, screen capturing, etc.

Also, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is this fat X protocol that represents a racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r big attack surface, that, when successfully attacked, gives cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker root access (unless cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 X server is somehow priv-sep'ed, which might be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case on OpenBSD).

Anonymous said...

"On Qubes this is not possible, because each VM get a fresh root filesystem upon start."

It's patently false that rootkits can't exist with persistence on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AppVMs simply because you provide a fresh root filesystem upon start. If you expected a real security boundary to exist in Qubes in this sense, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n not only is it fundamentally flawed, but you also have to give up your "not caring" about what goes on in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AppVMs.

Not only that, but pretending this anti-persistence exists opens up an entirely new class of attacks to achieve persistence: crafted modification of "trusted" application data. Mail is being stored, bookmarks are being stored, browser caches, etc. Now a bug in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parsing of any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se things, which previously was never considered security relevant, can be abused to achieve persistence.

-Brad

Joanna Rutkowska said...

@Brad:

Sigh... we write exactly about those attack vectors in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Qubes spec in chapter 4.6.

(Is re-discovering somebody's else findings your speciality? :)

The statement you quoted (out of context) referred to such persistent infections that survive reinstall (in Qubes terminology: VM-recreation).

BTW, one way to deal with this problem (in some scenarios) are Disposable VMs:

http://cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365invisiblethings.blogspot.com/2010/06/disposable-vms.html

(code already in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 git).

Mikael Ståldal said...

>Well, one might argue that when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365
>attacker has root access on a normal
>Linux desktop, it would be easier for
>her to install all sorts of various
>persistent rootkits, even such that
>would survive reinstall.

It is no problem to install a malicious daemon which is auto started when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user logs in (and thus survive reboot) on a Linux desktop machine without root priv. And it can do much about everything except listen on port <1024.

If it is discrete, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user may not discover it and is not likely to reinstall anything.

And if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user reinstall everything except his home directory, it may well survive that.

But I guess it will be hard to be "stealth" like a rootkit without root priv, so it will be easier to find if you go looking for it.

PaX Team said...

> I don't agree that one can extend cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365
> meaning of "kernel exploits" to also
> cover "hypervisor exploits" [...]

well cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you should back up your disagreement with some solid arguments ;).

first you'll have to explain cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ret2libc analogy (as in, why it doesn't apply). as far as i know, history backs up my story so far, not yours, i.e. it's not a matter of agreement, it's what it was/is.

also think about your own statement in your comments: you said cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re were no privilege boundaries within a domU as far as your threat model is concerned, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it makes no sense to talk about guest kernel exploitability vs. that of guest userland since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same privilege domain (if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you have some contradiction to resolve here as you can't have it both ways). cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore you must have meant something else ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than 'guest kernel exploits' which of course naturally leads to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual privilege boundaries in Qubes: cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor and dom0 and 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 special VMs.

> especially in case of such a thin hypervisor
> as Xen, or even "TCB exploits"

i don't understand why cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 size of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor matters for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 purposes of 'kernel exploit' ;). hint: cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 smaller cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor's size, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bigger cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rest of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TCB (dom0 and its equivalents in Qubes) needs to be. i.e., your argument works against you in fact.

> (in Qubes TCB is not much more than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Xen hypervisor).

except it's not true ;). your TCB isn't just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor but also all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code running in dom0 and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 special VMs (such as your network or storage VMs). why that is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case is easy to see: your system's ultimate goal is to provide protection for end user data and if you don't have mechanisms to ensure that compromised VMs cannot communicate with each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r (under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 watchful eyes of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor), your system is broken by design. as far as i know, Qubes cannot ensure this VM separation except by assuming that certain VMs cannot be compromised - i.e., cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are all part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TCB. it follows cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n that guest kernel bugs are very important in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Qubes security model.

so all in all, whichever way you interpret 'kernel exploit', you very much need to care about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m and i don't see where Qubes has any more protections against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m than what already exists in linux. and we know how effective those protections are, a far cry from 'elimination'.

[continued in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next post]

Joanna Rutkowska said...

@Mikael: All true. I guess it shows how sick security model this is.

@PaX:

well cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you should back up your disagreement with some solid arguments ;).

And that's exactly what I did.

/.../

also think about your own statement in your comments: you said cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re
were no privilege boundaries within a domU as far as your threat model
is concerned, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it makes no sense to talk about guest kernel
exploitability vs. that of guest userland since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same
privilege domain


Exactly! And you should tell it to Brad, as he started this (futile) discussion.

your TCB isn't just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor but also all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code running in dom0 and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 special VMs (such as your network or storage VMs).

The above statement is simply false. RTM.

/.../

so all in all, whichever way you interpret 'kernel exploit', you very much need to care about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m

I still don't see why...

[continued in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next post]

Sorry, I got your comment in 4 different pieces most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m overlapping, I thought I moderated cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 longest piece, but apparently I clicked on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 wrong one...

But, I think, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interest of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 readers, we should do EOT, as this discussion isn't going anywhere. If you think Qubes architecture is buggy, feel free to write some proof of concepts to back up your opinion -- we would be thrilled to see some exploits for Qubes, really!

Anonymous said...

> If you think Qubes architecture is
> buggy, feel free to write some proof of
> concepts to back up your opinion

Hehe, in order to prove that Xen is indeed just as buggy as Linux kernel, The PaX Team or Spengler would have to write *lots* of exploits for Quebes, I guess ;)

Anonymous said...

Good work and good constructive challenges also.

Anonymous said...

I'm curious if you actually wrote a POC for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SELinux sandbox scenario?

Anonymous said...

i have had a brief read of your architecture document.

can you explain cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 difference between

1. Traditional - opening a PDF containing an exploit which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n leads to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exploitation of a secondary bug (say, kernel priv esc) to compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole system.

2. Qubes - opening a PDF containing an exploit which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n leads to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exploitation of a secondary bug in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor resulting in a compromise of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole system.

If I compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 storage VM (which presumably has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ability to decrypt/access all data) what's stopping me from abusing this to read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data from anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r app? Ditto network.

At cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end, seems like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same impact - just a different way of getting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re.

If I'm missing a massive point I'm sorry.

Joanna Rutkowska said...

@Anonymous:

2. Qubes - opening a PDF containing an exploit which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n leads to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exploitation of a secondary bug in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hypervisor resulting in a compromise of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole system.

1) The numbers: Xen hypervisor has around 200k LOC, while Linux/Windows/Mac kernels have tens of millions. Get it?

2 ) GUI isolation

If I compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 storage VM (which presumably has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ability to decrypt/access all data) what's stopping me from abusing this to read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data from anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r app?

Nah, you didn't read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 spec carefully, did you? The storage domain CANNOT read data of ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r VMs. So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 answer to your question is: crypto (and also Intel TXT, so you could not compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system via MBR attack).

Ditto network.

Have you heard about this cool thing called SSL, SSH? :)

Anonymous said...

Hello ITL people & Joanna !

I use different user accounts to manage/minimize data access only to program which need it (like you do in Qubes with VM). Sure, I already know this is not top security but 1) it is better than nothing, 2) a quite light, easy solution to setup and 3) it protects against almost every security issue not involving privileges escalation to root.

A security issue like this one, which give an attacker access to all of my data, just warns and remembers me to find a more serious solution. And after reading Qubes documentation, Qubes fits so much my needs for security that it seems I have written cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "Why ?" part. You guess it : I'm really waiting for Qubes to be ready :)

PS: Half explaining in comment what's already well explained in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Qubes documentation do deserve your work on Qubes and is a waste of time. It's quite obvious that many comments here comes from maybe-skilled people, but from skilled people who didn't read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Qubes documentation and/or understand it's goal.

-- neskouik

James Pannozzi said...

Many thanks both for alerting us to something that was for me, completely unexpected (as I had put, perhaps unduly, faith in my fedora se-linux enhancement)
and for posting a link to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Qubes project, an idea which is, I believe, LONG overdue.

In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 drive for performance and compatibility, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re has been left behind more holes than most large pieces of swiss cheese. The design of an operating system which has its basis in security is refreshing and my only fear is that if it gets "too" good, you will have a visit from some government "official" or ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r warning you how dangerous, perhaps even illegal, allowing private citizens to have fully secure (racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than PRETEND SECURE) desktops.