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