Thursday, July 15, 2010

GDI Utilities: Taking Screenshots of Memory Dumps

I've posted about this before (twice!), but somehow never gotten around to releasing functioning code. Here (click), for your downloading pleasure, is a set of plugins designed to extract information about on-screen (graphical) windows from Windows XP SP2/3 memory images. This includes:
  • window_list - give a text listing of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 window hierarchy, with each window's on-screen coordinates, current style, and its class (Button, Window, etc.). Here's some example output to whet your appetite.
  • screenshot - save a wireframe "screenshot" of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 on-screen windows in a memory image. See later in this post for some examples. Requires PIL.
  • wndmon - continuously monitor a memory image and provide an updating view of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 on-screen windows. Works best in a live environment, e.g. with XenAccess and PyXa. Requires PyGame. (This is what I used for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 video demo).
All three plugins require cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 distorm disassembly library to work. I had a bit of trouble getting it to work under Linux, so here's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 steps required so you don't have to go through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pain:
  1. Get distorm3 from its Google Code site.
  2. Go into build/linux and type "make".
  3. Copy cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 resulting libdistorm3.so into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Python directory.
  4. Rename cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Python directory to "distorm" and move it somewhere in your Python path (I use Debian, and found that /usr/local/lib/python2.6/dist-packages/ worked well).
Hopefully this is a bit simpler under Windows, but I don't have a Windows box handy so I can't test that at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 moment.

Have fun with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code. If you go exploring in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source, you may find some interesting things -- cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's more functionality cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re than is exposed through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 plugins, including some functions and data structures that can extract HTML content from IE in memory... ;)

Anyway, to wrap things up, here's an example of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 output from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 screenshot plugin, running on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two NIST memory images:

From cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 6/25 image:



From cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 7/4 image:



And that, my friends, is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 power of memory analysis.

Tuesday, July 6, 2010

Plugin Post: Robust Process Scanner

It's pretty well known, in memory forensics circles, that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are two common ways of finding processes in memory images: list-walking, which traverses cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel's linked list of process data structures, and scanning, which does a sweep over memory, looking for byte patterns that match cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data found in a process data structure.

Having two different ways of finding processes can be very handy, especially when we suspect that someone may be trying to hide processes. One common way of hiding processes in Windows is called DKOM (Direct Kernel Object Manipulation); this technique works by just unlinking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process you want to hide from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel's list, like so:
This makes it invisible from programs such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 task manager, as well as memory forensic tools that use list-walking (including Volatility's pslist). However, such hidden processes can still be found by scanning memory using a signature for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process data structure; this is what psscan2 does.

Unfortunately, it's been known since at least 2007 (as mentioned in AAron Walters and Nick Petroni's Blackhat DC talk, and more recently in a presentation by Jesse Kornblum) that even signature scans can be evaded by crafty attackers. Signatures typically rely on "magic" values found in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process data structure. For example, in Windows XP, process data structures always begin with "\x03\x00\x1b\x00", which makes it pretty easy to find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in memory images.

But is that magic value really essential to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 correct functioning of a process in Windows? What if an attacker just overwrites those four bytes with zeroes? As it turns out, Windows will be perfectly happy to keep running cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process! At cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time, it will be completely hidden from existing forensic tools. What's more, as I demonstrated in my paper for CCS 2009 (Robust Signatures for Kernel Data Structures), around 51 fields in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process data structure can be manipulated by attackers in this way – including nearly all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fields currently used to find processes.

So what's a forensic analyst to do? Luckily, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are some parts of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process data structure that are hard for an attacker to mess with without causing one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se:

So if we can build a signature based on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se fields, we can find processes that existing signature scanners might miss.

And that's just what I've done. Here, for your consideration and consumption, is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 creatively-named psscan3 (just drop it into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory_plugins directory of Volatility 1.3.2). It uses a only fields that have been identified as "robust" to locate processes in Windows memory. It's a bit slower than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing scanners, right now, because it's checking for more things.

If you want to try it out, you might also want to download this sample memory image, which has a hidden process at offset 0x01a4bc20. In Volatility, pslist, psscan, and psscan2 all miss cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process, but psscan3 detects it, as shown in this exciting screenshot (click to enlarge; cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 windows show, from left to right, psscan, psscan2, and psscan3) [EDIT: Blogger is for some reason refusing to link to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 larger size; click here to view it]:

If you'd like a copy of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rootkit that hid this process (which is based on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 FU Rootkit), send me an e-mail (but be warned that I probably won't be able to dig up cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source until this fall).

So that's it! If you want to find out more about what went into this plugin, you're encouraged to check out my paper, or browse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 slides from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 talk at CCS 2009.