依賴安裝
在安裝和配置Cuckoo之前,需要安裝依賴的一些軟件和庫。首先創建一個文件夾存放cuckoo所需要的文件。
這里是需要的庫和需要安裝的文件。
安裝 Python 庫 (Ubuntu/Debian-based)
Cuckoo的管理組件完全由Python腳本編寫,所以就需要適合的Python版本。 完全兼容的Python版本是 2.7。
老版本的Python和Python 3(未來可能會支持) 目前都是不支持的。
以下一些通過Apt安裝的軟件都是必須的:
$ sudo apt-get install python python-pip python-dev libffi-dev libssl-dev
$ sudo apt-get install python-virtualenv python-setuptools
$ sudo apt-get install libjpeg-dev zlib1g-dev swig
如果要使用基於Django開發的Web界面, 則MongoDB是必須要安裝的:
$ sudo apt-get install mongodb
如要使用PostgreSQL數據庫(推薦), PostgreSQL也必須安裝:
$ sudo apt-get install postgresql libpq-dev
Yara 和 Pydeep 是可選的插件。如果選擇安裝的話,具體安裝步驟可以參考他們的官網。這里使用源碼安裝。
安裝pydeep
安裝依賴
$apt-get install build-essential git libpcre3 libpcre3-dev libpcre++-dev python-dev libfuzzy-dev
進入pydeep目錄
$cd pydeep
$python setup.py build
$sudo apt-get install python-dev libfuzzy-dev #遇到編譯錯誤用這條命令解決pydeep編譯問題
$python setup.py install
進入ssdeep
$ cd ssdeep-2.13
$ ./configure
$ make
$ sudo make install
#確認安裝無誤
$ ssdeep -V
Then proceed by installing pydeep:
然后ssdeep -V和 pip show pydeep看看安裝是否成功
安裝yara
進入yaya
$cd yara-3.5.0/
$./bootstrap.sh
如果想修改yara的源代碼還需要flex,bison這兩個包用於語法解析
$apt-get install flex bison
接着編譯安裝yara:
$./configure
$make
$make install
然后測試是否安裝成功
$make check
如果注意前面的編譯安裝結果的話會發現有缺少OpenSSL庫的警告,這里我們安裝一下
$apt-get install libssl-dev
接下來安裝yara-python
$pip install yara-python
安裝 tcpdump
Tcpdump用於抓取惡意軟件運行過程中產生的所有流量。
安裝命令:
$ sudo apt-get install tcpdump apparmor-utils
$ sudo aa-disable /usr/sbin/tcpdump
AppArmor
只有當PCAP文件生成沒有權限的時候才需要,可以參考 Permission denied for tcpdump
禁用了AppArmor 的Linux的平台下, 比如Debian, 僅需要安裝 tcpdump:
$ sudo apt-get install tcpdump
Tcpdump需要root權限,如果不想運行在root用戶下,需要做以下設置:
$ 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
如果沒有setcap
命令, 則需要安裝下面的包:
$ sudo apt-get install libcap2-bin
或者 (不推薦)
$ sudo chmod +s /usr/sbin/tcpdump
需要注意的是 setcap 命令不安全,有可能造成提權漏洞,建議將Cuckoo安裝在專有的環境里。
可能出現的問題:
getcap /usr/sbin/tcpdump沒有輸出先查看當前的tcpdump的模式:
grep tcpdump /sys/kernel/security/apparmor/profiles
/usr/sbin/tcpdump (enforce)
上面顯示是enforce模式,所以有這個問題,把它改成complain模式:
aa-complain /usr/sbin/tcpdump -
再次使用tcpdump 並寫文件的時候就沒問題了。
想在轉換成enforce模式時:
aa-enforce /usr/sbin/tcpdump
【注】 通過命令aa-complain或aa-enforce可以切換profile文件的狀態。這需要先安裝對應的utils工具:
sudo apt-get install apparmor-utils
安裝 Volatility
Volatility 用於分析內存轉儲文件的可選工具. Cuckoo與Volatility配合,可以更深度和全面的分析,可以防止惡意軟件利用rookit技術逃逸沙箱的監控。
為了能夠工作正常,Cuckoo要求Volatility版本不低於 2.3, 推薦最新版本2.5。 可以從官網下載 official repository.
可以查閱Volatility官方文檔的安裝說明.
#先安裝依賴
$ sudo pip install openpyxl
$ sudo pip install ujson
$ sudo pip install pycrypto
$ sudo pip install distorm3
$ sudo pip install pytz
#然后安裝volatility
#將volatility壓縮包解壓
$ cd volatility
$ python setup.py build
$ python setup.py install
#確認安裝無誤
$ python vol.py -h
安裝 M2Crypto
當前 M2Crypto
庫需要 SWIG 支持. Ubuntu/Debian-like 系統下可以通過以下命令安裝:
$ sudo apt-get install swig
SWIG
安裝好之后,通過以下命令安裝 M2Crypto
:
$ sudo pip install m2crypto
安裝 guacd(可選)
guacd
是RDP,SSH,VNC等遠程控制的代理層, 是Cuckoo的Web界面的遠程終端中使用,可選。
沒有它,遠程控制功能就無法使用,版本要求0.9.9及以上。我們推薦安裝最新版本 使用如下命令安裝:
$ sudo apt install libguac-client-rdp0 libguac-client-vnc0 libguac-client-ssh0 guacd
如果只需要遠程桌面功能,則可以跳過 libguac-client-vnc0
和 libguac-client-ssh0
兩個包.
如果使用了較老的Linux發行版,又想使用最新的guacd,那只能自己動手編譯:
$ sudo apt -y install libcairo2-dev libjpeg-turbo8-dev libpng-dev libossp-uuid-dev libfreerdp-dev
$ mkdir /tmp/guac-build && cd /tmp/guac-build
$ wget https://www.apache.org/dist/guacamole/0.9.14/source/guacamole-server-0.9.14.tar.gz
$ tar xvf guacamole-server-0.9.14.tar.gz && cd guacamole-server-0.9.14
$ ./configure --with-init-dir=/etc/init.d
$ make && sudo make install && cd ..
$ sudo ldconfig
$ sudo /etc/init.d/guacd start
安裝requests包(用於http請求)
#進入requests
$cd requests
$python setup.py install
安裝dateutil包
使用pip安裝
$pip install python-dateutil
客戶機安裝
安裝VirtualBox(直接安裝):
$ sudo apt-get install virtualbox
打開虛擬機的時候需要用root權限打開,因為cuckoo是root權限,所以如果是非root權限的virtualbox,對於cuckoo來說是無法進行監聽的。
然后使用VirtualBox安裝windows xp
安裝完成后安裝增強功能工具(類似於VMware的VMware Tools)
安裝完增強工具后我們才能對宿主機和客戶機建立共享文件夾
建立文件夾依次選擇VirtualBox菜單項中的設備-共享文件夾,設置如下:
配置客戶機:
1.為windows安裝python2.7
為系統添加python環境
2.安裝PIL(Python截屏庫)
3.關閉windows自動更新
4.關閉windows防火牆
6.Ubuntu .cuckoo/agent目錄下的agent.py拷貝到客戶機中的c:\python27目錄下去,並將agent.py重命名為agent.pyw,這樣運行的時候就不會顯示控制台窗口了
7.將Python根目錄下的agent.pyw的快捷方式放到啟動文件夾中去
運行agent.pyw后,我們使用netstat -an命令會發現本地的8000端口正在處於監聽狀態中
接着將IP配置為192.168.56.101
對客戶機做一個快照,取名為cuckoostart-1(名字自己取),后面對沙箱的配置中會用到。
配置該虛擬機的網絡模式為Host-only: 宿主機192.168.56.1 客戶機192.168.56.101,然后客戶機就能與ubuntu通信。
此時Guest是無法訪問互聯網的,所以要在Host中設置IP轉發,利用虛擬網卡做代理轉發,接下來回到Ubuntu中,使用Iptables配置宿主機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 -A FORWARD -o ens33 -i vboxnet1 -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
$sysctl -w net.ipv4.ip_forward=1
#接着為保證重啟之后依然有效
$sudo gedit /etc/network/interfaces
#在最后添加兩行
$pre-up iptables-restore < /etc/iptables.rules
$post-down iptables-save > /etc/iptables.rules
安裝 Cuckoo
安裝最新版本的Cuckoo比較簡單. 推薦使用 pip
和 [](https://cuckoo-sandbox.readthedocs.io/zh_CN/latest/installation/host/installation.html#id4)setuptools
來安裝最新版本的Cuckoo。 (一些可能存在的問題 DistributionNotFound / No distribution matching the version..).
(缺少依賴的時候會導致各種問題.建議安裝前確定依賴項是否安裝完成。)
$ sudo pip install -U pip setuptools
$ sudo pip install -U cuckoo
全局安裝Cuckoo是沒有問題的,但是 強力推薦 用 virtualenv
來安裝
$ virtualenv venv
$ . venv/bin/activate
(venv)$ pip install -U pip setuptools
(venv)$ pip install -U cuckoo
為什么推薦使用 virtualenv
呢:
- Cuckoo的依賴並不是用的最新版本,可能會與系統已有的版本沖突.
- 系統中其他軟件的安裝,可能會導致Cuckoo的依賴產生問題.
- 使用virtualenv,可以讓非root用戶也可以安裝相關軟件.
- 簡單來說virtualenv是最佳實踐.
配置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.
# 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 = vboxnet1
virtualbox.conf
machines = 你的虛擬機名字
[你的虛擬機名字]
label = 你的虛擬機名字
platform = windows
ip = 192.168.56.101 # IP address of the guest
snapshot = 你創建的快照名字
reporting.conf
[mongodb]
enabled = yes
啟動cuckoo
$sudo cuckoo -d
至此,所有的配置都配置完了,此時先運行Web服務
$sudo cuckoo web runserver
正常運行的話打開http://127.0.0.1:8000
,就可以看到cuckoo SandBox的Web頁面了。然后打開Cuckoo的服務,cuckoo
若最后一行顯示等待分析任務,則說明你安裝沒問題,如果顯示說沒有找到CWD位置,則你需要先運行cuckoo -d
。
正常運行的話打開http://127.0.0.1:8000
,就可以看到cuckoo SandBox的Web頁面了。然后打開Cuckoo的服務,cuckoo
若最后一行顯示等待分析任務,則說明你安裝沒問題,如果顯示說沒有找到CWD位置,則你需要先運行cuckoo -d
。
(可能遇到的情況 sudo cuckoo 命令找不到,cuckoo默認是在/home/username/.cuckoo/.local/bin/cuckoo)
把它添加到sudo命令啟動
$sudo cp /home/username/.cuckoo/.local/bin/cuckoo /usr/local/bin
運行情況:
web頁面
Cuckoo基本使用
使用如下命令可以啟動Cuckoo:
$ sudo cuckoo
啟動后,可以看到日志輸出,Cuckoo 會在開始的時候,請求 api.cuckoosandbox.org
檢查更新。 可以在配置文件中修改 version_check
來關閉更新檢查。
啟動完成后,Cuckoo 就等着提交文件來分析了。
開始使用之前,如果需要修改Cuckoo的默認配置, 配置目錄在 $CWD/conf/
。 如果添加虛擬機或者修改數據庫, 可以參考 客戶機的准備。 如果需要WEB界面上看到樣本分析報告, $CWD/conf/reporting.conf
中的 mongodb
一定要啟用。 參考 Web 界面
接下來我們需要下載 Cuckoo Community, 其中包含了300多個惡意軟件行為簽名,可用於簡化我們對結果的分析。 下載命令如下:
(venv)$ cuckoo community
或者如果有下載好的 community 壓縮包, (例如 wget https://github.com/cuckoosandbox/community/archive/master.tar.gz
) 可以通過如下命令直接導入:
(venv)$ cuckoo community --file master.tar.gz
至此,我們就可以開始提交樣本了, 可以參考 提交工具 。 多個樣本可以在一次命令中提交,例如:
(venv)$ cuckoo submit /tmp/sample1.exe /tmp/sample2.exe /tmp/sample3.exe
Success: File "/tmp/sample1.exe" added as task with ID #1
Success: File "/tmp/sample2.exe" added as task with ID #2
Success: File "/tmp/sample3.exe" added as task with ID #3
(venv)$ cuckoo submit --url google.com bing.com
Success: URL "google.com" added as task with ID #4
Success: URL "bing.com" added as task with ID #5
樣本的分析,依賴 cuckoo 的守護進程。 默認情況下, 直接運行守護進程, 不限制同時分析的樣本數量(可通過 -m
參數指定)
# This command is equal to what used to be "./cuckoo.py -d".
(venv)$ cuckoo -d
如果需要從WEB界面查看界面分析結果, 則需要運行cuckoo WEB進程。 對於測試環境或者並發數較小的環境, 可以通過內置的 Django WEB server 來運行, 實際環境下,我們更推薦基於高性能的WEB服務器來部署, 可以參考 Web 界面部署
(venv)$ cuckoo web
Performing system checks...
System check identified no issues (0 silenced).
March 31, 2017 - 12:10:46
Django version 1.8.4, using settings 'cuckoo.web.web.settings'
Starting development server at http://localhost:8000/
Quit the server with CONTROL-C.
提交工具
最簡單的提交樣本分析的方式是通過 cuckoo submit
命令, 例如:
$ cuckoo submit --help
Usage: cuckoo submit [OPTIONS] [TARGET]...
Submit one or more files or URLs to Cuckoo.
Options:
-u, --url Submitting URLs instead of samples
-o, --options TEXT Options for these tasks
--package TEXT Analysis package to use
--custom TEXT Custom information to pass along this task
--owner TEXT Owner of this task
--timeout INTEGER Analysis time in seconds
--priority INTEGER Priority of this task
--machine TEXT Machine to analyze these tasks on
--platform TEXT Analysis platform
--memory Enable memory dumping
--enforce-timeout Don't terminate the analysis early
--clock TEXT Set the system clock
--tags TEXT Analysis tags
--baseline Create baseline task
--remote TEXT Submit to a remote Cuckoo instance
--shuffle Shuffle the submitted tasks
--pattern TEXT Provide a glob-pattern when submitting a
directory
--max INTEGER Submit up to X tasks at once
--unique Only submit samples that have not been
analyzed before
-d, --debug Enable verbose logging
-q, --quiet Only log warnings and critical messages
--help Show this message and exit.
通過 cuckoo submit
可以指定文件或者目錄, 如果是目錄的話, 會遍歷並提交里面的文件。
對於提交為樣本類型會在后續的代碼中自動分析, 可以參考 Analysis Packages
Example: 提交一個本地的二進制文件:
$ cuckoo submit /path/to/binary
Example: 提交一個 URL:
$ cuckoo submit --url http://www.example.com
Example: 提交一個本地的二進制文件並且指定了較高的優先級:
$ cuckoo submit --priority 5 /path/to/binary
Example: 提交一個本地的二進制文件並且設置最長分析時間是60秒:
$ cuckoo submit --timeout 60 /path/to/binary
Example: 提交一個本地的二進制文件並且指定文件類型:
$ cuckoo submit --package <name of package> /path/to/binary
Example: 提交一個本地的二進制文件並且指定網絡路由方式是tor:
$ cuckoo submit -o route=tor /path/to/binary
Example: 提交一個本地的二進制文件並且指定文件類型,以及指定二進制文件運行時攜帶的參數:
$ cuckoo submit --package exe --options arguments=--dosomething /path/to/binary.exe
Example: 提交一個本地的二進制文件並且指定運行的虛擬機是 cuckoo:
$ cuckoo submit --machine cuckoo1 /path/to/binary
Example: 提交一個本地的二進制文件並且指定虛擬機平台是windows:
$ cuckoo submit --platform windows /path/to/binary
Example: 提交一個本地的二進制文件並且要求完整內存dumps:
$ cuckoo submit --memory /path/to/binary
Example: 提交一個本地的二進制文件並且強制使用最大的單個樣本分析時長:
$ cuckoo submit --enforce-timeout /path/to/binary
Example: 提交一個本地的二進制文件並且指定設置虛擬機的系統日期時間:
$ cuckoo submit --clock "01-24-2001 14:41:20" /path/to/binary
Example: 提交一個本地的二進制文件並且要求內存分析, 且設置內存分析的參數
$ cuckoo submit --memory --options free=yes /path/to/binary
API
REST API 的使用方法參考 REST API.
分布式 Cuckoo
分布式的Cuckoo 可以參考 Distributed Cuckoo.
病毒樣本測試
1.提交藍屏病毒
web頁面顯示:
分析:結果分析:提交方式可以通過命令行和 web 進行提交。對上傳的藍屏病毒進行分析,計算出病毒程序的md5等特征值,可以在騰訊哈勃分析系統中查找對應MD5 值並分析。藍屏病毒主要是運行了 cmd.exe,並對系統中的 taskkill.exe 進行破 環。 taskkill.exe 是系統正常運轉、各種辦公軟件、游戲運行所不可或缺的重要文 件。在缺失 taskkill.exe 的情況下會導致無故藍屏等。
總結
在搭建 cuckoo 的過程中,主要是參考了官方的搭建文檔,根據官網文檔搭 建還是挺順利了,但遇到了一些問題,在安裝配置時缺少某些依賴庫,所以在安裝庫的時候,都采用了源碼安裝。在遇到配置錯誤時,能夠根據提示的錯誤來修正,最后完成了 cuckoo 的搭建。在進行病毒樣本提交分析時,學會了如何查看分析報告,並從中分析病毒的特征。
參考資料:
cuckoo官網:https://cuckoo-sandbox.readthedocs.io/zh_CN/latest/
其他鏈接:https://www.jianshu.com/p/f623fa0bebf9
https://www.freebuf.com/articles/system/123816.html