內存攻擊技術及檢測 - 悅文天下

2020-12-14 悅文天下

本文轉載自【微信公眾號:MicroPest,ID:gh_696c36c5382b】

上一篇介紹了利用熵來檢測Fileless無文件的方式,裡面提到了內存攻擊方式,這裡探討下這個很流行、很廣泛的內存攻擊話題,特選取了老外的這篇《https://www.elastic.co/cn/blog/hunting-memory》關於內存攻擊技術的文章;內存攻擊的內容很多(如棧溢出、SEH鏈等),我們這裡主要是圍繞老外這篇文章裡的提到的進行,其他的不涉及。

《嘶吼公眾號》裡曾翻譯了這篇文章,對照原文,我對其中一些進行了更正以及拓展補充,也算是對這個主題的一個總結吧。

駐留在內存中的惡意軟體利用內存進行攻擊是一種以多種形式出現、已經存在了十多年的攻擊技術;隨著時間的推移,越來越流行,也反映出了基於內存的技術成功地避開了安全產品和從業者檢測的現狀。

一、內存攻擊技術

內存攻擊技術包括:Shellcode注入、反射式DLL注入、內存模塊、進程冷注入(Process Hollowing)、模塊重寫以及 Gargoyle內存掃描逃避技術,共六種。

1、ShellCode注入技術

Shellcode注入是最基本的內存攻擊技術,也是使用時間最長的,一般步驟構成:

1)使用OpenProcess打開目標進程;

2)使用VirtuallocEx在目標進程中分配eXecute-Read-Write (XRW)內存;

3)使用WriteProcessMemory將shellcode有效內容複製到新內存;

4)遠程進程中創建一個新的線程來執行shellcode(CreateRemoteThread);

5)使用VirtualFreeEx在目標進程中解除分配XRW內存;

6)使用CloseHandle關閉目標進程句柄。

總結:當我們試圖在另一個進程中執行代碼時,會使用VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread這條鏈。

臭名昭著的遠程控制木馬Poison Ivy使用就是這種技術,這是多年來其吸引很多APT攻擊組織的一個重要原因。

如果你使用x64dbg提取Poison Ivy樣本並在VirtualAllocEx上設置斷點,你將能很快找到負責注射的代碼塊。

在上圖中,調用VirtuallocEx之前的push 40指令對應PAGE_Execute_ReadWrite的頁面訪問保護值參數;

在下面這張由ProcessHacker截取的Poison Ivy植入的內存布局的截圖中,你可以看到它分配了許多這樣的 RWX 部分。

典型的代碼段類型為「Image」,映射到磁碟上的文件。但是,它們是「Private」類型,並不會映射到磁碟上的文件。因此,它們被稱為未回調的可執行部分或浮動代碼。從這些類型的內存區域開始的線程是異常的,是惡意活動攻擊的預兆。

ProcessHacker還可以顯示惡意軟體線程的調用堆棧,堆棧中有多個函數不映射到已加載模塊關聯的內存。

2、反射式DLL注入

由Steven less開發的反射式DLL注入是另一種內存攻擊技術。Metasploit的Meterperter有效載荷是最早嘗試將該技術完全武器化的嘗試之一,現在許多惡意軟體家族都在使用它。

反射式DLL注入的工作原理是創建一個DLL,在執行時將自身映射到內存中,而依賴於Windows的加載程序。注入過程與shellcode注入相同,只是shellcode被自映射DLL替代。添加到DLL中的自映射組件負責解析導入地址、修復重定位和調用DllMain函數。攻擊者可以使用c/c++等高級語言而不是彙編語言編寫代碼。

經典的反射式DLL注入,如Meterpreter使用的,很容易被搜索者找到。它會在進程中留下大量的RWX內存段,即使在關閉meterpreter會話時也是如此。這些未回調的可執行內存部分的開始包含完整的MZ/PE頭,如下所示。但是,其他反射式DLL可以擦除頭並修復內存洩漏。

加載在內存中的dll還可以方便地導出一個稱為ReflectiveLoader()的自描述函數。

3、內存模塊

內存模塊是另一種內存駐留攻擊技術,它類似於反射式DLL注入,注射器或加載器負責將目標DLL映射到內存而不是DLL映射本身。本質上,內存模塊加載器重新實現了LoadLibrary函數,但它在內存中的緩衝區而不是磁碟上的文件中起作用。最初的設計是為了在當前進程中進行映射,但可以將模塊映射到遠程進程。大多數攻擊的實現都會使用目標DLL的部分權限,並避免使用痕跡太重的RWX方法。

NetTraveler是一個使用內存模塊駐留技術的惡意軟體家族。它啟動時,會解包核心功能並將其映射到內存中,頁面權限更接近於合法的DLL,但內存區域仍然是私有的,而不是映射過來的。

活動線程在這些私有區域有起始地址,調用堆棧還顯示了這些惡意部分。

Winnti是另一個使用內存模塊技術的惡意軟體家族,如下所示,它們會在第一頁的部分權限上有一個小部分內存模塊。

然而,Winnti 示例顯然更加先進一些,因為DLL中的MZ/PE頭被擦除,使得檢測更加困難。

4、進程冷注入

Process Hollowing是現代惡意軟體常用的一種進程創建技術,雖然在使用任務管理器之類的工具查看時,這些進程看起來是合法的,但是該進程的代碼實際上已被惡意內容所替代。

它涉及到創建一個掛起的進程,從進程中取消原始可執行文件的映射(冷注入),為進程分配和寫入一個新的有效載荷,使用SetThreadContext將原始線程的執行重定向到新的有效載荷,最後調用ResumeThread來完成;而更隱蔽的變體使用Create/Map部分API來避免WriteProcessMemory。寫入代碼後,必須知道進程新的入口點在哪裡,新的Process Hollowing攻擊會採用跳轉來修改、而不是使用SetThreadContext來修改入口點。

DarkComet是使用Process Hollowing技術的惡意軟體家族之一。它可以同時使用幾種工具來檢測Process Hollowing,它的惡意活動會用CREATE_SUSPENDED標誌攻擊過程的產生,如下示:

5、模塊重寫

到目前為止,討論的所有技術都能導致執行非映像支持的代碼,因此可以直接對這些代碼進行檢測;而模塊重寫技術避開了這些,使其更難以被檢測。該種技術包括將未使用的模塊映射到目標進程,然後用自己的有效載荷重寫模塊;Flame病毒是第一個被大規模利用此種技術的惡意軟體家族。

6、Gargoyle內存掃描逃避技術

Gargoyle內存掃描逃避技術是一個將一個程序的所有可執行代碼都隱藏在不可執行的內存塊中的Poc技術,它可以通過只讀頁面保護休眠來躲過許多安全產品的檢測;然後使用異步過程調用、周期性地喚醒,並執行ROP 鏈,在跳轉到它之前將有效載荷標記為可執行;在有效載荷執行完畢後,Gargoyle再次隱藏其頁面權限並繼續休眠。

檢測這種攻擊技術的一種方法是檢查線程和用戶APC,以獲取ROP鏈(導向編程技術Return-Oriented Programming,簡單的說就是把原來已經存在的代碼塊拼接起來,拼接的方式是通過一個預先準備好的特殊的返回棧,裡面包含了各條指令結束後下一條指令的地址)的證據。

多說下這個:

對上面這幅圖:首先說明,該技術只適用32位Windows。該技術理解起來不難,主要利用了函數棧的特性(只適用32位Windows的原因),該技術的核心就是在要執行代碼之前,修改代碼段的權限,執行完畢後,再次修改代碼段的權限。這樣就偽造了一種代碼所在段為不可執行的假象。

這個技術實在有意思,我們後續將探討下。

二、內存檢測技術

安全人員現在對基於內存的攻擊技術已經保持有高度警惕了,但現狀是目前大多數安全產品還無法大規模地對這種技術進行檢測。

為此,有安全公司實現了可以廣泛進行檢測的方法,即在其PowerShell工具Get-InjectedThread上實現了一種相對較低幹擾的內存威脅檢測方法。該方法可以掃描系統上的活動線程可疑的起始地址。用戶可以利用它掃描其網絡中的主機,並快速識別許多內存常駐惡意軟體技術。該腳本通過使用NtQueryInformationThread函數查詢每個活動線程來檢索其起始地址。然後,使用VirtualQueryEx函數查詢起始地址,以確定相關的節點屬性。如果線程啟動的存儲器區域是未回調的並且是可執行的,即不是映像類型並且具有執行位設置,那麼該線程就被認為是注入的。

下圖就顯示了在系統上運行時的樣本檢測結果。

可以看出,這是ProcessId為2812的進程注入到RealNetwork.exe這個程序中,基地址位於BaseAddress處,內存頁的屬性為PAGE_EXECUTE_READWRITE。

該腳本將捕獲各種惡意軟體家族利用shellcode注入,反射式DLL,內存模塊和一些Process Hollowing技術。但是,它不能替代全面防止內存攻擊的安全產品,如EndGame。

Get-InjectedThread這個挺有意思,我們後面給大家介紹下這個工具。

相關焦點

  • 安芯網盾:基於內存保護技術的主動防禦體系建設
    儘管企業和機構都部署了大量的安全防護產品,攻擊者仍然能夠輕而易舉的突破層層防線,複雜的網絡攻擊在不斷增加,現有的檢測防禦方案失效,成為企業在安全能力建設中的痛點。基於內存的攻擊難以防禦的四大原因:原因一:通過籤名技術無法識別基於內存的攻擊。基於籤名技術的大多數方法基於特徵匹配模式,無法識別基於內存的攻擊。
  • 內存檢測方法
    針對常見的DDR內存故障進行了嚴格的檢測處理,下圖描述了該檢測處理過程的三個步驟:檢測數據線、地址線和DDR物理存儲部件,主要涉及這三個步驟的處理過程和方法
  • 淺談APT攻擊的檢測與防禦
    傳統的網絡攻擊一般會選擇相對容易的攻擊目標,而APT攻擊在選定攻擊目標後,一般不會改變,整個攻擊過程都經過攻擊者的精心策劃,攻擊一旦發起,攻擊者會針對目標網絡嘗試不同的攻擊技術、攻擊手段,不達目的絕不罷休。
  • 異能文!人造人女主穿越成女皇,從此後宮一統禍亂天下不意悅乎!
    異能文!人造人女主穿越成女皇,從此後宮一統禍亂天下不意悅乎!歡迎來到秀仙小說圈,小說有很多的種類,近年來,小說越來越受青睞,很多的小說都改編成了電視劇,被大眾熟知,但是還是有很多的小說讀者們都沒有接觸和了解過,小編會在這裡給大家推薦一些優秀的作品,跟小編一起來看看今天的小說吧!異能文!
  • FireEye遭APT攻擊?!針對企業的APT攻擊是如何發生的?
    本周二,全球領先的APT防禦企業FireEye透露其系統遭到APT攻擊。作為最早提出APT-1報告的安全廠商,FireEye多次通過報告的形式,針對地區網絡發展、國家網絡戰略、新型APT組織等發聲。該公司表示,黑客利用「新穎技術」竊取了滲透測試工具包,而這可能會在全球範圍內引發新的攻擊。
  • 內存安全周報|未雨綢繆 以守為攻
    上周,我們推出了安全周報,主要聚焦在高級威脅或者新型攻擊方面。當前的網絡攻擊趨勢,掌握著更多資源的組織、團體試圖通過網絡攻擊來謀取利益,涉及的領域越來越多,網絡攻擊技術也越來越複雜和精細,攻擊工具的針對性越來越強,對攻擊技術的隱蔽性、可靠性要求也越來越高,網絡攻防對抗越來越激烈。
  • 揭密無文件勒索病毒攻擊,思考網絡安全新威脅
    最近幾年基於無文件攻擊的網絡犯罪活動越來越多,一些網絡犯罪團夥開發了各種基於無文件攻擊的惡意軟體攻擊套件,這些惡意軟體攻擊套件可用于勒索病毒、挖礦病毒、RAT遠控、殭屍網絡等惡意軟體,在過去的幾年時間裡,無文件感染技術已經成為了終端安全新威脅,同時無文件技術也被廣泛應用於各類APT攻擊活動。
  • 【開源工具】推薦一款Linux下內存檢測工具:valgrind
    今天介紹一款Linux系統下內存檢測工具---valgrind,它一款非常好用的開源內存管理框架。valgrind其實是一個工具集,內存錯誤檢測只是它其中一個功能,但也是我們用的最多的功能。我們定義了一個指針p,但並未初始化就使用了,這種情況下valgrind檢測出我們程序使用了未初始化的變量,但並未檢測出內存洩漏(這裡其實還有內存洩露的bug,分配的p未釋放)。
  • iOS內存洩漏的檢測及定位工具-Instruments
    ,後來經過和開發小哥哥溝通,分析得知可能是內存洩漏,於是利用Instruments工具進行檢測發現果然存在內存洩漏,並成功定位到內存洩漏的代碼所在,問題完美解決。上述內存洩漏問題的定位和完美解決離不開一個工具Instruments,測試遇到的內存問題中最常見就是內存洩漏,在此小編介紹一個內存洩漏檢測工具- Instruments之Leaks,使用它可以檢測程序是否存在內存洩露,並定位到內存洩露的代碼。
  • 技術分享小札第三彈 Profiler內存查看Navmesh動態加載...
    【技術小札】是UWA推出的技術交流欄目,我們會將開發團隊中反饋的常見問題加以總結並梳理在此,以供大家參考。
  • RAMBleed 擴展位翻轉攻擊領域,成功獲取 OpenSSH 2048 位密鑰
    幾名安全研究人員發表了一篇論文,介紹了一種基於位翻轉漏洞 Rowhammer,並且將其威脅從內存完整性缺失擴展到內存信息洩露領域的技術
  • 資本追捧5分鐘籤下4000萬元TS 內存安全已成風口?
    內存安全問題是近年來各類系統和應用所面臨的最大攻擊來源,攻擊者已經能夠利用漏洞更改或者繞過安全規則,直接攻擊業務伺服器或資料庫伺服器。也就在安芯網盾創辦的這一年,因為內存安全問題,世界範圍內產生的損失已高達1.75萬億美元,「高級網絡威脅」的攻擊數量比2018年提高了4倍,這種「高級網絡威脅」給企業造成的單次損失就在500萬元以上。
  • 一文讀懂內存資料庫
    實際上,阿里雲推出的雲原生內存資料庫Tair,源自阿里巴巴集團重點打造的自研Key-Value資料庫,這是一個完全兼容Redis協議的內存資料庫。2004年,淘寶開始應用緩存技術。從服務淘寶詳情和驗證碼等業務的持久化系統TBStore,到初始服務於淘寶用戶中心的TDBM等,後端系統緩存技術經歷了多個系統與階段的演變,以及經驗的積累。到2009年,這些系統、技術經驗經過進一步的研發創新,融合成了Tair。2009年4月,作為一款真正的企業級雲內存資料庫產品,Tair正式誕生。
  • Meltdown與Spectre攻擊深入解析
    地球上有沒有一種安全漏洞,廣泛存在於各種計算設備之中,並且難以被檢測,難以被修復?在2018年的第一個月裡,Meltdown 與 Spectre 兩大處理器安全漏洞給出了這個問題的部分答案。
  • 入侵檢測系統(IDS)的弱點和局限(3)
    1.3.1.2 IP碎片攻擊      攻擊者向被保護網絡發送大量的IP碎片(例如TARGA3攻擊),超過NIDS能同時進行的IP碎片重組能力,從而導致通過IP分片技術進行的攻擊漏報。      1.3.1.4 Alert Flooding       攻擊者可以參照網絡上公布的檢測規則,在攻擊的同時故意發送大量的將會引起NIDS報警的數據(例如stick攻擊),將可能超過NIDS發送報警的速度,從而產生漏報,並且使網管收到大量的報警,難以分辨出真正的攻擊。
  • 實例講解基於Volatility的內存分析技術Part 1
    信息安全專業人員可以通過內存取證,來調查和識別那些不會在硬碟驅動器數據中留下痕跡的攻擊或惡意行為。通過內存取證,安全人員可以了解運行時的各種系統活動,例如開放的網絡連接或最近執行的命令和進程等。程序在計算機上運行之前,首先需要被加載到內存中,這使得內存取證變得非常重要——這意味著所有被創建、檢查或刪除的程序或數據都將被保存到RAM中。
  • 電腦硬體檢測圖文教程,CPU內存顯卡硬碟拷機跑分,圖吧工具箱
    以前我發布過不少文章和視頻介紹硬體檢測拷機跑分的內容,包括CPU內存顯卡等等,今天再給大家介紹一款軟體,它集成了很多個硬體相關的軟體,不用每個單獨下載了,可以方便的電腦檢測跑分拷機,名字在圖片上,大家網上下載一下就行。
  • 微軟開發分析引擎Freta,掃描內存快照揪出VM惡意程序
    虛擬機鑑識普及化可以將雲計算惡意軟體的開發成本,提高至理論的最高值,微軟表示,由於在信息安全的領域,是以證據來驅動防禦方法,但這造成了倖存者偏誤現象,當攻擊者摸透安全偵測器模型,並且設計出避開觸發偵測器的方法時,系統便不會發出攻擊警報,而人們也會因為沒有攻擊報告,誤以為系統是安全的。
  • 一鍵搞定所有內存 華碩主板MemOK!技術解析
    而在諸多系統故障中與內存相關的問題更是常見,此時只要你的主板上板載MemOK!(內存救援)按鈕即可一鍵輕鬆解決任何內存問題。(內存救援)功能  今日為大家介紹的MemOK!(內存救援)功能是華碩獨家開發並應用在主板上的創新技術。當用戶在使用電腦過程中遇到因內存問題而導致無法正常開機的情況,不需要再像以前一樣將主板上的硬體全部一個個拔起、再安裝,逐個排除,才能找到問題是出在內存身上,MemOK!(內存救援)功能可有效解決內存帶來的一切問題,為用戶節省大量檢測故障的時間,提高工作效率。
  • 體驗黑科技:悅刻阿爾法RELX α「萃釋技術」打造行業新標杆
    我們從技術角度一起來拆解式體驗一下:為綜合提高用戶在滿足感、口味、品質方面的體驗,RELX 悅刻品牌螺螄殼裡做道場,將自主研發的「萃釋技術」應用到這款新品電子菸中,據說萃釋技術是目前整個電子菸行業中最佳的解決方案。什麼是萃釋技術呢?