<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    奇安信威脅情報中心:APT活動中的Windows系統本地提權漏洞及技術分析

    VSole2021-11-08 08:41:57

    概述

    APT 攻擊(Advanced Persistend Thread,高級持續性威脅)是利用先進的攻擊手段對特定的目標進行長期持續性網絡攻擊的攻擊形式。APT 攻擊形式相對于其他攻擊形式更為高級和先進,其高級性主要體現在精準的信息收集、高度的隱蔽性以及針對于各種復雜系統或應用程序的漏洞利用等方面。

    為了更加全面的理解漏洞在APT 攻擊中所扮演的角色。奇安信威脅情報中心紅雨滴團隊聚焦于部分真實APT 攻擊活動中所使用的各類Windows系統本地提權漏洞,簡要分析這些漏洞原理、利用方式。

    在本報告中,奇安信威脅情報中心會以Windows權限提升漏洞作為論述主體,通過研究這些提權漏洞在APT 攻擊活動中所扮演的角色并對漏洞威脅性做出簡單評定。

    最后,基于之前章節的分析和闡述,我們針對APT 組織使用漏洞發展趨勢進行總結并提出一些預防建議。由于所涉及到的APT 攻擊活動數量較多,且所涉及的APT 活動中使用的提權漏洞也存在一定的重復性,所以本報告以其中影響較大、知名度較高的幾次攻擊事件為例進行分析介紹。

    漏洞、CVE以及本地提權漏洞(LPE)

    漏洞通常指計算機系統安全方面的缺陷,使得系統或其他應用數據的保密性、完整性、可用性、訪問控制等方面面臨威脅。這里的計算機系統既包括軟件系統如操作系統、應用軟件,又包括硬件。本文所指系統特指Windows 操作系統。

    CVE 是通用漏洞披露(Common Vulnerabilities and Exposures)的簡寫,是指代已經公開披露的各種計算機安全漏洞,由 MITRE corporation 監管。我們通常談論的CVE 指的是分配給每個安全漏洞的CVE ID 編號,該變化由CAN(CVE 編號管理機構分配)。本文提及漏洞皆存在對應的CVE 記錄。

    而計算機安全漏洞主要分為拒絕服務、代碼執行、內存溢出、特權獲取、信息泄露、SQL 注入等等,本文著重描述Windows權限提升漏洞,也即本地提權漏洞(Local privilege escalation,簡稱LPE)。

    01摩訶草APT組織以巴基斯坦空軍演習,為誘餌展開攻擊活動

    相關活動概要

    摩訶草APT組織(APT-C-09)在2021年1月左右以巴基斯坦空軍演習為誘餌文檔發起的攻擊活動中,通過惡意文檔釋放FakeJLI后門,嘗試在特殊目錄下創建文件并刪除以檢查是否處于office沙箱保護模式下,并根據判斷結果選擇是否進行提權操作。

    如果當前惡意進程屬于WOW64進程,則使用CVE-2016-7255進行提權,反之則使用CVE-2019-0808 進行提權。以下是對兩個漏洞的技術細節分析介紹。

    CVE-2016-7255

    漏洞概述

    2016年12月2日,谷歌研究員在對Pawn Storm 間諜組織實施的攻擊活動研究中發現了一個內核提權漏洞,并在披露漏洞后的短時間內微軟發布系統安全更新。該漏洞被多個APT 組織在攻擊活動中使用。

    CVE-2016-7255 是由于win32k!xxxNextWindow 函數未對win32k!tagWND對象內成員有效性就行檢測,導致可以構造內核空間任意地址寫,最終實現本地提權。

    漏洞原理

    CVE-2016-7255 漏洞是由于內核函數win32k!xxxNextWindow 函數對win32k!tagWND 對象內成員有效性未做判斷,導致攻擊者可以利用惡意構造的對象實現對內核任意地址寫入數據。

    通過對比補丁前后的代碼變化,可以發現在win32k!xxxNextWindow 函數的流程中,出現了一處對比代碼的變化。

    通過對比補丁前后win32k.sys 文件 的反編譯版本可以發現這里主要增加了對于*(_BYTE *)(pwndActivateNext + 0x37) & 0xC0) != 0x40的參數驗證。

    通過分析得知,此處的pwndActivateNext 是通過GetNextQueueWindow 函數返回,該函數原型如下。

    函數返回應該PWND 值,該值為tagWND 結構指針,通過前文中補丁對比可知,在函數win32k!xxxNextWindow 內會對該對象+0xC0 處的值進行校驗,通過windbg 可知該處的成員為spmenu,是一個tagMENU 結構對象。由于未對該處的值有效性進行檢測,導致此處的值可以通過SetWindowLongPtr 函數進行控制。

    漏洞利用

    通過分析發現,該漏洞只能修改一位,而不能實現任意地址寫入,所以利用對PML4的自引用地址的值進行與0x4 異或修改訪問權限實現用戶層對內核層的讀寫,之后通過覆蓋haldispatchtable+offset處的代碼為shellcode以實現劫持,最后調用NtQueryIntervalProfile 方法實現內核態shellcode 執行以替換當前進程TOKEN 為SYSTEM TOKEN 值實現提權。

    CVE-2019-0808

    漏洞概述

    2019年3月7日,谷歌威脅分析小組披露了兩個0-day 漏洞,其中包括CVE-2019-0808。據微軟稱,CVE-2019-0808 漏洞允許攻擊者提升本地權限并在內核模式下執行任意代碼。谷歌表示該漏洞只影響Windows 7 和Windows Server 2008 系統版本,同時該漏洞結合Chrome RCE(CVE-2019-5786)已經被應用于真實的APT攻擊中。

    CVE-2019-0808 產生的原因是在函數win32k!xxxMNFindWindowFromPoint 接收到窗口過程函數返回的菜單窗口對象后,對于win32!tagPOPUPMENU 對象成員未做有效性檢測,導致可能存在對象成員為空的情況,進而導致在win32k!xxxMNUpdateDraggingInfo 函數內觸發零指針解引用異常。

    漏洞原理

    通過目前網絡上的資料不難知道,該漏洞產生的原因是win32k.sys 內部函數xxxMNFindWindowFromPoint對tagPOPUPMENU 對象成員有效性判斷不足導致后續代碼出現空指針解引用異常觸發漏洞。通過在測試主機(windows 7 sp1)執行POC 文件觸發Crash 并查看調用堆棧如下:

    不難看出當執行到win32k!xxxMNUpdateDraggingInfo+0x9e 處時,產生了異常,定位此處,發現是對rdx+0x34 處地址訪問時產生。

    通過查看堆棧調用,觸發漏洞的大致函數執行流程如下:

    通過以上的調試,基本知曉了POC 的編寫邏輯及基本的漏洞成因。此處使用的POC 代碼由ze0r 編寫并開源于github。

    通過分析POC 源碼,可知漏洞觸發流程大致如下:

    第一步:創建兩個菜單對象hMenuRoot 和hMenuSub 并將其設置為無模式,即當菜單處于活動狀態時,無菜單模式消息循環。并且將hMenuRoot 設置為主下拉菜單,hMenuSub 設置為其子菜單。

    第二步:設置上述菜單信息使之具有拖拽功能。

    第三步:設置全局鉤子消息以攔截WM_MN_FINDMENUWINDOWFROMPOINT 消 息,該消息由xxxMNFindWindowFromPoint 函數發出。

    第四步:通過調用NtUserMNDragOver 函數進入漏洞觸發流程。

    第五步:當進入到NtUserMNDragOver 函數內后,就開始上面圖示的流程執行,程序流執行到win32k!xxxMNMouseMove 函數內,會調用win32k!xxxMNFindWindowsFromPoint 函數用于確定鼠標位于哪個窗口,在該函數內會發送MN_FINDMENUWINDOWFROMPOINT 消息事件,由于在第三步設置了全局鉤子攔截該消息事件,所以程序流回到用戶層代碼會進入到HOOK 函數POC!WindowHookProc() 內,通過SetWindowsLongPtr 函數為菜單窗口設置一個新的窗口過程函數,并在函數內部返回我們構造的hWndFakeMenu。

    第六步:在第五步執行完成后,xxxMNFindWindowFromPoint 函數獲取窗口句柄并傳入窗口對象xxxMNUpdateDraggingInfo內,但是此時的對象已經是我們偽造的hWndFakeMenu 對象,并且該對象多數成員值為0,造成代碼異常。

    通過上述對POC 的分析,可以將上面漏洞觸發流程進一步細化為下圖:

    漏洞利用

    通過上述對漏洞產生原因及觸發的調試,我們來看看該漏洞是如何進行利用的。由上述可知,該漏洞產生的原因是空指針解引用,所以利用該漏洞首先是解決空指針異常。在Windows 7 系統版本的計算機上,解決空指針異常可以使用NtAllocateVirtualMemory 函數來分配零頁內存。

    之后需要讓程序執行流程進入到if 分支中,需要對零頁地址數據進行構造。

    此處代碼實際上是MNGetpItem 方法,該方法傳入兩個參數,分別是tagPOPUPMENU 結構指針和UINT 類型的索引值,該值為uDraggingIndex,表示當前正在拖動的項的索引值。通過資料查詢,該值可以從tagMSG 的wParam 獲取,所以我們可以在用戶層設置此處的值。

    將此處的值進行修改并進入到if 分支,通過分析后續流程,我們定位到xxxMNSetGapState 函數,在改函數內調用了類似于MNGetpItem 函數,在上述分析中可以知道該函數的返回值是可以由用戶層控制的,所以利用這一點可以實現任意地址與下面的0x40000000 的值進行或運算。

    有了上述的基礎,我們可以利用內核地址泄露和窗口對象噴射技術通過尋找兩個內存位置相鄰的對象,修改窗口對象附加長度的值為0x400000000,并再次修改第二個窗口對象的strName.Buffer 指針,最后設置strName 的方式實現任意地址寫。

    寫入shellcode 后利用tagWND. bServerSideWindowProc字段置位實現窗口過程函數在內核模式下執行,實現提權。

    https://msrc.microsoft.com/update-guide/vulnerability/CVE-2019-0808

    https://paper.seebug.org/856/

    https://ti.qianxin.com/blog/articles/Summary-and-analysis-of-APT-attack-activities-in-South-Asia-in-January-2021/

    02蔓靈花APT組織在針對國內攻擊活動中,使用Windoows內核提權0 day漏洞

    相關活動概要

    2020年12月中旬,國內某安全廠商披露了蔓靈花(又名Bitter)針對國內科研機構、政府部門發起的APT 活動,并在此次分析中發現了一個使用未知Windows 內核提權漏洞進行本地提權的惡意組件。以下是對該漏洞的技術細節分析介紹。

    CVE-2021-1732

    漏洞概述

    CVE-2021-1732于2021年2月蔓靈花針對國內科研機構及政府部門的攻擊活動中首次被發現,該漏洞利用Windows 操作系統win32k 內核模塊一處用戶態回調干擾函數正常執行流程,并在可控流程內篡改窗口對象數據造成后續代碼執行異常,從而觸發漏洞。

    漏洞原理

    CVE-2021-1732 漏洞位于win32kfull.sys 內,當win32kfull! xxxCreateWindowEx 函數回調xxxClientAllocWindowsClassExtraBytes時進行干預,通過混淆console 窗口和普通窗口,使得回調函數返回內核態執行時觸發內核對象越界訪問。

    正常情況下,窗口的創建過程如圖所示:

    用戶調用CreateWindowsEx 函數并逐步向下執行,通過系統調用機制由用戶態進入內核態,并逐層向下,當窗口對象(atgWND)的擴展數據大小值為0時,win32kfull!xxxCreateWindowsEx 函數執行用戶回調xxxClientAllocWindowsClassExtraBytes 函數為窗口對象擴展數據申請所需內存。

    在完成回調后,返回值將傳遞給窗口對象的tagWND.pWxtraBytes 屬性。但是由于對該值未作有效判定,導致攻擊者可以通過特定函數(NtCallbackReturn)修改tagWND. pWxtraBytes 的值為可控的offset,并且在這之前通過調用NtUserConsoleControl 函數修改tagWND 的擴展數據保存方式為桌面堆,最終實現基于內核態桌面堆起始地址可控offset 的越界讀寫。

    通過上述描述,最終窗口創建的流程如下:

    漏洞利用

    根據POC 可知,利用該漏洞可以實現將tagWND 對象的擴展數據設置為任意可控offset,從而獲取指定的內核地址,通過SetWindowLong 函數實現對這些地址的數據修改;通過構建虛假的spmenu 對象配合SetWindowLong 修改指定tagWND 對象的spmenu 為虛假的spmenu再借助函數GetMenuBarInfo 實現任意地址讀;最后通過內核地址泄露定位到EPROCESS 結構地址,并使用EPROCESS 鏈查找system 進程,獲取system 進程token 并實現替換從而實現提權。

    03在針對中東地區的攻擊活動中,使用Windows內核提權漏洞

    相關活動概要

    CVE-2018-8453是卡巴斯基實驗室于2018年8月份在一系列針對中東地區進行APT攻擊的活動中捕獲到的Windows提權0day漏洞,該漏洞與Windows窗口管理和圖形設備接口相關(win32kfull.sys)。

    通過控制窗口對象銷毀時在xxxFreeWindow函數中回調fnDWORD的hook函數,可以在win32kfull!xxxSBTrackInit中實現對pSBTrack的UseAfterFree,從而進行提權。以下是對該漏洞的技術細節分析介紹。

    CVE-2018-8453

    漏洞概述

    該漏洞產生的原因是win32kfull!NtUserSetWindowFNID函數存在缺陷:在對窗口對象設置FNID時沒有檢查窗口對象是否已經被釋放,導致可以對一個已經被釋放了的窗口(FNID_FREED:0x8000)設置一個新的FNID,通過利用win32kfull!NtUserSetWindowFNID的這一缺陷,從而可以達到UAF,導致漏洞的利用。

    漏洞原理

    POC流程如下:

    Hook KernelCallbackTable中的回調后,通過向滾動條發送WM_LBUTTONDOWN消息觸發調用xxxSBTraackInit函數,因為對一個滾動條進行鼠標左擊時,會觸發調用win32kfull!xxxSBTrackInit函數,這里會調用xxxSBTrackLoop循環獲取鼠標消息,直到釋放鼠標左鍵或者收到其它消息,才會退出xxxSBTrackLoop函數。

    xxxSBTrackInit中調用xxxSBTrackLoop回調fnDWORD_hook時,調用DestoryWindow(g_hMAINWND), 這樣會導致調用win32kfull!xxxFreeWindow,因為我們在注冊主窗口類的時候設置了主窗口類的cbWndExtra不為0,那么在win32kfull!xxxFreeWindow中會調用xxxClientFreeWindowClassExtraBytes函數來釋放主窗口類的額外數據。

    上圖這個函數會回調KernelCallbackTable[126],就會進入我們的第二個hook函數中去。

    在進入第二個hook函數fnClientFreeWindowClassExtraBytesCallBack_hook后我們必須手動調用NtUserSetWindowFNID(g_hMAINWND,spec_fnid)設置主窗口的FNID(spec_fnid的取值范圍從0x2A1到0x2AA,這里我們將spec_find設置為0x2A2即可)。同時申請一個新的滾動條:g_hSBWNDNew,并調用SetCapture(g_hSBWNDNew)設置當前線程捕獲鼠標消息的窗口是g_hSBWNDNew。

    由于主窗口被Destory,那么xxxSBTrackLoop會返回,繼續執行HMAssignmentUnLock(&pSBTrack->spwndNotify)解除對主窗口的引用。從而導致主窗口被徹底釋放,這會導致再一次的調用xxxFreeWindow,當調用了xxxFreeWindow之后,窗口的FNID就會打上0x8000標記。

    當再次進入fnDWORD_hook函數時就是我們最后一次回到R3的時機了,這個時候如果調用SendMessage(g_hSBWNDNew,WM_CANCLEMODE) 就會調用xxxEndScroll來釋放pSBTrack。

    由于POC程序是單線程,而每個線程信息是屬于線程的,所以線程創建的所有窗口也都指向同一線程信息結構。即使SBTrack隸屬的Scrollbar窗口已經釋放了,只要還是同一線程創建的新窗口,pSBTrack也還是原來的。

    由于我們是向新創建滾動條g_hSBWNDNew發送的WM_CANCLEMODE消息,且之前就調用SetCaputure(g_hSBWNDNew)設置當前線程捕獲鼠標消息的窗口為g_hSBTWNDNew,所以qp->spwndCapture==pwnd也會滿足。

    因此上圖中的if判斷會通過,并最終執行UserFreePool(pSBTrack)將pSBTrack給釋放掉,從而造成返回執行HMAssignmentUnLock(&pSBTrack->spwndSB)時,pSBTrack就已經被釋放掉了。最終造成了對pSBTrack的Use After Free。

    漏洞利用

    由于我們可以通過hook KernelCallbackTable中的回調函數來控制win32kfull!xxxSBTrackInit中的pSBTrack被提前釋放,造成對pSBTrack的Use After Free。之后則可以通過池風水噴射技術占用被提前釋放掉的pSBTrack實現有限次的任意內存減1或減2。這個有限次的任意內存減1或減2配合桌面堆泄露技術和GDI Palette Abuse技術就可以實現任意內存讀寫。

    總結

    APT 攻擊事件隨著技術的發展也逐漸由早期單一化逐漸演變為目前的復雜化,而同時隨著計算機軟件系統安全防護技術的提升,軟件漏洞開始成為APT 組織攻擊活動中重要組成部分,在整個攻擊活動中扮演著“突破者”的角色。之所以形容其為“突破者”,在于漏洞利用模塊多為突破系統防護或沙箱最終實現對目標系統的攻擊。

    奇安信威脅情報中心收集整理了眾多APT 攻擊活動并從中例舉了如“摩訶草”、“蔓靈花”等組織曾發起的攻擊活動,分析這些攻擊活動中所使用到的系統(Windows 系統)漏洞并簡述其原理及利用,以求從另一個視角看待這些攻擊:若漏洞不存在,攻擊是否達成?

    通過文章簡述分析,我們清楚的看到這些漏洞在整個攻擊事件中所扮演的重要角色,同時我們也應該認識到,及時的抹除這些漏洞即安裝系統補丁對于避免這些攻擊事件的重要性。

    奇安信紅雨滴團隊呼吁相關用戶,及時安裝系統更新,并定期更新安全防護系統,能有效防止遭受此類攻擊。

    apt函數調用
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    使用AFL++復現歷史CVE
    2022-08-12 17:36:45
    安裝調試目標從github等途徑下載并解壓。從網上找現成的樣本sample。
    這凸顯了開發檢測惡意 PowerShell 命令的有效方法的迫切需要。在這項工作中,我們通過實施幾個新穎的惡意 PowerShell 命令檢測器并評估它們的性能來應對這一挑戰。在這項工作中,我們使用 AMSI 提供的信息對惡意 PowerShell 代碼檢測進行了首次研究。
    很少有調查研究如何在大范圍內自動檢測和識別特定的高級攻擊組織使用的惡意軟件樣本。此前,安全社區已經廣泛研究了如何根據代碼相似性檢測未知攻擊。最近,社區也開始探索使用現代機器學習方法來檢測更復雜的惡意軟件攻擊,例如 APT。但現有方法不足以處理現代惡意軟件中的代碼重用和攻擊歸因。
    CVE-2021-22205-Gitlab ExifTool RCE漏洞分析之一:ExifTool RCE漏洞CVE-2021-22004起源深入分析。
    CVE-2021-36394-Moodle RCE漏洞分析及PHP反序列化利用鏈構造之旅。
    文章速覽:1、高級規避攻擊2、用移動目標防御對抗欺騙常見做法操作系統和應用程序才是真正的戰場打破游戲規則 網絡攻擊的技術變得愈發難測,網絡攻擊者用多態性、混淆、加密和自我修改喬裝他們的惡意軟件,以此逃避防御性的檢測,于是移動目標防御(MTD)技術出現了,通過動態地改變攻擊面,有效地對抗日益復雜和隱蔽的網絡攻擊。一、高級規避攻擊高級規避攻擊可以反復修改網絡攻擊,包括其源、靜態簽名和行為簽名
    測試結果表明,勒索病毒檢測器檢測準確率達到了 97%,勒索病毒家族分類器分類準確率達到了 94%。隨著網絡犯罪的組織化、規模化,隱匿行為攻擊的復雜化和商業化,目前,隱匿高危勒索病毒呈蔓延之勢。為了保證計算機網絡和計算機應用系統的正常運行,電力企業需要對隱匿高危勒索病毒的攻擊作出應對。對抗隱匿高危勒索病毒攻擊,保護用戶數據的關鍵措施在于預防,即在勒索軟件攻入受害者主機但尚未造成實質性破壞前及時檢測并攔截攻擊。
    在近幾年出現的諸多office漏洞中,有兩類漏洞是很值得談談的,第一類是Moniker導致的邏輯漏洞,第二類是公式編輯器漏洞。
    是個抓取網絡數據包的庫,這么說可能還有點抽象,但是抓包工具大家可能都使用過。場景1:網絡流量分析對網絡設備流量進行實時采集以及數據包分析。場景2:偽造數據包不少網絡安全工具,需要偽造網絡數據包,填充上必要的協議字段后發送給對端設備,從而達到一些目的。
    威努特專家小組就某單位遭受勒索病毒攻擊開展應急處置工作。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类