軟考-資訊保安工程師學習筆記52——惡意程式碼概述

惡意程式碼定義與分類

惡意程式碼的英文是 Malicious Code,它是一種違背目標系統安全策略的程式程式碼,會造成目標系統資訊洩露、資源濫用,破壞系統的完整性及可用性

惡意程式碼的種類:

計算機病毒(Computer Virus)

蠕蟲(Worms)

特洛伊木馬(Trojan Horse)

邏輯炸彈(Logic Bombs)

細菌(Bacteria)

惡意指令碼(Malicious Scripts)

惡意 ActiveX 控制元件

間諜軟體(Spyware)

軟考-資訊保安工程師學習筆記52——惡意程式碼概述

根據惡意程式碼的傳播特性,可以將惡意程式碼分為兩大類,如圖 所示。

軟考-資訊保安工程師學習筆記52——惡意程式碼概述

惡意程式碼攻擊模型

惡意程式碼的行為不盡相同,破壞程度也各不相同,但它們的作用機制基本相同。其作用過程可大概分為以下 6 個步驟:

侵入系統:

惡意程式碼實現其惡意目的的第一步就是要侵入系統。惡

意程式碼入侵有許多途徑,如:從網際網路下載的程式,其自身也許就帶有惡意程式碼;接收了已被惡意感染的電子郵件;透過光碟或軟盤在系統上安裝的軟體;攻擊者故意植入系統的惡意程式碼等。

維持或提升已有的許可權:

惡意程式碼的傳播與破壞需要建立在盜用使用者或者程序的合法許可權的基礎之上。

隱蔽:

為了隱蔽已經侵入系統的惡意程式碼,可能會採取對惡意程式碼改名、刪除原始檔或者修改系統的安全策略等方式。

潛伏

:惡意程式碼侵入系統後,在具有足夠的許可權並滿足某些條件時就會發作,同時進行破壞活動。

破壞

:惡意程式碼具有破壞性的本質,為的是造成資訊丟失、洩密,系統完整性被破壞等。

重複前面 5 步隊新的目標實施攻擊過程。

軟考-資訊保安工程師學習筆記52——惡意程式碼概述

惡意程式碼生存技術

1. 反跟蹤技術

1)

反動態跟蹤技術

禁止跟蹤中斷。針對除錯分析工具執行系統的單步中斷與斷點中斷服務程式,惡意程式碼透過修改中斷服務程式的入口地址來實現其反跟蹤的目的。

檢測跟蹤法。根據檢測跟蹤除錯時和正常執行時的執行環境、中斷入口和時間的不同,採取相應的措施實現其反跟蹤目的。

其他反跟蹤技術。如指令流佇列法和逆指令流法等

2)

反靜態分析技術

對程式程式碼分塊加密執行。為了不讓程式程式碼透過反彙編進行靜態分析,將分塊的程式程式碼以密文形式裝入記憶體,由解密程式在執行時進行譯碼,立即清除執行完畢後的程式碼,力求分析者在任何時候都無法從記憶體中獲得執行程式碼的完整形式。

偽指令法。偽指令法指將“廢指令”插入指令流中,讓靜態反彙編得不到全部正常的指令,進而不能進行有效的靜態分析。

2. 加密技術

加密技術是惡意程式碼進行自我保護的手段之一,再配合反跟蹤技術的使用,讓分析者不能正常除錯和閱讀惡意程式碼,無法獲得惡意程式碼的工作原理,自然也不能抽取特徵串。從加密的內容上劃分,加密手段有三種,即資訊加密、資料加密和程式程式碼加密。

3. 模糊變換技術

惡意程式碼每感染一個客體物件時都會利用模糊變換技術使潛入宿主程式的程式碼不盡相同。儘管是同一種惡意程式碼,但仍會具有多個不同樣本,幾乎不存在穩定的程式碼,只採用基於特徵的檢測工具一般無法有效識別它們。隨著這類惡意程式碼的增多,不但使病毒檢測和防禦軟體的編寫難度加大,還會使反病毒軟體的誤報率增加。

指令替換技術

。模糊變換引擎(Mutation Engine)對惡意程式碼的二進位制程式碼進行反彙編,解碼並計算指令長度,再對其同義變換。

指令壓縮技術

。經惡意程式碼反彙編後的全部指令由模糊變換器檢測,對可壓縮的指令同義壓縮。壓縮技術要想使病毒體程式碼的長度發生改變,必須對病毒體內的跳轉指令重定位。

指令擴充套件技術

。擴充套件技術是對彙編指令進行同義擴充套件,所有經過壓縮技術變換的指令都能夠使用擴充套件技術來進行逆變換。

偽指令技術

。偽指令技術主要是將無效指令插入惡意程式碼程式體,例如空指令。

重編譯技術

。使用重編譯技術的惡意程式碼中攜帶惡意程式碼的原始碼,要在自帶編譯器或者作業系統提供編譯器的基礎上進行重新編譯,這種技術不僅實現了變形的目的,而且為跨平臺的惡意程式碼的出現提供了條件。

4. 自動生產技術

普通病毒能夠利用“多型性發生器”編譯成具有多型性的病毒。多型變換引擎能夠讓程式程式碼本身產生改變,但卻可以保持原有功能。

5. 變形技術

在惡意程式碼的查殺過程中,多數防毒廠商透過提取惡意程式碼特徵值的方式對惡意程式碼進行分辨。這種基於特徵碼的病毒查殺技術的致命缺點是需要一個特徵程式碼庫,同時這個庫中的程式碼要具有固定性。病毒設計者利用這一漏洞,設計出具體同一功能不同特徵碼的惡意程式碼。這種變換惡意程式碼特徵碼的技術稱為變形技術。

重彙編技術

。變形引擎對病毒體的二進位制程式碼進行反彙編,解碼每一條指令,並對指令進行同義變換。如“Regswap”就採用簡單的暫存器互換的變形。

壓縮技術

。變形器檢測病毒體反彙編後的全部指令,對可進行壓縮的一段指令進行同義壓縮。

膨脹技術

。壓縮技術的逆變換就是對彙編指令同義膨脹。

偽指令技術

。偽指令技術主要是對病毒體插入廢指令,例如空指令、跳轉到下一指令和壓彈棧等。

重編譯技術

。病毒體攜帶病毒體的原始碼,需要自帶編譯器或者利用作業系統提供的編譯器進行重新編譯,這為跨平臺的惡意程式碼的出現打下了基礎。

6. 三執行緒技術

惡意程式碼中應用三執行緒技術是為了防止惡意程式碼被外部操作停止執行。

三執行緒技術的工作原理是一個惡意程式碼程序同時開啟了三個執行緒,其中一個為負責遠端控制工作的主執行緒,另外兩個為用來監視執行緒負責檢查惡意程式碼程式是否被刪除或被停止自啟動的監視執行緒和守護執行緒。

注入其他可執行檔案內的守護執行緒,同步於惡意程式碼程序。只要程序被停止,它就會重新啟動該程序,同時向主執行緒提供必要的資料,這樣就使得惡意程式碼可以持續執行。

“中國駭客”就是採用這種技術的惡意程式碼。

7. 程序注入技術

在系統啟動時作業系統的系統服務和網路服務一般能夠自動載入。惡意程式碼程式為了實現隱藏和啟動的目的,把自身嵌入與這些服務有關的程序中。這類惡意程式碼只需要安裝一次,就能被服務載入到系統中執行,並且可以一直處於活躍狀態。

8. 通訊隱藏技術

埠定製技術

:舊木馬幾乎都存在預設固定的監聽埠,但是新木馬一般都有定製埠的功能。優點:木馬檢測工具的一種檢測方法就是檢測預設埠,定製埠可以避過此方法的檢測。

埠複用技術:

利用系統網路開啟的埠(如 25 和 139 等)傳送資料。使用埠複用技術的木馬在保證埠預設服務正常工作的條件下複用,具有很強的欺騙性,可欺騙防火牆等安全裝置,可避過 IDS 和安全掃描系統等安全工具

通訊加密技術

:即將惡意程式碼的通訊內容加密傳送。通訊加密技術勝在能夠使得通訊內容隱藏,但弊端是通訊狀態無法隱藏。

隱蔽通道技術:

能有效隱藏通訊內容和通訊狀態,目前常見的能提供隱蔽通道方式進行通訊的後門有:BO2K、Code RedⅡ、Nimida 和 Covert TCP 等。

9. 核心級隱藏技術

1)LKM 隱藏

LKM 是可載入核心模組,用來擴充套件 Linux 的核心功能。LKM 能夠在不用重新編譯核心的情況下把動態加裁到記憶體中。基於這個優點,LKM 技術經常使用在系統裝置的驅動程式和Rootkit 中。LKM Rootkit 透過系統提供的介面載入到核心空間,將惡意程式轉化成核心的某一部分,再透過 hook 系統呼叫的方式實現隱藏功能。

2)記憶體對映隱藏

記憶體對映是指由一個檔案到一塊記憶體的對映。記憶體對映可以將硬碟上的內容對映至記憶體中,使用者可以透過記憶體指令讀寫檔案。使用記憶體對映避免了多次呼叫 I/O 操作的行為,減少了不必要的資源浪費。

軟考-資訊保安工程師學習筆記52——惡意程式碼概述

惡意程式碼攻擊技術

1. 程序注入技術

系統服務和網路服務在作業系統中,當系統啟動時被自動載入。程序注入技術就是

將這些與服務相關的嵌入了惡意程式碼程式的可執行程式碼作為載體,實現自身隱藏和啟動的目的。這類惡意程式碼只需要安裝一次,就能被服務載入到系統中執行,並且可以一直處於活躍狀態。

2. 超級管理技術

部分惡意程式碼能夠攻擊反惡意程式碼軟體。

惡意程式碼採用超級管理技術對反惡意程式碼軟體系統進行拒絕服務攻擊,阻礙反惡意程式碼軟體的正常執行。

例如,“廣外女生”是一個國產特洛伊木馬,對“金山毒霸”和“天網防火牆”採用超級管理技術進行拒絕服務攻擊。

3. 埠反向連線技術

防火牆對於外網進入內部的資料流有嚴格的訪問控制策略,但對於從內到外的資料並沒有嚴格控制。指令惡意程式碼使用埠反向連線技術使攻擊的服務端(被控制端)主動連線客戶端(控制端)埠。

最早實現這項技術的木馬程式是國外的“Boinet”,它可以透過 ICO、IRC、HTTP 和反向主動連線這 4 種方式聯絡客戶端。“網路神偷”是我國最早實現埠反向連線技術的惡意程式碼。“灰鴿子”則是這項技術的集大成者,它內建 FTP、域名、服務端主動連線這 3 種服務端線上通知功能。

4. 緩衝區溢位攻擊技術

惡意程式碼利用系統和網路服務的安全漏洞植入並且執行政擊程式碼,攻擊程式碼以一定的許可權執行有緩衝區溢位漏洞的程式來獲得被攻擊主機的控制權。緩衝區溢位攻擊成為惡意程式碼從被動式傳播轉為主動式傳播的主要途徑之一。例如,“紅色程式碼”利用 IIS Server 上Indexing

軟考-資訊保安工程師學習筆記52——惡意程式碼概述

惡意程式碼分析技術

惡意程式碼的分析方法

靜態分析方法:反惡意程式碼軟體的檢查、字串分析和靜態反編譯分析

動態分析方法:檔案監測、程序監測、登錄檔監測和動態反彙編分析

軟考-資訊保安工程師學習筆記52——惡意程式碼概述

1. 靜態分析方法

1)

反惡意程式碼軟體的檢測和分析

。反惡意程式碼軟體檢測惡意程式碼的方法有特徵程式碼法、校驗和法、行為監測法、軟體模擬法等。根據惡意程式碼的資訊去搜尋更多的資料,若該惡意程式碼的分析資料已被反惡意程式碼軟體收錄,那就可以直接利用它們的分析結果。

2)

字串分析

。字串分析的目的是尋找檔案中使用的 ASCII 或其他方法編碼的連續字串。一些有用的資訊可以透過在惡意程式碼樣本中搜尋字串得到,比如:①惡意程式碼的名字;②幫助和命令列選項;③使用者對話方塊,可以透過它分析惡意程式碼的目的;④後門密碼;⑤惡意程式碼相關的網址;⑥惡意程式碼作者或者攻擊者的 E-mail 地址;⑦惡意程式碼用到的庫,函式呼叫,以及其他的可執行檔案;⑧其他的有用的資訊。

3)

指令碼分析

。惡意程式碼如果是用 JS、Perl 或者 shell 指令碼等指令碼語言編寫的,那麼惡意程式碼本身就可能帶有原始碼。透過文字編輯器將指令碼開啟檢視原始碼。指令碼分析能幫助分析者用較短時間識別出大量流行的指令碼型別,表 14-1 列出了常用指令碼語言。

軟考-資訊保安工程師學習筆記52——惡意程式碼概述

4)

靜態反編譯分析

。對於攜帶直譯器的惡意程式碼可以採用反編譯工具檢視原始碼。原始碼在編譯時,程式碼會被編譯器最佳化,組成部分被重寫,使得程式更適合解釋和執行,上述面向計算機最佳化的特性,使得編譯的程式碼不適合逆向編譯。因此,逆向編譯是將對機器最佳化的程式碼重新轉化成原始碼,這使得程式結構和流程分離開來,同時變數的名字由機器自動生成,這使得逆向編譯的程式碼有著較差的可讀性。

5)

靜態反彙編分析

。有線性遍歷和遞迴遍歷兩種方法。GNU 程式 objdump 和一些連結最佳化工具使用線性遍歷演算法從輸入程式的入口點開始反彙編,簡單地遍歷程式的整個程式碼區,反彙編它所遇到的每一條指令。雖然方法簡單,但存在不能夠處理嵌入指令流中的資料的問題,如跳轉表。遞迴遍歷演算法試圖用反彙編出來的控制流指令來指導反彙編過程,以此解決上面線性遍歷所存在的問題。

2. 動態分析方法

1)檔案監測

。惡意程式碼在傳播和破壞的過程中需要依賴讀寫檔案系統,但存在極少數惡意程式碼只是單純依賴記憶體卻沒有與檔案系統進行互動。惡意程式碼執行後,在目標主機上可能讀寫各檔案,修改程式,新增檔案,甚至把程式碼嵌入其他檔案,因此對檔案系統必須進行監測。

2)程序監測

。惡意程式碼要入侵甚至傳播,必須有新的程序生成或盜用系統程序的合法許可權,主機上所有被植入程序的細節都能為分析惡意程式碼提供重要參考資訊。

3)網路活動監測

。惡意程式碼經歷了從早期的單一傳染形式到依賴網路傳染的多種傳染方式的變化,因此分析惡意程式碼還要監測惡意程式碼的網路行為

4)登錄檔監測

。Windows 作業系統的登錄檔是個包含了作業系統和大多數應用程式的配置的層次資料庫,惡意程式碼執行時一般要改變 Windows 作業系統的配置來改變Windows 作業系統的行為,實現惡意程式碼自身的目的。

5)動態反彙編分析

。動態反彙編指在惡意程式碼的執行過程中對其進行監測和分析。其基本思想是將惡意程式碼執行的控制權交給動態除錯工具,該監測過程從程式碼的入口點處開始,控制權在程式程式碼與除錯工具之間來回傳遞,直到程式執行完為止。

同記憶體除錯

。這種方法使除錯工具與被分析惡意程式碼程式載入到相同的地址空間裡。該方法的優點是實現代價相對較低,控制權轉交到除錯工具或者從除錯工具轉回惡意程式碼程式的實現相對來說比較簡單;缺點是需要改變被分析程式的地址。

模擬除錯

,即虛擬除錯。這種方法是讓除錯工具與分析的惡意程式碼程式處於不同的地址空間,可繞過很多傳統動態反跟蹤類技術。這種方法的優點是不用修改目標程式中的地址,但在程序間控制權的轉移上要付出較高的代價。

惡意程式碼防範策略

惡意程式碼防禦成為使用者、網管的日常安全工作。要做好惡意程式碼的防範,一方面組織管理上必須加強惡意程式碼的安全防範意識。因為,

惡意程式碼具有隱蔽性、潛伏性和傳染性

,使用者在使用計算機過程中可能不知不覺地將惡意程式碼引入所使用的計算機中,所以防範惡意程式碼應從安全意識上著手,明確安全責任、義務和注意事項。另一方面,透過技術手段來實現惡意程式碼防禦。防範惡意程式碼的總體框架如圖 所示。

軟考-資訊保安工程師學習筆記52——惡意程式碼概述

學習參考資料:

資訊保安工程師教程(第二版)

建群網培資訊保安工程師系列影片教程

資訊保安工程師5天修煉