Saturday, January 21, 2012

Thoughts on DeepSafe


Several people asked me recently what I though about DeepSafe. So, below I present my opinion...

First, for any AV system (or Host IPS, or Personal Firewall, etc) to work effectively, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are three problems that must be addressed:
  1. How to protect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AV agent (code and data) from tampering (from 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 OS)?
  2. How can cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AV agent get reliable access to (sensitive pieces of) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system memory and registers, and/or provide reliable memory protection for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 (sensitive pieces of) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS.
  3. What are those "sensitive pieces of” memory that should be monitored or protected?
From reading various PR materials, it seems like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 #1 above is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 primary differentiation factor for DeepSafe (DS). So, let's consider this problem in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 context of e.g. a Windows OS. In order to protect its code and data, DS uses, as it is heavily advertised, Intel VT-x virtualization technology. Now, that sounds really secure -- after all what can be more secure than a hardware virtualization, right? ;)

But VT-x (including EPT) is only about CPU virtualization, which in our case translates to protecting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DS memory and registers from CPU-originating accesses. But, as every regular to this blog knows, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is also anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r method of accessing memory on any PC system, and this is through DMA transactions from devices. The OS (so also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel malware) is free to program one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 many devices in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system to issue DMA reads or writes to any physical memory it wants...

Now, in order to protect some portion of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system memory (DRAM, cache) against DMA accesses, we have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Intel VT-d technology... So, one would think that DS must be also using VT-d in order to protect itself.

Very well, let's assume cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DeepSafe is not a total ripoff, and that it implements also VT-d protection for its agent, although I haven't found this mentioned in any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 public papers or press materials I found on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 web...

This, however, would be a bit complex to do correctly, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS (so, also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel malware) still has a full control over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset (MCH), which is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 entity... that controls cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VT-d.

Now, in order to prevent cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS (or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel malware) from playing with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset for fun and profit, and e.g. disabling VT-d protection, DS would have to virtualize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset.

If you look at some consumer VMMs, such as VMware or Xen/Qemu, you would see that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y all virtualize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir guests (of course), but that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y provide this way is some kind of an ancient Pentium MCH. I don't think any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 consumers would be especially happy if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y found out that after installing DS on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir brand new 2012 laptop, Windows suddenly see a Pentium-era chipset... And this is not without a reason – chipsets, specifically MCHs, are one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most complex devices, perhaps only beaten by GPUs in this category. There are virtually hundreds of configuration registers exposed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset, some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m control cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 VT-d, some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r control system memory maps and permissions, PCIe configuration, and many ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r things that I even have no idea about, and this all makes virtualizing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset a very challenging task.

So, it's eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r that McAfee and Intel found some interesting way of how to securely virtualize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset while preserving all of its (very rich) functionality, or that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y... don't bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r with VT-d protection and chipset virtualization at all, assuming that even without VT-d, DeepSafe is good enough and “rises cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bar” anyway (sarcasm intended).

(Can somebody from McAfee or Intel confirm in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comments below what does DP really do?)

Anyway, let's assume cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do have VT-d protection and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do virtualize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset somehow...

Now, we're moving on to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 #2 point from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 list of tasks above -- about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reliable
memory access or reliable protection.

So, let say that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DS agent decided that some part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system memory, e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 IDT table, is sensitive and should be monitored/protected. So it sets up EPT traps to trigger an VT-x/EPT intercept on any access to that memory (or IDT base register), in order to find kernel malware that tried to modify IDT. That sounds really nice, but what if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 malware uses DMA to modify IDT? DS would not be able to catch such access! (So far we considered cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365, hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365tical, use of VT-d only to protect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DS agent code).

One might think that DS is programming VT-d to sandbox each and every device in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system (so including GPU, USB controllers, NICs, SATA, etc) so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y never be allowed to touch any of those sensitive parts of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system, such as IDT. Let's assume cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do it this way...

And here we've arrived to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last point from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 list at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 beginning: which of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system memory constitutes those "sensitive pieces" that should be protected/monitored? IDT? Sure. What about all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code sections of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel modules? Yes. Are we fine now? Well, no, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 malware can hook some pointers ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 well known IDT. Some public NDIS data structure? Ok, we can add those to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 protected areas. But, what about some undocumented NDIS structures? And this is just NDIS subsystem, one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 many subsystems in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Windows kernel... When we think about it, it should be intuitively obvious that in a general purpose Operating System like Windows, it is not possible (at least for 3rd party) to make a satisfactory list of all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sensitive pieces of memory that should be monitored/protected, in order to detect all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system compromises.

Greg Hoglund, Jamie Butler, Alex Tereshkin, and myself, have been researching this area actively in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 early years of this millennium. In addition to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Alex's paper linked above, you might also check out one of my last slides from this period.

I don't think anything has changed since that time. It was also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reason why I gave up on writing Windows compromise detectors, or forensic tools, and moved on to researching ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r ways to secure OSes, which finally gave birth to Qubes OS, many years later.

So, back to DS -- in order to provide a somehow satisfactory protection level for your general purpose OS, such as Windows, it would need to:
  1. Use VT-d to protect its own memory,
  1. Virtualize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chipset, at least some (sensitive) parts of it,
  1. Program VT-d permissions for each device to exclude all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sensitive areas in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system that should be protected, and also protect one device from DMAing into/from anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r device memory (e.g. NIC stealing GPU framebuffer, or inserting instructions to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GPU instruction buffer, or keystrokes to USB controller buffer). Ideally, this could be done by programming VT-d to grant each device only access to its own DMA buffer, but as far as I know, this would be very hard to implement, if not impossible for a 3rd party, on a Windows OS (in contrast to Linux, which mostly support this model). Please correct me, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 recent Windows version allows for such use of VT-d.
  1. Finally, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most hard thing to solve, how to define all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "sensitive pieces of memory" in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system that should be protected and/or monitored? Although this is a somehow more generic problem, not specific to DS, but applying to any A/V, HIPS, or forensic tool.
So, is DeepSafe anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r piece of crap not worth any special attention, or has McAfee and Intel came up with some novel methods, e.g. for chipset virtualization, and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r problems? Unless I see some technical info to backup cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 latter, I would have to assume, unfortunately, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 former. But I would like to be mistaken – after all DeepSafe seems to be just a new incarnation of my Bluepill ;)