小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

花式感染 Windows PE 病毒的一百種方法,你中過招嗎?

 風聲之家 2020-08-18

Python大本營 今天

以下文章來源于CSDN ,作者楊秀璋

CSDN

CSDN

專業(yè)的中文 IT 技術(shù)社區(qū),與千萬技術(shù)人共成長。

作者 | 楊秀璋,責編 | 夕顏

出品 | CSDN博客

這是一篇基礎(chǔ)性文章,將介紹Windows PE病毒, 包括PE病毒原理、分類及感染方式詳解,并通過案例進行介紹。


01

PE病毒概念

什么是PE病毒?


PE病毒是以Windows PE程序為載體,能寄生于PE文件或Windows系統(tǒng)的病毒程序。

PE病毒數(shù)量非常之多,包括早起的CIH病毒,全球第一個可以破壞計算機硬件的病毒,它會破壞主辦的BIOS,對其數(shù)據(jù)進行擦寫修改。再比如熊貓燒香、機器狗等等,其危害非常之大。

什么叫感染?


說到病毒,不得不提感染。感染是指在盡量不影響目標程序(系統(tǒng))正常功能的前提下,而使其具有病毒自身的功能。什么叫病毒自身的功能呢?一個病毒通常包括如下模塊:

  • 感染模塊: 被感人程序同樣具備感染能力

  • 觸發(fā)模塊: 在特定條件下實施相應(yīng)的病毒功能,比如日期、鍵盤輸入等

  • 破壞模塊

  • 其他模塊

CIH病毒


CIH病毒是一種能夠破壞計算機系統(tǒng)硬件的惡性病毒。這個病毒產(chǎn)自TW,原集嘉通訊公司工程師陳盈豪在其于TW大同工學院念書期間制作。最早隨國際兩大盜版集團販賣的盜版光盤在歐美等地廣泛傳播,隨后進一步通過網(wǎng)絡(luò)傳播到全世界各個角落。CIH的載體是一個名為“ICQ中文Chat模塊”的工具,并以熱門盜版光盤游戲如“古墓奇兵”或Windows95/98為媒介,經(jīng)互聯(lián)網(wǎng)各網(wǎng)站互相轉(zhuǎn)載,使其迅速傳播。目前傳播的主要途徑主要通過Internet和電子郵件,當然隨著時間的推移,其傳播主要仍將通過軟盤或光盤途徑。

CIH病毒曾入榜全球十大計算機病毒之首,該病毒引起了許多重要部門的嚴密關(guān)注,其原因不言而喻。如果指揮、通信、政務(wù)等系統(tǒng)受到了CIH病毒的威脅甚至破壞,其后果不堪設(shè)想。

如果我們要編寫PE病毒,則需要掌握以下的關(guān)鍵:

  • 病毒的重定位

  • 獲取API函數(shù)地址

  • 文件搜索

  • 內(nèi)存映射文件

  • 病毒如何感染其他文件

  • 病毒如何返回到Host程序

02

PE病毒的分類

以感染目標進行分類,包括:

(1) 文件感染

將代碼寄生在PE文件,病毒本身只是PE文件的一部分,依賴于感染目標,通常也叫HOST文件,控制權(quán)獲得也是以目標程序運行來獲得的。分為:

  • 傳統(tǒng)感染型:以Win32匯編程序編寫為主

  • 捆綁釋放型:編寫難度較低,通過高級語言均可編寫,將目標程序和病毒程序捆在一起,和捆綁器有相似之處

(2) 系統(tǒng)感染

將代碼或程序寄生在Windows操作系統(tǒng),該類病毒越來越多,它不感染具體文件,但是它會在操作系統(tǒng)中保存自己的實體。同時也可以通過系統(tǒng)啟動的方法來獲取控制權(quán)。傳播途徑包括:

  • 即時通信軟件,如QQ尾巴

  • U盤、光盤

  • 電子郵件

  • 網(wǎng)絡(luò)共享

  • 其他途徑

03

傳統(tǒng)文件感染型


1.感染思路

當我們了解PE文件格式之后,要了解PE文件感染型病毒就非常容易了。如下圖所示,左邊是一個正常的PE文件,右邊是PE病毒感染該程序時的修改,可以看到病毒代碼在最后面,通常它是一種新節(jié)的形式。我們知道PE文件是由多個節(jié)組成的,病毒代碼為了融入目標程序會以節(jié)的形式,同時修改PE文件頭。

對感染來說,它一方面需要使得對方具備自己的功能,另一方面也不破壞對方程序的功能。所以病毒代碼執(zhí)行完畢之后,它必須要將控制權(quán)交給原始程序,從而防止病毒被發(fā)現(xiàn)。

  • 優(yōu)點: 被感染后的程序主題依然是目標程序,不影響目標程序圖標,隱蔽性稍好

  • 缺點: 對病毒代碼的編寫要求較高,通常是匯編語言編寫,難以成功感染自校驗程序

PE病毒典型案例

下面是演示代碼,感染本目錄下的test.ext文件,它沒有破壞性,tset.exe被感染后,首先執(zhí)行病毒代碼,然后執(zhí)行自身代碼。如下圖所示,存在四個文件。其中main.exe是PE病毒程序,它會感染當前目錄下名為“test.exe”的文件。這里僅是測試PE病毒感染代碼,沒有破壞功能。

  • calc.exe:計算器

  • notepad.exe:記事本

  • test.exe:測試PE文件

  • main.exe:PE病毒程序

第一步,我們嘗試打開test.exe文件。它是一個正常的PE文件,前面的文章也分析過,它包括兩個彈窗,如下圖所示。

第二步,使用OD打開test.exe如下圖所示,發(fā)現(xiàn)起始地址為0x00401000,該exe程序大小為2.50KB。

第三步,運行main.exe程序,它是PE病毒。注意,它會彈出如下圖所示對話框,這是為了方便演示,而真實的PE病毒不會提示你信息。程序是兩位大佬所寫,其中一位是Hume前輩,另一位 ^ _ ^

同時,如果360會查殺該病毒,添加信任即可。但當我們在真實惡意樣本分析時,一定要在虛擬機等有保護環(huán)境下進行。

IDA分析mian.exe如下圖所示:

第四步,此時test.exe文件大小已經(jīng)增加為6.50KB,說明其已經(jīng)被惡意感染。

雙擊test.exe顯示如下圖所示,它會先彈出一個感染測試對話框,然后才是接下來的正常程序?qū)υ捒颉?/span>

用OD動態(tài)分析,發(fā)現(xiàn)程序入口地址是0x004042DC。說明該程序先執(zhí)行PE病毒,之后才執(zhí)行正常的程序,而真實的PE病毒不會只簡單的彈出提示窗口,而會隱蔽的進行一些破壞或收集信息。

第五步,將被感染的“test.exe”重命名為“test-ok.exe”,然后將記事本修改為“test.exe”,因為我們的代碼只感染當前目錄下“test”命名的文件。

接著運行“test-ok.exe”程序,發(fā)現(xiàn)打開記事本也會彈出如下圖所示的對話框,接著才是記事本,說明該程序也被感染。

第六步,通過同樣的方法感染計算器程序,如下圖所示。

寫到這里,該案例就演示完畢,這是一個傳統(tǒng)典型的PE病毒感染示例。

3.關(guān)鍵技術(shù)


(1) 重定位

重定位在前面講PE文件格式化時介紹過,尤其DLL文件常見重定位。因為DLL文件會加載到不同的位置,如果再按照VA地址定位會出現(xiàn)差錯,所以會出現(xiàn)重定位。對于病毒程序也是一樣的,它有相應(yīng)的代碼去感染目標程序,而目標程序有很多,病毒程序?qū)懺谀繕顺绦蚴裁次恢媚??這就需要病毒代碼去定位目標程序的位置,就要利用重定位技術(shù)。

  • 關(guān)鍵點:病毒代碼目標寄生位置不固定

  • shellcode類似:通常需要注入遠程系統(tǒng),但這段代碼在遠程系統(tǒng)什么位置有時并不能確定,另外遠程系統(tǒng)的環(huán)境有時也不能準確感知,故需要使用重定位和API函數(shù)自獲取技術(shù)

① 為什么需要重定位呢?

下面是一段源代碼(PE最小文件案例),通過mas32編譯生成的目標程序。源代碼非常簡單,就是調(diào)用invoke,通過invoke調(diào)用MessageBox函數(shù),包括四個參數(shù);程序第二個語句是invoke調(diào)用退出。這里彈出對話框涉及兩個字符串szCap和szMsgOK。

  • invoke MessageBox, NULL, addr szMsgOK, addr szCap, 40h+1000h

  • invoke ExitProcess, NULL

當該程序編譯之后,反匯編結(jié)構(gòu)顯示如下圖所示,比如Start位置,MessageBox函數(shù)包括四個參數(shù),我們采用PUSH壓入堆棧,再CALL調(diào)用該函數(shù)。

  • push offset off_00401000

  • push offset off_00401014

圖中紅色圓圈顯示的是PE文件代碼的二進制部分,它是一個VA的地址,即RVA+ImageBase。程序在編譯后,某些VA地址(如變量Var 004010xxh)就已經(jīng)以二進制代碼的形式固定,這就是需要重定位的原因。

下圖展示正常情況的ImageBase,值為400000H。比如HEX數(shù)據(jù)為“00104000”,由于高位在后面,所以對應(yīng)的地址是“00 40 10 00”。

如果ImageBase為600000H,則代碼不做重定位,PUSH壓入堆棧的值為401000和401014。而此時的值什么也不是,通過數(shù)據(jù)窗口定位地址發(fā)現(xiàn)不存在。左下角可以看到,00601000位置才是存放的數(shù)據(jù)。所以,重定位需要將這里的40修改為60。

總之,如果病毒代碼插入位置不固定,也會遇到類似的問題。病毒代碼必須通過重定位解決類似的問題。

② 下面看看病毒代碼植入HOST文件后的位置差異。

左邊是病毒在感染前的VAR位置,其地址為004010xx;當這段代碼插入到另一個HOST文件后,如右圖所示,變量的實際位置和預(yù)期位置出現(xiàn)了差異,而重定位的關(guān)鍵是知道這個差異是多少,后續(xù)遇到的各種變量或地址都可以通過這種差異方式校正。

  • 重定位本質(zhì):修正實際地址與預(yù)期地址的差異

但是根據(jù)HOST特征逐一硬編碼這種方式不太可取,其繁瑣且未必準確,所以采用另一種方法,病毒代碼運行過程中自我重定位。首先它計算剛才的差異值,接著調(diào)用call delta將下一條語句開始位置壓入堆棧,此時堆棧頂端存放的是pop ebp語句,它在內(nèi)存匯總真實的地址;再后面是sub減法操作,ebp減去offset delta;最后當我們需要重定位時,比如使用varl變量,重定位則為ebp+offset來消除差異,此時eax中存放varl在內(nèi)存中的真實地址。

CALL語句功能:

  • 將下一條語句開始位置壓入堆棧

  • JMP到目標地址執(zhí)行

(2) API函數(shù)自獲取

前面介紹了PE文件的引入函數(shù)節(jié),它是目標程序作者編寫的,當調(diào)用外部DLL中的API函數(shù)時,通過引入函數(shù)節(jié)將這種關(guān)系定義出來,系統(tǒng)加載時就能加載對應(yīng)的DLL文件并找到相應(yīng)的API函數(shù),再將地址寫入到PE文件的引入函數(shù)表中,程序運行時就直接從引入函數(shù)表中取地址進行調(diào)用,這是正常的PE文件運行過程。

但對于病毒程序來說,它是一段代碼,當它感染另外一個程序時,它是否能修改目標程序的引入函數(shù)節(jié),而使得其可以服務(wù)病毒代碼呢?從原理上來說,這是可以實現(xiàn)的,但非常復(fù)雜,因為要在引用函數(shù)節(jié)添加東西一定會導致其他結(jié)構(gòu)的變化,需要做很多的修正工作,這也可能破壞原有功能。所以對于病毒來說,它需要自己去獲取API函數(shù)地址,并且沒有引入函數(shù)節(jié)的支撐,但它又必須要使用很多API函數(shù)來實現(xiàn)病毒功能。

  • 關(guān)鍵點:需要使用的API函數(shù),但無引入函數(shù)節(jié)支撐

  • shellcode類似:通常需要注入遠程系統(tǒng),但這段代碼在遠程系統(tǒng)什么位置有時并不能確定,另外遠程系統(tǒng)的環(huán)境有時也不能準確感知,故需要使用重定位和API函數(shù)自獲取技術(shù)

① 如何獲取API函數(shù)地址呢?

  • DLL文件的引出函數(shù)節(jié)

  • Kernel32.dll:核心API函數(shù)為 GetProcAddress和LoadLibraryA

  • GetProcAddress函數(shù):包括兩個參數(shù),模塊基地址和想要獲取API函數(shù)名稱,它將動態(tài)獲得DLL函數(shù)的入口地址

  • LoadLibraryA函數(shù):將制定的DLL動態(tài)鏈接庫加載到內(nèi)存中,返回值為DLL文件加載到內(nèi)存中的基地址

② 當我們獲得GetProcAddress和LoadLibraryA地址后,想獲取任何一個API函數(shù)地址都可以。那么,怎么獲取這兩個函數(shù)的地址呢?

  • 首先,獲得kernel32.dll的模塊加載基地址

  • 一種方法是采用硬編碼(兼容性差),另一種方法通過Kernel模塊中的相應(yīng)結(jié)構(gòu)和特征定位

  • 其次,通過Kernel32.dll的引出目錄表結(jié)構(gòu)定位具體函數(shù)的函數(shù)地址

③ 接著,我們看看獲取Kernel32模塊基地址的典型方法。

  • 定位Kernel32模塊中任何一個地址,然后按照模塊首地址特征(對齊于10000H,PE文件開始標識MZ)向低地址遍歷定位PE文件頭

  • Kernel32模塊內(nèi)的地址從何處獲得?

– 程序入口代碼執(zhí)行時Stack頂端存儲的地址
– SEH鏈末端
– PEB相關(guān)數(shù)據(jù)結(jié)構(gòu)指向了各模塊地址
– Stack特定高端地址的數(shù)據(jù)
注意:不同操作系統(tǒng)存在差別


(3) 目標程序遍歷搜索

通常以PE文件格式的文件(如EXE、SCR、DLL等)作為感染目標,其關(guān)鍵點為全盤查找或者部分盤符查找,遍歷算法包括遞歸或非遞歸。在對目標進行搜索時,通常調(diào)用兩個API函數(shù):

  • FindFirstFile

  • FindNextFile

搜索目標進行感染算法如下:

(4) 文件感染

感染的關(guān)鍵是病毒代碼能夠得到運行,常用方法包括:

  • 選擇合適的位置放入病毒代碼(已有節(jié)、新增節(jié))

  • 將控制權(quán)交給病毒代碼,如修改程序入口點AddressofEntryPoint,或者在原目標代碼執(zhí)行過程中運行病毒代碼(EPO技術(shù),EntryPoint Obscuring)

同時,病毒代碼執(zhí)行時,程序的正常功能不能被破壞,即控制權(quán)的交換。

  • 感染時,記錄原始“程序控制點位置”

  • 病毒代碼執(zhí)行完畢之后,返回控制權(quán)

  • 避免重復(fù)感染,感染標記

感染文件的基本步驟為:

①判斷目標文件開始的兩個字節(jié)是否為“MZ”

②判斷PE文件標記“PE”

③判斷感染標記,如果已被感染過則跳出繼續(xù)執(zhí)行HOST程序,否則繼續(xù)

④獲得Directory(數(shù)據(jù)目錄)的個數(shù)(每個數(shù)據(jù)目錄信息占8個字節(jié))

⑤得到節(jié)表起始位置(Directory的偏移地址+數(shù)據(jù)目錄占用的字節(jié)數(shù)=節(jié)表
起始位置)

⑥得到目前最后節(jié)表的末尾偏移(緊接其后用于寫入一個新的病毒節(jié))節(jié)表起
始位置+節(jié)的個數(shù)*(每個節(jié)表占用的字節(jié)數(shù)28H)=目前最后節(jié)表的末尾偏移

⑦開始寫入節(jié)表和病毒節(jié)

⑧修正文件頭信息

04

捆綁釋放型

捆綁釋放型感染實現(xiàn)起來比較簡單,目前很大一部分病毒程序都采用這種方法。捆綁釋放型感染時將目標HOST程序作為數(shù)據(jù)存儲在病毒體內(nèi),當執(zhí)行病毒程序時,它先執(zhí)行病毒程序,然后還原并執(zhí)行HOST文件,從而保證被感染的程序本身能正常運行,不會引起一些異樣。

  • 熊貓燒香病毒
    左邊是一個正常程序(QQ),感染之后會將病毒放在前面,正常程序放在后面,程序運行之后,病毒會拿到控制權(quán)。但是程序圖標會顯示前面的病毒程序,顯示熊貓燒香,這也是一個明顯的被感染特征。

  • 優(yōu)點: 編寫簡單、效率高,可感染自校驗程序

  • 缺點: 被感染后的程序主體是病毒程序,易被發(fā)現(xiàn)(程序疊加+釋放執(zhí)行),程序圖標問題

05

系統(tǒng)感染型

系統(tǒng)感染型本身不對PE文件做任何感染操作,但它感染的目標是操作系統(tǒng),也是一種寄生類的方式,只是寄生目標有所不同。這類病毒通常為獨立個體,不感染系統(tǒng)內(nèi)的其他文件。

兩個關(guān)鍵問題:

  • 如何再次獲得控制權(quán)——自啟動
    由于該程序不感染PE文件,它沒有HOST文件,所以如何再次獲得控制權(quán)是一個關(guān)鍵性問題,也是目標很多病毒程序設(shè)計時不得不考慮的問題。此時和操作系統(tǒng)自啟動相關(guān),病毒必須依賴于該機制再次獲得控制權(quán)。

  • 如何傳播
    可移動存儲介質(zhì)(U盤、移動硬盤刻錄光盤等)
    網(wǎng)絡(luò)共享
    電子郵件或其他應(yīng)用


1.控制權(quán)再次獲取

下面簡單講解控制權(quán)再次獲取的自啟動方式。首先看看操作系統(tǒng)啟動流程:

  • BIOS --> 硬盤MBR --> 活動分區(qū)DBR --> 系統(tǒng)內(nèi)部

整個啟動流程也是控制權(quán)傳遞的過程,包括現(xiàn)在提出的可信計算,也是對控制權(quán)一步一步的校驗,控制流程的數(shù)據(jù)完整性或行為的校驗。對于操作系統(tǒng)本身,它的啟動方式很多,系統(tǒng)內(nèi)部包括:

  • 注冊表中的鍵值

  • 系統(tǒng)中的特定位置

  • 配置文件

  • 特定路徑的特定文件,如Explorer.exe(顯示桌面)

下圖展示了Autoruns軟件看到Windows操作系統(tǒng)進行自啟動的選項。如果病毒本身能很好地結(jié)合這套機制,它可以做的事情非常多,并且具有很好的隱蔽性。

其他啟動方式:

  • 利用系統(tǒng)自動播放機制Autorun.inf
    比如U盤病毒或光盤病毒就是利用U盤或光盤的自動播放功能。目前,也有一些U盤插入之后,不需要你去雙擊這個U盤,里面的程序就會自啟動。

  • 在其他可執(zhí)行文件嵌入少量觸發(fā)代碼
    修改引入函數(shù)節(jié)啟動DLL病毒文件(添加相應(yīng)結(jié)構(gòu),初始化代碼觸發(fā))
    在特定PE文件代碼段插入觸發(fā)代碼等(只需定位可執(zhí)行程序并運行)

  • DLL劫持:替換已有DLL文件
    很多應(yīng)用程序或操作系統(tǒng)執(zhí)行時,都會去執(zhí)行DLL文件,如果病毒將自身做成一個DLL文件,同時將系統(tǒng)DLL文件替換??上攵?,系統(tǒng)啟動時,它是根據(jù)文件名啟動的,此時病毒DLL文件就會拿到控制權(quán),如果拿到控制權(quán)之后再進一步裝載原始DLL文件,這樣系統(tǒng)的本身機制也不會受到影響,隱蔽性更強。該方法非常常見,甚至有一些病毒程序?qū)⒎床《拒浖梢蕾嚨腄LL文件替換。


2.病毒的傳播方式

一切可對外交互的渠道都可傳播,包括:

  • 各類存儲設(shè)備(軟盤、光盤、U盤、移動硬盤、智能設(shè)備)

  • 各類網(wǎng)絡(luò)通信方式(QQ、MSN、Email、淘寶旺旺、微信、微博等)

  • 各類網(wǎng)絡(luò)連接方式(有線、wifi、藍牙等)

  • 各類網(wǎng)絡(luò)應(yīng)用(迅雷、BT等)

郵件蠕蟲越來越常見,其中以郵件附件的形式進行傳播較多。附件中可能包含病毒包括exe文件、rar文件、pdf文件、doc文件、xls文件、jpg文件、chm文件等。下圖是一個包含病毒的郵件附件,顯示為一個word文檔,后綴名doc,圖標顯示也是word。但它的真實后綴是scr(屏保),它其實是利用了一種技術(shù),在文件名里插入翻轉(zhuǎn)字符,然后將翻轉(zhuǎn)字符之后的其他字符進行了翻轉(zhuǎn),它的完整文件名應(yīng)該是“5月TW行l(wèi)mcod.scr”。這也是一種欺騙性很強的攻擊手法。

再補充一個通過可移動存儲設(shè)備傳播的非感染式病毒,即Autorun.inf。右圖顯示了Autorun.inf文件,如果文件存在U盤根目錄,當我們雙擊這個U盤時,它就會觸發(fā)對應(yīng)的病毒,如果選擇U盤盤符右鍵打開或打開資源管理器,這是進入的也是病毒程序。當然下面的演示是計算器程序。

[AutoRun]open=mspaint.exeshell\open=打開(&O)shell\open\Command=calc.exeshell\open\Default=1shell\explore=資源管理器(&X)shell\explore\Command=calc.exe

還有一類是偽裝的文件夾,如下圖所示photo.exe文件,當Windows操作系統(tǒng)默認不顯示“.exe”時,它就能偽裝成文件夾,當我們雙擊之后就會運行病毒,同時可以打開某個文件夾進行隱蔽。

最后,補充“擺渡”知識點,這種攻擊行為經(jīng)常發(fā)生在一些具有特殊目的病毒程序身上。期望通過可移動的媒介來滲透一些平時不聯(lián)網(wǎng)的電腦中,并從中獲取數(shù)據(jù),利用擺渡的方式植入病毒或木馬到內(nèi)網(wǎng),比較典型的案例就是Stuxnet。

下圖展示了Stuxnet震網(wǎng)事件的漏洞利用過程和啟動方式,傳統(tǒng)的Autorun方式很容易被禁止掉,而Stuxnet利用的是lnk漏洞(MS10-046),它會在目標U盤下放入lnk快捷方式及病毒程序(如DLL文件)。不管通過什么方式進入U盤,lnk文件會被解析從而觸發(fā)漏洞,導致U盤中的病毒程序被執(zhí)行。

06

總結(jié)

寫到這里,這篇文章就介紹完畢,通過這些PE病毒原理、分類及感染方式的講解,有利于大家去做一些拓展和思考,也體現(xiàn)出當下的網(wǎng)絡(luò)形式,存在很多安全隱患,安全防御是非常必要的。

  • PE病毒概念

  • PE病毒的分類

  • 傳統(tǒng)文件感染型

    感染思路

    PE病毒典型案例

    關(guān)鍵技術(shù)

  • 捆綁釋放型

  • 系統(tǒng)感染型

    控制權(quán)再次獲取

    病毒的傳播方式

原文鏈接:

https://blog.csdn.net/Eastmount/article/details/106204633

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多