Friday, June 10, 2011

My SSTIC 2011 slides

A few days ago I had a privilege to give an opening keynote at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SSTIC conference in Rennes, France, which is believed by many to be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most important security conference in France. You can find my slides here.

SSTIC seems to be a very interesting conference indeed, with a strong emphasis on system-level security, which is quite unusual cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se days where most conferences focus on networking, apps, and web-apps. What a pity all those interestingly-looking talks have been encoded in an obscure language used only by some 3% of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 population of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 planet...

Anyway, it was a pleasure to talk to some ANSSI people I met before cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 conference (one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 organizers of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 event) who really seemed to understand well cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 challenges we face with building secure operating systems, and generally seemed well versed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 topic. Perhaps some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r nations should learn from France, instead of proposing ridiculous and superficial means that can't really solve any real problem.

Friday, June 03, 2011

From Slides to Silicon in 3 years!


Remember our Xen 0wning Trilogy at Black Hat in summer 2008, specifically cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 presentation on Detecting & Preventing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Xen Hypervisor Subversions?

One of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 things we were discussing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re was a proposal to include an additional restriction to Intel processors that would disallow execution of usermode pages from within supervisor mode (ring0). Such a feature, we argued, apart from obviously making many ring3-to-ring0 exploits much harder, including cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very Xen heap overflow exploit we presented in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slides, would also bring us closer to efficient runtime code integrity checkers for kernels and hypervisors, as discussed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slides.


Slide #97, Detecting and Preventing Xen Hypervisor Subversions, Black Hat USA, July, 2008

Fast forward 3 years. On June 1st, 2011, an Intel engineer is submitting a patch for Xen to support a mysterious new processor feature called SMEP (Supervisor Mode Execution Protection). He writes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 feature is not yet documented in SDM, but soon will be. In fact, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 May 2011 update of Intel SDM already contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 details:

Intel SDM, vol. 3a, May 2011, source: intel.com

Some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r people spotted this feature earlier, because of anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r patch submitted by anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Intel engineer to Linux kernel a few weeks ago. Here's a good write up by Dan Rosenberg discussing how this patch makes writing Linux kernel exploits harder, and how it's still possible to write cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

The SMEP feature still doesn't seem to be present in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processors available on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 market, including cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 latest Sand Bridge processors, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's no question it's coming, now that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 feature made it into SDM.

It is quite rewarding to see your idea implemented in a processor... I guess this is how physicists feel when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y introduce a new particle as part of a new quantum model, and later discover evidences to support cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existence of this very particle in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 wild...

Wednesday, June 01, 2011

USB Security Challenges


When we think about “USB Security” cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are lots of things that come to mind...

First cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 physical attacks that could be conducted with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 help of USB devices. These are generally not so interesting, because if one includes physical attacks in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 threat model, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it really opens up lots of possibilities of various attacks, and generally a physical attacker always wins. Still, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are a few very cheap and easy physical attacks that one would like to avoid, or make harder, such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Evil Maid Attacks or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Cold Boot Attacks. Strictly speaking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are not problems inherent to USB itself, but racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r with lack of Trusted Boot, or OS not cleaning properly secrets from memory upon shutdown. They are just made simple thanks to bootable USB sticks.

Much more interesting USB-related physical attacks are those that take advantage of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 specifics of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB standard. One example here would be a malicious USB device that exposes intentionally malformed info about itself in order to exploit a potential flaw in a USB Host Controller driver that processes this info upon each new USB device connect. Or a malicious USB device that would trick cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS (Windows at least) into downloading a known buggy USB driver (or even an intentionally malicious driver, legally submitted to WHQL by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker) and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n exploit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 driver.

Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r class of physical attacks made possible by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB specification are malicious USB devices that pretend to be a keyboard or mouse. The input devices, such as keyboard, are actually cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most security sensitive devices, because an attacker who controls cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keyboard can do everything cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user can do, which basically means: can do everything, at least with regards to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's data.

Finally, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 names stands, is a bus interconnect, which means all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB devices sharing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same USB controller are capable of sniffing and spoofing signals on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bus. This is one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key differences between USB and PCI Express standards, where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 latter uses a peer-to-peer interconnect architecture.

Ok, so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se all above were physical attacks. Let's now look at, much more fatal, software attacks.

The infamous class of attacks exploiting various autorun or auto-preview behaviors is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most known example, but also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 easiest, at least in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ory, to protect against.

Much more interesting are software attacks that attempt to exploit potential flaws in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB stacks – similarly like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 physical attacks mentioned above, just that this time not requiring any hardware-level modifications to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB device. Exposing a malformed partition table is a great example of such an attack. Even if we have all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 autorun mechanisms disabled, still, when we're inserting a storage medium cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS always attempts to parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 partition table in order to e.g. create devices symbolizing each partition/volume (e.g. /dev/sdbX devices).

Now, this is really a problematic attack, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 malformed partition table can be written onto a fully legitimate USB stick by malware. Imagine e.g. you have two physically separated machines (air-gapped), belonging to two different security domains, and you want to transfer files from one to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r. You insert cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB stick into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first machine, copy files, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n insert cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stick to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second machine. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first machine was compromised, it could have altered cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 partition table on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB stick, and now when this stick is inserted into 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 machine its malformed partition table might exploit a buffer overflow in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code used by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second OS to parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stick's partition information. Air-gapped systems, huh? We avoid this attack vector in Qubes by using a special inter-domain file copy mechanism that doesn't require any metadata parsing.

A variation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above attack would be to expose a malicious file system metadata, but this time cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target OS would have to actually mount cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 partition for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack to work (and, of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re would have to be bugs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS file system parsing code, although cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se  seem to be quite common on most OSes).

Having quickly summarized cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB security-related threats, let's now think about how we could design an OS to mitigate most of those attacks, and at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very least cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 software-based attacks. This is, in fact, precisely cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 challenge we've been facing in Qubes, so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 divagations below necessarily focus mostly on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Qubes architecture.

First we should realize that USB devices, unlike PCI Express devices, cannot be independently delegated to different domains (VMs). This is because IOMMU technologies, such as Intel VT-d, operate only on PCIe device granularity. This means we can only delegate a whole USB controller to a domain, including all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB devices connected to this controller/hub.

Imagine now two internal devices, both connected via internal USB bus: a keyboard, and a 3G wireless modem. Chances are high that you will have those two devices connected to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same USB controller – usually one controller is used for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 internal devices, like those I just mentioned, plus camera, fingerprint reader, etc, 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 controller is used for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 externally visible USB connectors (at least this is true for modern systems: Intel Series 5 chipsets and newer).

We would like to be able to delegate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 3G modem to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 NetVM (an untrusted domain on Qubes where all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 networking drivers and stacks are kept; it's considered untrusted because its compromise is equivalent to a compromise of a WiFi network or home router, or some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r router, and any reasonable person always assumes that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network is compromised, and deals with that using crypto, such as SSL or SSH). But assigning cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB controller, to which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 3G modem is connected to, to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 NetVM, would also assign cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB keyboard to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 NetVM! And this is precisely what we don't want to do, because control over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keyboard is equivalent to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 control over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole system!

Currently, in Qubes Beta 1, we keep all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB controllers assigned to Dom0. This, however, causes two annoyances:

First, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user cannot use any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB-connected networking devices, such as 3G modems (because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no networking in Dom0).

Second, if somebody connects a USB disk and later delegates it to some domain (this could easily be done via block-attach mechanism, supported by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same backend that handles storage virtualization for domains), and this domain turns out to be compromised, it might alter e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stick's partition table and later attack Dom0 as explained above.

We can eliminate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second problem by modifying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Dom0's kernel to not parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 partition table of any removable devices automatically, and instead expect some kind of explicit consent from user to actually do that (we still must allow to mount USB disks in Dom0 to allow easy backups of all domains at once).

To allow cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 use of USB-connected networking devices in NetVM, we could use a PVUSB backend that can virtualize single USB devices without moving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole USB controller to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain. But that would require introducing a whole lot of new code to Dom0 – code that would be directly reachable from VMs (in ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r words that would be processing lots of untrusted input coming from untrusted domains).

So anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r option is to delegate all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 non-security-critical USB controllers, i.e. those controllers that don't have any security-sensitive USB devices connected, such as keyboard, to a dedicated “USB” domain, and later share cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB devices via PVUSB backend from this USB domain. This time, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 extra PVUSB backend runs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB domain, not in Dom0, so we don't worry that much about potential bugs in this backend. Of course, this way you cannot delegate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB controller to which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keyboard, and potentially also ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r security-critical devices, such as camera, are connected to, which in practice rules out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 integrated3G modem. Fortunately many modern laptops do not use USB-connected keyboard and touchpad (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y use PS/2-connected keyboards instead), and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 face camera can be easily disabled with a piece of sticker (although that sucks, because it means we cannot really use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 camera).

With this approach (a dedicated USB domain) you can now delegate your 3G modem to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 NetVM, and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r USB devices, such as removable disks to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r domains, e.g. for file exchange. This seems cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most reasonable setup, although it requires that eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r 1) your laptop doesn't have USB-connected keyboard, or 2) you don't use internal USB devices connected to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same controller that your USB keyboard/touchpad from ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r domains than Dom0 (in practice: no 3G modem in NetVM).

As we can see proper handling of USB devices is quite a challenge for OS architects. It might have been much less of a challenge if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 engineers designing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 USB, chipsets, and mocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rboards were a bit more security-conscious. Even such simple practice as never mixing security critical devices (keyboard, touchpad, camera, fingerprint reader), with non-security ones (3G modem), onto cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same USB controller, would help tremendously. Or ability to somehow dynamically configure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir connectivity, e.g. in BIOS?