目录php
沙盒(Sanbox)是一种将未知、不可信的软件隔离执行的安全机制。恶意软件分析沙盒通常用来将不可信软件放在隔离环境中自动地动态执行,而后提取其运行过程当中的进程行为、网络行为、文件行为等动态行为,安全研究员能够根据这些行为分析结果对恶意软件进行更深刻地分析。html
Cuckoo sandbox是一款用 Python和C/C++ 编写的开源的自动化恶意软件分析系统,且跨越Windows、Android、Linux和Darwin四种操做系统平台。python
Cuckoo 能够分析的几乎全部的文件格式git
Cuckoo 的架构也比较简单,在 Host 机上运行 Cuckoo 主程序,多个 Guest 机经过虚拟网络与 Host 机相连,每一个 Guest 机上有一个 Cuckoo Agent 程序,用来作 Cuckoo 的监控代理,结构图以下:github
其实就是说,在host的web上提交的文件,会被分配到各个guest上运行,收集该文件调用的情况。web
主机(host):Ubuntu 18.04 LTS + 4Gb Ram + VirtualBox6.0 + Cuckoo Sandbox 2.0.4sql
客户机(guest):Windows XP professional SP3 + 512Mb Rammongodb
主机与客户机之间的链接方式:Host-Only + IP转发shell
更换源django
自带的源不太稳定,因此更换为国内的源,如阿里源。操做以下:
sudo gedit /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ disco main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ disco main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ disco-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ disco-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ disco-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ disco-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ disco-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ disco-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ disco-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ disco-proposed main restricted universe multiverse
删除缓存:
sudo rm -vfr /var/lib/apt/lists/*
更新:
sudo apt-get update
sudo apt-get upgrade
安装cuckoo的依赖
sudo apt-get install git mongodb libffi-dev build-essential python-django python python-dev python-pip python-pil python-sqlalchemy python-bson python-dpkt python-jinja2 python-magic python-pymongo python-gridfs python-libvirt python-bottle python-pefile python-chardet tcpdump -y
安装Tcpdump并确认安装无误:
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
getcap /usr/sbin/tcpdump
输出:
/usr/sbin/tcpdump = cap_net_admin,cap_net_raw+eip
则表示已正确安装
安装Pydeep:
wget http://sourceforge.net/projects/ssdeep/files/ssdeep-2.13/ssdeep-2.13.tar.gz/download -O ssdeep-2.13.tar.gz tar -zxf ssdeep-2.13.tar.gz cd ssdeep-2.13 ./configure make sudo make install
确认pydeep安装无误:
ssdeep -V #检查版本
pip show pydeep #再安装一次看看会不会提示已安装
安装Volatility:
先安装Volatility的依赖
sudo pip install openpyxl ujson pycrypto distorm3 pytz
安装volatility
git clone https://github.com/volatilityfoundation/volatility.git
cd volatility
python setup.py build
python setup.py install
确认volatility安装无误
python vol.py -h
安装Cuckoo:
直接pip安装,别整啥乱七八糟的,到2019.06.29为止,最新版本应该是2.0.7,笔者试过2.0.1,2.0.4,2.0.6,2.0.7,发现从2.0.4开始以后的版本都差很少,却是以前的版本差别太大,很难配置成功。
先执行如下指令以防止安装pillow时出错。
sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk
pip安装cuckoo时会自动安装pillow,若不执行如下指令会出现
Command "/usr/bin/python -u -c "import setuptools, tokenize;file='/tmp/pip-install-OPu7Zt/pillow/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-record-s5ZAyi/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-install-OPu7Zt/pillow/报错,如图:
[外链图片转存失败(img-gI6fyswo-1562310089362)(https://i.loli.net/2019/06/30/5d18370fdeecf63181.png)]
执行如下指令安装cuckoo:
pip install -U cuckoo
此时再到home目录下,按Ctrl+h显示隐藏文件,若没有 .cuckoo 这个隐藏目录,则要到/home/(username)/.local/bin/
下,执行python cuckoo
,会在home下自动生成 .cuckoo 目录:
cd /home/(username)/.local/bin/ #注意这里的username是你的Ubuntu用户名
python cuckoo
此时回到home下,执行cuckoo -d
,测试一下可否打开cuckoo
cd /home cuckoo -d
“若出现找不到指令cuckoo”相似的报错:
能够进入到/home/(username)/.local/bin/
下执行cuckoo -d
cd /home/(username)/.local/bin/ cuckoo -d
或是将/home/(username)/.local/bin/
下的cuckoo文件,复制到/usr/local/bin/
下,这样的话就能够更加方便的启动cuckoo了。
cp /home/(username)/.local/bin/cuckoo /usr/local/bin
如果有CuckooCriticalError这个报错,则说明成功,由于已经能成功启动cuckoo了,只是没有配置cuckoo,cuckoo没法链接套接字,待会再进行配置。
安装VirtualBox:
直接使用apt-get安装就行:
sudo apt-get install virtualbox
请注意,可能直接使用apt-get安装的virtualbox会缺乏加强功能(也就至关于VMWare中的VMWare Tools),会致使没法让ubuntu主机和xp客户机之间创建共享文件夹,致使没法将python2.7安装包、PIL安装包、agent文件传送到xp客户机内,致使不能进行下一步操做。
在virtualbox中创建一个虚拟机做为客户机(guest),建议安装Win7或者WinXP,笔者使用XP,体积较小,xp镜像能够自行去msdn下载。
笔者这里提供msdn的zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_x14-80404.iso 镜像
如果想用pandownload的,笔者提供百度云(永久)连接:https://pan.baidu.com/s/1Zf7xJSG4WFmPKXEdt1rguQ
下载以后将镜像拖入Ubuntu中,打开终端,输入virtualbox,
点击新建虚拟机
接下来不想截图了:
依次设置:内存512m→如今建立虚拟硬盘→VDI→动态分配10G(这里可能七、8G就好了)
以后安装XP镜像,首先选择安装介质,选择刚刚导入的XP镜像。
接着将启动(引导)顺序更改,使进入虚拟机后自动进入光驱而不是硬盘,以后点肯定,启动虚拟机。
注意若是出现如下提示:”发现无效设置“提示已经启用硬件虚拟化的,应该进入 系统→硬件加速→将启用VT-x/AMD-V的选项去掉,去掉以后应当检查以前的设置是否生效。
进入以后F8选择赞成,以后一路按ENTER选择默认选项,直到读安装进度条。
完成后会自动重启,重启以后会出现安装windows的界面
以后的安装步骤没提到的话一路下一步就能够了,密钥爱填不填无所谓。
等待十几二十分钟,安装完毕以后,进入到windows xp的配置界面
这里选择不启用自动更新
选择不激活
以后就进入了桌面
此时点击右下角的那个红色盾牌,进去把防火墙、自动更新、病毒保护这三项所有关掉,防火墙不关掉的话Ubuntu主机是没法ping通xp虚拟机的。
接着检查xp的ip地址
点击左下角的开始按钮,点击运行,输入cmd,输入ipconfig查看xp客户机的ip地址,不出意外的话应该是10开头的ip地址,证实此时ubuntu主机和xp客户机如今是以网络地址转换(NAT)的链接方式链接着的,接下来就要将其改成Host-only方式链接。
首先在VirtualBox的主机网络管理器中配置一个网卡
点击virtualbox的管理→主机网络管理器→建立,这样会自动建立一个ip地址为192.168.56.1的名为vboxnet0的网卡,这里不用开启DHCP服务器,由于后面咱们要手动配置XP虚拟机的IP地址。
接着在virtualbox中右键xp虚拟机,点击网络→链接方式选择仅主机(Host-Only)网络,以后点击肯定
点击肯定完成以后,xp虚拟机右下角的网络链接应该会弹出一个小三角表示不能正常链接,这是正常的,处于Host-Only的链接方式下,Guest是不能访问互联网的,而Host是能够访问互联网的,要使Guest能访问
此时设置xp虚拟机的网络配置以下
进入Ubuntu主机,手动设置IP,个人设置以下
其中默认网关每一个人的均可能不一样,不要照着个人填,由于个人VMWare恰好就帮我设置了192.168.56.0这个网段。
具体该怎么设置以下:
打开本体机的VMWare,点击左上角的 编辑→虚拟网络编辑器
上面那个192.168.56.2就是要填入Ubuntu主机默认网关的IP地址,请按照本身的状况来设置。
此时关闭按钮再开启按钮,做为一次网络重启
此时Ubunutu主机的网络信息以下所示
尝试双方能不能ping通,按道理来说是能ping通的。
cuckoo的网络配置中使用Host-Only链接方式的缘由:
根据cuckoo的架构能够得知,一个恶意软件被安装配置了cuckoo的host提交到各个guest进行运行分析时,host是想要知道guest的全部流量信息的,由于绝大部分的恶意软件搞破坏都依赖网络。此时只有设置Host-Only链接,host才能截获guest与互联网之间流经的全部流量,才能更好的分析恶意软件的行为方式。
此时Guest是没法访问互联网的,因此要在Host中设置IP转发,利用虚拟网卡作代理转发。
开启IP转发
sudo -i sysctl -w net.ipv4.ip_forward=1 echo 1 > /proc/sys/net/ipv4/ip_forward #为使重启以后仍然有效
gedit /etc/sysctl.conf
去掉net.ipv4.ip_forward=1 前的#号,保存
而后再执行下面的
sysctl -p /etc/sysctl.conf
配置Iptables的规则:
在配置Iptables规则以前要先Iptables -L看下有没有其余的防火墙规则,若是有的话本身百度搜怎么样删除
iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
#接着为保证重启以后依然有效 sudo gedit /etc/network/interfaces
#在最后添加两行 pre-up iptables-restore < /etc/iptables.rules post-down iptables-save > /etc/iptables.rules
测试Host-Only链接方式是否已经正确配置:
此时Ubuntu主机就不能访问网页了,可是ping 8.8.8.8的话是能够ping通的,所以确定是DNS出了问题,可是不影响,能够先无论。
若是非要管的话也行,终端输入
sudo gedit /etc/resolv.conf
将nameserver 127.0.0.53 改成nameserver 114.114.114.114,保存,就能够访问网页了,可是千万不能重启网络,这样的话又会变成127.0.0.53了,想要完全解决问题的话能够参考:
https://www.helplib.com/ubuntu/article_162736
https://blog.csdn.net/weixin_33920401/article/details/87407103
此时XP是能够正常访问网页的。
在home下新建一个文件夹share,将文件.cuckoo/agent/agent.py
复制到share
接着在share中打开终端,输入
wget https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi
wget http://effbot.org/media/downloads/PIL-1.1.7.win32-py2.7.exe
下载python2.7安装包和PIL安装包
要想再virtualbox中使用共享文件夹就必须再xp虚拟机中安装virtualbox加强功能,具体以下:
直接apt-get安装的Virtualbox是不带加强功能的,须要本身装。
点击
接下来会提示你下载,那就下载,记得选择保存至(Save as…)
接下来将xp正常关机,而后进入virtualbox的设置中顺便将以前的引导顺序调回来:
将以前的xp安装镜像移除:
将下载下来的Virtualbox加强功能的镜像安装上去:
接着点击肯定,启动xp虚拟机便可,打开个人电脑,点击安装便可(安装中途会出现两次询问,点仍然安装便可)
在virtualbox中打开xp虚拟机的设置,新建共享文件夹,点击肯定
进入xp虚拟机的个人电脑,能够看到下面多了一个网络驱动器,点进去就能看见共享的文件了,先安装python2.7后安装PIL
配置agent
咱们想要agent.py运行可是不能有运行窗口,由于若是有窗口的话,到后面运行cuckoo提交样本时客户机会出错(别问我为何知道的)。
把 agent.py 后缀改为 agent.pyw
将agent.pyw复制到C:\Python27\
文件夹下,双击运行(是没有任何反应的)
打开cmd,输入netstat -an
,查看本地8000端口是否在监听
若是8000端口正在监听,那说明此xp虚拟机就能被cuckoo所调用。
最后一步,在8000端口正在被监听的状态下,再virtualbox保存xp虚拟机快照,将快照命名为snapshot1
Cuckoo配置文件的更改是很是重要的一步,不然极可能你的全部安装都没法正常启动。
在 .cuckoo/conf/
中修改配置文件:
cuckoo.conf:
machinery = virtualbox [resultserver] ip = 192.168.56.1 #This is the IP address of the host port = 2042 #leave default unless you have services running
auxiliary.conf:
[sniffer] # Enable or disable the use of an external sniffer (tcpdump) [yes/no]. enabled = yes # Specify the path to your local installation of tcpdump. Make sure this # path is correct. tcpdump = /usr/sbin/tcpdump
virtualbox.conf:
machines = 你的虚拟机名字 [你的虚拟机名字] label = 你的虚拟机名字 platform = windows ip = 192.168.56.101 # IP address of the guest snapshot = 你建立的快照名字 interface = vboxnet0
reporting.conf:
[mongodb] enabled = yes #也许还有其余要改的,可是这个最重要,其余是yes仍是no更多的是看你的须要,或者以后在使用时再来配置文件里面打开
首先运行如下指令,解决tcpdump的权限被拒绝
sudo apt-get install apparmor-utils sudo aa-disable /usr/sbin/tcpdump
不然新版的cuckoo再提交样本后会报错:Unable to stop auxiliary module: Sniffer
具体参考https://cuckoo.sh/docs/faq/index.html#permission-denied-for-tcpdump
接着打开.cuckoo/analyzer/windows/modules/auxiliary/recentfiles.py
将使用SHGetKnownFolderPath函数的部分注释掉(python中能够以三个单引号做为注释,且要注意三个单引号要与 r= 对齐,由于python中是以缩进来划分代码块)
不然cuckoo会报python的错误:
AttributeError: function 'SHGetKnownFolderPath' not found
具体参考https://github.com/cuckoosandbox/cuckoo/issues/1934
''' r = SHELL32.SHGetKnownFolderPath( uuid.UUID(self.locations[location]).get_bytes_le(), 0, None, ctypes.byref(dirpath) ) if r: log.warning("Error obtaining user directory: 0x%08x", r) return # TODO We should free the memory with CoTaskMemFree(). return dirpath.value '''
接着打开两个终端,一个先输入cuckoo -d
,另外一个再输入cuckoo web runserver
,接着用浏览器打开127.0.0.1:8000
登陆到cuckoo的web服务页面,点击上传按钮能够提交样本,这里我随手提交了病毒实验用的工具pecomp.exe。
点击提交,主机会将客户机恢复快照,并将样本传送至客户机进行运行分析:
样本分析结果摘要:
点击进入分析日志会发现没有报错,结果页面可显示测试后样本的行为,展现样本的基本信息,样本运行的基本信息,样本运行时的屏幕截图。
去卡饭论坛下载几个病毒样本https://bbs.kafan.cn/thread-2145532-1-1.html
多是因为xp虚拟机里面没有装什么应用程序,单从截图上来看只有samp(1)有明显的行为。
可有看出它尝试链接了许多链接,而且下载了橙子浏览器的安装程序并自动运行:
左侧选择“Process Memory”,显示以下图。显示样本中所包含的URL连接。
更多操做及Cuckoo行为监控工做原理能够参考https://zhuanlan.zhihu.com/p/43410960
参考连接:
https://www.jianshu.com/p/f623fa0bebf9
https://www.jianshu.com/p/ac009f6c2710