安全動態(tài)

如何防止惡意的第三方DLL注入到進(jìn)程

來源:聚銘網(wǎng)絡(luò)    發(fā)布時(shí)間:2019-12-01    瀏覽次數(shù):
 

信息來源:FreeBuf

雖然Windows系統(tǒng)的安全機(jī)制是不允許任何微軟簽名的代碼注入到進(jìn)程之中的,但是網(wǎng)絡(luò)犯罪分子仍然會有很多方法來繞過這種安全機(jī)制,比如說通過執(zhí)行用戶態(tài)鉤子向正在運(yùn)行的進(jìn)程注入DLL等等。而本文所介紹的技術(shù)也許對于某些反病毒產(chǎn)品、EDR和安全防御人員來說,也許會提供一些有價(jià)值的思路。

UpdateProcThreadAttribute

第一種防止惡意第三方DLL注入到進(jìn)程的方法就是使用UpdateProcThreadAttribute。

這個(gè)屬性是PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY中一個(gè)我們可以自行設(shè)置的屬性。

下面的代碼段顯示了如何使用MITIGATION策略來創(chuàng)建一個(gè)新的記事本進(jìn)程,而這個(gè)進(jìn)程將阻止任意非微軟簽名的代碼注入其中。編譯并執(zhí)行下列代碼后,將以進(jìn)程緩解策略執(zhí)行notepad.exe程序,并防止任意非微軟簽名的代碼注入其中。我們可以使用Process Hacker來進(jìn)行檢查:

在下面這張GIF中,MITIGATION策略已經(jīng)生效,任何非微軟簽名的代碼都將被屏蔽,但是其中有一段微軟代碼通過并成功執(zhí)行了:

值得一提的是,這種特性實(shí)際上是Cobalt Strike的blockdlls在“作怪”。

SetProcessMitigationPolicy

在研究第一種方法的過程中,我偶然發(fā)現(xiàn)了一個(gè)名叫SetProcessMitigationPolicy的API,這個(gè)API將允許我們針對調(diào)用進(jìn)程本身設(shè)置緩解策略,而不是像第一種方法那樣去為子進(jìn)程設(shè)置緩解策略。mitigationpolicy.cpp的相關(guān)代碼如下:

PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY sp = {};

sp.MicrosoftSignedOnly =1;

SetProcessMitigationPolicy(ProcessSignaturePolicy, &sp,sizeof(sp));

在我的測試過程中,使用SetProcessMitigationPolicy并不能防止已知的EDR解決方案將其DLL注入到我們的進(jìn)程中。通過調(diào)試會話的分析,我們確認(rèn)了原因,即在注入DLL之后,緩解策略將會立刻被應(yīng)用。當(dāng)一個(gè)進(jìn)程被初始化并且運(yùn)行之后,任何非微軟簽名的代碼都將無法注入到進(jìn)程之中。

檢測

這里我有一個(gè)更好的辦法,就是使用PowerShell的一個(gè)“Get-ProcessMitigation”cmdlet命令來枚舉出使用了MicrosoftSignedOnly緩解策略的進(jìn)程,然后對其進(jìn)行分析調(diào)查,并設(shè)置基準(zhǔn)線:

get-process |select-expprocessname -Unique | % { Get-ProcessMitigation -ErrorAction SilentlyContinue -RunningProcesses $_ |selectprocessname, Id, @{l="Block non-MS Binaries"; e={$_.BinarySignature|select-expMicrosoftSignedOnly} } }

下圖顯示的是notepad.exe,它將允許微軟簽名的代碼注入到其進(jìn)程中:

 
 

上一篇:關(guān)于印發(fā)《網(wǎng)絡(luò)音視頻信息服務(wù)管理規(guī)定》的通知

下一篇:Trickbot更新密碼竊取模塊