成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

十種進程注入技術介紹:常見注入技術及趨勢調(diào)查

安全 應用安全 服務器運維
進程注入是一種廣泛使用的躲避檢測的技術,通常用于惡意軟件或者無文件技術。

 前言

進程注入是一種廣泛使用的躲避檢測的技術,通常用于惡意軟件或者無文件技術。其需要在另一個進程的地址空間內(nèi)運行特制代碼,進程注入改善了不可見性,同時一些技術也實現(xiàn)了持久性。盡管目前有許多進程注入技術,但在這篇文章中,我將會介紹十種在野發(fā)現(xiàn)的,在另一個程序的地址空間執(zhí)行惡意代碼的進程注入技術,并提供這些技術應用的截圖,以便于逆向工程和惡意軟件分析,然后協(xié)助檢測并防御這些進程注入技術。

技術應用

一、通過CREATEREMOTETHREAD和LOADLIBRARY進行經(jīng)典DLL注入

該技術是用于將惡意軟件代碼注入另一個進程最常用技術之一,惡意軟件作者將惡意的動態(tài)鏈接庫(DLL)的路徑寫入另一個進程的虛擬地址空間,并通過在目標進程中創(chuàng)建一個遠程線程來確保目標進程加載它。

通過CREATEREMOTETHREAD和LOADLIBRARY進行經(jīng)典DLL注入

惡意軟件首先需要選擇被注入的目標進程(例如svchost.exe),這通常可以通過調(diào)用三個應用編程接口(API)搜索進程來完成:CreateToolhelp32Snapshot,Process32First和Process32Next。CreateToolhelp32Snapshot是用于枚舉指定進程或所有進程的堆或模塊狀態(tài)的API,其會返回一個快照。Process32First會檢索有關快照中第一個進程的信息,然后通過循環(huán)Process32Next來迭代。找到目標進程后,惡意軟件通過調(diào)用OpenProcess獲取目標進程的句柄。

如圖一所示,惡意軟件調(diào)用VirtualAllocEx來獲得寫入其DLL路徑的空間。然后惡意軟件調(diào)用WriteProcessMemory在已分配的內(nèi)存中寫入路徑。最后,為了讓代碼在另一個進程中執(zhí)行,惡意軟件作者會調(diào)用API,例如CreateRemoteThread,NtCreateThreadEx或RtlCreateUserThread。后兩個并未存在應用記錄,但是一般的想法就是將LoadLibrary的地址傳遞給其中一個API,以便遠程進程不得不代表惡意軟件執(zhí)行DLL。

很多殺毒軟件都會追蹤和標記CreateRemoteThread,此外,注入也需要磁盤上存在惡意DLL。但這是可以被檢測到的。考慮到攻擊者最常通過注入代碼以逃避檢測,所以一些老練的攻擊者可能并不會使用這種方法。下面的截圖展示了一個叫Rebhip的惡意軟件應用了此技術。

Rebhip

二、PORTABLE EXECUTABLE注入(PE注入)

這種技術斌沒有傳遞LoadLibrary的地址,而是將其惡意代碼復制到已存在的開放進程并執(zhí)行(通過shellcode或調(diào)用CreateRemoteThread)。PE注入相對于LoadLibrary注入的一個優(yōu)點是惡意軟件不必在磁盤上放一個惡意DLL。與第一種技術類似,惡意軟件在宿主進程中分配到內(nèi)存,其并沒有編寫“DLL路徑”,而是通過調(diào)用WriteProcessMemory來編寫其惡意代碼。然而,這種方法的一個缺陷是目標基址的改變,當惡意軟件將其PE注入到另一個進程時,其會有一個新的不可預測的基址,這就要求其動態(tài)地重新計算PE的地址。為了解決這個問題,惡意軟件需要在宿主進程中找到其重定位表地址,并通過循環(huán)其重定位描述符來解析絕對地址。

PE注入

此技術類似于其他技術,例如反射式DLL,因為它們不會將任何文件放在磁盤,但是,反射式DLL注入方法甚至會更加隱蔽。它們不依賴于任何額外的Windows API(例如CreateRemoteThread或LoadLibrary),因為它們在內(nèi)存中加載和執(zhí)行自己。反射式DLL注入通過創(chuàng)建一個DLL來實現(xiàn),該DLL在執(zhí)行時將自身映射到內(nèi)存,而不是依賴于Windows的loader。

在分析PE注入時,調(diào)用CreateRemoteThread之前通常會看到循環(huán)(通常是兩個“for”循環(huán),一個嵌套在另一個中)這種技術在crypter(加密和混淆惡意軟件的軟件)中非常流行。在圖二中,樣本的單元測試中正在利用這種技術。代碼有兩個嵌套循環(huán)來調(diào)整其重定位表,可以在調(diào)用WriteProcessMemory和CreateRemoteThread之前看到它。“AND 0x0fff”指令是另一個好指示,表明前12位用于獲取包含重定位塊的虛擬地址的偏移量。既然惡意軟件已經(jīng)重新計算了所有必要的地址,那么它需要做的只是將其起始地址傳遞給CreateRemoteThread并讓它執(zhí)行。

傳遞給CreateRemoteThread并讓它執(zhí)行

三、PROCESS HOLLOWING技術(又名 PROCESS REPLACEMENT AND RUNPE)

惡意軟件可以不用將代碼注入宿主程序,而是利用Process Hollowing技術。當惡意軟件從目標進程中取消映射,并使用惡意可執(zhí)行文件覆蓋目標進程的內(nèi)存空間時,會發(fā)生Process Hollowing。

ROCESS HOLLOWING技術

惡意軟件首先會創(chuàng)建一個新進程,以掛起模式托管惡意代碼,如圖三所示,這是通過調(diào)用CreateProcess并將Process Creation Flag設置為CREATE_SUSPENDED(0×00000004)來完成的。新進程的主線程是在掛起狀態(tài)下創(chuàng)建的,并且在調(diào)用ResumeThread函數(shù)之前不會執(zhí)行。接下來,惡意軟件需要使用惡意載荷交換合法文件的內(nèi)容,這是通過調(diào)用ZwUnmapViewOfSection或NtUnmapViewOfSection來取消映射目標進程的內(nèi)存完成的。這兩個API基本上釋放了一個區(qū)的所有內(nèi)存。現(xiàn)在內(nèi)存處于未映射狀態(tài),loader執(zhí)行V​​irtualAllocEx為惡意軟件分配新內(nèi)存,并使用WriteProcessMemory將每個惡意軟件的部分寫入目標進程空間。而惡意軟件通過調(diào)用SetThreadContext將入口點指向它已編寫的新代碼段。最后,惡意軟件通過調(diào)用ResumeThread恢復掛起的線程,使進程退出掛起狀態(tài)。

用ResumeThread

四、線程執(zhí)行劫持技術(或者說SUSPEND, INJECT, AND RESUME (SIR))

該技術與先前討論的Process Hollowing技術有一些相似之處。在線程執(zhí)行劫持中,惡意軟件以進程的現(xiàn)有線程為目標,并避免任何其他的進程或線程創(chuàng)建操作。因此,在分析期間,你可能會看到對CreateToolhelp32Snapshot和Thread32First的調(diào)用,然后是OpenThread。

線程執(zhí)行劫持技術

獲取目標線程的句柄后,惡意軟件通過調(diào)用SuspandThread來掛起這個線程,然后調(diào)用VirtualAllocEx和WriteProcessMemory來分配內(nèi)存并執(zhí)行代碼注入。代碼可以包含shellcode,惡意DLL的路徑以及LoadLibrary的地址。

圖4展示了使用這種技術的通用木馬。為了劫持線程的執(zhí)行,惡意軟件通過調(diào)用SetThreadContext來修改目標線程的EIP寄存器(包含下一條指令的地址的寄存器)。之后,惡意軟件恢復線程來執(zhí)行它已寫入主機進程的shellcode。從攻擊者的角度來看,SIR方法可能會出問題,因為在系統(tǒng)調(diào)用過程中掛起和恢復線程會導致系統(tǒng)崩潰。為了避免這種情況,如果EIP寄存器在NTDLL.dll范圍內(nèi),復雜一點的惡意軟件會稍后重新嘗試。

稍后重新嘗試

五、通過SETWINDOWSHOOKEX進行HOOK注入

HOOK是一種攔截函數(shù)調(diào)用的技術,惡意軟件可以利用HOOK的功能在特定線程中觸發(fā)事件時加載其惡意DLL。這通常通過調(diào)用SetWindowsHookEx將hook routine安裝到HOOK鏈中來完成。SetWindowsHookEx函數(shù)有四個參數(shù)。第一個參數(shù)是事件的類型。事件反映了HOOK類型的范圍,從鍵盤上的按鍵(WH_KEYBOARD)到鼠標輸入(WH_MOUSE),CBT等等。第二個參數(shù)是指向惡意軟件想要在事件上調(diào)用的函數(shù)的指針。第三個參數(shù)是包含該函數(shù)的模塊。因此,在調(diào)用SetWindowsHookEx之前,通常會看到對LoadLibrary和GetProcAddress的調(diào)用。此函數(shù)的最后一個參數(shù)是與HOOK過程相關聯(lián)的線程。如果此值設置為零,則所有線程都會在觸發(fā)事件時執(zhí)行操作。但是,惡意軟件通常針對一個線程以降低噪聲,因此在SetWindowsHookEx之前也可以看到調(diào)用CreateToolhelp32Snapshot和Thread32Next來查找和定位單個線程。注入DLL后,惡意軟件代表其threadId傳遞給SetWindowsHookEx函數(shù)的進程執(zhí)行其惡意代碼。在圖5中,Locky Ransomware實現(xiàn)了這種技術。

Locky Ransomware

六、通過修改注冊表實現(xiàn)注入和持久性

Appinit_DLL,AppCertDlls和IFEO(映像文件執(zhí)行選項)都是惡意軟件用于注入和持久性的注冊表項。條目位于以下位置:

  1. HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls 
  2.  
  3.    HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls 
  4.  
  5.    HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls 
  6.  
  7.    HKLM\Software\Microsoft\Windows NT\currentversion\image file execution options 

AppInit_DLLs

惡意軟件可以在Appinit_Dlls注冊表項下插入其惡意庫的位置,以使另一個進程加載其庫。此注冊表項下的每個庫都會加載到每個加載User32.dll的進程中。User32.dll是一個非常常見的庫,用于存儲對話框等圖形元素。因此,當惡意軟件修改此子鍵時,大多數(shù)進程將加載惡意庫。圖6展示了Ginwui依賴這種注入和持久性方法的木馬。它只是通過調(diào)用RegCreateKeyEx打開Appinit_Dlls注冊表項,并通過調(diào)用RegSetValueEx來修改其值。

AppInit_DLLs

AppCertDlls

此方法與AppInit_DLLs方法非常相似,只是此注冊表項下的DLL被加載到調(diào)用Win32 API函數(shù)CreateProcess,CreateProcessAsUser,CreateProcessWithLogonW,CreateProcessWithTokenW和WinExec的每個進程中。

映像文件執(zhí)行選項(IFEO)

IFEO通常用于調(diào)試目的。開發(fā)人員可以在此注冊表項下設置“調(diào)試器值”,以將程序附加到另一個可執(zhí)行文件以進行調(diào)試。因此,每當啟動可執(zhí)行文件時,會啟動附加到它的程序。要使用此功能,你只需提供調(diào)試器的路徑,并將其附加到要分析的可執(zhí)行文件。惡意軟件可以修改此注冊表項以將其自身注入目標可執(zhí)行文件。在圖7中,Diztakun木馬通過修改任務管理器的調(diào)試器值來實現(xiàn)此技術。

映像文件執(zhí)行選項(

七、APC注入和ATOMBOMBING

惡意軟件可以利用異步過程調(diào)用(APC)通過將其附加到目標線程的APC隊列來強制另一個線程執(zhí)行其特制代碼。每個線程都有一個APC隊列,它們等待目標線程進入可變狀態(tài)時執(zhí)行。如果線程調(diào)用SleepEx,SignalObjectAndWait,MsgWaitForMultipleObjectsEx,WaitForMultipleObjectsEx或WaitForSingleObjectEx函數(shù),則線程進入可更改狀態(tài)。惡意軟件通常會查找處于可更改狀態(tài)的任何線程,然后調(diào)用OpenThread和QueueUserAPC將APC排入線程。 QueueUserAPC有三個參數(shù):

1)目標線程的句柄; 

2)指向惡意軟件想要運行的功能的指針;

3)傳遞給函數(shù)指針的參數(shù)。 

在圖8中,Amanahe惡意軟件首先調(diào)用OpenThread來獲取另一個線程的句柄,然后通過LoadLibraryA調(diào)用QueueUserAPC作為函數(shù)指針,將其惡意DLL注入另一個線程。

APC注入和ATOMBOMBING

AtomBombing是一項由enSilo研究首次引入的技術,然后用于Dridex V4。 正如我們在前一篇文章中詳細討論的那樣,該技術也依賴于APC注入。 但是,它使用原子表寫入另一個進程的內(nèi)存。

八、通過SETWINDOWLONG進行附加窗口內(nèi)存注入(EWMI)

EWMI依賴于注入資源管理器托盤窗口的額外窗口內(nèi)存,并且已經(jīng)在Gapz和PowerLoader等惡意軟件系列中應用過幾次。注冊窗口類時,應用程序可以指定一些額外的內(nèi)存字節(jié),稱為額外窗口內(nèi)存(EWM)。但是,EWM的空間不大。為了規(guī)避此限制,惡意軟件將代碼寫入explorer.exe的共享部分,并使用SetWindowLong和SendNotifyMessage使用指向shellcode的函數(shù)指針,然后執(zhí)行它。

在寫入共享部分時,惡意軟件有兩種選擇。它既可以創(chuàng)建共享空間,也可以將其映射到自身和另一個進程(例如explorer.exe),也可以只打開已存在的共享空間。除了一些其他API調(diào)用之外,前者還有分配堆空間和調(diào)用NTMapViewOfSection的開銷,因此后一種方法更常用。在惡意軟件將其shellcode寫入共享部分后,它使用GetWindowLong和SetWindowLong來訪問和修改“Shell_TrayWnd”的額外窗口內(nèi)存。GetWindowLong是一個API,用于將指定偏移量的32位值檢索到窗口類對象的額外窗口內(nèi)存中,SetWindowLong用于更改指定偏移量的值。這樣一來,惡意軟件可以簡單地更改窗口類中的函數(shù)指針的偏移量,并將其指向?qū)懭牍蚕聿糠值膕hellcode。

與上面提到的大多數(shù)其他技術一樣,惡意軟件需要觸發(fā)它特制的代碼。在先前討論的技術中,惡意軟件通過調(diào)用諸如CreateRemoteThread,QueueUserAPC或SetThreadContext之類的API來實現(xiàn)此目的。使用此方法,惡意軟件會通過調(diào)用SendNotifyMessage來觸發(fā)注入的代碼。執(zhí)行SendNotifyMessage后,Shell_TrayWnd接收控制并將控制轉(zhuǎn)移到之前由SetWindowLong設置的值指向的地址。在圖9中,名為PowerLoader的惡意軟件使用此技術。

EWMI

九、SHIMS注入

Microsoft向開發(fā)人員提供SHIMS主要是為了向后兼容。SHIMS允許開發(fā)人員將修補程序應用于他們的程序,而無需重寫代碼。通過利用SHIMS,開發(fā)人員可以告訴操作系統(tǒng)如何處理應用程序。SHIMS本質(zhì)上是一種掛鉤API并定位特定可執(zhí)行文件的方法。惡意軟件可以利用SHIMS來定位持久性和注入的可執(zhí)行文件。Windows在加載二進制文件時運行Shim Engine以檢查SHIMS數(shù)據(jù)庫以應用適當?shù)男迯统绦颉?/p>

現(xiàn)在有許多方法應用修復程序,但惡意軟件的最愛是與安全相關的(例如,DisableNX,DisableSEH,InjectDLL等)。要安裝填充數(shù)據(jù)庫,惡意軟件可以部署各種方法。例如,一種常見的方法是簡單地執(zhí)行sdbinst.exe,并將其指向惡意sdb文件。在圖10中,廣告軟件“按導管搜索保護”使用墊片進行持久性和注入。它在Google Chrome中執(zhí)行“InjectDLL”填充程序以加載vc32loader.dll。有一些用于分析sdb文件的現(xiàn)有工具,但是為了分析下面列出的sdb,我使用了python-sdb。

SHIMS注入

十、IAT HOOKING和INLINE HOOKING (或者叫應用層ROOTKITS)

IAT hooking和inline hooking通常稱為userland rootkit。IAT hooking是惡意軟件用于更改導入地址表的技術。當合法應用程序調(diào)用位于DLL中的API時,其會執(zhí)行替換的函數(shù),而不是原始函數(shù)。相反,使用inline hooking,惡意軟件則會修改API函數(shù)本身。在圖11中,惡意軟件FinFisher通過修改CreateWindowEx指向的位置來執(zhí)行IAT hooking。

ROOTKITS

總結(jié)

在這篇文章中,我介紹了惡意軟件用于在另一個進程中隱藏其活動的十種不同技術。通常,惡意軟件會直接將其shellcode注入另一個進程,或者強制另一個進程加載其惡意庫。在表1中,我對各種技術進行了分類,并提供了樣本作為閱讀本文所涵蓋的每種注入技術的參考。

注入技術的參考

 

責任編輯:武曉燕 來源: Freebuf
相關推薦

2024-01-22 08:15:42

API協(xié)議設計

2022-09-25 23:34:42

算法回歸算法機器學習

2022-10-25 15:55:13

2021-11-23 10:30:35

Android技術代碼

2025-04-07 11:20:00

KubernetesPodPod容器

2020-03-17 12:00:06

人工智能數(shù)據(jù)科學新冠病毒

2021-03-22 09:00:00

IT人工智能技術

2022-07-06 09:00:00

DevOpsIT技術債務

2023-07-25 13:07:59

2023-12-06 09:27:09

人工智能區(qū)塊鏈

2024-03-14 11:12:28

2013-12-13 10:45:26

2025-04-24 08:50:00

軟件架構架構軟件系統(tǒng)

2019-10-08 09:00:00

MySQL數(shù)據(jù)庫

2022-02-21 23:12:21

軟件開發(fā)網(wǎng)絡安全互聯(lián)網(wǎng)

2016-05-30 10:45:17

2024-09-03 10:40:38

2021-03-29 10:56:50

技術資訊

2021-08-26 00:22:57

Java EE技術Web

2013-06-13 09:07:53

網(wǎng)吧網(wǎng)絡協(xié)議ipv6
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级免费看 | 午夜精品久久久久久久星辰影院 | 一区视频在线播放 | 久久精品免费观看 | 欧美日韩国产一区二区三区 | 国产精品美女久久久久久久久久久 | 亚洲一区黄色 | 好姑娘高清在线观看电影 | 新疆少妇videos高潮 | 在线观看国产视频 | 国产精品亚洲精品日韩已方 | 亚洲久草 | www亚洲成人| 91久操视频 | 性国产xxxx乳高跟 | 日韩精品一区二区三区在线播放 | 欧美理伦片在线播放 | 成人免费一区二区三区牛牛 | 婷婷久久综合 | 国产精品免费福利 | 成人欧美一区二区三区黑人孕妇 | 精品久久久久久亚洲综合网 | 黄视频在线网站 | 欧美一级观看 | 成人不卡 | аⅴ资源新版在线天堂 | 99自拍视频 | aaa在线| 日韩成人一区 | 男人的天堂在线视频 | 亚洲3p| 九久久| 午夜精品| 亚洲网站在线播放 | 国产日韩一区二区三免费 | 亚洲国产91| 国产日韩精品在线 | 免费精品久久久久久中文字幕 | 国产成人免费视频网站高清观看视频 | 曰批视频在线观看 | 亚洲精品在线观看视频 |