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