Hi David,
Thanks for your feedback. The heart of the winpmem tool is actually
the driver and the userspace code is not really important - in fact
you can just obtain a simple raw memory image with a very small python
script -
https://github.com/google/rekall/blob/master/tools/windows/winpmem/winpmem.py
is a POC and it can easily be re-written in any other language. All
our tools use the same driver which is released under the Apache
license.
The main use of the acquisition userspace tool is to produce an
imaging format which best preserved the evidence and fits well into
the processing pipelines. The nice thing about AFF4 is that it is very
fast (uses snappy compression) and you can also store multiple streams
in the same file so we can capture files, pagefile etc. Our goal is
similar in that we want to automate the acquisition process as much as
possible so that the operator does not forget to acquire something -
so I would be interested to know what other files you collect in
addition to the memory.
The reason we want to do the acquisition from rekall itself is that we
can run triage analysis _during_ the acquisition on the live device,
and therefore already know all the files that currently have handles
opened, all the mapped files etc. This way we know that we acquire all
the relevant files at the time of acquisition. In the winpmem2.0
series we also acquired extra files but we kind of had to guess
because winpmem2.0 is written in c++ and does not have any triaging or
analytical capabilities. So this is the tradeoff - do we guess during
acquisition the files that we might need, but have a smaller self
contained tool, or do we just bring Rekall along and know that we grab
everything and wont miss anything. There is nothing worse than doing
an analysis later only to find that you have to dump the malware from
memory and it has a lot of unmapped padded holes in the binary. At
this point its way too late - you should have got the binary from disk
in the first place.
Otherwise an AFF4 file behaves similar to a zip file (it is actually a
zip file) in that it just stores different streams within it. You can
extract any of the streams to raw using the aff4ls and aff4export
rekall plugins (think of these plugins like unzip tool).
Thanks
Michael.