金逸靈
(四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,成都610065)
區(qū)別于虛擬硬件資源的傳統(tǒng)虛擬化技術(shù),容器實現(xiàn)了一種操作系統(tǒng)級別的虛擬主機環(huán)境。然而,由于容器資源隔離性低和共享內(nèi)核的特性給云平臺引入了新的安全風(fēng)險。容器中的惡意軟件能夠通過容器或宿主機的漏洞篡改容器自身的服務(wù),攻擊共駐容器,甚至可以逃逸至宿主機威脅整個云平臺的安全。故針對容器中的惡意軟件進行檢測,維護云平臺和租戶數(shù)據(jù)安全具有重要的現(xiàn)實意義。
現(xiàn)階段針對惡意軟件的檢測主要分為動態(tài)檢測和靜態(tài)檢測兩種方法。文獻[1]針對虛擬機進程的I/O序列,采用馬爾科夫鏈模型構(gòu)建正常行為基線,以此檢測虛擬機中的惡意逃逸進程。文獻[2]通過采集進程的系統(tǒng)調(diào)用數(shù)據(jù),基于長短期記憶神經(jīng)網(wǎng)絡(luò)構(gòu)建了一個語言分類模型,取得了較好的檢測效果。以上方法都屬于動態(tài)檢測,即針對進程運行產(chǎn)生的行為數(shù)據(jù)進行檢測,雖然這類方法具有較高的精確度,但因需采集動態(tài)數(shù)據(jù),導(dǎo)致引入了較大的性能損耗。另一種方法是靜態(tài)檢測,文獻[3]結(jié)合圖像分析技術(shù)與惡意軟件變種檢測技術(shù),將整個惡意軟件映射為灰度圖像,并基于紋理指紋實現(xiàn)特征提取,以此檢測惡意軟件。文獻[4]同樣基于圖像紋理,但采用了CNN(Convolutional Neural Network,卷積神經(jīng)網(wǎng)絡(luò))自動提取軟件特征,用于惡意軟件的檢測。以上方法都屬于傳統(tǒng)主機環(huán)境下的惡意軟件檢測,然而云環(huán)境下的容器與主機環(huán)境不同,其中的惡意軟件不僅可以存在于容器鏡像中,也可在運行的容器中動態(tài)加載,因此不可直接移植主機惡意軟件檢測方案。
針對現(xiàn)階段研究工作的不足,為實現(xiàn)容器環(huán)境下的惡意軟件檢測,本文提供了一套針對容器的惡意軟件靜態(tài)檢測系統(tǒng),旨在惡意軟件運行前進行檢測,從源頭阻斷其攻擊行為,降低檢測過程給容器運行帶來的性能損耗。
容器中惡意軟件靜態(tài)檢測系統(tǒng)設(shè)計如圖1所示。系統(tǒng)首先采用無代理方式提取容器鏡像或容器系統(tǒng)中的待測軟件,然后識別待測軟件的可執(zhí)行代碼段,進而采用圖像生成技術(shù)將代碼字節(jié)流轉(zhuǎn)換為灰度圖像,最后基于CNN自動提取惡意軟件的多維圖像特征,構(gòu)建檢測模型用于惡意軟件檢測,并將檢測出的惡意軟件和具體的容器信息輸出到檢測日志。
圖1 檢測系統(tǒng)架構(gòu)
Docker通過層存儲來管理多層只讀鏡像層和讀寫容器層,通過存儲驅(qū)動來管理各層內(nèi)容,通過層的元數(shù)據(jù)存儲來管理各層的元數(shù)據(jù)。本文以最新的Docker默認(rèn)使用的存儲驅(qū)動Overlay2為例,簡述無代理提取容器中待測軟件方法。
圖2 容器與OverlayFS的分層關(guān)系
容器與OverlayFS的分層關(guān)系如圖2所示,其中鏡像層對應(yīng)Lowerdir,容器層對應(yīng)Upperdir,容器中可見的文件系統(tǒng)為聯(lián)合掛載點Merged。在內(nèi)核的處理中,用于掛載的各層之間存在層次關(guān)系,主要表現(xiàn)為:上下層同名目錄合并、上下層同名文件覆蓋和僅存在于Lowerdir的文件寫時拷貝,所以需要分層處理各層內(nèi)容,獲得正確的容器視角下的文件內(nèi)容。無代理提取容器中待測軟件的流程如下:
(1)根據(jù)輸入的容器鏡像或容器的唯一標(biāo)識,篩選出元數(shù)據(jù)中的Lowerdir和Upperdir路徑;
(2)將Lowerdir和Upperdir按照層次關(guān)系進行格式拼接作為掛載時的Lowerdir,并新建一個空的Upperdir;
(3)根據(jù)Docker系統(tǒng)信息獲得存儲驅(qū)動類型,將拼接的Lowerdir和空的Upperdir聯(lián)合掛載到一個臨時的容器視角目錄;
(4)篩選臨時目錄下的可執(zhí)行文件,將其絕對路徑傳給特征抽取模塊,待其分析結(jié)束后,取消掛載臨時目錄。
ELF(Executable Linkable Format,可執(zhí)行鏈接格式)可執(zhí)行文件內(nèi)部具有section結(jié)構(gòu),section是存儲具體的代碼和數(shù)據(jù)的地方,其由一組section表進行索引。其中,section表的起始地址位于ELF文件頭,.text、.init、.fini等是存放代碼的 section,這些 section具有可執(zhí)行標(biāo)志位。
本文針對指定的ELF文件,通過軟件readelf分析其內(nèi)部組織結(jié)構(gòu)以得到可執(zhí)行代碼在ELF文件中的位置分布,然后提取所有可執(zhí)行section,并將可執(zhí)行的代碼字節(jié)流放入N*M的矩陣中,以此形成一張N*M大小的灰度圖像,其中,矩陣的每一個元素代表ELF文件的一個字節(jié),同時也對應(yīng)著灰度圖像中的一個像素點。但因存在經(jīng)過加殼或被惡意修改過的ELF文件,其ELF文件頭被破壞、section表信息被刪除,這將導(dǎo)致readelf無法得到完整的section信息。針對該問題,本文使用readelf得到ELF文件的入口點,進而計算出入口點在ELF文件中的偏移entry_offset,那么從entry_offset開始一直到文件末尾file_end的內(nèi)容[entry_offset,file_end]便是需要提取出來的內(nèi)容,然后根據(jù)提取內(nèi)容的大小選定適當(dāng)?shù)膱D像寬度,最后將ELF文件內(nèi)容填入圖片,不足額空間填充0,得到最終的灰度圖像。
基于由惡意軟件和正常軟件轉(zhuǎn)換的灰度圖像,構(gòu)造CNN模型進行惡意軟件的識別與檢測。由于不同軟件生成的灰度圖像尺寸不一,為進行模型的訓(xùn)練,本文對圖片進行了縮放。圖3為縮放至96×96大小所構(gòu)建的CNN模型結(jié)構(gòu),其中,CNN網(wǎng)絡(luò)具有5層卷積層CONV,每層卷積層的卷積核Filter數(shù)目與大小均已標(biāo)出,卷積之后使用ReLU激活函數(shù)進行修正,之后進行最大池化Pool,第5層卷積層之后為一個全連接層NN,其使用512個神經(jīng)元,之后為Dropout層減少網(wǎng)絡(luò)過擬合的可能性,最后為Softmax層進行類別判定。
圖3 CNN模型結(jié)構(gòu)
實驗環(huán)境:宿主機CPU型號為Intel Xeon E5-2658 v2,主頻為2.40GHz,物理內(nèi)存為256GB,操作系統(tǒng)為64位CentOS7,內(nèi)核版本為3.10.0,Docker版本為18.03.0-ce,深度學(xué)習(xí)框架為TensorFlow 2.0.0。
實驗數(shù)據(jù)集:隨機選取3764個Linux系統(tǒng)應(yīng)用作為良性樣本集,3482個VirusShare中的惡意ELF作為惡意樣本集,共計7246個樣本,并將各類樣本集按照8:2的比例隨機分為訓(xùn)練樣本集和測試樣本集。
評價標(biāo)準(zhǔn):使用準(zhǔn)確率(Accuracy,ACC)、檢測率(Detection Rate,DR)和誤報率(False Alarm Rate,F(xiàn)AR)評價模型的檢測性能。定義如下:
其中,TP是正確分類為惡意軟件的惡意樣本數(shù),TN是正確分類為良性軟件的良性樣本數(shù),F(xiàn)P是錯誤分類為惡意軟件的良性樣本數(shù),F(xiàn)N是錯誤分類為良性軟件的惡意樣本數(shù)。
為說明系統(tǒng)的檢測功能有效性,本文通過調(diào)節(jié)模型迭代次數(shù),得到如表1所示的檢測結(jié)果,其中Train表示模型訓(xùn)練時間。
表1 模型迭代次數(shù)與檢測性能關(guān)系
由表1可知,在迭代次數(shù)為200時,模型訓(xùn)練時間最長,為1414.37s,但此時的檢測效果最優(yōu),準(zhǔn)確率高達94.75%,檢測率為94.83%,誤報率為5.32%。
實時檢測過程中需要首先針對目標(biāo)ELF文件生成對應(yīng)灰度圖像,再將灰度圖像輸入已訓(xùn)練好的模型中進行檢測,因此系統(tǒng)的時間效率主要由灰度圖像生成時間 模型檢測時間兩部分決定。為評估系統(tǒng)在實時檢測過程中的時間效率,本文隨機選取了100KB~1000KB大小ELF文件中的10個樣本進行分析,統(tǒng)計每種文件大小生成灰度圖像的平均時間,結(jié)果如表2所示。
表2 ELF文件大小與灰度圖像生成時間關(guān)系
由表2可知,ELF文件越大,生成灰度圖像的時間越久,但在ELF文件大小為1000KB時,灰度圖像生成時間也在1s左右。由于系統(tǒng)檢測時間主要由灰度圖像生成時間和模型檢測時間決定,為評估系統(tǒng)的平均檢測效率,本文還測試了模型的檢測時間,針對一個96×96大小的灰度圖像而言,模型檢測時間為0.0038s,故系統(tǒng)的總體時間效率是可接受的。
除了測試系統(tǒng)的時間效率,本文同時采用Unix-Bench基準(zhǔn)測試工具,評估系統(tǒng)對被檢測容器性能的影響,部分測試結(jié)果如圖4所示。
圖4 UnixBench性能測試
在未部署檢測系統(tǒng)時,UnixBench測試總評分為2477.3,部署檢測系統(tǒng)后為2422.8,故檢測系統(tǒng)給被檢測容器引入了2.20%的性能損耗。由圖4可知,部署檢測系統(tǒng)對容器的影響主要表現(xiàn)在字符串處理、啟動shell腳本和文件傳輸方面,原因在于將ELF文件轉(zhuǎn)換為灰度圖像時需要分析所有可執(zhí)行代碼段。
本文針對當(dāng)前容器環(huán)境下惡意軟件檢測研究中存在的問題,提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的容器中惡意軟件靜態(tài)檢測方法。該方法在容器外部的宿主機用戶層實現(xiàn)對目標(biāo)容器中待測軟件的靜態(tài)檢測,具有較好的可移植性和安全性,在將軟件轉(zhuǎn)換為灰度圖像時,僅處理可表征軟件行為的可執(zhí)行代碼段,以此縮短灰度圖像生成時間,提升檢測效率,還通過卷積神經(jīng)網(wǎng)絡(luò)自動提取圖像的多維局部特征,有效提高了檢測精度,可在一定程度上保障容器和云平臺的安全。