專業級沙箱與惡意樣本的自動化分析

雲妹導讀:
沙箱的英文爲sandbox,也被譯做沙盒,一般用來爲一些來源不可信、具破壞力或沒法斷定其意圖的程序提供一個隔離的運行環境,甚至不少專業級的沙箱,本質就是一個加強的虛擬機。沙箱一般能夠嚴格控制沙箱中運行的程序所能訪問的各類資源,包括:限制、禁止、監控對網絡的訪問、對真實系統的訪問、對輸入設備的讀取等。總之,能夠把沙箱理解爲是虛擬化和監控手段的集合體。
沙箱是咱們平常進行惡意攻擊捕獲、應急響應處置等工做時的經常使用工具。本文將經過幾個實例介紹沙箱的基本概念,以Cuckoo爲例介紹沙箱環境的搭建流程,最後以gonnacry勒索軟件爲例簡單介紹Cuckoo linux沙箱檢測能力加強及signature開發過程。python

爲了更好的理解沙箱的相關概念,下面剖析一下咱們平常可能會用到的幾個典型沙箱。linux

微軟在Windows 10 18305版本以後的專業版和企業版中加入了沙箱功能,能夠經過Windows功能界面開啓沙箱。ios

Windows沙箱基於Windows下的容器技術,構建在Windows操做系統內核之上,是一種更輕量級的虛擬化方案,專門用於安全地隔離運行應用程序。其基本架構以下圖所示:git

Windows沙箱雖然與操做系統共享內核,但沙箱訪問內核是受限制的,內核並未提供應用程序運行所需的所有API和服務。
Windows沙箱具有開箱即用的特性,咱們能夠直接開啓一個Windows沙箱,像在本地同樣運行應用程序,可是不用擔憂損壞操做系統。好比,咱們在平常使用電腦的過程當中不免遇到須要下載執行一些可信度不肯定的應用程序,在電腦上直接運行擔憂中毒,虛擬機運行又太消耗資源,這時Windows沙箱即是一個很好的選擇。github

現在,PDF 已經從靜態頁面發展到具備如交互式表單、多媒體內容、腳本以及其它功能的複合式文檔。這些功能使得 PDF 容易受到惡意腳本或操做的攻擊,這些攻擊能夠竊取數據甚至損壞您的計算機。使用加強的安全性,能夠禁止或有選擇性地容許來自信任位置和文件的操做,從而保護您的計算機免受這些威脅。Adobe Reader在X以後的版本中加入了沙箱功能,來緩解漏洞利用。咱們能夠從下面兩個圖片對比中瞭解加入沙箱先後漏洞利用的難度變化狀況。web

▲Adobe Reader 9未加入沙箱機制的漏洞利用流程▲mongodb

▲Adobe Reader X加入沙箱以後的漏洞利用流程▲數據庫

加入沙箱以後Adobe Reader不信任的代碼能夠運行,可是隻給予較低的權限,請求高權限的操做時須要經過另一箇中介進程來完成,同時不少敏感的Windows API調用會被攔截,從而保證Adobe Reader不被輕易的漏洞利用。以文件操做爲例,典型的文件操做流程爲:(1)調用CreateFile(2)權限容許的狀況下獲取文件句柄(3)執行ReadFile/WriteFile進行讀寫操做。加入沙箱機制以後,程序是運行在沙箱進程中的:直接調用CreateFile被禁止。文件操做須要中介進程(Broker Process)進行中轉,中介進程會進行一系列的校驗,防止惡意操做。當所有校驗經過後纔會調用CreateFile並獲取文件句柄。api

經過這兩個案例咱們對沙箱是什麼有了基本的瞭解。除此以外,還有一些其餘類型的沙箱,基本原理相似,例如:殺毒軟件沙箱(360沙箱等)、瀏覽器沙箱(Chrome沙箱等),這裏就不一一介紹了。下面咱們聊一聊專業級沙箱及惡意樣本的自動化分析,本文以Cuckoo的linux沙箱爲例進行介紹(注:Cuckoo的Windows沙箱不在本文討論範圍,感興趣的朋友能夠去網上搜索相關文章)。瀏覽器

Cuckoo沙箱是一個自動化的惡意樣本分析系統。經過web界面或者沙箱系統提供的web api提交可疑文件,沙箱系統便可自動分析,並在分析完畢後提供一個詳細的報告,概述該文件在沙箱中執行時的行爲。

Cuckoo由Cuckoo host、Analysis Guests、Virtual network構成。cuckoo host是調度中心,analysis guest是具體執行樣本的沙箱環境,二者經過虛擬網卡鏈接。當提交樣本到cuckoo host後,cuckoo host會調度一個空閒的analysis guest節點,同時將樣本傳遞給所選擇的沙箱節點進行自動化分析,分析結束以後將沙箱節點採集到的分析數據進行彙總,最後輸出分析報告。

Cuckoo沙箱底層基於虛擬化技術,可使用不一樣的虛擬化平臺進行構建,目前支持的虛擬化平臺包括:VirtualBox、KVM、VMware Workstation、XenServer。

如下安裝流程基於VirtualBox虛擬化環境,分爲Host和Guest兩部分。所用實驗環境配置爲:
系統發行版 :Ubuntu 18.04
硬件配置 :16核 32G 600G

  • Host安裝

– 依賴庫安裝
sudo apt-get install -y python python-pip python-dev libffi-dev libssl-dev
sudo apt-get install -y python-virtualenv python-setuptools
sudo apt-get install -y libjpeg-dev zlib1g-dev swig
– 數據庫安裝
sudo apt-get install mongodb
– 安裝pydeep
apt-get install -y build-essential git libpcre3 libpcre3-dev libpcre++-dev python-dev libfuzzy-dev
git clone https://github.com/kbandla/pydeep.git
cd pydeep
python setup.py build
python setup.py install
– 安裝Virtualbox
echo deb http://download.virtualbox.org/virtualbox/debian bionic contrib | sudo tee -a /etc/apt/sources.list.d/virtualbox.list
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y libpng16-16 libvpx5 libsdl-ttf2.0-0
sudo apt-get install virtualbox
– 安裝tcpdump
apt-get install -y libcap2-bin tcpdump
– 安裝 Volatility
wget https://downloads.volatilityfoundation.org//releases/2.6/volatility_2.6_lin64_standalone.zip
unzip volatility_2.6_lin64_standalone.zip
– 安裝M2Crypto
sudo apt-get install -y swig
sudo pip install m2crypto
– 安裝guacd
sudo apt install -y libguac-client-rdp0 libguac-client-vnc0 libguac-client-ssh0 guacd
– 安裝cuckoo
$ virtualenv venv
$ . venv/bin/activate
(venv)$ pip2 install -U pip setuptools
(venv)$ pip2 install -U cuckoo
安裝成功後以下圖所示:

  • Guest安裝

– 安裝依賴庫
sudo apt-get install systemtap gcc patch linux-headers-$(uname -r)
– patch systemtap腳本
$ wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/expand_execve_envp.patch
$ wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/escape_delimiters.patch
$ sudo patch /usr/share/systemtap/tapset/linux/sysc_execve.stp < expand_execve_envp.patch
$ sudo patch /usr/share/systemtap/tapset/uconversions.stp < escape_delimiters.patch
– 編譯內核擴展
$ wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/strace.stp
$ sudo stap -p4 -r $(uname -r) strace.stp -m stap_ -v
$ sudo staprun -v ./stap_.ko
$ sudo mkdir /root/.cuckoo
$ sudo mv stap_.ko /root/.cuckoo/
– 關閉防火牆及ntp
sudo ufw disable
sudo timedatectl set-ntp off
環境安裝完成以後即可以啓動cuckoo調度進程及web服務:
cuckoo -d
cuckoo web runserver 192.168.1.15:80

Cuckoo的linux沙箱主要從三個維度進行樣本分析:

  • syscall調用監控
    經過systemtap監控系統調用。
  • 內存分析
    經過Volatility 和YARA對進程內存進行內存分析
  • 網絡行爲分析
    主要經過snort對網絡流量進行分析

下面結合一個實際案例,詳細介紹一下如何使用SystemTap監控系統調用並開發一條檢測惡意樣本的檢測策略。
SystemTap是一個用來跟蹤和探測的工具,它能夠提供相似於netstat、ps、top和iostat等工具的輸出信息,可是能夠提供相比這些工具更增強大的跟蹤和探測能力。
SystemTap是一個框架,具體的分析邏輯須要經過SystemTap腳本實現。SystemTap腳本由兩部分組成:eventshandlers,即事件和相應的處理程序。事件及其相應的處理程序統稱爲探針(probe),一個SystemTap腳本能夠有多個探針。下圖爲cuckoo中用來監控系統調用的探針。

這段代碼用來監控及獲取惡意樣本進程及其子進程調用的syscall,以及相關syscall的參數和返回值。
相對應的,SystemTap腳本的執行流程爲:
1) SystemTap檢查腳本的依賴庫是否存在(一般位於/usr/share/systemtap/tapset/)。SystemTap將用tapset庫中相應的定義替換腳本中的tapset。
2) SystemTap將腳本轉換成C語言,並經過C編譯器將其編譯成內核模塊。(systemtap安裝包裏面包含此步驟須要用到的工具)
3) SystemTap加載內核模塊。在此以後腳本里面定義的所有probe(events和handlers)就生效了。這一步是經過systemtap-runtime中的staprun來實現的。
4) 事件觸發時,相應的handlers(事件處理程序)被執行。
5) SystemTap會話結束時,探針自動失效,同時內核模塊也被卸載掉。
至此,咱們對Cuckoo經過SystemTap監控syscall的過程有了一個總體的瞭解,SystemTap會把採集到的syscall及其參數返回值以報告的形式返回給Cuckoo,Cuckoo的分析系統能夠分析報告。使用者能夠經過添加策略(signature)使對SystemTap採集的結果進行分析。
以勒索軟件gonnacry的分析爲例,下圖是勒索軟件gonnacry在執行加密操做前的一系列操做,由於他的加密依賴於系統上安裝的加解密庫libcrypto,因此會在libcrypto常見的安裝位置搜索這個庫。

咱們能夠添加一條策略用來記錄SystemTap對該操做的記錄,並標記該操做爲具備必定惡意的行爲。

當沙箱運行過程當中本條策略被屢次命中時,能夠基本肯定被分析的的樣本在系統上搜索libcrypto.so,此時能夠結合其餘檢測策略提高對惡意樣本檢測的準確率。
檢測效果以下:

[閱讀原文]

相關文章
相關標籤/搜索