目錄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