日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[译] APT分析报告:08.漏洞利用图谱–通过查找作者的指纹来寻找漏洞

發布時間:2024/6/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [译] APT分析报告:08.漏洞利用图谱–通过查找作者的指纹来寻找漏洞 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是作者新開的一個專欄,主要翻譯國外知名安全廠商的APT報告,了解它們的安全技術,學習它們溯源APT組織和惡意代碼分析的方法,希望對您有所幫助。當然,由于作者英語有限,會借助機翻進行校驗,還請包涵!前文分享了APT組織拉撒路(Lazarus)使用的兩款惡意軟件——后滲透工具和BLINDINGCAN。這篇文章將詳細講解checkpoint公司提出的一個新技術,即漏洞利用圖譜,通過查找作者的指紋來尋找利用漏洞,文章內容非常值得我們學習,尤其搞科研研究的讀者。

  • 原文標題:《Graphology of an Exploit – Hunting for exploits by looking for the author’s fingerprints》
  • 原文鏈接:https://research.checkpoint.com/2020/graphology-of-an-exploit-volodya/
  • 文章作者:伊泰·科金(Iyal Itkin)、伊泰·科恩(Itay Cohen)
  • 發布時間:2020年10月2日
  • 文章來源:research.checkpoint.com

文章目錄

  • 一.背景
  • 二.漏洞利用集成
  • 三.指紋漏洞利用開發者
  • 四.我們行動者的漏洞利用
    • CVE-2015-2546
    • CVE-2016-0040
    • CVE-2016-0167
    • CVE-2016-0165*
    • CVE-2016-7255
    • CVE-2017-0001
    • CVE-2017-0263
    • CVE-2018-8641*
    • CVE-2019-0859
    • CVE-2019-1132*
    • CVE-2019-1458
  • 五.作者指紋
    • PlayBit(又名luxor2008)
    • bool elevate(int target_pid)
    • Sleep(200)
    • 操作系統指紋
    • 內核地址泄漏
    • Token Swap
  • 六.客戶分析
  • 七.結論
  • 附錄-IOC表


在過去的幾個月中,我們的漏洞和惡意軟件研究團隊共同努力,專注于惡意軟件內部的漏洞利用研究,尤其是漏洞利用者本身。從一個事件響應案例開始,我們構建了Windows最活躍的漏洞利用開發人員之一的檔案,稱為 Volodya 或 BuggiCorp。到目前為止,我們設法跟蹤了他們Windows內核本地特權升級(LPE)漏洞中的10多個(!),其中許多漏洞為0-day漏洞。

一.背景

正如所有有趣故事一樣,我們的故事始于一個應急響應案例。在分析針對我們客戶的一個復雜攻擊時,我們注意到該惡意軟件執行了一個很小的64位可執行文件。該樣本包含了一些不尋常的調試字符串,這些調試字符串指向試圖利用受害者計算機上的漏洞。更重要的是,該示例有一個遺留的PDB路徑,并指向了該二進制目標文件:

  • …\cve-2019-0859\x64\Release\CmdTest.pdb

由于 CVE-2019-0859 實現時沒有任何在線資源,我們意識到我們看到的不是一個公開可用的PoC,而是一個真實的開發工具。這激發了我們深入挖掘的興趣。

對漏洞進行逆向工程非常直接。二進制文件很小,并且調試消息在那里指導我們。它利用了 CreateWindowsEx 中的一個UAF漏洞來獲取父進程的更高特權。我們很快發現了一個有趣的現象:

  • 似乎這個漏洞和惡意軟件本身并不是由同一個人編寫的,其代碼質量、缺乏混淆、PDB和時間戳都表明了這個結論。

圖1:CreateWindowEx調用,如Cutter所示。

CVE-2019-0859: Microsoft Win32k特權提升漏洞
CVE-2019-0859是CreateWindowEx函數中提供的Use-After-Free漏洞。當Win32k組件無法正確處理內存中的對象時,Windows中存在一個特權提升漏洞。成功利用此漏洞的攻擊者可以在內核模式下運行任意代碼,然后攻擊者可以安裝程序,查看、更改或刪除數據,或創建具有完全用戶權限的新帳戶。

  • https://securelist.com/new-win32k-zero-day-cve-2019-0859/90435/

二.漏洞利用集成

我們傾向于將特定惡意軟件家族背后的人們視為一個完整的單元。設想每一個組件都是由一個人、團隊或小組編寫而成。事實是,編寫一個高級惡意軟件,無論是國家還是APT組織,都需要不同技能的不同人群。一個國家的網絡攻擊組織,很可能在不同的組織和分支中有數百甚至數千名員工。組織中的每個工人都有一個特定的角色,并通過特殊的技術培訓和多年的專業知識進行調整。在這樣的組織中,編寫公共組件的工作量被分解到專門的團隊中,不同的團隊將負責初始訪問、收集敏感數據、橫向移動等等模塊。

一個運營實體的目標是在它的惡意軟件中嵌入一個漏洞利用模塊(exploit),不能只依賴惡意軟件開發人員。發現漏洞并可靠地利用漏洞,很可能是由專門從事特定角色的特定團隊或個人來完成的。對于惡意軟件開發人員來說,他們并不真正關心其幕后是如何工作的,他們只是想集成這個模塊并完成它。

為了實現這種勞動分工,兩個團隊需要就一些API達成共識,這些API將成為不同組件之間的橋梁。這種集成API并不是國家參與者所獨有的,而是漏洞利用“自由市場”中很常見的功能。無論是在地下論壇、漏洞利用經紀人,還是網絡攻擊組織,他們都會向客戶提供如何將利用漏洞利用程序集成到惡意軟件中的指導手冊。

從本質上講,這個集成點是我們研究的重點。假設利用漏洞的作者獨立工作,并且只將他們的代碼/二進制模塊分發給惡意軟件作者,我們決定對他們進行更改。通過分析嵌入在惡意軟件樣本中的漏洞利用程序,我們可以了解有關漏洞利用程序作者的更多信息,希望通過研究他們的編碼習慣以及將其產品分發給編寫惡意軟件的同行時留下的其他線索來區分他們的身份。

作者簡單總結下:在大型網絡攻擊活動或APT組織中,由于需要不同團隊協作來完成攻擊事件,因此各個團隊間需要調用API來搭建橋梁,比如實現初始訪問、數據收集、橫向移動等功能,最終構建惡意程序,并且會提供相應的集成手冊。基于此,會造成他們的編程習慣、漏洞利用細節信息不同,這篇文章將通過收集漏洞利用的線索來區分他們的身份。


三.指紋漏洞利用開發者

本文不是專注于一個完整的惡意軟件溯源和尋找新樣本的惡意軟件家族或參與者,而是想提供另一種觀點,并決定專注于漏洞利用開發人員編寫的這幾個功能。從事件響應案例中獲得這個小的64位二進制文件看起來是個不錯的開始。

該二進制文件除了利用 CVE-2019-0859 之外什么也沒做,并且它不基于開源的源代碼或POC。由于可執行文件是由漏洞利用作者(攻擊者)以外的其他人編寫而成,因此它非常適合指紋識別。此外,可執行文件與惡意軟件的主要二進制文件是分離的(一個臭名昭著的犯罪軟件),這讓我們相信這個漏洞不是由惡意軟件開發人員內部開發的。帶著這個希望,我們開始尋找同一作者編寫的更多的exploit。

我們首先從已經擁有的二進制文件中收集簡單的信息(Checkpoint):

  • 字符串
  • 內部文件名
  • 時間戳
  • PDB路徑

第一個結果立即出現了——一個與64位示例完全匹配的32位可執行文件。具體來說,正如它們的時間戳和嵌入式PDB路徑所顯示的那樣,它們是在同一時間從相同的源代碼中一起編譯的。現在我們有了這兩個樣本,我們就能得出要尋找的東西。

為了對這個漏洞的作者進行指紋識別,我們將目光投向了以下方面:

  • 二進制文件中的獨特工件
    – 硬編碼值(加密常量,“垃圾”值,例如0x11223344)
    – 數據表(通常是特定于版本的配置)
    – 字符串(GDI對象名稱:“ MyWindow”、“ MyClass_56”、“ findme1”等)
    – PDB路徑
  • 代碼段
    – (1) 獨特的功能實現
    a.系統調用包裝器(syscall)
    b.內聯匯編
    c.專有加密函數/實現
    – (2) 技術和習慣
    a.首選的泄漏技術(HMValidateHandle、gSharedInfo等)
    b.首選的提升技術(如何執行token替換?)
    c.堆溢出技術(使用AcceleratorTables?Windows?Bitmaps?)
    – (3) 構架
    a.漏洞利用流程(The flow of the exploits)
    – 選項1:幾乎沒有分支的主要漏洞利用流程
    – 選項2:針對不同版本操作系統的多個扭曲和旋鈕
    b.代碼和函數的結構
    – 模塊化:功能分離
    – 結構:分離以清除階段(初始化、配置、噴涂、令牌交換等)
    – 全局變量:哪些信息存儲在全局變量中?(操作系統版本?枚舉操作系統版本?特定字段偏移量?)
    c.特定于版本的配置
    – 字段偏移量:哪些字段特別重要?
    – 首選系統調用:系統調用的首選集合
    d.提供給客戶的API

圖2:尋找的與利用漏洞相關的工件集。

對應原文:

帶著這些屬性,回到我們擁有的兩個樣本,并標記了一些我們認為獨特的工件。即使只有兩個小的二進制文件(本質上是相同的),我們仍然能夠創建搜尋規則來查找該開發人員編寫的更多示例。令我們驚訝的是,我們能夠找到比想象中更多的東西。

一個接一個的出現了幾十個樣本,隨著每一個樣本的出現,我們改進了搜尋規則和方法。通過對樣本的仔細分析,我們能夠了解哪些樣本利用了哪個CVE,并以此為基礎創建了一個時間表,以了解該漏洞是在暴露之前的0-day漏洞,還是基于補丁擴散和類似技術實現的1-day漏洞。

到目前為止,僅基于我們的指紋識別技術且沒有進一步的情報信息,我們就可以將10多個CVE歸因于同一個漏洞利用開發人員。后來,公開的報告披露了我們的目標漏洞利用(exploit)銷售者的名稱為——Volodya(又名Volodimir) ,以前稱為BuggiCorp。似乎我們不是唯一跟蹤此漏洞賣家的,卡巴斯基也報道關于他們的一些相關信息。此外,ESET在VB2019關于Buhtrap的演講中還提到了Volodya的一些重要線索。

根據卡巴斯基的說法,Volodya最初以其 “BuggiCorp” 綽??號成為頭條新聞,當時他們在臭名昭著的Exploit [.]網絡犯罪論壇上宣傳了Windows 0-day的待售廣告,起價為9.5萬美元。多年來,價格不斷上漲,他們的一些Windows LPE 0-day漏洞利用軟件的售價高達20萬美元。正如卡巴斯基報告中所發表的,后來得到我們的證實,Volodya將漏洞利用軟件賣給了犯罪軟件和APT團體。我們將在“客戶”一節中詳細討論actor的客戶。


四.我們行動者的漏洞利用

Our actor’s exploits
盡管我們最初的一些狩獵規則需要進行一些微調,但即使是我們得到的即時結果也相當令人驚訝。經過進一步的校準后,我們??找到了許多示例,所有這些示例都是Windows中的本地特權升級(LPE,Local Privilege Escalation)漏洞。從這些樣本中,我們的行動者(actor)能夠確定所利用的CVE列表。

注意:
在對漏洞進行分類時,我們選擇了一種保守的方法來決定一個給定的漏洞是0-day還是1-day。如果其他安全供應商將在野的漏洞歸因于我們的行動者,那么它就是0-day。如果我們發現足夠的證據表明我們的某個樣本的確是利用在外傳播的漏洞,就像供應商在他們的報告中描述的那樣,那么我們也會標記它為0-day。在所有其他情況下,我們將該漏洞標記為1-day,寧愿有較低數量的0-day,而不錯誤計數超過正確的數量。

CVE-2015-2546

  • 分類:1-day
  • 基本描述:在 xxxSendMessage(tagPOPUPMENU) 中釋放后使用(Use-After-Free)
  • 0-day報告供應商:FireEye
  • 在以下惡意軟件樣本中發現:Ursnif,Buhtrap

我們的漏洞利用示例使用了與初始報告中所述不同的內存整形技術:噴射Windows(spraying Windows)而不是加速器表(Accelerator Tables)。此外,我們最早和最基本的攻擊示例包含以下PDB路徑,這表明作者已經知道該漏洞的CVE-ID:

  • C:\…\volodimir_8\c2\ CVE-2015-2546 _VS2012\x64\Release\ CmdTest.pdb

CVE-2016-0040

  • 分類: 1-day
  • 基本描述:WMIDataDevice IOControl 中未初始化的內核指針(Uninitialized kernel pointer)
  • 0-day報告供應商:N/A. 從來沒有在野被當做0-day利用過
  • 在以下惡意軟件樣本中發現:Ursnif

該漏洞利用已用于單個樣本,該樣本還包含前面描述的CVE-2015-2546漏洞。如果目標是Windows 8之前的Windows版本,則選擇此漏洞。否則使用CVE-2015-2546。


CVE-2016-0167

  • 分類: 0-day
  • 基本描述:在 Win32k!xxxMNDestroyHandler 中釋放后使用(Use-After-Free)
  • 0-day報告供應商:FireEye
  • 在以下惡意軟件樣本中發現:PUNCHBUGGY

我們的漏洞利用樣本與在野的漏洞利用技術報告完全吻合。


CVE-2016-0165*

  • 分類: 1-day
  • 基本描述:在 Win32k!xxxMNDestroyHandler 中釋放后使用(Use-After-Free)
  • 0-day報告供應商:Kaspersky ,被卡巴斯基發現,但未公開發布任何報告
  • 在以下惡意軟件樣本中發現:Ursnif

這是一個有趣的案例。我們方案的0-day(CVE-2016-0167)已于2016年4月由Microsoft修補。該補丁也修復了CVE-2016-0165,該漏洞也被廣泛在外使用。為了尋找新的漏洞進行利用,我們的行動可能對微軟的修補程序進行了不同的修補,并發現了一個認為是修補過的0-day漏洞。此漏洞源于之前漏洞 Win32k!xxxMNDestroyHandler 中修補過的函數。

注意,我們從他們針對該漏洞的漏洞樣本中找到多個跡象表明,該漏洞作者或他們的客戶確定他們已出售了一個針對CVE-2016-0165的漏洞。可悲的是,在分析這個漏洞之后,我們確定這個被利用的漏洞是一個不同的漏洞。

圖3:調試字符串顯示CVE-2016-0165的混淆,可以從Cutter中看到。

這種困惑可能是由于微軟發布了一個解決多個漏洞的單一修復,而且它們是唯一一個在每個代碼修復與為其發布的CVE之間有完整映射的補丁。


CVE-2016-7255

  • 分類: 0-day
  • 基本描述:在 NtUserSetWindowLongPtr 中內存損壞(Memory corruption)
  • 0-day報告供應商:Google ,被谷歌發現,通過技術報告趨勢科技(TrendMicro)
  • 在以下惡意軟件樣本中發現:APT28,又叫Fancy Bear或Sednit。后來被使用在 Ursnif,Dreambot,GandCrab,Cerber,Maze 中

我們的漏洞利用樣本完美地與在野漏洞利用技術報告吻合。后來,這個特定的漏洞被不同的勒索軟件參與者廣泛使用。此外,我們還看到了其他針對這個特定漏洞的利用,這些漏洞在1-day期間被賣給了其他勒索軟件參與者。

注意:我們有多個間接證據認為,這個0-day就是那個由BuggiCorp在2016年5月發布到 exploit[.] 著名廣告中提到的漏洞。


CVE-2017-0001

  • 分類: 1-day
  • 基本描述:在 RemoveFontResourceExW 中釋放后使用(Use-After-Free)
  • 0-day報告供應商:N/A. 從來沒有在野被當做0-day利用過
  • 在以下惡意軟件樣本中發現:Turla,歸因于Turla。后來被使用在 Ursnif 中

Turla(FireEye)在操作中當作1-day漏洞使用過。


CVE-2017-0263

  • 分類: 0-day
  • 基本描述:在 win32k!xxxDestroyWindow 中釋放后使用(Use-After-Free)
  • 0-day報告供應商:ESET
  • 在以下惡意軟件樣本中發現:APT28,又叫Fancy Bear或Sednit

我們的漏洞利用樣本與在野的漏洞利用技術報告完全吻合。


CVE-2018-8641*

  • 分類: 1-day
  • 基本描述:在 win32k!xxxTrackPopupMenuEx 重復釋放(Double Free)
  • 0-day報告供應商:N/A. 從來沒有在野被當做0-day利用過
  • 在以下惡意軟件樣本中發現:Magniber

同樣,識別使用過的1-day通常比識別0-day漏洞更難。這一次,我們找不到任何可能暗示參與者認為他們正在利用的漏洞示例。我們發現該漏洞已于2018年12月被微軟修補。在掃描此補丁中解決的漏洞列表后,我們非常確定微軟將此漏洞標記為CVE-2018-8641,但我們無法確認。

2020年6月24日,卡巴斯基在其博客上發表了一份通過大規模漏洞利用工具(the Magnitude exploit kit)分發的漏洞利用攻擊。在他們的博文中,卡巴斯基分析了Magniber使用的LPE漏洞,將其歸因于 Volodya,并預測其可能是CVE-2018-8641。這進一步通過卡巴斯基的獨立結論驗證了我們的初步估計。


CVE-2019-0859

  • 分類: 0-day
  • 基本描述:在 CreateWindowEx 中釋放后使用(Use-After-Free)
  • 0-day報告供應商:Kaspersky
  • 在以下惡意軟件樣本中發現:用作一個獨立的組件被注入或加載,我們無法將其歸因于任何特定的APT/惡意軟件

我們的漏洞利用示例與有關野生漏洞利用的技術報告完全吻合。我們的研究始于在客戶網絡中發現的這種漏洞利用的單個樣本。在我們后來發現的樣本中,我們可以看清這個PDB字符串:

  • X:\tools\ 0day \ 09-08-2018 \x64\Release\RunPS.pdb

該字符串和我們最初示例中的PDB字符串相反。

  • S:\Work\Inject\ cve-2019-0859 \Release\CmdTest.pdb

CVE-2019-1132*

  • 分類: 0-day
  • 基本描述:在 win32k!xxxMNOpenHierarchy(tagPOPUPMENU) 中空指針引用(NULL pointer dereference)
  • 0-day報告供應商:ESET
  • 在以下惡意軟件樣本中發現:歸因于 Buhtrap

我們有多個理由相信這是Volodya的另一個0-day漏洞,因為報告中的多個技術細節匹配他們典型的利用方式。此外,,該漏洞報告其中嵌入了以下PDB路徑:

  • C:\work\ volodimir_65 \…PDB

然而,這是我們列表中唯一尚未找到樣本的漏洞,因此我們不能確定這一漏洞的歸屬。


CVE-2019-1458

  • 分類: 1-day
  • 基本描述:在窗口切換時內存損壞
  • 0-day報告供應商:Kaspersky (初始報告、詳細報告)
  • 在以下惡意軟件樣本中發現:歸因于操作 WizardOpium

我們的漏洞利用和技術報告里的漏洞利用不一致。此外,在他們的詳細報告中,卡巴斯基指出“同樣有趣的是,我們在補丁發布一周后就發現了另一個1-day漏洞,這表明利用這個漏洞非常簡單。”事實上,我們的樣本是在卡巴斯基首次報告后的第6天。


最后,通過下表總結了我們列出的11個漏洞:


五.作者指紋

現在,我們從Volodya那里發現了10多個不同的exploit,我們可以更詳細地審查它們,并熟悉actor的工作習慣。從一開始我們就很清楚,我們的參與者可能有一個簡單的模板,他們可以針對不同的漏洞利用程序進行部署,因為每個漏洞利用程序的功能流程甚至不同功能的順序都在大多數漏洞利用程序之間共享。

在本節中,我們將描述一組關鍵特征,這些特征反映了在創建exploit模板時Volodya所做的不同實現選擇。我們將他們的實現與昵稱為PlayBit的另一個exploit編寫器的實現進行比較。通過這種比較,旨在概述漏洞利用各部分中存在的各種實現選項,從而使每個作者的實現選擇集成為他們思維和工作方式的獨特“簽名”。

PlayBit(又名luxor2008)

使用我們用來搜尋Volodya漏洞的相同技術,我們設法追蹤了PlayBit編寫的5個Windows LPE 1-day漏洞,以及作者多年來銷售的其他工具。我們從REvil勒索軟件使用的CVE-2018-8453樣本開始,并使用PlayBits的獨特指紋來尋找更多漏洞。

我們發現以下Windows LPE漏洞由作者實施為1-day:

  • CVE-2013-3660
  • CVE-2015-0057
  • CVE-2015-1701
  • CVE-2016-7255 – 這是Volodya的0-day
  • CVE-2018-8453

從技術上講,PlayBit還出售了針對CVE-2019-1069(一個SandboxEscaper漏洞)和CVE-2020-0787的兩個漏洞。但是,我們忽略這些漏洞,因為它們不是內存損壞漏洞,而是不同服務中的漏洞,因此具有不同的結構。

注意:關于PlayBit的更深入分析,以及他們開發和銷售的不同漏洞,將在即將發布的博文中發布。


bool elevate(int target_pid)

Volodya的所有exploit樣本中的API總是相同的。無論它是嵌入在一個惡意軟件樣本中,還是一個獨立的POC,該漏洞都有以下簽名的單一API函數:

  • bool elevate(int target_pid)

圖4:調用elevate(target_pid)函數,可以在Cutter中看到。

該漏洞本身并不包括將shellcode注入到另一個進程或任何類似的功能。它向所需的進程授予系統特權,只接受其PID作為參數。


Sleep(200)

該elevate()函數在被惡意軟件調用后所做的第一件事,是調用Sleep函數休眠200毫秒的固定時間。

圖5:通過調用Sleep(200)來啟動漏洞,如Cutter中所示。

為什么Sleep(200)會出現在模板中還不是很清楚。我們懷疑這是為了避免不必要的不穩定,特別是因為這些漏洞是基于時間安排(UAF races)。因此,短時間的等待與I/O和內存訪問相關的活動結束,可以提高穩定性。

由于這些漏洞是惡意軟件的一部分,在漏洞利用程序執行之前,所有這些與惡意軟件相關的代碼都會導致CPU / 磁盤 / RAM出現短暫的峰值,因此在進行實際漏洞利用之前讓情況有所緩和可能是有意義的。對于短期峰值負載(在啟動新進程,從磁盤讀寫文件等情況下自然會發生),它應該足足等待200毫秒。盡管我們在最近的示例中注意到這種模式的變化,但是仍然可以在我們發現的9個漏洞中找到該功能。

與PlayBit的比較:PlayBit在其利用中沒有任何此類功能。


操作系統指紋

sleep函數結束后,該漏洞利用程序就會識別并校準目標的Windows版本,以便為盡可能多的OS版本提供支持。從我們的樣本中,作者似乎使用了兩種技術來查詢操作系統。

  • (1) 解析ntdll.dll的頭部
    這是最常用的技術。ntdll.dll句柄用于查找 IMAGE_NT_HEADERS 的偏移量,從這里解析 MajorOperatingSystemVersion 和 MinorOperatingSystemVersion 字段。

  • (2) GetVersionEx()
    該技術通常與前一種技術一起使用,僅在2016年至2017年初的樣品中使用。這可能是因為這個API現在已經棄用了。

圖6:調用GetVersionExW()以獲取Windows版本,如Cutter所示。

在這兩種技術中,目標都是查詢操作系統的主版本和次版本,并相應地配置漏洞利用程序的全局變量。雖然大多數的利用都支持多種Windows版本,但Volodya似乎從不關心目標的特定服務包,也不關心它是否是Windows服務器。除了對特定的Windows 10構建版本感興趣之外(僅在CVE-2019-1458漏洞中使用),我們的actor只使用了主要版本和次要版本,僅此而已。

與PlayBit的比較:再次使用GetVersionEx(),通常隨后還要對流程環境塊(PEB)本身的主次編號進行額外解析,如圖7所示。不僅使用PEB代替 ntdll.dll,PlayBit還從GetVersionEx()輸出中提取額外的信息,如計算機的服務包(Service Pack),甚至檢查目標計算機是否使用服務器操作系統。

圖7:從PEB中提取主要版本和次要版本,如Cutter所示。

這是兩個行動者在操作方式上的明顯區別。它們不僅以不同的方式提取相同的信息,而且即使它們都利用了相同的漏洞(CVE-2016-7255), Volodya感興趣的信息也遠少于PlayBit。

通常,兩個參與者都持有詳細的特定于版本的配置,一旦確定了操作系統版本,他們就從這些配置加載相關信息。兩者之間的主要區別是:

  • Volodya的漏洞利用代碼流很少依賴于操作系統版本
  • PlayBit使用了多種依賴于操作系統版本的if-check來進行多重扭曲和旋轉
  • 這反過來又影響了它們對確切版本細節的不同興趣

內核地址泄漏

Leaking Kernel Addresses
在絕大多數漏洞利用中,操作者使用內核指針泄漏原語來調整漏洞利用。在除CVE-2019-1458之外的所有漏洞利用中,此漏洞原語都是眾所周知的 HMValidateHandle 技術。

HMValidateHandle()是user32.dll的一個內部未導出函數,它被各種函數如isMenu()所利用,并可用于獲取所有Windows版本(直到Windows 10 RS4)中不同Window對象的內核地址。這種技術很有名,早在2011年就開始使用了,當時大多數開發教程都選擇專門解析isMenu()來找到HMValidateHandle()的地址。

令人驚訝的是,在數十個用于查找HMValidateHandle()的不同函數中,參與者只是簡單地遵循了著名的教程,并選擇了使用isMenu()。更令人驚訝的是,多年來,這種常見的利用技術仍然非常有效,使得參與者沒有動力通過選擇一個不太為人所知的函數(如CheckMenuRadioItem)來“隱藏”。

泄露給我們的信息如下:

  • 我們窗口的內核地址
  • THREAD_INFO(pti字段)的內核地址

該漏洞利用過程中的多個步驟將使用此信息:

  • 地址在指向 / 創建假的內核結構體時使用
  • 確保我們的內核地址是有效的Unicode字符串(不包含兩個連續的 ‘\x00’ 字節)
  • 該pti用于定位一個有效的EPROCESS,然后其在令牌交換階段中使用

與PlayBit的比較:PlayBit選擇通過直接訪問用戶模式桌面堆來實現此功能。關于這個主題的更多內容,可以在未來關注這個actor的博文中找到。


Token Swap

該漏洞的最終目標是根據給定的PID參數將系統權限授予所需進程。傳統上,實現這一點的方法是用系統進程的令牌替換 EPROCESS / KPROCESS 結構中的進程令牌。

下面是一些常用的技巧。您會驚訝地發現有多少不同的選項可以實現此功能。

(1) 使用Ps 符號(Using Ps * symbols)
Windows內核包含以下與進程相關的函數和全局變量:

  • PsLookupProcessByProcessId
    獲取一個指向進程EPROCESS的指針
  • pinitialsystemprocess
    全局變量,它保存著一個指向系統EPROCESS的指針
  • psreferencepprimarytoken
    返回一個指向進程主令牌(token)的指針

通過在內核模式下執行這些函數,一個給定的shellcode可以很容易地定位系統的令牌,但是它仍然不能解決如何在所需的EPROCESS中分配它的問題。為此,有兩種常見的解決方案:

  • 使用特定版本的偏移量直接訪問EPROCESS內部的正確偏移量
  • 掃描EPROCESS,查找我們自己的指針(通過前面對PsReferencePrimaryToken的調用知道),一旦找到匹配的條目,就替換它

這種技術需要以內核模式執行代碼,因此會被SMEP保護阻止,除非部署了額外的SMEP旁路。

(2) 掃描PsList
查找目標進程和系統進程EPROCESS的常見替代方法是掃描雙向鏈接的進程列表,稱為PsList。此技術涉及的步驟為:

  • 找到一個初始過程(使用泄漏的pti字段)
  • 掃描PsList以查找具有目標PID的EPROCESS
  • 通過查找PID為4或名稱為的方式,掃描PsList以搜索SYSTEM的EPROCESS SYS*
  • 提取令牌并將其放置在目標進程中的匹配偏移量中
  • 謹慎更新SYSTEM令牌的引用計數

圖8:使用任意讀原語搜索SYS*的Volodya漏洞,可以在Cutter中看到。

這種技術需要PsList的主令牌和LIST_ENTRY的偏移量,要求它們都存儲在特定于版本的配置中。

該技術的主要優點是,盡管它仍然可以作為一個簡單的shellcode在內核模式下執行(正如CVE-2017-0263所做的那樣),但它也可以在用戶模式下完全實現。為此,您需要兩個利用原語,一個用于任意讀(來自內核空間),另一個用于任意寫(進入內核空間)。在用戶模式下運行解決了我們之前詳細介紹的關于SMEP的問題,使這種保護對此類exploit原語毫無用處。

由于令牌是一個引用計數對象,因此正確注冊剛剛添加的引用非常重要,以避免在升級的進程終止時出現藍屏死機(BSOD)。事實上,有兩種不同的引用計數:

  • 令牌是一個EX_FAST_REF對象-較低的指針位用作引用計數
  • 將anOBJECT_HEADER存儲在令牌之前,并保留另一個引用計數

由于參與者選擇更新后一個引用計數字段,因此需要執行以下步驟:

  • 從標記的指針中屏蔽掉refcount位——在32位進程上應該對齊到8字節,在64位進程上應該對齊到16字節
  • 減去指向OBJECT_HEADER的ref-count字段所需的常量
  • 讀取值(使用任意讀取的exploit原語)
  • 相應地增加它
  • 回寫更新后的值

但是,如圖9所示,我們在包含此功能的所有32位漏洞利用程序中發現了以下錯誤。

圖9:32位漏洞利用中的引用計數更新中的實現錯誤。

讀取引用計數值時對齊掩碼對齊到8字節,而回寫更新后的值時使用不同的掩碼。如果令牌將被存儲在一個對齊到8字節而不是對齊到16字節的內存地址中,寫操作將更新錯誤的字段。

雖然CVE-2016-0040和CVE-2016-0167使用的是Ps*技術,但到目前為止,掃描PsList是我們的actor最喜歡的執行令牌交換的方式,在他們的8個漏洞中使用過。在其中的7個例子中,他們使用了用戶模式的任意讀和任意寫。

與PlayBit的比較:在他們的所有樣本中,我們總是看到PlayBit使用Ps*函數進行令牌交換。這一決定迫使參與者實現了一些SMEP繞過,他們將這些繞過集成到CVE-2016-7255和CVE-2018-8453的后續攻擊中。這種設計選擇解釋了為什么參與者不麻煩地實現適當的任意讀取原語作為利用的一部分。PlayBit不使用版本特定的配置來對EPROCESS中的令牌偏移量進行搜索,而是總是掃描EPROCESS來搜索它,通常使用0x300或0x600作為搜索的上限。

值得注意的是,PlayBit在不同的攻擊中使用的內存破壞技術也被Duqu 2.0所使用,并在微軟2015年的VB演講中進行了分析。通過這種內存破壞,它們可以觸發從內核內存到內核內存的一些內存讀寫,這將在攻擊期間起到幫助作用。

圖10: PlayBit漏洞掃描EPROCESS以搜索令牌,如Cutter所示。

盡管我們可以討論其他方面,例如每個參與者在開發過程中喜歡使用的不同系統調用,對Windows和ScrollBars之類的已創建對象的命名約定,但我們相信上面的清單清楚地證明了我們方法的效率/有效性。從上面的列表可以看出,漏洞利用程序的幾乎每個方面都可以幾種不同的方式實現。盡管如此,我們兩個演員在各自的剝削程序上都非常一致,每個人都堅持自己喜歡的方式。


六.客戶分析

在我們的整個研究過程中,我們想把重點放在開發作者本身,無論是Volodya, PlayBit或其他。然而,我們認為,通過觀察這些利用作者的客戶,還有很多東西要學習。Volodya的客戶名單多種多樣,包括Ursnif等銀行家木馬作者,GandCrab、Cerber和Magniber等勒索軟件作者,以及Turla、APT28和Buhtrap等APT組織。有趣的是,我們可以看到Volodya的0-day更有可能賣給APT組織,而1-day則被多個犯罪軟件組織購買。沒有進一步的情報,我們只能假設一旦0-day漏洞被安全行業檢測到,該漏洞就會被回收,并以更低的價格作為非排他性的1-day漏洞出售。

APT的客戶Turla、APT28和Buhtrap,都被普遍認為是俄羅斯的,有趣的是,即使是這些高級團隊也購買漏洞,而不是自己開發。這是另一點,進一步加強了我們的假設,編寫exploits可以作為一個單獨的和不同的部分惡意軟件處理。

下表總結并顯示了我們能夠歸因于Volodya的CVE,以及使用這些漏洞發現的客戶或惡意軟件組。標有藍色的CVE為0-day,自然更昂貴,左側高亮顯示的組被視為APT。

圖11: Volodya的客戶和他們使用的CVE。

在回顧我們在一段時間內檢查漏洞樣本時注意到的不同趨勢之前,我們應該強調,我們的可見性有限,因為我們不能討論尚未捕獲的0-day。此外,我們只能嘗試確定樣本的年代,直到它們被捕獲之前,但令人遺憾的是,我們通常基本上確定的是這種漏洞首次在野外被發現的時間。此外,值得一提的是,Volodya在開發第一個漏洞(CVE-2015-2546)時就已經非常專業了。例如,它有一個獨特的任意編寫原語,我們無法追蹤到任何其他的exploit教程或exploit。

在分析這些漏洞以及我們收集的數十個惡意軟件樣本的過程中,我們注意到一個有趣的變化。早期的Volodya漏洞作為源代碼出售,以嵌入惡意軟件中,后來的漏洞作為接受特定API的外部工具出售。這一變化表明Volodya采取了更多的預防措施。在2015年至2019年期間,我們也注意到Volodya的技術技能有了顯著的提高。當他們變得更好和更有經驗時,Volodya開始使用更有效的任意讀和寫原語,他們甚至修復了這些原語之間的一個bug。

CVE-2015-2546和CVE-2016-0165。此外,這些漏洞的代碼變得更加模塊化,因為大型函數被分割成更小的子例程。同時,他們在各種結構中搜索和訪問特定偏移量的技術也得到了改進,在最近的實現中,它變得更加動態和安全,因為它在Windows的小版本中更好地處理了變化。

這不僅顯示了我們actor的學習曲線和發展,也暗示了他們的技能。找到并可靠地利用Windows內核漏洞的能力并不是那么簡單的。相比之下,PlayBit在2015-2018年期間在這個市場上非常活躍,他們的重點是銷售1-day漏洞,其中之一是0-day的Volodya漏洞(CVE-2016-7255)。


七.結論

我們的研究方法是對漏洞利用作者的特征進行指紋識別,然后再將這些屬性用作唯一的狩獵簽名。在跟蹤Volodya和PlayBit的漏洞時,我們兩次部署了此技術。有了這兩個成功的測試案例,我們相信該研究方法可用于確定其他漏洞利用程序作者。我們建議其他研究人員嘗試我們建議的技術,并將其用作其武器庫中的其他工具。

在這項研究中,我們重點研究了APT攻擊和商品惡意軟件(尤其是勒索軟件)中不同惡意軟件系列所使用或嵌入的漏洞。盡管它們很普遍,但我們經常發現詳盡的惡意軟件報告,而忽略了提及手邊的惡意軟件也利用漏洞來提升其特權的報告。

事實上,我們能夠反復地使用我們的技術來跟蹤16個Windows LPE漏洞,這些漏洞是由兩個不同的角色編寫和銷售的,這是非常令人驚訝的。考慮到其中15個是在2015-2019年的時間框架內,我們有理由認為它們構成了開發市場的重要份額,特別是針對Windows LPE的開發。

最后,我們不可能說出Windows內核0-day漏洞的總數,這些漏洞正在被廣泛利用。我們仍然可以通過觀察被捕捉到的漏洞來獲得洞見,同時記住這種生存偏差。去年,卡巴斯基報告說,一個單一的參與者分發了超過3個0-day的利用框架。把這些數字加起來,我們發現15個零日漏洞中有8個(超過一半的“市場份額”)是由兩名actor完成的。這意味著我們的研究技術有可能被用于追蹤“可視市場”中的許多actor,如果不是全部的話。

保護建議:Check Point威脅模擬可針對以下威脅提供保護。

  • Trojan.Wins.Generic.F
  • Trojan.Wins.Generic.G

前文分享:

  • [譯] APT分析報告:01.Linux系統下針對性的APT攻擊概述
  • [譯] APT分析報告:02.釣魚郵件網址混淆URL逃避檢測
  • [譯] APT分析報告:03.OpBlueRaven揭露APT組織Fin7/Carbanak(上)Tirion惡意軟件
  • [譯] APT分析報告:04.Kraken - 新型無文件APT攻擊利用Windows錯誤報告服務逃避檢測
  • [譯] APT分析報告:05.Turla新型水坑攻擊后門(NetFlash和PyFlash)
  • [譯] APT分析報告:06.猖獗的小貓——針對伊朗的APT攻擊活動詳解
  • [譯] APT分析報告:07.拉撒路(Lazarus)使用的兩款惡意軟件分析
  • [譯] APT分析報告:08.漏洞利用圖譜–通過查找作者的指紋來尋找漏洞

2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大數據分析、網絡空間安全、逆向分析、APT分析報告、人工智能、Web滲透及攻防技術進行講解,同時分享CCF、SCI、南核北核論文的算法實現。娜璋之家會更加系統,并重構作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學所感所做分享出來,還請各位多多指教,真誠邀請您的關注!謝謝。

(By:Eastmount 2021-04-06 星期二 晚上10點寫于武漢 http://blog.csdn.net/eastmount/ )


附錄-IOC表

Volodya

  • CVE-2015-2546
    3f6fe68981157bf3e267148ec4abf801a0983f4cea64d1aaf50fecc97ae590d3
  • CVE-2016-0040
    0ea43ba3e1907d1b5655a665b54ad5295a93bda660146cf7c8c302b74ab573e9
  • CVE-2016-0165*
    f1842080b38b3b990ba3ccc1d55ceedd901d423b6b8625633e1885f0dadee4c2
  • CVE-2016-0167
    6224efee6665118fe4b5bfbc0c4b1dbe611a43a4b385f61ae33b0a0af230da4e
  • CVE-2016-7255
    a785ad170a38280fc595dcc5af0842bd7cabc77b86deb510aa6ebb264bf2c092
  • CVE-2017-0001
    ed7532c77d2e5cf559a23a355e62d26c7a036f2c51b1dd669745a9a577f831a0
  • CVE-2017-0263
    f9dca02aa877ad36f05df1ebb16563c9dd07639a038b9840879be4499f840a10
  • CVE-2018-8641*
    0829f90a94aea5f7a56d6ebf0295e3d48b1dffcfefe91c7b2231a7108fe69c5e
  • CVE-2019-0859 – Initial 64bit sample
    895ab681351439ee4281690df21c4a47bdeb6691b9b828fdf8c8fed3f45202d8
  • CVE-2019-0859 – Matching 32bit sample
    eea10d513ae0c33248484105355a25f80dc9b4f1cfd9e735e447a6f7fd52b569
  • CVE-2019-1458
    8af2cf1a254b1dafe9e15027687b0315493877524c089403d3ffffa950389a30

PlayBit

  • CVE-2013-3660
    9f1a235eb38291cef296829be4b4d03618cd21e0b4f343f75a460c31a0ad62d3
  • CVE-2015-0057
    8869e0df9b5f4a894216c76aa5689686395c16296761716abece00a0b4234d87
  • CVE-2015-1701 (yes, it is the same sample as CVE-2015-0057)
    8869e0df9b5f4a894216c76aa5689686395c16296761716abece00a0b4234d87
  • CVE-2016-7255
    5c27e05b788ba3b997a70df674d410322c3fa5e97079a7bf3aec369a0d397164
  • CVE-2018-8453
    50da0183466a9852590de0d9e58bbe64f22ff8fc20a9ccc68ed0e50b367d7043

總結

以上是生活随笔為你收集整理的[译] APT分析报告:08.漏洞利用图谱–通过查找作者的指纹来寻找漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕在线视频观看 | 亚洲一区二区三区免费观看 | 色哟哟一区二区 | 日韩高清中文字幕 | 亚洲精品www久久久久久 | a天堂亚洲| 午夜天堂精品久久久久 | 国产成人精品av在线观 | 精品999视频 | 欧美性大战久久久 | 日日草天天干 | 91艹| 超碰在线中文 | 国产av一区不卡 | 在线看片你懂得 | 在线观看国产精品视频 | 精品在线免费播放 | 伦理片波多野结衣 | 手机免费av | 一级黄色片在线免费观看 | 樱空桃在线观看 | 夜夜骚av一区二区三区 | 72pao成人国产永久免费视频 | 国产一区二区免费电影 | 调教一区二区三区 | 91爱爱.com| 哺乳期喷奶水丰满少妇 | 综合久久伊人 | 在线观看理论片 | 成人在线91 | 国产做a视频 | 久久青青视频 | 床戏高潮做进去大尺度视频网站 | 99热这里只有精品7 青青草社区 | 2019中文字幕在线视频 | 国产视频精品免费 | 日韩欧美v| 免费在线观看黄色片 | 丝袜人妖| 日韩一级二级 | 国产真人无码作爱视频免费 | 久久久久免费观看 | 日日摸夜夜添狠狠添欧美 | 黄色三级小视频 | 葵司一区二区 | 亚洲成人一区二区三区 | 国产xxxx做受视频 | 欧美日韩精品久久久免费观看 | 亚洲黄色三级 | 一区二区免费在线视频 | 一本加勒比北条麻妃 | 隔壁邻居是巨爆乳寡妇 | 轻点好疼好大好爽视频 | 男生和女生靠逼视频 | 国产高清在线免费 | 91精品国产91久久久 | 调教女m荡骚贱淫故事 | 97视频久久久 | 日韩女优中文字幕 | 日韩视频免费在线 | 亚洲老老头同性老头交j | 久久久久99精品国产片 | 超碰在线网站 | 999精品在线 | 极品粉嫩国产18尤物 | 日本黄色片免费看 | 欧美激情性做爰免费视频 | 久久电影一区二区 | 欧美在线视频不卡 | 亚洲欧美日韩在线 | 日韩一级完整毛片 | 91在线观 | av波多野吉衣 | 欧美老熟妇一区二区三区 | 妖精视频一区二区 | 少妇闺蜜换浪荡h肉辣文 | 精品乱子一区二区三区 | 久久久久久久久影院 | 不卡av一区 | 中国女人内谢69xxxxⅹ视频 | 国久久久 | 欧美老少做受xxxx高潮 | 老司机福利精品 | 日韩一区二区三免费高清在线观看 | 欧美三级在线视频 | 欧美熟妇另类久久久久久多毛 | 高清日韩一区 | 日韩中文一区 | 亚洲国产欧美在线观看 | 日韩电影中文字幕在线观看 | 日产毛片 | 夜夜狠| 丰满雪白极品少妇流白浆 | 又色又爽又黄gif动态图 | 97人妻精品一区二区免费 | 刘玥91精选国产在线观看 | 久久婷婷综合色 | 久久婷婷激情 | 国产女上位 |