Cuckoo SandBox V2.0.4踩坑筆記。目前網(wǎng)上大部分Cuckoo的安裝教程為2.0版本的Cuckoo SandBox煮嫌,該沙箱的上下版本不兼容铁材,除參考本教程外型雳,建議Google(不要百度),或者參考Cuckoo的官方文檔挤茄。https://cuckoo.sh/docs/
作者:Henry3II
0x00 前言
Cuckoo Sandbox是一個(gè)開(kāi)源的惡意文件自動(dòng)化分析系統(tǒng)如叼,采用python和c/c++開(kāi)發(fā),跨越windows穷劈、android笼恰、linux和darwin四種操作系統(tǒng)平臺(tái),支持二進(jìn)制的PE文件(exe歇终、dll社证、com)、PDF文檔评凝、office文檔追葡、URLs、HTML文件、各種腳本(PHP宜肉、VB疾渣、Python)、jar包崖飘、zip文件等等幾乎所有的文件格式榴捡。能分析惡意文件的靜態(tài)二進(jìn)制數(shù)據(jù)和動(dòng)態(tài)運(yùn)行后的進(jìn)程、網(wǎng)絡(luò)朱浴、文件等行為吊圾。對(duì)于惡意文件的初步分析定性具有很大幫助。(這是我復(fù)制的)
配置情況:
主機(jī)(host):
Ubuntu 16.04 LTS
8Gb Ram
VirtualBox
Cuckoo Sandbox 2.0.4
客戶機(jī)(guest):
Windows 7 Professional
2Gb Ram
注:在安裝之前最好為Cuckoo設(shè)置一個(gè)賬戶(比如翰蠢,cuckoo)项乒,在安裝Cuckoo時(shí)不要所有的都是用sudo來(lái)安裝,這樣后面會(huì)出現(xiàn)各種權(quán)限的錯(cuò)誤梁沧。
0x01 主機(jī)環(huán)境準(zhǔn)備
安裝需要的依賴(lài):
$ 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并確認(rèn)安裝無(wú)誤:
$ 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
#確認(rèn)安裝無(wú)誤
$ ssdeep -V
Then proceed by installing pydeep:
$ sudo pip install pydeep
Validate that the package is installed:
$ pip show pydeep
---
Name: pydeep
Version: 0.2
Location: /usr/local/lib/python2.7/dist-packages
Requires:
安裝Volatility:
#先安裝依賴(lài)
$ sudo pip install openpyxl
$ sudo pip install ujson
$ sudo pip install pycrypto
$ sudo pip install distorm3
$ sudo pip install pytz
#然后安裝volatility
$ git clone https://github.com/volatilityfoundation/volatility.git
$ cd volatility
$ python setup.py build
$ python setup.py install
#確認(rèn)安裝無(wú)誤
$ python vol.py -h
安裝Cuckoo:
安裝Cuckoo有pip install
和git clone
兩種方法檀何,個(gè)人建議使用pip
的方式安裝,因?yàn)椴煌姹镜腃uckoo的結(jié)構(gòu)變化都不小廷支,網(wǎng)上的教程為2.0版本的居多频鉴,在大部分教程中使用的cuckoo.py
、web.py
等在新版本中均已不再使用恋拍。
$ git clone git://github.com/cuckoosandbox/cuckoo.git
0x02 客戶機(jī)環(huán)境準(zhǔn)備
安裝VirtualBox:
#使用apt的方法安裝是最簡(jiǎn)單的安裝方法垛孔!
$ sudo apt-get install virtualbox
在安裝VirtualBox的過(guò)程中很可能會(huì)出現(xiàn)要求你Disable Secure Boot的要求,我建議你最好進(jìn)去BIOS把安全啟動(dòng)模式關(guān)掉施敢,否則之后虛擬機(jī)的使用很可能無(wú)法創(chuàng)建Host-only網(wǎng)卡周荐。
創(chuàng)建一個(gè)虛擬機(jī),系統(tǒng)建議使用WIn7或者WinXP僵娃,首先在VirtualBox的全局設(shè)定的網(wǎng)絡(luò)設(shè)置中配置一個(gè)Host-only的網(wǎng)卡概作,這樣虛擬機(jī)僅可以跟主機(jī)通信,然后配置虛擬機(jī)的網(wǎng)絡(luò)為Host-only默怨。在虛擬機(jī)內(nèi)手動(dòng)設(shè)置IP讯榕、網(wǎng)關(guān)、子網(wǎng)掩碼先壕、DNS瘩扼。
IP: 192.168.56.101
Subnet mask:255.255.255.0
Default gateway: 192.168.56.1
Prefered DNS server: 114.114.114.114
Alternate DNS server: 8.8.8.8
至此客戶機(jī)還不能上網(wǎng),不要急垃僚,這個(gè)后面說(shuō)集绰。客戶機(jī)里面還要python2.7的運(yùn)行環(huán)境谆棺,記得將路徑添加到環(huán)境變量里面栽燕。
然后將之前安裝的cuckoo得到的.cuckoo(隱藏文件罕袋,在Home文件夾下按ctrl+h
),文件夾中的agent/agent.py挪到虛擬機(jī)中(記得給你的虛擬機(jī)安裝增強(qiáng)功能碍岔,如果拖不進(jìn)去就直接去Github上面下載2.0.rc2的版本浴讯,里面有)。
我們需要這個(gè) agent.py
開(kāi)機(jī)啟動(dòng)蔼啦,并且不能有運(yùn)行窗口榆纽,這就需要另做一些處理:
把 agent.py
文件放到系統(tǒng)開(kāi)機(jī)啟動(dòng)目錄中,Win7 默認(rèn)的路徑是 C:\Users\[USER]\AppData\Roaming\MicroSoft\Windows\Start Menu\Programs\Startup\
捏肢;
把 agent.py
后綴改成 agent.pyw
奈籽,這樣程序啟動(dòng)就不會(huì)有 GUI 窗口了。
接著我們要配置客戶機(jī)能夠開(kāi)機(jī)自動(dòng)登錄鸵赫,這樣可以方便Cuckoo的控制衣屏,在開(kāi)始->附件中使用管理員權(quán)限打開(kāi)CMD窗口,依次執(zhí)行:
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultUserName /d <USERNAME> /t REG_SZ /f
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultPassword /d <PASSWORD> /t REG_SZ /f
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v AutoAdminLogon /d 1 /t REG_SZ /f
reg add "hklm\system\CurrentControlSet\Control\TerminalServer" /v AllowRemoteRPC /d 0x01 /t REG_DWORD /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v LocalAccountTokenFilterPolicy /d 0x01 /t REG_DWORD /f
記得修改前兩條命令里的 <USERNAME>
和 <PASSWORD>
為自己的賬戶和密碼辩棒。
同時(shí)狼忱,客戶機(jī)要關(guān)掉自動(dòng)更新和防火墻功能。
0x03 其他的網(wǎng)絡(luò)設(shè)置
如果都沒(méi)配錯(cuò)的話一睁,到這里Host和Guest兩個(gè)機(jī)器之間應(yīng)該是可以ping通的钻弄。但是此時(shí)Guest是無(wú)法訪問(wèn)互聯(lián)網(wǎng)的,所以要在Host中設(shè)置IP轉(zhuǎn)發(fā)卖局,利用虛擬網(wǎng)卡做代理轉(zhuǎn)發(fā)斧蜕。
#開(kāi)啟IP轉(zhuǎn)發(fā)
$ 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 前的注釋?zhuān)缓笤賵?zhí)行下面的
sysctl -p /etc/sysctl.conf
然后配置Iptables的規(guī)則:
#建議在配置Iptables規(guī)則之前要先Iptables -L看下有沒(méi)有現(xiàn)有的防火墻規(guī)則,比如我就莫名其妙多出一堆關(guān)于192.168.122.0/24的規(guī)則砚偶,這樣就全部sudo iptables -D ... 1刪除掉就好了
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
這樣一來(lái),Ubuntu Host 主機(jī)每次關(guān)機(jī)前都會(huì)把已有的 iptables 規(guī)則備份到 /etc/iptables.rules
文件中洒闸、每次開(kāi)機(jī)是都會(huì)從 /etc/iptables.rules
讀取規(guī)則并啟用染坯。
配置好之后,Guest 虛擬機(jī)就可以通過(guò) vboxnet0
來(lái)訪問(wèn)互聯(lián)網(wǎng)了丘逸。
此時(shí)客戶機(jī)所有的準(zhǔn)備工作单鹿,包括軟件及網(wǎng)絡(luò)的配置都好了,給虛擬機(jī)建立一個(gè)快照深纲,用于每次跑完樣本之后仲锄,Cuckoo會(huì)把它還原到這個(gè)狀態(tài)。
0x04 Cuckoo 配置
Cuckoo配置文件的更改是非常重要的一步湃鹊,否則很可能你的所有安裝都無(wú)法正常啟動(dòng)儒喊。在 .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.
# You can check this using the command: whereis tcpdump
tcpdump = /usr/sbin/tcpdump
# Specify the network interface name on which tcpdump should monitor the
# traffic. Make sure the interface is active.
# The ifconfig command will show you the interface name.
interface = vboxnet0
virtualbox.conf
machines = 你的虛擬機(jī)名字
[你的虛擬機(jī)名字]
label = 你的虛擬機(jī)名字
platform = windows
ip = 192.168.56.10 # IP address of the guest
snapshot = 你創(chuàng)建的快照名字
reporting.conf
[mongodb]
enabled = yes
#也許還有其他要改的,但是這個(gè)最重要币呵,其他是yes還是no更多的是看你的需要怀愧,或者之后在使用時(shí)再來(lái)配置文件里面打開(kāi)
至此,所有的配置都配置完了,此時(shí)先運(yùn)行Web服務(wù)
cuckoo web runserver
正常運(yùn)行的話打開(kāi)http://127.0.0.1:8000
芯义,就可以看到cuckoo SandBox的Web頁(yè)面了哈垢。然后打開(kāi)Cuckoo的服務(wù),cuckoo
若最后一行顯示等待分析任務(wù)扛拨,則說(shuō)明你安裝沒(méi)問(wèn)題耘分,如果顯示說(shuō)沒(méi)有找到CWD位置,則你需要先運(yùn)行cuckoo -d
绑警。
運(yùn)行一個(gè)樣本之后陶贼,可能會(huì)發(fā)現(xiàn)無(wú)法分析網(wǎng)絡(luò)流量的問(wèn)題,比如在命令行里面出現(xiàn)紅色的報(bào)錯(cuò):
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-NKd6fY/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-Zzo2hp-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-NKd6fY/pillow/
則運(yùn)行如下:
$ sudo apt-get install python-virtualenv python-setuptools
$ sudo apt-get install libjpeg-dev zlib1g-dev swig
$ sudo apt-get install postgresql libpq-dev
0x05 總結(jié)
Cuckoo SandBox安裝過(guò)程中有很多坑待秃,最大的坑就是拜秧,它上下版本不兼容,國(guó)內(nèi)國(guó)外還大部分都是2.0的安裝教程章郁!2.0版本的沙箱現(xiàn)在都已經(jīng)不能用了(╯‵□′)╯︵┻━┻枉氮。各位在參考我的辦法的時(shí)候也要注意你使用的未來(lái)的可能Cuckoo版本升級(jí)帶來(lái)的所需的依賴(lài)的升級(jí),很有可能本教程中安裝的版本已經(jīng)不再試用暖庄。所以不要吝惜重裝系統(tǒng)聊替,我已經(jīng)記不清我重裝多少次了。祝君好運(yùn)培廓,一次成功~
0x06 參考資料
1.https://cuckoo.sh/docs/installation/index.html
2.https://reversing-malware.com/cuckoo-installation-and-setup/
3.http://securityscrapbook.com/2016/12/17/cuckoo-sandbox-installation-configuration-guide/?i=1