<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>

    如何檢測父PID欺騙

    VSole2021-11-30 22:24:44

    用來檢測異常活動的最有用的技術之一是對父子進程關系的分析,然而,技術更高明更強大的攻擊者可以使用父PID(PPID)欺騙來繞過此操作,從而允許從任意父進程執行惡意進程。盡管這項技術本身并不新鮮,雖然Cobalt Strike和DidierStevens 對其進行了詳細介紹,但在檢測此類攻擊方面進行的專門研究卻很少。

    在本文中,我們將探討該技術的工作原理以及防御者如何利用Windows事件跟蹤(ETW)來檢測該技術。我們還將發布概念驗證PowerShell腳本以執行PPID欺騙和DLL注入,以及一個Python腳本,該腳本利用pywintrace庫來檢測此活動。

    為什么首先要進行欺騙?

    過去,攻擊者通常能在發動攻擊時不留下任何痕跡,但是隨著EDR的興起和威脅搜尋的興起,情況就開始發生變化了。特別是使用父子進程分析已經成為一種有用的技術,用于檢測在網絡攻擊殺傷鏈的幾乎每個階段產生的異常活動。

    我們在Countercept上使用的一些示例:

    1.宏有效載荷傳遞:WinWord生成過程;

    2.JS / VBS C#有效載荷傳遞:cscript生成csc;

    3.橫向移動:services/wmiprvse產生新流程。

    這迫使攻擊者重新評估他們的方法,并著眼于像PPID欺騙這樣的技術,以繞過現代的防御策略。

    通過CreateProcessA進行欺騙

    有許多不同的方法可以欺騙父進程,在這篇文章中,我們將關注一個最簡單和最常用的技術,涉及到API調用CreateProcessA。

    毫不奇怪,CreateProcessA允許用戶創建新流程,并且默認情況下,將使用繼承的父級創建流程。但是,此函數還支持一個名為“lpStartupInfo”的參數,你可以在其中定義要使用的父進程。這個功能是在Windows Vista中加入UAC后首次引入的,目的是為了正確設置父級。

    在更深層次的技術水平上,lpStartupInfo參數指向STARTUPINFOEX結構。此結構包含一個lpAttributeList,你可以使用UpdateProcThreadAttribute通過“PROC_THREAD_ATTRIBUTE_PARENT_PROCESS”屬性設置進程的父進程。

    順便提一下,這種方法也可以用于特權升級。文檔中提到“從指定進程繼承的屬性包括句柄、設備映射、處理器關聯、優先級、配額、進程令牌和作業對象”。“Adam Chester有一個博客,展示了如何濫用它來獲得Windows系統。

    如何欺騙父進程?

    在網絡上立足的最常見方法之一是使用惡意宏文檔,許多有效載荷通常會啟動新進程,例如cmd,PowerShell,regsvr32或certutil。圖3顯示了從winword生成rundll32的一個示例。但是,這種行為是相對異常的,并且大多數防御策略都很容易檢測到。

    為了克服這個問題,攻擊者可以改用CreateProcessA技術的VBS宏實現從預期的父進程啟動有效載荷(例如Explorer啟動cmd)以與環境融合,下圖概述了如何實現的過程。

    我們不會發布此VBS代碼,然而,更多信息可以在這里找到。

    但是,我們可以采取進一步措施來完全避免使用常見的Windows實用程序嗎?一種選擇是使用某種形式的DLL或內存注入在已經運行的進程中加載有效載荷。

    為了說明這一點,我們基于Didier Stevens]的代碼創建了一個PowerShell腳本,該腳本可用于創建具有欺騙性父級的進程,然后在其中注入DLL。

    為了演示如何使用該腳本隱藏活動,我們查看了Windows 10上常用的進程。我們看到的一種非常常見的合法關系是“ svchost.exe”啟動“ RuntimeBroker.exe”。

    使用PowerShell腳本,我們能夠模擬這個活動,并通過“ svchost.exe”強制生成合法的“ RuntimeBroker.exe”,然后注入并執行DLL有效載荷。

    此向量顯示了此類技術如何潛在地繞過專注于父子關系的檢測規則。

    如何查找到攻擊者?

    如上所述,我們介紹了CreateProcessA技術如如何欺騙父級ID的,并且從安全團隊的角度來看,如果你使用任務管理器或進程資源管理器查詢正在運行的進程,則會看到欺騙性的ID。但是,有什么方法可以找出真實的ID?

    Windows中最好的取證數據源之一是Windows事件跟蹤(ETW),ETW提供有關系統上發生的事件的實時數據流,這是我們在Countercept的端點代理中使用的東西。

    特別是Microsoft-Windows-Kernel-Process提供程序可以為流程創建提供一些有用的見解,并可以幫助我們檢測流程ID欺騙。在下面的示例中,你將看到如何從“winword.exe”(PID 9224)生成“rundll32.exe”(PID 5180)(圖9)。

    查看收集到的ETW數據(圖10),你將看到多個ProcessId字段,包括EventHeader ProcessId以及實際事件ProcessID和ParentProcessID。盡管這有些令人困惑,但通讀MSDN文檔,我們發現EventHeader ProcessId實際上標識了生成事件的進程,即父進程。

    在這個合法的示例中,你會注意到EventHeader ProcessId和ParentProcessId正確匹配。

    在第二個示例中,我們執行了惡意的PowerShell腳本,并通過“svchost.exe”(PID 4652)生成了“RuntimeBroker.exe”(PID 4976)。

    和以前一樣,我們可以看到ETW生成了一個流程事件(圖12);但是,這次的EventHeader ProcessId和ParentProcessID是不同的。實際上,EventHeader ProcessId顯示了真正的父級關系,即“ winword.exe”(PID 9224),因為我們剛剛發現有人在執行ParentPID欺騙!

    但是,就像在威脅檢測中一樣,事情并非如此簡單,如果你嘗試大規模進行此操作,你將發現合法欺騙會帶來誤報。一個常見的示例是用戶帳戶控制(UAC),用于提升進程特權。在Windows 10中,當UAC執行時,應用程序信息服務(通過svchost)用于啟動提升的進程,但隨后將欺騙父級以顯示原始調用方。下面的示例顯示了提升后的cmd.exe如何將explorer.exe作為父級顯示,而實際上它是svchost.exe。

    我們看到的另一個誤報與WerFault的崩潰處理有關,在下面的示例中,當MicrosoftEdge崩潰時,使用svchost啟動WerFault.exe,并且將父級欺騙為MicrosoftEdge.exe。

    出于測試的目的,我們創建了一個簡單的概念驗證Python腳本,該腳本使用pywintrace記錄來自ETW的事件,比較PID,然后過濾結果以消除誤報(圖15)。

    可以在我們的Github 上找到PowerShell欺騙腳本的代碼以及檢測腳本。

    總結

    在這篇文章中,我們展示了攻擊者如何利用合法的Windows功能來欺騙防御者,并可能繞過基于父子關系的檢測技術。

    但是,從防御的角度來看,我們已經展示了對ETW進程事件的分析如何輕松地突出顯示異常的父級欺騙并幫助發現進程的真正來源。

    參考及來源:https://blog.f-secure.com/detecting-parent-pid-spoofing/
    
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    如何檢測PID欺騙
    2021-11-30 22:24:44
    盡管這項技術本身并不新鮮,雖然Cobalt Strike和DidierStevens 對其進行了詳細介紹,但在檢測此類攻擊方面進行的專門研究卻很少。我們還將發布概念驗證PowerShell腳本以執行PPID欺騙和DLL注入,以及一個Python腳本,該腳本利用pywintrace庫來檢測此活動。
    不可中斷狀態實際上是系統對進程和硬件設備的一種保護機制。當負載存在明顯升高趨勢時,及時進行分析和調查。系統調用過程中并不會涉及虛擬內存等進程用戶態資源,也不會切換進程。因此系統調用通常稱為特權模式切換。進程是由內核管理和調度的,進程上下文切換只能發生在內核態。因此相比系統調用來說,在保存當前進程的內核狀態和CPU寄存器之前,需要先把該進程的虛擬內存,棧保存下來。
    一個基于 Linux 操作系統的服務器運行的同時,也會表征出各種各樣參數信息。通常來說運維人員、系統管理員會對這些數據會極為敏感,但是這些參數對于開發者來說也十分重要,尤其當你的程序非正常工作的時候,這些蛛絲馬跡往往會幫助快速定位跟蹤問題。
    Seccomp BPF與容器安全
    2022-07-17 10:07:03
    本文詳細介紹了關于seccomp的相關概念,包括seccomp的發展歷史、Seccomp BPF的實現原理以及與seccomp相關的一些工具等。此外,通過實例驗證了如何使用seccomp bpf 來保護Docker的安全。
    目前Linux內核代碼已經達到了2700萬行量級[2],僅每年通報的Linux內核漏洞就多達數十個。Linux內核主要使用C語言編寫,由于C語言不是類型安全語言,而且偏底層,所以各種內存破壞類漏洞層出不窮。攻擊者利用內核漏洞可以達到本地提權的目的。容器技術本身依賴于Linux內核提供的Namespaces和Cgroups機制,利用內核漏洞,攻擊者可以繞過Namespaces對資源的隔離,達到逃逸的
    有時候會遇到一些疑難雜癥,并且監控插件并不能一眼立馬發現問題的根源。這時候就需要登錄服務器進一步深入分析問題的根源。那么分析問題需要有一定的技術經驗積累,并且有些問題涉及到的領域非常廣,才能定位到問題。所以,分析問題和踩坑是非常鍛煉一個人的成長和提升自我能力。如果我們有一套好的分析工具,那將是事半功倍,能夠幫助大家快速定位問題,節省大家很多時間做更深入的事情。
    最近粗淺的研究了一下Windows應用層相關調試API和對應調試原理,以達到實現反附加的功能。本文內容主要參考《軟件調試》和網絡上相關優秀文章,并且主要側重在應用層調試附加方面,關于內核層面因為水平有限本文沒有詳細展現。
    RCE系統交互條件與受限環境下的利用
    根據廠商的要求,在修補后的固件未發布前,我對該漏洞細節進行了保密。若讀者將本文內容用作其他用途,由讀者承擔全部法律及連帶責任,文章作者不承擔任何法律及連帶責任。此時,我們驚喜地發現xxx系列產品的xxx型號固件并沒有被加密,可以成功解開。漏洞分析此部分以xxx固件為例進行分析,該固件是aarch64架構的。其他固件也許架構或部分字段的偏移不同,但均存在該漏洞。找到無鑒權的API接口顯然,此類固件的cgi部分是用Lua所寫的。
    VMPWN的入門系列-2
    2023-08-03 09:29:42
    解釋器是一種計算機程序,用于解釋和執行源代碼。與編譯器不同,解釋器不會將源代碼轉換為機器語言,而是直接執行源代碼。即,這個程序接收一定的解釋器語言,然后按照一定的規則對其進行解析,完成相應的功能,從本質上來看依然是一個虛擬機。總的來說,如果輸入字符數小于0x10,string類的大概成員應該如下struct?
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类