【多圖超詳細】從零開始安裝配置Cuckoo sandbox並提交樣本進行分析

1. 功能介紹

沙盒(Sanbox)是一種將未知、不可信的軟件隔離執行的安全機制。惡意軟件分析沙盒通常用來將不可信軟件放在隔離環境中自動地動態執行,而後提取其運行過程當中的進程行爲、網絡行爲、文件行爲等動態行爲,安全研究員能夠根據這些行爲分析結果對惡意軟件進行更深刻地分析。html

Cuckoo sandbox是一款用 Python和C/C++ 編寫的開源的自動化惡意軟件分析系統,且跨越Windows、Android、Linux和Darwin四種操做系統平臺。python

1.1主要功能

  • 跟蹤記錄惡意軟件全部的調用情況;
  • 惡意軟件文件行爲:惡意軟件執行過程當中建立新文件、修改文件、刪除文件、讀取文件或下載文件的行爲;
  • 獲取惡意軟件的內存鏡像;
  • 以 PCAP 格式記錄惡意軟件的網絡流量;
  • 獲取惡意軟件執行過程當中的屏幕截圖;
  • 獲取執行惡意軟件的客戶機的完整內存鏡像

Cuckoo 能夠分析的幾乎全部的文件格式git

1.2 架構設計

Cuckoo 的架構也比較簡單,在 Host 機上運行 Cuckoo 主程序,多個 Guest 機經過虛擬網絡與 Host 機相連,每一個 Guest 機上有一個 Cuckoo Agent 程序,用來作 Cuckoo 的監控代理,結構圖以下:github

1561800241859

其實就是說,在host的web上提交的文件,會被分配到各個guest上運行,收集該文件調用的情況。web

2. 安裝與配置

2.1 配置狀況

主機(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

2.2 主機環境準備

  1. 更換源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
  2. 安裝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
  3. 安裝Cuckoo:

    直接pip安裝,別整啥亂七八糟的,到2019.06.29爲止,最新版本應該是2.0.7,筆者試過2.0.1,2.0.4,2.0.6,2.0.7,發現從2.0.4開始以後的版本都差很少,卻是以前的版本差別太大,很難配置成功。

    1. 先執行如下指令以防止安裝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)]

    2. 執行如下指令安裝cuckoo:

      pip install -U cuckoo
    3. 此時再到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」相似的報錯:

      1. 能夠進入到/home/(username)/.local/bin/ 下執行cuckoo -d

        cd /home/(username)/.local/bin/ 
        cuckoo -d
      2. 或是將/home/(username)/.local/bin/ 下的cuckoo文件,複製到/usr/local/bin/下,這樣的話就能夠更加方便的啓動cuckoo了。

        cp  /home/(username)/.local/bin/cuckoo  /usr/local/bin

      1561790363795

      如果有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(這裏可能七、8G就好了)

以後安裝XP鏡像,首先選擇安裝介質,選擇剛剛導入的XP鏡像。

1561792391071

接着將啓動(引導)順序更改,使進入虛擬機後自動進入光驅而不是硬盤,以後點肯定,啓動虛擬機。

1561792517897

注意若是出現如下提示:」發現無效設置「提示已經啓用硬件虛擬化的,應該進入 系統→硬件加速→將啓用VT-x/AMD-V的選項去掉,去掉以後應當檢查以前的設置是否生效。

1561792684866

進入以後F8選擇贊成,以後一路按ENTER選擇默認選項,直到讀安裝進度條。

完成後會自動重啓,重啓以後會出現安裝windows的界面

1561793163708

以後的安裝步驟沒提到的話一路下一步就能夠了,密鑰愛填不填無所謂。

等待十幾二十分鐘,安裝完畢以後,進入到windows xp的配置界面

1561794411310

這裏選擇不啓用自動更新

1561794434936

選擇不激活

1561794468614

以後就進入了桌面

1561794622756

  1. 此時點擊右下角的那個紅色盾牌,進去把防火牆、自動更新、病毒保護這三項所有關掉,防火牆不關掉的話Ubuntu主機是沒法ping通xp虛擬機的。

  2. 接着檢查xp的ip地址

    點擊左下角的開始按鈕,點擊運行,輸入cmd,輸入ipconfig查看xp客戶機的ip地址,不出意外的話應該是10開頭的ip地址,證實此時ubuntu主機和xp客戶機如今是以網絡地址轉換(NAT)的鏈接方式鏈接着的,接下來就要將其改成Host-only方式鏈接。

2.4 基本網絡配置

  1. 首先在VirtualBox的主機網絡管理器中配置一個網卡

    點擊virtualbox的管理→主機網絡管理器→建立,這樣會自動建立一個ip地址爲192.168.56.1的名爲vboxnet0的網卡,這裏不用開啓DHCP服務器,由於後面咱們要手動配置XP虛擬機的IP地址。

    1561795578700

  2. 接着在virtualbox中右鍵xp虛擬機,點擊網絡→鏈接方式選擇僅主機(Host-Only)網絡,以後點擊肯定

    1561796053801

  3. 點擊肯定完成以後,xp虛擬機右下角的網絡鏈接應該會彈出一個小三角表示不能正常鏈接,這是正常的,處於Host-Only的鏈接方式下,Guest是不能訪問互聯網的,而Host是能夠訪問互聯網的,要使Guest能訪問

  4. 此時設置xp虛擬機的網絡配置以下

    1561800885088

  5. 進入Ubuntu主機,手動設置IP,個人設置以下

    1561802096187

    其中默認網關每一個人的均可能不一樣,不要照着個人填,由於個人VMWare恰好就幫我設置了192.168.56.0這個網段。

    具體該怎麼設置以下:

    • 打開本體機的VMWare,點擊左上角的 編輯→虛擬網絡編輯器

      1561801925287

      1561801984543

    上面那個192.168.56.2就是要填入Ubuntu主機默認網關的IP地址,請按照本身的狀況來設置。

    此時關閉按鈕再開啓按鈕,做爲一次網絡重啓

    1561802184686

    此時Ubunutu主機的網絡信息以下所示

    1561801094060

  6. 嘗試雙方能不能ping通,按道理來說是能ping通的。

    1561801239771

    1561801277183

2.5 IP轉發

cuckoo的網絡配置中使用Host-Only鏈接方式的緣由:

根據cuckoo的架構能夠得知,一個惡意軟件被安裝配置了cuckoo的host提交到各個guest進行運行分析時,host是想要知道guest的全部流量信息的,由於絕大部分的惡意軟件搞破壞都依賴網絡。此時只有設置Host-Only鏈接,host才能截獲guest與互聯網之間流經的全部流量,才能更好的分析惡意軟件的行爲方式。

此時Guest是沒法訪問互聯網的,因此要在Host中設置IP轉發,利用虛擬網卡作代理轉發。

  1. 開啓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 前的#號,保存

    1561802636237

    而後再執行下面的

    sysctl -p /etc/sysctl.conf
  2. 配置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
  3. 測試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

  1. 在home下新建一個文件夾share,將文件.cuckoo/agent/agent.py複製到share

  2. 接着在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安裝包

  3. 要想再virtualbox中使用共享文件夾就必須再xp虛擬機中安裝virtualbox加強功能,具體以下:

    直接apt-get安裝的Virtualbox是不帶加強功能的,須要本身裝。

    點擊

    1561804417063

    接下來會提示你下載,那就下載,記得選擇保存至(Save as…)

    接下來將xp正常關機,而後進入virtualbox的設置中順便將以前的引導順序調回來:

    1561798036066

    將以前的xp安裝鏡像移除:

    1561798710389

    將下載下來的Virtualbox加強功能的鏡像安裝上去:

    1561798738265

    接着點擊肯定,啓動xp虛擬機便可,打開個人電腦,點擊安裝便可(安裝中途會出現兩次詢問,點仍然安裝便可)

  4. 在virtualbox中打開xp虛擬機的設置,新建共享文件夾,點擊肯定

    1561806613553

  5. 進入xp虛擬機的個人電腦,能夠看到下面多了一個網絡驅動器,點進去就能看見共享的文件了,先安裝python2.7後安裝PIL

  6. 配置agent

    咱們想要agent.py運行可是不能有運行窗口,由於若是有窗口的話,到後面運行cuckoo提交樣本時客戶機會出錯(別問我爲何知道的)。

    1. 把 agent.py 後綴改爲 agent.pyw

    2. 將agent.pyw複製到C:\Python27\文件夾下,雙擊運行(是沒有任何反應的)

    3. 打開cmd,輸入netstat -an,查看本地8000端口是否在監聽

      1561808557188

      若是8000端口正在監聽,那說明此xp虛擬機就能被cuckoo所調用。

    4. 最後一步,在8000端口正在被監聽的狀態下,再virtualbox保存xp虛擬機快照,將快照命名爲snapshot1

2.7 配置cuckoo

Cuckoo配置文件的更改是很是重要的一步,不然極可能你的全部安裝都沒法正常啓動。

.cuckoo/conf/中修改配置文件:

  1. 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
  2. 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
  3. virtualbox.conf:

    machines = 你的虛擬機名字
    
    [你的虛擬機名字]
    label = 你的虛擬機名字
    platform = windows
    ip = 192.168.56.101 # IP address of the guest
    snapshot = 你建立的快照名字
    interface = vboxnet0
  4. reporting.conf:

    [mongodb]
    enabled = yes
    #也許還有其餘要改的,可是這個最重要,其餘是yes仍是no更多的是看你的須要,或者以後在使用時再來配置文件裏面打開

3. 提交樣本進行分析

  1. 首先運行如下指令,解決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

  2. 接着打開.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
         '''
  3. 接着打開兩個終端,一個輸入cuckoo -d,另外一個輸入cuckoo web runserver,接着用瀏覽器打開127.0.0.1:8000登陸到cuckoo的web服務頁面,點擊上傳按鈕能夠提交樣本,這裏我隨手提交了病毒實驗用的工具pecomp.exe。

    點擊提交,主機會將客戶機恢復快照,並將樣本傳送至客戶機進行運行分析:

    1561874313377

    樣本分析結果摘要:
    1561814477939

    1561814515213

    點擊進入分析日誌會發現沒有報錯,結果頁面可顯示測試後樣本的行爲,展現樣本的基本信息,樣本運行的基本信息,樣本運行時的屏幕截圖。

    去卡飯論壇下載幾個病毒樣本https://bbs.kafan.cn/thread-2145532-1-1.html

    更多樣本https://bbs.kafan.cn/search.php?mod=forum&searchid=711539&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=EXE%D1%F9%B1%BE

    1561820040010

  4. 多是因爲xp虛擬機裏面沒有裝什麼應用程序,單從截圖上來看只有samp(1)有明顯的行爲。

    可有看出它嘗試鏈接了許多鏈接,而且下載了橙子瀏覽器的安裝程序並自動運行:

    1561820848456

    左側選擇「Process Memory」,顯示以下圖。顯示樣本中所包含的URL連接。

    1561822618679

    更多操做及Cuckoo行爲監控工做原理能夠參考https://zhuanlan.zhihu.com/p/43410960

參考連接:

https://www.jianshu.com/p/f623fa0bebf9

https://www.jianshu.com/p/ac009f6c2710

https://0x90e.github.io/cuckoo-install-failure-pillow/

https://www.freebuf.com/articles/system/123816.html

相關文章
相關標籤/搜索