Showing posts with label backdoors. Show all posts
Showing posts with label backdoors. Show all posts

Tuesday, June 02, 2009

More Thoughts on CPU backdoors

I've recently exchanged a few emails with Loic Duflot about CPU-based backdoors. It turned out that he recently wrote a paper about hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical CPU-backdoors and also implemented some proof-of-concept ones using QEMU (for he doesn't happen to own a private CPU production line). The paper can be bought here. (Loic is an academic, and so he must follow some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 strange customs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 academic world, one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m being that papers are not freely published, but racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r being sold on a publisher website… Heck, even we, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ultimately commercialized researchers, still publish our papers and code for free).

Let me stress that what Loic writes about in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paper are only hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical backdoors, i.e. no actual backdoors have been found on any real CPU (ever, AFAIK!). What he does is he considers how Intel or AMD could implement a backdoor, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n he simulate this process by using QEMU and implementing those backdoors inside QEMU.

Loic also focuses on local privilege escalation backdoors only. You should however not underestimate a good local privilege escalation — such things could be used to break out of any virtual machine, like VMWare, or potentially even out of a software VMs like e.g. Java VM.

The backdoors Loic considers are somewhat similar in principle to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 simple pseudo-code one-liner backdoor I used in my previous post about hardware backdoors, only more complicated in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual implementation, as he took care about a few important details, that I naturally didn't concern. (BTW, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main message of my previous post about was how cool technology this VT-d is, being able to prevent PCI-based backdoors, and not about how doomed we are because of Intel- or AMD-induced potential backdoors).

Some people believe that processor backdoors do not exist in reality, because if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y did, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 competing CPU makers would be able to find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs' products, and later would likely cause a "leak" to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public about such backdoors (think: Black PR). Here people make an assumption that AMD or Intel is technically capable of reversing each ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs processors, which seems to be a natural consequence of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m being able to produce cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

I don't think I fully agree with such an assumption though. Just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that you are capable of designing and producing a CPU, doesn't mean you can also reverse engineer it. Just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that Adobe can write a few hundred megabyte application, doesn't mean cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are automatically capable of also reverse engineering similar applications of that size. Even if we assumed that it is technically feasible to use some electron microscope to scan and map all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 electronic elements from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is still a problem of interpreting of how all those hundreds of millions of transistors actually work.

Anyway, a few more thoughts about properties of a hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical backdoors that Intel or AMD might use (be using).

First, I think that in such a backdoor scenario everything besides cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "trigger" would be encrypted. The trigger is something that you must execute first, in order to activate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backdoor (e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CMP instruction with particular, i.e. magic, values of some registers, say EAX, EBX, ECX, EDX). Only 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 backdoor gets activated and e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor auto-magically escalates into Ring 0. Loic considers this in more detail in his paper. So, my point is that all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker's code that executes afterwards, think of it as of a shellcode for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backdoor, that is specific for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS, is fetched by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor in an encrypted form and decrypted only internally inside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU. That should be trivial to implement, while at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time should complicate any potential forensic analysis afterwards — it would be highly non-trivial to understand what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backdoor actually have done.

Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r crucial thing for a processor backdoor, I think, should be some sort of an anti-reply attack protection. Normally, if a smart admin had been recording all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network traffic, and also all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executables that ever got executed on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host, chances are that he or she would catch cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 triggering code and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 shellcode (which might be encrypted, but still). So, no matter how subtle cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trigger is, it is still quite possible that a curious admin will eventually find out that some tetris.exe somehow managed to breakout of a hardware VM and did something strange, e.g. installed a rootkit in a hypervisor (or some Java code somehow was able to send over all our DOCX files from our home directory).

Eventually cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 curious admin will find out that strange CPU instruction (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trigger) after which all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 strange things had happened. Now, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 admin was able to take this code and replicate it, post it to Daily Dave, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, assuming his message would pass through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Moderator (Hi Dave), he would effectively compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor vendor's reputation.

An anti-replay mechanism could ideally be some sort of a challenge-response protocol used in a trigger. So, instead having you always to put 0xdeadbeaf, 0xbabecafe, and 0x41414141 into EAX, EBX and EDX and execute some magic instruction (say CMP), you would have to put a magic that is a result of some crypto operation, taking current date and magic key as input:

Magic = MAGIC (Date, IntelSecretKey).

The obvious problem is how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor can obtain current date? It would have to talk to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 south-bridge at best, which is 1) nontrivial, and 2) observable on a bus, and 3) spoof'able.

A much better idea would be to equip a processor with some sort of an eeprom memory, say big enough to hold one 64-bit or maybe 128-bit value. Each processor would get a different value flashed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re when leaving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 factory. Now, in order to trigger cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backdoor, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor vendor (or backdoor operator, think: NSA) would have to do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following:

1) First execute some code that would read this unique value stored in eeprom for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 particular target processor, and send this back to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m,

2) Now, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y could generate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual magic for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trigger:

Magic = MAGIC (UniqeValueInEeprom, IntelSecretKey)

3) ...and send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual code to execute cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backdoor and shellcode, with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 correct trigger embedded, based on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 magic value.

Now, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 point is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor will automatically increment cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 unique number stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 eeprom, so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same backdoor-exploiting code would not work twice for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same processor (while at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time it would be easy for NSA to send anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r exploit, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y know what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next value in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 eeprom should be). Also, such a customized exploit would not work on any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r CPU, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 assumption was that each CPU gets a different value at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 factory, so again it would not be possible to replicate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack and proved that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 particular code has ever done something wrong.

So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 moment I learn that processors have built-in eeprom memory, I will start thinking seriously cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are backdoors out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re :)

One thing that bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs me with all those divagations about hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical backdoors in processors is that I find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m pretty useless in at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 day. After all, by talking about those backdoors, and how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y might be created, we do not make it any easier to protect against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re simply is no possible defense here. Also this doesn't make it any easier for us to build such backdoors (if we wanted to become cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bad guys for a change). It might only be of an interest to Intel or AMD, or whatever else processor maker, but I somewhat feel cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y have already spent much more time thinking about it, and chances are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y probably can only laugh at what we are saying here, seeing how unsophisticated our proposed backdoors are. So, my Dear Reader, I think you've been just wasting time reading this post ;) Sorry for tricking you into this and I hope to write something more practical next time :)

Wednesday, March 25, 2009

Trusting Hardware

So, you're a decent paranoid person, running only open source software on your box: Linux, GNU, etc. You have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 feeling you could, if you only wanted to, review every single line of code (of course you will probably never do this, but anyway). You might be even more paranoid and also try running an open source BIOS. You feel satisfied and cannot understand all those stupid people running closed source systems like e.g. Windows. Right?

But here's where you are stuck — you still must trust your hardware. Trust that your hardware vendor has not e.g. built in a backdoor into your network card micro-controller…

So, if we buy a laptop from vendor X, that might be based in some not-fully-democratic country, how do we know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y didn't put backdoors cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re? And not only to spy on Americans, also to spy on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir own citizens? When was cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last time you reverse-engineered all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PCI devices on your mocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rboard?

Scared? Good!

Enters cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 game-changer: IOMMU (known as VT-d on Intel). With proper OS/VMM design, this technology can address cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very problem of most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hardware backdoors. A good example of a practical system that allows for that is Xen 3.3, which supports VT-d and allows you to move drivers into a separate, unprivileged driver domain(s). This way each PCI device can be limited to DMA only to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory region occupied by its own driver.

The network card's microcontroller can still compromise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network card driver, but nothing else. Assuming we are using only encrypted communication, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is not much an attacker can gain by compromising this network card driver, besides doing a DoS. Similarly for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 disk driver — if we use full disk encryption (which is a good idea anyway), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is not much an attacker can gain from compromising cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 low-level disk driver.

Obviously cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 design of such a system (especially used for desktop computing) is not trivial ans needs to be thoroughly thought out. But it is possible today(!), thanks to those new virtualization technologies.

It seems than, that we could protect ourselves against potentially malicious hardware. With one exception however… we still need to trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU and also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory controller (AKA northbridge AKA chipset), that implements that IOMMU.

On AMD systems, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory controller has long been integrated into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor. Also Intel's recent Nehalem processors integrate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory controller on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same die.

This all means we need to trust only one vendor (Intel or AMD) and only one component, i.e. The Processor. But should we blindly trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m? After all it would be trivial for Intel or AMD to build in a backdoor into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir processor. Even something as simple as:

if (rax == MAGIC_1 && rcx == MAGIC_2) jmp [rbx]

Just a few more gates in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU I guess (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are apparently already about 780 million gates on Core i7, so a few more should not make much difference), and no performance penalty. Exploitable remotely on most systems and any more complex program I guess. Yet, totally undetectable for anybody without an electron microscope (and tons of skills and knowledge).

And this is just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 simplest example that comes to mind within just a few minutes. I'm sure one could come up with something even more universal and reliable. The fact is — if you are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CPU vendor, it is trivial for you to build in an effective backdoor.

It's funny how various people, e.g. European government institutions, are afraid of using closed source software, e.g. Windows, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are afraid of Microsoft putting backdoors cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. Yet, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are not concerned about using processors made by some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r US companies. It is significantly more risky for Microsoft to put a backdoor into its software, where even a skilled teenager equipped with IDA Pro can find it, than it is for Intel or AMD, where effectively nobody can find it.

So, I wonder whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r various government and large corporate customers from outside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 US will start asking Intel and AMD to provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exact blueprints of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir processors. After all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y already require Microsoft to provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code under an NDA, right? So, why not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "source code" for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor?

Unfortunately cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is nothing that could stop a processor vendor to provide its customers with a different blueprints than those that are used to actually "burn" cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processors. So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 additional requirement would be needed that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y also allow to audit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir manufacturing process. Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r solution would be to hire some group of independent researchers, equip cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m with an electron microscope and let cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m reverse engineer some randomly chosen processors… Hmmm, I even know a team that would love to do that ;)

A quick summary in case you get lost already:
  1. On most systems we are not protected against hardware backdoors, e.g. in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network card controller.
  2. New technologies, e.g. Intel VT-d, can allow to protect against potentially malicious hardware (requires specially designed OS, e.g. specially configured Xen)…
  3. … except for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 potential backdoors in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processor.
  4. If we don't trust Microsoft, why should we trust Intel or AMD?
BTW, in May I will be speaking at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Confidence conference in Krakow, Poland. This is gonna be a keynote, so don't expect new attacks to be revealed, but racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r some more philosophical stuff about trusted computing (why it is not evil) and problems like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one discussed today. See you cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re!