本文將介紹一些基于內存的攻擊中最常見的技術,并尋求一種低干擾方法來檢測隱藏在內存中的攻擊。
內存攻擊技術
內存攻擊常見的技術包括shellcode注入,反射式DLL注入,內存模塊,Process Hollowing,重寫模塊以及Gargoyle(ROP / APC)。
ShellCode注入技術
Shellcode注入是最基本的內存攻擊技術,也是使用時間最長的。 shellcode注入的基本方法是包含四個步驟:
1.打開目標進程(OpenProcess);
2.在進程中分配一大塊內存(VirtualAllocEx);
3.將shellcode有效內容寫入新分配的部分(WriteProcessMemory);
4.在遠程進程中創建一個新的線程來執行shellcode(CreateRemoteThread);
臭名昭著的遠程控制木馬Poison Ivy使用就是這種技術,這是多年來其吸引很多APT攻擊組織的一個重要原因。
如果你使用x64dbg提取Poison Ivy樣本并在VirtualAllocEx上設置斷點,你將能很快找到負責注射的代碼塊。
如上圖所示,調用VirtualAllocEx之前的push 40指令對應于PAGE_EXECUTE_READWRITE的頁面訪問保護值。在ProcessHacker下面的一個Poison Ivy植入的內存布局的截圖中,你可以看到它分配了以下這些RWX部分。
典型的代碼部分類型為“Image”,并映射到磁盤上的文件。不過,由于有些類型不會映射到磁盤上的文件。因此,它們被稱為未回調的可執行部分或浮動代碼。從這些類型的內存區域開始的線程是異常的,是惡意活動進行攻擊的預兆。 ProcessHacker還可以顯示惡意軟件線程的調用堆棧,調用堆棧中會有多個函數不映射到與加載的模塊相關聯的內存。
反射DLL注入
由Steven Fewer開發的反射式DLL注入是另一種內存攻擊技術。 Metasploit的Meterperter有效載荷是第一次完全把這種技術工具化的嘗試,截至目前,仍有許多惡意軟件家族在使用Meterperter有效載荷。反射式DLL注入通過創建一個DLL,在執行攻擊時會將自身映射到內存中,而不依賴于Window的加載器。除了shellcode被替換為自映射DLL,注入過程與shellcode注入是一樣的。添加到DLL的自映射組件負責解析導入地址,修復重定位以及調
用DllMain函數。攻擊者可以從C / C ++而不是匯編語言編寫更高級別的語言。
經典反射式DLL注入,如Meterpreter所使用的,很容易被檢測到。因為這個過程中留下了大量的RWX內存部分,即使是關閉會話進程。這些未回執的可執行存儲器部分的開頭包含完整的MZ / PE標題,如下圖所示。但是,其他反射式DLL實現可以刪除標題并修復內存泄漏。
加載在內存中的DLL也方便地導出一個名為ReflectiveLoader()的自描述函數。
內存模塊
內存模塊是另一種內存駐留攻擊技術,它類似于反射式DLL注入,注射器或加載器負責將目標DLL映射到內存而不是DLL映射本身。本質上,內存模塊加載器重新實現了LoadLibrary函數,但它在內存中的緩沖區而不是磁盤上的文件中起作用。最初的設計是為了在當前流程中進行映射,但升級后的技術可以將模塊映射到遠程進程。大多數攻擊的實現都會使用目標DLL的部分權限,并避免使用痕跡太重的RWX方法。
NetTraveler是一個使用內存模式攻擊技術的惡意軟件家族。NetTraveler在啟動時,它解包核心功能并將其映射到內存中。頁面權限更接近于合法的DLL,但是內存區域仍然是私有的,而不是映像過來的。
活動線程在這些私有區域有起始地址,調用堆棧還顯示了這些惡意部分。
Winnti是使用內存模塊技術的另一個惡意軟件家族,如下所示,它們會在第一頁的部分權限上有一小部分內存模塊。
然而,Winnti的示例顯然更加先進一些,因為DLL中的MZ / PE頭被擦除,使其更難以檢測。
Process Hollowing
Process Hollowing是現代惡意軟件常用的一種進程創建技術,雖然在使用任務管理器之類的工具查看時,這些進程看起來是合法的,但是該進程的代碼實際上已被惡意內容所替代。
它涉及創建一個暫停的進程,從進程中取消映射的原始可執行文件,為進程分配和寫入一個新的有效載荷,使用SetThreadContext將原始線程的執行重定向到新的有效載荷,最后調用ResumeThread來完成。而更加隱蔽的變體會使用創建/映射部分API來避免WriteProcessMemory。寫入代碼后,必須知道進程新的入口點在哪里,新的Process Hollowing攻擊都會采用跳轉來修改入口點,而不是使用SetThreadContext。
DarkComet是使用Process Hollowing的許多惡意軟件家族之一,它可以同時使用幾種工具來檢測Process Hollowing,它的惡意活動會用CREATE_SUSPENDED標志攻擊過程的發生,如以下所示的DarkComet樣本。
重寫模塊
到目前為止,所有討論的技術都能導致執行非映像支持的代碼,因此可以直接對這些代碼進行檢測。而重寫模塊技術則避開了這些,使其更難以被檢測。該技術包括將未使用的模塊映射到目標進程,然后用自己的有效載荷重寫模塊,Flame病毒是第一個大規模利用此技術的惡意軟件家族。最近,Careto和Odinaff惡意軟件家族也使用了重寫模塊技術??梢允褂酶鞣N技術來檢測重寫模塊的使用,主要利用的是將存儲器與磁盤上的相關數據進行比較。
GARGOYLE
gargoyle是一個將一個程序的所有可執行代碼都隱藏在不可執行的內存塊中的技術。在一些程序員定義區間內,gargoyle會活躍起來,結合一些ROP欺騙,把自己標記為可執行并實施攻擊。
在掃描內存來尋找異常時,通常會掃描可執行的內存塊,gargoyle可以在Windows上實現將數據隱藏在不可執行的內存塊中。
檢測這種攻擊者技術的一種方法是檢查線程和用戶APC,以獲取ROP鏈的證據。
如何檢測內存中的攻擊
鑒于這些技術的廣泛應用,安全人員必須對基于內存的攻擊技術保持高度警惕。然而,目前大多數安全產品還無法大規模地對這種技術進行檢測,從而使其肆意橫行。
為此,有安全公司實現了可以廣泛進行檢測的方法,即在其PowerShell工具Get-InjectedThreads上實現了一種相對較低干擾的內存威脅檢測方法。該方法可以掃描系統上的活動線程可疑的起始地址。用戶可以利用它掃描其網絡中的主機,并快速識別許多內存常駐惡意軟件技術。該腳本通過使用NtQueryInformationThread函數查詢每個活動線程來檢索其起始地址。然后,使用VirtualQueryEx函數查詢起始地址,以確定相關的節點屬性。如果線程啟動的存儲器區域是未回調的并且是可執行的,即不是映像類型并且具有執行位設置,那么該線程就被認為是注入的。下圖就顯示了在感染9002 RAT樣本的系統上運行時的樣本檢測。
該腳本將捕獲各種惡意軟件家族利用shellcode注入,反射DLL,內存模塊和一些Process Hollowing技術。但是,它不能替代全面防止內存攻擊的安全產品,如EndGame?! ?/p> 人妻精品一区二区三区_好紧好湿好硬国产在线视频_亚洲精品无码mv在线观看_国内激情精品久久久
責任編輯:韓希宇
免責聲明:
中國電子銀行網發布的專欄、投稿以及征文相關文章,其文字、圖片、視頻均來源于作者投稿或轉載自相關作品方;如涉及未經許可使用作品的問題,請您優先聯系我們(聯系郵箱:cebnet@cfca.com.cn,電話:400-880-9888),我們會第一時間核實,謝謝配合。