應(yīng)用

技術(shù)

物聯(lián)網(wǎng)世界 >> 物聯(lián)網(wǎng)新聞 >> 物聯(lián)網(wǎng)熱點(diǎn)新聞
企業(yè)注冊個(gè)人注冊登錄

基于Linux沙箱分析物聯(lián)網(wǎng)(IoT)惡意軟件

2022-07-19 16:06 認(rèn)知計(jì)算與云安全

導(dǎo)讀:過去幾年,物聯(lián)網(wǎng)設(shè)備的弱安全標(biāo)準(zhǔn)利用了Linux惡意軟件。使用默認(rèn)密碼、過時(shí)的固件或系統(tǒng)漏洞暴露的telnet和ssh服務(wù)——所有這些都是讓攻擊者構(gòu)建由數(shù)千個(gè)受感染的嵌入式設(shè)備組成的僵尸網(wǎng)絡(luò)的方法。

過去幾年,物聯(lián)網(wǎng)設(shè)備的弱安全標(biāo)準(zhǔn)利用了Linux惡意軟件。使用默認(rèn)密碼、過時(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)測試的或不可信的客戶程序。為了避免不可信程序可能破壞其它程序的運(yùn)行,沙箱技術(shù)通過為不可信客戶程序提供虛擬化的磁盤、內(nèi)存以及網(wǎng)絡(luò)資源,而這種虛擬化手段對(duì)客戶程序來說是透明的。由于沙箱里的資源被虛擬化(或被間接化),所以沙箱里的不可信程序的惡意行為往往會(huì)被限制在沙箱中。

沙箱技術(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)容:

  • 每個(gè)進(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)

頂級(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來獲取惡意軟件掃描結(jié)果。各個(gè)模塊的輸出組合成最終的JSON輸出。然后可以進(jìn)一步處理該最終輸出。進(jìn)一步的處理可以在網(wǎng)絡(luò)圖形用戶界面中手動(dòng)進(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是一個(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)樗峁┝撕唵蔚念怌語言來定義探測器,并且惡意軟件分析師可以更輕松地更改或添加動(dòng)態(tài)分析功能。當(dāng)前的實(shí)現(xiàn)使用探針來創(chuàng)建進(jìn)程樹、跟蹤系統(tǒng)調(diào)用并標(biāo)記打開或刪除的文件。

構(gòu)建過程如下:

  • 將SystemTap(.stp)腳本翻譯成C語言。

  • 針對(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庫——Scapy和dpkt。事實(shí)證明,這兩種方法在分析時(shí)都很慢,甚至在加載更大的pcap文件時(shí)也遇到了問題。因此,我準(zhǔn)備了與Python綁定的C++庫來解析pcap數(shù)據(jù)。

網(wǎng)絡(luò)分析儀中實(shí)現(xiàn)的第一個(gè)重要功能是端點(diǎn)檢查。Analyzer使用免費(fèi)的Geolite國家、城市和ASN(自治系統(tǒng)編號(hào))數(shù)據(jù)庫。然后在多個(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鏡像的過程。這些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

啟動(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ī)器人)通過在其他設(shè)備中發(fā)現(xiàn)漏洞來傳播。

  • LiSa區(qū)分本地網(wǎng)絡(luò)和Internet掃描,并在發(fā)生此類事件時(shí)觸發(fā)異常。通常的目標(biāo)端口是端口23(SSH)。

  • 端口掃描——惡意軟件掃描本地網(wǎng)絡(luò)中的許多端口以查找打開的端口。

  • HTTP請(qǐng)求–檢測到多個(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ù)字(問題、答案、權(quán)限和其他資源記錄的數(shù)量)。

  • IRC–惡意軟件連接到IRC服務(wù)器并等待來自CC服務(wù)器的命令。

  • 針對(duì)特定國家——樣本僅與特定國家的數(shù)百個(gè)主機(jī)聯(lián)系。這些國家是越南、中國、孟加拉國、泰國和印度。

  • 更改了進(jìn)程名稱——使用帶有請(qǐng)求PRSETNAME的Syscallprctl來隱藏惡意軟件進(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)用被檢測為一種反調(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)核級(jí)分析可以擴(kuò)展到完整的系統(tǒng)監(jiān)控解決方案。