nitro
nitro需要libvmi获取更多信息,libvmi的Python binding,因此涉及到github上面两个项目:
nitro
- 现版本
- linux:4.9.0
- qemu:2.8.0
- 目标版本
- linux:4.10.2
- qemu:2.6.0
Using
对应的KVM/QEMU,recall, libvmi配置之后,执行main.py
,参数为libvirt的domain name,用来绑定QEMU pid,
./main win7
VM启动方式
Virsh
连接hypervisor
virsh connect [*hostname-or-URI*] [--readonly]
virsh connect qemu:///system
,作为root用户连入qemu:///session
,作为用户连入
qemu-system-x86_64
ps -ef | grep qemu-system-x86_64
显示qemu-system-x86_64
启动的所有进程,进程号以及启动参数。
Setup
1. python3、pip3
2. docopt
pip install docopt==0.6.2
注意:这里需要pip/pip2安装docopt,因为是rekall需要使用。包括后续依赖future,需要pip/pip2安装future==0.16.0
。
3.libvirt
xml配置文件tests/
下有模板。虚拟机名字要和nitro/libvmi.conf
里面的一致。
python binding
sudo apt install python3-libvirt
virsh创建虚拟机
virsh define win7x86.xml
virsh start domain
virsh reboot domain
virsh shutdown domain
gvncviewer 127.0.0.1:0
重点配置好xml文件就可以了。
4. Ioctl-opt Python3
pip3 install ioctl-opt==1.1
5.libvmi python bindings
后面会有vmi_request_page_fault
,这个结果python binding里面有,nitro/libvmi里面没有
- 所以吧python binding里面的删除掉即可,
- Merge pull request #42 from libvmi/add_vmi_request_page_fault,该commit回滚到之前就行
libvmi
- 依赖
sudo apt install cmake flex bison libglib2.0-dev libvirt-dev libjson-c-dev libyajl-dev check
- 编译安装
mkdir build
cd build
cmake ..
make
sudo ldconfig
sudo make install
- 配置
nitro/libvmi.conf
, 配置要监控的虚拟机名字
win7x64 {
ostype = "Windows";
win_tasks = 0x188;
win_pdbase = 0x28;
win_pid = 0x180;
win_pname = 0x2e0;
}
libvmi/python
- 依赖
pip3 install pkgconfig==1.0.0
pip3 install cffi
pip3 install future==0.16.0
- 编译安装
python3 setup.py build
sudo python3 setup.py install
rekall
由于作者作者脚本引用的是Python2版本的rekall,所以要使用pip/pip2安装。
python 2.7
需要安装libffi-dev
, 其余版本2.x, 3.x
已经默认安装python-dev/python3-dev
。
sudo apt install libffi-dev
sudo pip3 install --upgrade setuptools pip wheel
sudo pip3 install rekall
安装完rekall之后一定先运行一下rekall
,如果运行成功再运行nitro。
其余的缺啥补啥。
TypeError
sudo python3 main.py win7x64
如果带上--nobackend
一切正常,没有的话会出现问题
TypeError: NewZipFile() takes exactly 3 arguments (2 given)
TypeError:XXX takes exactly 3 arguments (2 given)
由于aff4升级出现的问题,rekall使用的PyAFF4==0.26.post6
pip install PyAFF4==0.26.post6