1. 功能介紹
沙盒(Sanbox)是一種將未知、不可信的軟件隔離執行的安全機制。惡意軟件分析沙盒一般用來將不可信軟件放在隔離環境中自動地動態執行,然后提取其運行過程中的進程行為、網絡行為、文件行為等動態行為,安全研究員可以根據這些行為分析結果對惡意軟件進行更深入地分析。
Cuckoo sandbox是一款用 Python和C/C++ 編寫的開源的自動化惡意軟件分析系統,且跨越Windows、Android、Linux和Darwin四種操作系統平台。
1.1主要功能
- 跟蹤記錄惡意軟件所有的調用狀況;
- 惡意軟件文件行為:惡意軟件執行過程中創建新文件、修改文件、刪除文件、讀取文件或下載文件的行為;
- 獲取惡意軟件的內存鏡像;
- 以 PCAP 格式記錄惡意軟件的網絡流量;
- 獲取惡意軟件執行過程中的屏幕截圖;
- 獲取執行惡意軟件的客戶機的完整內存鏡像
Cuckoo 可以分析的幾乎所有的文件格式
1.2 架構設計
Cuckoo 的架構也比較簡單,在 Host 機上運行 Cuckoo 主程序,多個 Guest 機通過虛擬網絡與 Host 機相連,每個 Guest 機上有一個 Cuckoo Agent 程序,用來做 Cuckoo 的監控代理,結構圖如下:
其實就是說,在host的web上提交的文件,會被分配到各個guest上運行,收集該文件調用的狀況。
2. 安裝與配置
2.1 配置情況
主機(host):Ubuntu 18.04 LTS + 4Gb Ram + VirtualBox6.0 + Cuckoo Sandbox 2.0.4
客戶機(guest):Windows XP professional SP3 + 512Mb Ram
主機與客戶機之間的連接方式:Host-Only + IP轉發
2.2 主機環境准備
-
更換源
自帶的源不太穩定,所以更換為國內的源,如阿里源。操作如下:
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
,測試一下能否打開cuckoocd /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無法連接套接字,待會再進行配置。
-
-
2.3 客戶機環境准備
安裝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 鏡像
迅雷連接:ed2k://|file|zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_x14-80404.iso|630239232|CD0900AFA058ACB6345761969CBCBFF4|/
若是想用pandownload的,筆者提供百度雲(永久)鏈接:https://pan.baidu.com/s/1Zf7xJSG4WFmPKXEdt1rguQ
下載之后將鏡像拖入Ubuntu中,打開終端,輸入virtualbox,
點擊新建虛擬機
接下來不想截圖了:
依次設置:內存512m→現在創建虛擬硬盤→VDI→動態分配10G(這里可能7、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方式連接。
2.4 基本網絡配置
-
首先在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通的。
2.5 IP轉發
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是可以正常訪問網頁的。
-
2.6 啟動客戶機的agent
-
在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
-
2.7 配置cuckoo
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更多的是看你的需要,或者之后在使用時再來配置文件里面打開
3. 提交樣本進行分析
-
首先運行以下指令,解決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