2009-03-13

從免疫007來看各廠商如何對付"殼程式"



『殼』是一種程式設計師普遍會使用的一種打包工具,最初的用途在於保護自己撰寫的程式不被竄改,同時也有減少程式體積的優點!不同於一般人使用的壓縮軟體(archival),加過殼的程式不需要解壓縮既可執行!因為它本身就是exe執行檔。另一個最大的不同點,加過殼的程式在執行的時候,先啟動的是『殼』這個程式,殼執行後會把被包進殼的程式解壓縮到實體記憶體內,優點是不佔用多餘的空間而且執行效率極高!同時具有規避防毒軟體引擎的作用!也因為加殼程式執行後會隱藏被加殼程式本身,所以利用特殊加殼工具我們可以簡單避過緝毒引擎的偵測!目前流通的病毒樣本中有超過97%以上的電腦病毒都經過加殼。



通過加殼軟體『免疫007』,我們可以把一個程式給壓縮的更小,同時由於免疫007的特性,它具備反虛擬機環境(Anti Virtual Machine),可以輕鬆避過防毒軟體的虛擬機啟發引擎(Emulator Engine),免疫007只要偵測到是在虛擬環境中執行,那將會自動關閉不再執行!



免疫007跟ASPack這種常見加殼軟體不同點在於:免疫007它專門針對防毒軟體而來,主要是給病毒作者用的加殼工具!而免疫007除了會偵測虛擬機外,它每一次的執行都會改變自身的特徵值,這種方法會造成防毒軟體特徵碼失去比對的精度!在目前依然是相當有效,用來規避緝毒引擎的方法之一!



但是難道加了殼防毒軟體真的就完全沒轍了嗎?答案是否定的,防毒軟體藉由結構探測(Suspicious Structure)來尋找可疑的特徵結構,通常這種結構都會進行加密並隱藏真正的功能,優點是確實加強的偵測能力,但是一定程度上的提升誤報!除了結構偵測我們還可以倚靠HIPS做行為偵測,藉由SSDT Hook系統API我們可以根據程式行為判斷它是否為一個正在運作中的病毒


但是一般緝毒引擎遇到這類型的加殼樣本,由於都採用黑名單方式處理
所以加了殼之後,不管被加殼對象是黑或白均會被報毒
當然這類型的加殼程式一般人不會去用,但是這裡我所要探討的
就是大部分廠商很少會對其做後續處理,因為這類樣本本來就很棘手!
如果單獨每一個樣本都帶殼入庫,這樣的效率太低了,其它用同樣加殼方式的樣本就偵測不到了

對廠商來說,直接將"殼特徵"提取,製作基因特徵碼,好處是用了同樣加殼工具的不同樣本
均會在第一時間被報,但是被報的其實是加殼程式本身,而不是被加殼的對象
所以有某個程度的誤報情形會出現在這類型的樣本中!

這裡我製作了一個用2006年版免疫007,並替一個不是病毒的程式加了一層殼
並且使用Multi Command-Line Scanner進行掃瞄


掃瞄結果:
Multi Command-Line Scanner Report
-------------------------------------------------------------------------
D:\Threat Centre\PageFileInfo.exe
MD5 Hash: 121F1B3DDA9228AAE554BF65438ADC85

A-squared ----- Packed.Win32.NSAnti!IK
Avast ----- Win32:JunkPoly [Cryp]
AntiVir V8 ----- TR/Crypt.NSAnti.Gen
BitDefender ----- Packer.Malware.NSAnti.A
ClamWin ----- Nothing
Dr.Web V5 ----- Trojan.Packed.Gen
Eset V4 ----- Nothing
F-Prot ----- W32/Heuristic-210!Eldorado
Gdata ----- Packer.Malware.NSAnti.A
Jiangmin ----- Nothing
Kaspersky ----- Packed.Win32.NSAnti.r
Kingsoft ----- Win32.Hack.NSAnti.ge
Mcafee ----- New Malware.w
Microsoft ----- VirTool:Win32/Obfuscator.A
Norman ----- Trojan Hupigon.gen82
Panda ----- Suspicious file
TrendMicro ----- Mal_NSAnti
VBA32 ----- Malware.VB.51
VirusBuster ----- Packed/NSPM

*** 16/19 antivirus engines found virus in this file ***
-------------------------------------------------------------------------

Task done @ 2009/03/13 五 22:44:45.10
Note: The results might be different from that of the GUI version.



掃瞄結果很有趣,就算免疫007現在已經不常見了
但是掃瞄的結果仍然還是報殼的一大堆!
三年不算長也不算短的時間,這麼多廠商還是無法對這種殼提出共有效的辦法
至於其它沒報的,也不代表它們的引擎比有報的這些好
可能是這些廠商基於原則問題,或者是一開始就不報
三年後的今天仍然不報,也有可能是直接帶殼入庫
總之不報的不表示比較差,也不代表其它意義!


對於這樣的一個結果,其實在一般人的操作環境上屢見不鮮
由於大部分的廠商引擎解殼能力普遍不佳,就算是解殼好的廠商
也不是說每一種殼它都能夠解得開!所以遇到這類型的樣本時
把"殼特徵"入庫是很普遍的事情,所以有些程式
例如破解軟體、續號產生器、駭客工具之類的灰色程式
由於作者不想被別人輕易的反解,所以幾乎所有的設計師都會替自己的程式加殼!
當然不見得一定是使用這種專門替病毒家殼的工具,只是加殼程式普遍都會預到這種問題
當預到這種問題時,大部分人有的會選擇忽略警告直接使用,有的則是信以為真
誤以為是病毒就將其刪除,但事實上只是因為加殼的關係所造成的一個誤報而已!
所以告誡每一個正在使用防毒軟體的人,不要完全相信你防毒軟體所報的結果!

3 則留言:

  1. 其實很老實的報「軟體加殼」也是一種辦法,但是變成把判斷丟回給使用者決定。

    不過,如果防毒能偵測原始程式;那允許執行後,由於程式本體被解壓縮到記憶體內,有對記憶體做監控的防毒應該能在這階段攔下吧?我是這樣解釋為何沒HIPS的防毒也有部分動態偵測能力(其實是解殼不了,執行後攔到本體)。

    回覆刪除
  2. @S. Peter

    就一般使用者的角度來看,報殼其實不是很好的方法

    因為你裝防毒軟體的目的就是為了幫你找出病毒,如果你是End user,這個或許不是問題

    但對一般人就是個大問題,他們無法分辨是不是真的誤報,或是不是病毒

    而HIPS的話,由於是直接檢測應用程式行為
    所以可以對行為進行攔截
    通過免疫007出來的程式,雖然是存在於記憶體內執行
    但由於特爭值每一次均會改變(當然必須在確保被加殼對象還可以執行的情況下),所以提取特徵碼沒有任何意義

    因為這個關係,所以廠商紛紛轉向直接報殼程式本身

    回覆刪除
  3. 其實比較麻煩的就是這些灰色程式,因為現在很多惡意程式也是假冒成KEY GENERATOR,利用以往至今報殼造成使用者的困惑來騙人放行。HIPS的確是會好判斷許多,但是對一般用戶來說還是很難接受。我自己現在也感覺摸這東西其實也蠻尷尬的,因為遠比一般人知道的多,卻還不到有經濟價值的程度。

    原來連解壓出來的程式特徵都會不同,那的確是很難防。

    老實說,我想可能正因為不常見了,廠商更沒興趣去改善對這種加殼的偵測,因為誤報的機會也相對下降……

    回覆刪除