根据《内存取证的艺术》一书[1],有一个堆插件可以从进程的堆内存中提取信息。我正在使用最新版本的volatile-2.6,但是heaps插件无法正常工作。

是否有其他选择可以使用volshell或任何插件从进程堆中提取信息?

[1]
Ligh,迈克尔·黑尔(Michael Hale)等。内存取证的艺术:检测Windows,Linux和Mac内存中的恶意软件和威胁。约翰·威利父子(John Wiley&Sons),2014年。

#1 楼

因此,您的问题有些含糊。但是,即使没有提供目标系统,版本和使用的配置文件的其他信息,我也会尝试为Windows系统提供一个简介性的答案。

您可以使用存储在PEB中的Process Environment Block(_EPROCESS)标识堆段的结构。您应该考虑三个重要点:



PEB.ProcessHeap表示主堆,它总是在启动期间初始化。

PEB.NumberOfHeaps进程可以
另外创建堆。

PEB.ProcessHeaps处理指针的指针,其中零偏移量指向PEB.ProcessHeap

另一种可能性是探索VAD结构。本书在vadinfovadtree的帮助下很好地介绍了过滤过程。但是您应该始终考虑:仅当未将碎片交换到磁盘时,才可以提取堆的碎片。因此,某些数据可能会丢失,因为尚未在转储中获取这些页面。

因此,我将重播与本书本身提供的示例类似的示例。期望正在运行的应用程序有很多关注的内容。



让我们首先提取带有相应PID的关注过程:

python vol.py -f /media/sf_FODEB8/MW-PC-20170826-101847.raw --profile=Win7SP1x64 pslist | grep notepad
Volatility Foundation Volatility Framework 2.6
0xfffffa8000f6c060 notepad.exe            1596   2412      2       56      1      0 2017-08-26 10:17:11 UTC+0000 


我们在vadtree插件的帮助下检查堆结构并将其绘制出来:

python vol.py -f /media/sf_FODEB8/MW-PC-20170826-101847.raw --profile=Win7SP1x64 vadtree --output=dot --output-file=graph.dot -p 1596


xdot检查图突出了流程中的堆结构(红色节点):



通过使用PID定义POI来启动volshell并手动检查不同的VAD:

python vol.py -f /media/sf_FODEB8/MW-PC-20170826-101847.raw --profile=Win7SP1x64 volshell -p 1596
Volatility Foundation Volatility Framework 2.6
Current context: notepad.exe @ 0xfffffa8000f6c060, pid=1596, ppid=2412 DTB=0x65eb000
Welcome to volshell! Current memory image is:
file:///media/sf_FODEB8/MW-PC-20170826-101847.raw
To get help, type 'hh()'


经过一些搜索(确定0x00000000001e0000+0x038c20是您的工作):

>>> db(0x00000000001e0000+0x038c20, 0xff)
0x00218c20  00 00 00 00 00 00 00 00 8b 2f bd 3e 48 69 00 2e   ........./.>Hi..
0x00218c30  0d 00 0a 00 54 00 68 00 69 00 73 00 20 00 69 00   ....T.h.i.s...i.
0x00218c40  73 00 20 00 73 00 75 00 70 00 65 00 72 00 20 00   s...s.u.p.e.r...
0x00218c50  73 00 65 00 63 00 72 00 65 00 74 00 20 00 2d 00   s.e.c.r.e.t...-.
0x00218c60  20 00 64 00 6f 00 6e 00 27 00 74 00 20 00 73 00   ..d.o.n.'.t...s.
0x00218c70  68 00 61 00 72 00 65 00 20 00 69 00 74 00 20 00   h.a.r.e...i.t...
0x00218c80  77 00 69 00 74 00 68 00 20 00 6f 00 74 00 68 00   w.i.t.h...o.t.h.
0x00218c90  65 00 72 00 20 00 70 00 61 00 72 00 74 00 69 00   e.r...p.a.r.t.i.
0x00218ca0  65 00 73 00 20 00 6f 00 72 00 20 00 70 00 65 00   e.s...o.r...p.e.
0x00218cb0  72 00 73 00 6f 00 6e 00 73 00 2e 00 0d 00 0a 00   r.s.o.n.s.......
0x00218cc0  0d 00 0a 00 0d 00 0a 00 54 00 48 00 49 00 45 00   ........T.H.I.E.
0x00218cd0  46 00 31 00 20 00 3a 00 20 00 49 00 20 00 77 00   F.1...:...I...w.
0x00218ce0  69 00 6c 00 6c 00 20 00 72 00 6f 00 62 00 20 00   i.l.l...r.o.b...
0x00218cf0  74 00 68 00 65 00 20 00 62 00 61 00 6e 00 6b 00   t.h.e...b.a.n.k.
0x00218d00  20 00 6e 00 65 00 78 00 74 00 20 00 77 00 65 00   ..n.e.x.t...w.e.
0x00218d10  65 00 6b 00 20 00 74 00 6f 00 20 00 65 00 61      e.k...t.o...e.a


另一种方法是简单地转储特定对象的整个VAD结构处理到一个文件夹中,并大致忽略您的预期输出。

> mkdir vads
> python vol.py -f /media/sf_FODEB8/MW-PC-20170826-101847.raw --profile=Win7SP1x64 vaddump -p 1596 -D vads
Volatility Foundation Volatility Framework 2.6
Pid        Process              Start              End                Result
---------- -------------------- ------------------ ------------------ ------
      1596 notepad.exe          0x000000007ffe0000 0x000000007ffeffff vads/notepad.exe.1f76c060.0x000000007ffe0000-0x000000007ffeffff.dmp
      1596 notepad.exe          0x00000000002e0000 0x00000000003dffff vads/notepad.exe.1f76c060.0x00000000002e0000-0x00000000003dffff.dmp
      1596 notepad.exe          0x00000000000d0000 0x000000000014ffff vads/notepad.exe.1f76c060.0x00000000000d0000-0x000000000014ffff.dmp
      1596 notepad.exe          0x0000000000040000 0x0000000000041fff vads/notepad.exe.1f76c060.0x0000000000040000-0x0000000000041fff.dmp
      [SHORTENED]
      vads/notepad.exe.1f76c060.0x000007feff080000-0x000007feff080fff.dmp
      1596 notepad.exe          0x000007fffffdc000 0x000007fffffddfff vads/notepad.exe.1f76c060.0x000007fffffdc000-0x000007fffffddfff.dmp
      1596 notepad.exe          0x000007fffffd8000 0x000007fffffd8fff vads/notepad.exe.1f76c060.0x000007fffffd8000-0x000007fffffd8fff.dmp
      1596 notepad.exe          0x000007fffffde000 0x000007fffffdffff vads/notepad.exe.1f76c060.0x000007fffffde000-0x000007fffffdffff.dmp


检查转储会发现:

xxd -a notepad.exe.1f76c060.0x00000000001e0000-0x00000000002dffff.dmp | less

  *
  0038c20: 0000 0000 0000 0000 8b2f bd3e 4869 002e  ........./.>Hi..
  0038c30: 0d00 0a00 5400 6800 6900 7300 2000 6900  ....T.h.i.s. .i.
  0038c40: 7300 2000 7300 7500 7000 6500 7200 2000  s. .s.u.p.e.r. .
  0038c50: 7300 6500 6300 7200 6500 7400 2000 2d00  s.e.c.r.e.t. .-.
  0038c60: 2000 6400 6f00 6e00 2700 7400 2000 7300   .d.o.n.'.t. .s.
  0038c70: 6800 6100 7200 6500 2000 6900 7400 2000  h.a.r.e. .i.t. .
  0038c80: 7700 6900 7400 6800 2000 6f00 7400 6800  w.i.t.h. .o.t.h.
  0038c90: 6500 7200 2000 7000 6100 7200 7400 6900  e.r. .p.a.r.t.i.
  0038ca0: 6500 7300 2000 6f00 7200 2000 7000 6500  e.s. .o.r. .p.e.
  0038cb0: 7200 7300 6f00 6e00 7300 2e00 0d00 0a00  r.s.o.n.s.......
  0038cc0: 0d00 0a00 0d00 0a00 5400 4800 4900 4500  ........T.H.I.E.
  0038cd0: 4600 3100 2000 3a00 2000 4900 2000 7700  F.1. .:. .I. .w.
  0038ce0: 6900 6c00 6c00 2000 7200 6f00 6200 2000  i.l.l. .r.o.b. .
  0038cf0: 7400 6800 6500 2000 6200 6100 6e00 6b00  t.h.e. .b.a.n.k.
  0038d00: 2000 6e00 6500 7800 7400 2000 7700 6500   .n.e.x.t. .w.e.
  0038d10: 6500 6b00 2000 7400 6f00 2000 6500 6100  e.k. .t.o. .e.a.
  0038d20: 7200 6e00 2000 6100 2000 7300 6800 6900  r.n. .a. .s.h.i.
  0038d30: 7400 2000 7400 6f00 6e00 2000 6f00 6600  t. .t.o.n. .o.f.
  0038d40: 2000 6d00 6f00 6e00 6500 7900 2e00 2e00   .m.o.n.e.y.....
  0038d50: 2e00 0d00 0a00 5400 4800 4900 4500 4600  ......T.H.I.E.F.
  0038d60: 3200 2000 3a00 2000 5300 6f00 7500 6e00  2. .:. .S.o.u.n.
  0038d70: 6400 7300 2000 6700 7200 6500 6100 7400  d.s. .g.r.e.a.t.
  0038d80: 2000 2100 2000 4c00 6500 7400 2700 7300   .!. .L.e.t.'.s.
  0038d90: 2000 6400 6f00 2000 6900 7400 2100 0d00   .d.o. .i.t.!...
  0038da0: 0a00 5400 4800 4900 4500 4600 3100 2000  ..T.H.I.E.F.1. .
  0038db0: 3a00 2000 4800 6500 7200 6500 2000 6100  :. .H.e.r.e. .a.
  0038dc0: 7200 6500 2000 7300 6f00 6d00 6500 2000  r.e. .s.o.m.e. .
  0038dd0: 7000 6100 7300 7300 7700 6f00 7200 6400  p.a.s.s.w.o.r.d.
  0038de0: 7300 0d00 0a00 5400 4800 4900 4500 4600  s.....T.H.I.E.F.
  0038df0: 3100 2000 3a00 2000 7300 7500 7000 6500  1. .:. .s.u.p.e.
  0038e00: 7200 5300 6500 6300 7200 6500 7400 3100  r.S.e.c.r.e.t.1.
  0038e10: 3300 3300 3700 0d00 0a00 5400 4800 4900  3.3.7.....T.H.I.
  0038e20: 4500 4600 3100 2000 3a00 2000 4100 5300  E.F.1. .:. .A.S.
  0038e30: 4400 4600 3100 3300 3300 3700 0000 0000  D.F.1.3.3.7.....


您还可以查看以下插件。

#2 楼

更好的方法是将我们自己的插件创建为vadinfo.py插件的分支。即使您不了解Python,也确实很容易。

首先,从GitHub此处获得波动率大师。

在您的工作目录中,创建一个“插件”目录。在波动率主文件中,提取此目录中的volatility / plugins / vadinfo.py文件。将此vadinfo.py重命名为vaddumpheaps.py。编辑文件。删除除导入以及VADInfoVADDump类之外的所有内容。

添加此导入:

from volatility.plugins.vadinfo import VADInfo


VADDump中重命名类VADDumpHeaps

__init__()方法的结尾,添加这些行:

config.add_option("HEAPS-ONLY", short_option = 'H', default = False,
                  action = 'store_true', help = 'Heaps only')


render_text()方法中,查找此循环:

for vad, _addrspace in task.get_vads(vad_filter = filter, skip_max_commit = True):


之前在循环中,添加以下行:

heaps = task.Peb.ProcessHeaps.dereference()

在循环中,第一次测试后,添加以下行:

if self._config.HEAPS_ONLY and not vad.Start in heaps:
    continue


保存文件。

从您的目录(包含新的插件目录,包含新的vaddumpheaps.py)中运行volatility-2.6.exe:

mkdir 666Heaps
volatility-2.6.exe --plugins=plugins -p 666 -D 666Heaps -H vaddumpheaps


这假定您创建了一些包含以下内容的.volatilityrc文件,以避免每次调用volatility-2.6.exe时都必须指定文件和配置文件:

[DEFAULT]
PROFILE=Win7SP1x86
LOCATION=file://memory.dmp


新插件将仅转储VAD堆。非常有用。