過去幾年,物聯網設備的弱安全標準利用了linux惡意軟件。使用默認密碼、過時的固件或系統漏洞暴露的te.NET和ssh服務——所有這些都是讓攻擊者構建由數千個受感染的嵌入式設備組成的僵尸網絡的方法。本文介紹在Linux平臺上用于自動化惡意軟件分析的多平臺沙箱的設計。
1、Linux沙箱技術
在計算機安全領域,沙箱(Sandbox)是一種程序的隔離運行機制,其目的是限制不可信進程的權限。沙箱技術經常被用于執行未經測試的或不可信的客戶程序。為了避免不可信程序可能破壞其它程序的運行,沙箱技術通過為不可信客戶程序提供虛擬化的磁盤、內存以及網絡資源,而這種虛擬化手段對客戶程序來說是透明的。由于沙箱里的資源被虛擬化(或被間接化),所以沙箱里的不可信程序的惡意行為往往會被限制在沙箱中。
沙箱技術一直是系統安全領域的挑戰,不存在說哪一種方案是足夠安全的。沙箱技術方案通常是需要結合多種系統安全技術來實現,采用防御縱深(Defencein Depth)的設計原則,筑建多道防御屏障,盡可能地將安全風險將為最低。下面我們主要討論如何利用Linux kernel所提供的安全功能來建立有效的沙箱技術。
Linux安全模型相關的內容:
- 每個進程都有自己的地址空間;
- MMU硬件機制來保證地址空間的隔離;
- Kernel是系統的TCB(Trusted Computing Base),是安全策略的制定者和執行者;
- 進程是最小的權限邊界;
- root具有最高權限,它能控制一切;
- 其它用戶受DAC(Discretionary Access Control)限制,如文件系統的UGO權限控制。
進程是最小的權限邊界,其根本原因是MMU能保證進程地址空間的隔離。Linux Kernel還提供了與進程降權(drop privilege)相關的一些功能:
- setuid
- POSIX.1e capability
- Chroot jail
- Quota control(eg,cgroup,namespace)
- Linux Container
- Linux Security Module(LSM)
2、Linux惡意軟件分析的挑戰
頂級分析創建管道的開始。它充當整體分析的主管。在這部分管道中,二進制文件被預先分析,以便為其他分析模塊(例如文件格式細節或CPU架構)提供必要的元數據。
靜態分析使用許多靜態分析工具之一搜索相關的靜態模式。考慮的工具主要是readelf、objdump、pyelf、radare2和RetDecfileinfo。
動態分析跟蹤運行二進制、新創建的進程、文件系統操作和系統調用。管道應該易于擴展,以便用戶可以定義自己的分析模塊。自定義模塊的示例是Virus Total模塊,它調用免費的Virus Total API來獲取惡意軟件掃描結果。各個模塊的輸出組合成最終的JSON輸出。然后可以進一步處理該最終輸出。進一步的處理可以在網絡圖形用戶界面中手動進行,也可以通過YARA的自定義模塊進行。
3、執行分析
在目標架構上運行和分析示例的第一步是準備仿真環境。物聯網惡意軟件正在為廣泛傳播的架構而構建。這導致選擇開源項目QEMU作為模擬準備好的系統的唯一可行選項。QEMU支持多種架構,包括MIPS、ARM、SPARC、AArch64、PowerPC。目標系統由自建Linux內核和準備好的文件系統和分析工具組成。為了交叉編譯鏡像,使用了buildroot項目。Buildroot是一個通用工具,有助于為嵌入式系統開發Linux。
3.1動態分析
實現動態分析的關鍵是省略用戶級工具ptrace syscall并準備內核級跟蹤。SystemTap被選為最終解決方案,因為它提供了簡單的類C語言來定義探測器,并且惡意軟件分析師可以更輕松地更改或添加動態分析功能。當前的實現使用探針來創建進程樹、跟蹤系統調用并標記打開或刪除的文件。
構建過程如下:
- 將SystemTap(.stp)腳本翻譯成C語言。
- 針對已經準備好的內核,將C代碼交叉編譯為目標架構的內核模塊。
- 將構建的內核模塊插入目標文件系統。
3.2網絡分析
網絡分析模塊加載tcpdumppcap文件并提供逐包分析。在最初的原型中,我使用了Python/ target=_blank class=infotextkey>Python庫——Scapy和dpkt。事實證明,這兩種方法在分析時都很慢,甚至在加載更大的pcap文件時也遇到了問題。因此,我準備了與Python綁定的C++庫來解析pcap數據。
網絡分析儀中實現的第一個重要功能是端點檢查。Analyzer使用免費的Geolite國家、城市和ASN(自治系統編號)數據庫。然后在多個黑名單中搜索IP地址。
其他通用指標包括端口統計信息、每個端點傳輸的數據量、TCPSYN、TCPFIN數據包。最后,analyzer提供L7分析。目前輸出的L7信息包括解析的DNS查詢、HTTP請求、IRC消息和telnet數據。
還注意到網絡異常。這些異常是例如命中列入黑名單的IP地址、發送格式錯誤的數據包或明顯的IP和端口掃描。
4、分析構建及結果
基于Docker容器化,各個沙箱元素的連接構建。單個沙箱包括:
- Flask API-WebAPI具有用于創建新任務(完整文件分析或僅pcap分析)、查看任務狀態、結果和下載分析相關文件(例如捕獲的pcaps)的端點。
- RabbitMQ-它用作使用AMQP協議的消息代理。它存儲和控制著進入沙箱的任務隊列。
- MariaDB-開源MySQL替代方案。它存儲分析任務結果。
- Nginx-在實施的系統架構中,nginx代理將傳入請求傳遞給uwsgi服務器(運行Web API)。
- Sandbox workers-運行分析管道的工作者節點。
Docker容器使用與主機相同的內核,因此它們的開銷最小。配置文件——Dockerfiles——由指令組成。Dockerfile指令描述了構建最終docker鏡像的過程。這些docker鏡像帶有它們的所有依賴項,并且應該在所有安裝了docker的系統上正常運行。我準備了最適合運行多容器應用程序的docker-compose文件。可以簡單地運行:
docker-compose up –scale worker=10
啟動完整的系統并擴展沙箱工作人員的數量以滿足所有請求。
在分析的惡意軟件中看到的行為包括:
- IP掃描——我們數據集中最常見的行為。由于當前大多數物聯網惡意軟件都會創建僵尸網絡,因此其目標(機器人)通過在其他設備中發現漏洞來傳播。LiSa區分本地網絡和Internet掃描,并在發生此類事件時觸發異常。通常的目標端口是端口23(SSH)。
- 端口掃描——惡意軟件掃描本地網絡中的許多端口以查找打開的端口。
- HTTP請求–檢測到多個異常HTTP請求并將其標記為異常。HTTP請求可能包含垃圾或目標端點以獲取數據(例如GET/version)。
- 格式錯誤的DNS數據包——這些數據包在標頭值中包含大量數字(問題、答案、權限和其他資源記錄的數量)。
- IRC–惡意軟件連接到IRC服務器并等待來自CC服務器的命令。
- 針對特定國家——樣本僅與特定國家的數百個主機聯系。這些國家是越南、中國、孟加拉國、泰國和印度。
- 更改了進程名稱——使用帶有請求PRSETNAME的Syscallprctl來隱藏惡意軟件進程。
- 列入黑名單的端點——在黑名單中發現了幾個端點的IP地址。
- 以指定應用程序為目標——示例以wordPress/ target=_blank class=infotextkey>WordPress應用程序及其端點/wp-login.php為目標。
- Ptrace–Ptrace系統調用被檢測為一種反調試技術。
- 進程創建——檢測到的通常用于守護應用程序的分叉進程。
5、結論
首先,廣泛的網絡分析、異常檢測和使用Python綁定實現C++庫,克服了常用的包Scapy和dpkt。其次是SystemTap監控環境及其交叉編譯工具鏈的準備。使用內核級分析可以擴展到完整的系統監控解決方案。