Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

Friday, January 16, 2009

Memory Registry Tools!

Hi everyone! I know it's a bit late, but I made you all a Christmas present: tools for accessing registry data in Windows memory dumps. This cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work that I presented at DFRWS 2008; it took a while to release because I had to find time to port it to Volatility 1.3.

To use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, grab eicá 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 zip or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tarball and extract it to your Volatility directory. You'll get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following new plugins (along with some supporting files):
  • hivescan: finds cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 physical address of CMHIVE structures, which represent a registry hives in memory
  • hivelist: takes a physical address of one CMHIVE, returns cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 virtual address of all hives, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir names
  • printkey: takes a virtual address of a hive and a key name (e.g., 'ControlSet001\Control'), and display cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key's timestamp, values and subkeys
  • hashdump: dump cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 LanMan and NT hashes from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registry (deobfuscated). See this post for more details on how this is accomplished.
  • lsadump: dump cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 LSA secrets (decrypted) from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registry. See this post for more information.
  • cachedump: dump any cached domain password hashes from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registry. This will obviously only work if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory image comes from a machine that was part of a domain. See this post for more details.
In general, when you start working with an image you should:
  1. Use hivescan to find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 physical address of a hive.
  2. Pass one of those (any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m should do) to hivelist using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 -o option. This will give you cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 virtual address of each of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hives in memory.
  3. With this list in hand, you can now examine individual keys within a hive using printkey, or use hashdump, lsadump, or cachedump to extract credentials from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 memory image. The latter three need cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 virtual addresses of specific hives (SYSTEM and SAM for hashdump, SYSTEM and SECURITY for lsadump and cachedump).
The full list of options available for each command can be obtained with --help. Note that hashdump, lsadump, and cachedump require PyCrypto in order to de-obfuscate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 various credentials!

If you're curious how registry access works under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hood, you can read my DFRWS paper or presentation, or check out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 blog posts I wrote while doing that research: Enumerating Registry Hives, Reading Open Keys, and Cell Index Translation. And, of course, you can always just look at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code :)

Some final, closing thoughts. Harlan Carvey's RegRipper has been a huge sucess, and has shown a lot of people how much forensic information is stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registry. It would be awesome if this great tool could be applied to memory forensics, but unfortunately I have not yet figured out a way to integrate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two. However, this perl module looks promising; perhaps someone could write a Python wrapper around my registry code that would expose an interface compatible with Parse::Win32Registry, allowing RegRipper to run against a memory image with only slight modifications.

Of course, since RegRipper plugins are all written in Perl, you could also just see what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're doing and reimplement it as a Volatility plugin! To make that easier, here's a quick guide to using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new registry API in Volatility:
  1. Start by opening a hive and assigning it to an address space. The HiveAddressSpace represents a hive in memory, and takes a virtual address space and offset to a hive as a base. Also, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registry types are not part of Volatility's standard types, you need to add cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in.
    from forensics.win32.hive2 import HiveAddressSpace
    from forensics.win32.regtypes import regtypes
    types.update(regtypes)
    syshive = HiveAddressSpace(addr_space, types, syshive_address)

  2. Next, use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 get_root() function to find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 root key of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hive. You need to pass in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 current profile.
    from forensics.win32.rawreg import *
    from forensics.object2 import Profile
    cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365Profile = Profile()
    root = get_root(syshive, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365Profile)

  3. To open a key, use open_key():
    key = open_key(root, ["ControlSet001", "Control", "Lsa"])
    print key.Name

  4. To get a list of subkeys of a key, use subkeys():
    for sk in subkeys(key):
    print sk.Name

  5. To get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 values of a key, use values():
    for v in values(key):
    print v.Name

  6. To parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value data and return it in a more meaningful representation, use value_data():

    for v in values(key):
    val_type, val_data = value_data(v)
    print v.Name, val_type, val_data


That's pretty much all you need to know! You can access ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r attributes of keys and values as members of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Python objects returned. The attributes available can be found in regtypes.py; keys are _CM_KEY_NODE objects and values are _CM_KEY_VALUE objects.

I don't have time to write any more, unfortunately, but I hope cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se will be useful to people! I'll try to post an example of a RegRipper plugin converted to a Volatility one soon so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's a concrete example to work with. Until cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, enjoy and feel free to e-mail me (or leave comments) with any questions!