信安學(xué)習(xí)筆記之惡意代碼攻擊及分析技術(shù)
一、惡意代碼攻擊技術(shù)
1、進(jìn)程注入技術(shù)
系統(tǒng)服務(wù)和網(wǎng)絡(luò)服務(wù)在操作系統(tǒng)中,當(dāng)系統(tǒng)啟動(dòng)時(shí)被自動(dòng)加載。進(jìn)程注入技術(shù)就是將這些與服務(wù)相關(guān)的嵌入了惡意代碼程序的可執(zhí)行代碼作為載體,實(shí)現(xiàn)自身隱藏和啟動(dòng)的目的。這類惡意代碼只需要安裝一次,就能被服務(wù)加載到系統(tǒng)中運(yùn)行,并且可以一直處于活躍狀態(tài)。
2、超級管理技術(shù)
部分惡意代碼能夠攻擊反惡意代碼軟件。惡意代碼采用超級管理技術(shù)對反惡意代碼軟件系統(tǒng)進(jìn)行拒絕服務(wù)攻擊,阻礙反惡意代碼軟件的正常運(yùn)行。例如,“廣外女生”是一個(gè)國產(chǎn)特洛伊木馬,對“金山毒霸”和“天網(wǎng)防火墻”采用超級管理技術(shù)進(jìn)行拒絕服務(wù)攻擊。
3、端口反向連接技術(shù)
防火墻對于外網(wǎng)進(jìn)入內(nèi)部的數(shù)據(jù)流有嚴(yán)格的訪問控制策略,但對于從內(nèi)到外的數(shù)據(jù)并沒有嚴(yán)格控制。指令惡意代碼使用端口反向連接技術(shù)使攻擊的服務(wù)端(被控制端)主動(dòng)連接客戶端 (控制端)端口。最早實(shí)現(xiàn)這項(xiàng)技術(shù)的木馬程序是國外的“Boinet",它可以通過ICO、IRC、HTTP和反向主動(dòng)連接這4種方式聯(lián)系客戶端。 “網(wǎng)絡(luò)神偷”是我國最早實(shí)現(xiàn)端口反向連接技術(shù)的惡意代碼。 “灰鴿子”則是這項(xiàng)技術(shù)的集大成者,它內(nèi)置FTP、域名、服務(wù)端主動(dòng)連接這3種服務(wù)端在線通知功能。
4、緩沖區(qū)溢出攻擊技術(shù)
惡意代碼利用系統(tǒng)和網(wǎng)絡(luò)服務(wù)的安全漏洞植入并且執(zhí)行攻擊代碼,攻擊代碼以一定的權(quán)限運(yùn)行有緩沖區(qū)溢出漏洞的程序來獲得被攻擊主機(jī)的控制權(quán)。緩沖區(qū)溢出攻擊成為惡意代碼從被動(dòng)式傳播轉(zhuǎn)為主動(dòng)式傳播的主要途徑之一。例如,”紅色代碼“利用 IIS Server上Indexing Service 的緩沖區(qū)溢出漏洞完成攻擊、傳播和破壞等惡意目的。
二、惡意代碼的分析技術(shù)
惡意代碼的分析方法由靜態(tài)分析方法和動(dòng)態(tài)分析方法兩部分構(gòu)成。其中,靜態(tài)分析方法有反惡意代碼軟件的檢查、字符串分析和靜態(tài)反編譯分析等;動(dòng)態(tài)分析方法包括文件監(jiān)測、進(jìn)程監(jiān)測、注冊表監(jiān)測和動(dòng)態(tài)反匯編分析等。
1、靜態(tài)分析方法
惡意代碼的靜態(tài)分析主要包括以下方法:
(1) 反惡意代碼軟件的檢測和分析。反惡意代碼軟件檢測惡意代碼的方法有特征代碼法、校驗(yàn)和法、行為監(jiān)測法、軟件模擬法等。根據(jù)惡意代碼的信息去搜尋更多的資料,若該惡意代碼的分析數(shù)據(jù)已被反惡意代碼軟件收錄,那就可以直接利用它們的分析結(jié)果。
(2) 字符串分析。字符串分析的目的是尋找文件中使用的ASCII或其他方法編碼的連續(xù)字符串。一些有用的信息可以通過在惡意代碼樣本中搜尋字符串得到,比如:惡意代碼的名字、幫助和命令行選項(xiàng)、用戶對話框,可以通過它分析惡意代碼的目的、后門密碼、惡意代碼相關(guān)的網(wǎng)址、惡意代碼作者或者攻擊者的E-mail地址、惡意代碼用到的庫,函數(shù)調(diào)用, 以及其他的可執(zhí)行文件、其他的有用的信息。
(3)腳本分析。惡意代碼如果是用JS、Perl或者shell腳本等腳本語言編寫的,那么惡意代碼本身就可能帶有源代碼。通過文本編輯器將腳本打開查看源代碼。腳本分析能幫助分析者用較短時(shí)間識別出大量流行的腳本類型。
(4)靜態(tài)反編譯分析。對于攜帶解釋器的惡意代碼可以采用反編譯工具查看源代碼。源代碼在編譯時(shí),代碼會(huì)被編譯器優(yōu)化,組成部分被重寫,使得程序更適合解釋和執(zhí)行,上述面向計(jì)算機(jī)優(yōu)化的特性,使得編譯的代碼不適合逆向編譯。因此,逆向編譯是將對機(jī)器優(yōu)化的代碼重新轉(zhuǎn)化成源代碼,這使得程序結(jié)構(gòu)和流程分離開來,同時(shí)變量的名字由機(jī)器自動(dòng)生成,這使得逆向編譯的代碼有著較差的可讀性。下表列出了一些反編譯工具,它們能夠生成被編譯程序的C或者Java語言的源代碼。
(5)靜態(tài)反匯編分析。有線性遍歷和遞歸遍歷兩種方法。GNU程序objdump和一些鏈接優(yōu)化工具使用線性遍歷算法從輸入程序的入口點(diǎn)開始反匯編,簡單地遍歷程序的整個(gè)代碼區(qū), 反匯編它所遇到的每一條指令。雖然方法簡單,但存在不能夠處理嵌入指令流中的數(shù)據(jù)的問題,如跳轉(zhuǎn)表。遞歸遍歷算法試圖用反匯編出來的控制流指令來指導(dǎo)反匯編過程,以此解決上面線性遍歷所存在的問題。直觀地說,無論何時(shí)反匯編器遇到一個(gè)分支或者CALL指令,反匯編都從那條指令的可能的后續(xù)指令繼續(xù)執(zhí)行。很多的二進(jìn)制傳輸和優(yōu)化系統(tǒng)采用這種方法。其缺點(diǎn)是很難正確判定間接控制轉(zhuǎn)移的可能目標(biāo)。惡意代碼被反匯編后,就可用控制流分析來構(gòu)造它的流程圖,該圖又可以被許多的數(shù)據(jù)流分析工具所使用。由于控制流程圖是大多數(shù)靜態(tài)分析的基礎(chǔ),所以不正確的流程圖反過來會(huì)使整個(gè)靜態(tài)分析過程得到錯(cuò)誤的結(jié)果。
2、動(dòng)態(tài)分析方法
惡意代碼的動(dòng)態(tài)分析主要包括以下方法:
(1) 文件監(jiān)測。惡意代碼在傳播和破壞的過程中需要依賴讀寫文件系統(tǒng),但存在極少數(shù)惡意代碼只是單純依賴內(nèi)存卻沒有與文件系統(tǒng)進(jìn)行交互。惡意代碼執(zhí)行后,在目標(biāo)主機(jī)上可能讀寫各文件,修改程序,添加文件,甚至把代碼嵌入其他文件,因此對文件系統(tǒng)必須進(jìn)行監(jiān)測。 fileMon 是常用的文件監(jiān)測程序,能夠記錄與文件相關(guān)的動(dòng)作,例如打開、讀取、寫入、關(guān)閉、 刪除和存儲(chǔ)時(shí)間戳等。另外還有文件完整性監(jiān)測工具,如Trip wire、 AIDE等。
(2) 進(jìn)程監(jiān)測。惡意代碼要入侵甚至傳播,必須有新的進(jìn)程生成或盜用系統(tǒng)進(jìn)程的合法權(quán)限,主機(jī)上所有被植入進(jìn)程的細(xì)節(jié)都能為分析惡意代碼提供重要參考信息。常用的進(jìn)程監(jiān)測工具是Process Explorer, 它將機(jī)器上的每一個(gè)執(zhí)行中的程序顯示出來,將每一個(gè)進(jìn)程的工作詳細(xì)展示出來。雖然Windows系統(tǒng)自己內(nèi)嵌了一個(gè)進(jìn)程展示工具,但是只顯示了進(jìn)程的名字和 CPU 占用率,這不足以用來了解進(jìn)程的詳細(xì)活動(dòng)情況。而Process Explorer 比任何的內(nèi)嵌工具更有用,它可以看見文件、注冊表鍵值和進(jìn)程裝載的全部動(dòng)態(tài)鏈接庫的情況,并且對每一個(gè)運(yùn)行的進(jìn)程, 該工具還顯示了進(jìn)程的屬主、獨(dú)立細(xì)致特權(quán)、優(yōu)先級和環(huán)境變量。
(3) 網(wǎng)絡(luò)活動(dòng)監(jiān)測。 惡意代碼經(jīng)歷了從早期的單一傳染形式到依賴網(wǎng)絡(luò)傳染的多種傳染方式的變化,因此分析惡意代碼還要監(jiān)測惡意代碼的網(wǎng)絡(luò)行為。使用網(wǎng)絡(luò)嗅探器檢測惡意代碼傳播的內(nèi)容,當(dāng)惡意代碼在網(wǎng)絡(luò)上發(fā)送包時(shí),嗅探器就會(huì)將它們捕獲。下表列出了一些網(wǎng)絡(luò)監(jiān)測工具。
(4) 注冊表監(jiān)測。 Windows 操作系統(tǒng)的注冊表是個(gè)包含了操作系統(tǒng)和大多數(shù)應(yīng)用程序的配置的層次數(shù)據(jù)庫,惡意代碼運(yùn)行時(shí)一般要改變Windows 操作系統(tǒng)的配置來改變 Windows 操作系統(tǒng)的行為,實(shí)現(xiàn)惡意代碼自身的目的。 常用的監(jiān)測軟件是 Regmon, 它能夠?qū)崟r(shí)顯示讀寫注冊表項(xiàng)的全部動(dòng)作。
(5) 動(dòng)態(tài)反匯編分析。動(dòng)態(tài)反匯編指在惡意代碼的執(zhí)行過程中對其進(jìn)行監(jiān)測和分析。其基本思想是將惡意代碼運(yùn)行的控制權(quán)交給動(dòng)態(tài)調(diào)試工具。該監(jiān)測過程從代碼的入口點(diǎn)處開始,控制權(quán)在程序代碼與調(diào)試工具之間來回傳遞,直到程序執(zhí)行完為止。這種技術(shù)能得到正確的反匯編代碼, 但只能對程序中那些實(shí)際執(zhí)行的部分有效。目前主要的動(dòng)態(tài)反匯編分析方法有以下兩種:
? 同內(nèi)存調(diào)試。這種方法使調(diào)試工具與被分析惡意代碼程序加載到相同的地址空間里。 該方法的優(yōu)點(diǎn)是實(shí)現(xiàn)代價(jià)相對較低,控制權(quán)轉(zhuǎn)交到調(diào)試工具或者從調(diào)試工具轉(zhuǎn)回惡意代碼程序的實(shí)現(xiàn)相對來說比較簡單;缺點(diǎn)是需要改變被分析程序的地址。
? 仿真調(diào)試,即虛擬調(diào)試。這種方法是讓調(diào)試工具與分析的惡意代碼程序處于不同的地址空間,可繞過很多傳統(tǒng)動(dòng)態(tài)反跟蹤類技術(shù)。這種方法的優(yōu)點(diǎn)是不用修改目標(biāo)程序中的地址,但在進(jìn)程間控制權(quán)的轉(zhuǎn)移上要付出較高的代價(jià)。