Cuckoo SandBox的安裝、配置和應用


依賴安裝

在安裝和配置Cuckoo之前,需要安裝依賴的一些軟件和庫。首先創建一個文件夾存放cuckoo所需要的文件。

這里是需要的庫和需要安裝的文件。

image-20200723082143077

安裝 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

YaraPydeep 是可選的插件。如果選擇安裝的話,具體安裝步驟可以參考他們的官網。這里使用源碼安裝。

安裝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-vnc0libguac-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)

image-20200709230055843

安裝完增強工具后我們才能對宿主機和客戶機建立共享文件夾

建立文件夾依次選擇VirtualBox菜單項中的設備-共享文件夾,設置如下:

image-20200709230350189

配置客戶機:

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的快捷方式放到啟動文件夾中去

image-20200709231630052

運行agent.pyw后,我們使用netstat -an命令會發現本地的8000端口正在處於監聽狀態中

接着將IP配置為192.168.56.101

image-20200709232309966

對客戶機做一個快照,取名為cuckoostart-1(名字自己取),后面對沙箱的配置中會用到。

配置該虛擬機的網絡模式為Host-only: 宿主機192.168.56.1 客戶機192.168.56.101,然后客戶機就能與ubuntu通信。

image-20200712103437813

此時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

運行情況:

image-20200710104048277

web頁面

image-20200710104234917

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.提交藍屏病毒

image-20200712173045214

web頁面顯示:

image-20200713083411207

image-20200713083336968

image-20200712172930369

分析:結果分析:提交方式可以通過命令行和 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM