首頁 | 網站地圖 | 聯絡我們

殼(Packer)與防毒軟體

 » Bookmark on del.icio.us

殼(Packer)簡介

什麼是殼? 簡單來說,將可執行檔案 (EXE, DLL, SCR…) 壓縮或進行編碼處理的程式,稱之為殼 (Packer),而此動作通常稱為加殼。加殼和一般常見的 WinRAR、WinZip 等壓縮程式有何不同? 主要差別是,殼僅針對可執行檔案處理,而且加殼後的檔案仍可直接執行 (如果成功的話),不必另外手動先解壓縮的程序。

那為什麼要加殼? 加殼後的檔案可能會比原始的大小減少許多,可節省佔用的空間;或者想躲過防毒軟體的偵測。

傳統的防毒軟體技術,是藉由特定的特徵碼來判定是否為惡意程式。通過加殼處理的檔案,其內容已經改變,所以透過特徵碼的比對,便無法辨識。因此,目前的惡意程式有極大比例都是經過加殼處理。

那加殼處理用來對付防毒軟體果真有效? 惡意程式加殼處理之後,防毒軟體是否仍可偵測出來? 或者不行? 即然多數惡意程式都經過加殼處理,是否有某些防毒軟體見殼就報? 本文進行實際測試,看看這些答案為何?

加殼程式清單

我們分別找了十個惡意程式及十個正常無害的檔案,並利用下列十二個加殼程式,分別對這些檔案進行加殼處理。為了避免無效的測試,所有樣本及加殼之後的檔案,如果有無法執行的情形,均予以排除。

  • ASPack 2.12
  • eXPressor 1.5.0.1
  • FSG 2.0
  • KByS 0.28 beta
  • MEW11 SE 1.2
  • NsPack 3.7
  • nPack 1.1.300.2600 Beta
  • PECompact2 2.79
  • Petite 2.2
  • RLPack 1.17
  • UPX 3.00w
  • WinUpack 0.39final

防毒軟體清單

接下來我們使用下列的防毒軟體,分別進行掃描,看看這些防毒軟體是否仍可以偵測出來各種加殼後的檔案或者會不會將加殼後的正常檔案誤報為惡意程式。

  • avast! v4.7 Professional
  • Avira AntiVir Windows Workstation v7
  • AVG Anti-Malware v7.5
  • BitDefender Antivirus v10
  • CA Anti-Virus v8.4
  • Dr.Web for Windows v4.33.2
  • F-PROT Antivirus for Windows v6.0.7.1
  • F-Secure Anti-Virus 2007 v7.02
  • FortiClient v3.0.459
  • Kaspersky Anti-Virus 6.0 for Windows Workstations
  • McAfee VirusScan Enterprise 8.5.0i
  • Microsoft Windows Live OneCare v2.0 Beta
  • NOD32 v2.7
  • Norman Virus Control v5.90
  • Panda Antivirus 2007
  • Sophos Anti-Virus v6.5.7
  • Norton AntiVirus 2007
  • Trend Micro AntiVirus 2007
  • VBA32 Workstation v3.12.0

測試結果

詳細的測試結果請參閱 這裡(解壓縮密碼: pwd@avpacker)。如果對結果有疑慮,我們可以提供防毒軟體掃描的記錄給您參考。

統計

本項測試,總共有 113 個加殼後的惡意程式及 112 個加殼後的正常程式。各防毒軟體無法偵測及誤判的數據如下圖:

殼(Packer)與防毒軟體測試結果統計圖

此統計數值,無法偵測惡意程式的數據,不包含 F-PROT、McAfee、Norman、Panda、VBA32 無法偵測原始未加殼的部分 (即 PDF 表格中的黃色底的部分)。

從這個統計的結果發現,針對加殼檔案分析能力最佳的為 VBA32,完全沒有誤判,而且沒有任何無法偵測的惡意程式(不過 VBA32 在 10 個惡意程式的樣本中,有高達 4 個無法偵測,算是美中不足之處)。其次是 NOD32,同樣完全未誤判任何正常檔案,而且僅有 2 個惡意程式無法判別。再其次是 Microsoft 成績為 2 個誤判、2 個無法偵測。接著是 Kaspersky 和 F-Secure 也不錯。

至於 avast!、AntiVir、AVG、BitDefender、F-PROT 表現中等;Dr.Web 稍差;CA、FortiClient、McAfee、Norman、Panda、Sophos、Symantec、Trend Micro 在這項測試中表現並不儘理想。不是有高誤判,就是無法偵測的數量不少,甚至是兼而有之。其中最令人意外的是,全球知名品牌中的 McAfee、Symantec、Trend Micro 三家產品,看起來似乎對加殼的檔案束手無策。McAfee 不僅有不少無法偵測的檔案,甚至有為數不低的誤判,對於這樣的結果,真令人有些不解。

結論

從這次的測試中,得到一個心得,想像中的結果或者人人口耳相傳的說法,不見得與事實相符。例如: 網路上某些人說 Dr.Web 的解殼能力勝過 Kaspersky,但從結果看起來,恰巧相反,Kaspersky 在這方面的能力略勝 Dr.Web 一疇。從這個結果我們歸納幾點結論並補充我們的看法。

  • 目前加殼處理的惡意程式與未加殼的相較,佔有極高的比例。我們不認為報殼是壞事,前提是能夠精準分辨正常或惡意程式的加殼。這也是我們使用正、反兩類的樣本去測試的原因,我們希望分辨出是亂報殼,還是真的有解殼或特異的分析能力。
  • 解殼或正確分析加殼檔案應該是防毒軟體具備的基本能力。加殼並不用特殊技術,但加殼後的檔案卻可能讓舊的惡意程式躲過防毒軟體的偵測。而且加殼處理後,惡意程式的數量,可膨脹數倍至數十倍,如果防毒軟體需要各別分析所有加殼後的檔案,恐怕落得疲於應付的局面,甚至讓客戶曝露在惡意程式的威脅下。像這次的測試,我們僅使用 10 個舊的樣本,卻讓不少防毒出現數十個無法偵測的狀況。(例如: 無法偵測的數量,CA 有 74 個、FortiClient 有 52 個、McAfee 有 40 個、Panda 有 47 個、Symantec 有 63 個、Trend Micro 有 75 個)
  • 從我們 可疑檔案資料庫 發現,AntiVir 擁有極高的偵測率,往往都能在第一時間 (未經回報樣本) 偵測到惡意程式,但其中相當高比例是加殼的名稱 (例如: 命名中含有 Crypt 字串),我們很好奇是不是多數加殼檔案都會被 AntiVir 偵測為惡意程式。事實證明並不會,雖然 AntiVir 誤報了 14 個,但也僅佔所有樣本中的 12.5%。當然這樣的比例仍偏高,因此 AntiVir 應該仍有改善的空間。
  • 加殼的檔案並不等於是惡意程式。所以如果有無法解殼或無法分析的檔案,不應亂報一通。看起來 CA、Symantec、Trend Micro 似乎不太能分析加殼的檔案,但至少誤判數是 0。相形之下,FortiClient、McAfee、Norman、Sophos 似乎有待加強。另外,用 eXPressor 加殼,AntiVir、BitDefender、Norman 幾乎都報;用 KByS 加殼,avast!、Dr.Web、F-Secure、Kaspersky、McAfee 幾乎都報。我想這些都是很明顯的錯誤,還有其他的例子,有興趣的人可以從 PDF 裡面所記錄的結果得知。
  • 從結果來看,不少防毒軟體都有分析加殼檔案的能力 (是解殼或特殊的分析技術不得而知),但是表現較差的產品其原因不外乎是分析的能力不夠精確或者可分析的殼種類不夠多。
  • 在這次測試的 12 種加殼工具中,某些似乎是防毒軟體的最愛,不管是病毒的作者或一般的軟體開發人員,都應避免使用,以免被偵測到或被誤判。
  • 本次的測試僅以單一加殼處理,如果採用多重加殼,其結果也許會有些差異,有興趣的人可以測試看看。或者如果我們改天有機會可以來做第二次的測試。
  • 防毒軟體的好壞無法透過單一指標來衡量,故本測試僅供參考,選用任何產品之前,請更全面考量與評估自己適用的產品。

11 則迴響在 “殼(Packer)與防毒軟體”

  1. Roger 說:

    對於packer的解釋「什麼是殼? 簡單來說,將可執行檔案 (EXE, DLL, SCR…) 壓縮或進行編碼處理的程式,稱之為殼 (Packer),而此動作通常稱為加殼。加殼和一般常見的 WinRAR、WinZip 等壓縮程式有何不同? 主要差別是,殼僅針對可執行檔案處理,而且加殼後的檔案仍可直接執行 (如果成功的話),不必另外手動先解壓縮的程序。」,沒有說明的很清楚,可能有誤導別人之嫌 (WINRAR或WinZip不一定需要先手動解壓縮)。你知道為什麼packer對防毒軟體的威脅很大嗎?

    對於「通過加殼處理的檔案,其內容已經改變」這句話有問題,不見得檔案內容會改變。

    最後,packer對防毒軟體的威脅,應該是無法得到解決,我想防毒軟體公司現在應該會利用行為偵測的技術來對付未知惡意程式,但效果也不是很好。

  2. 無名氏 說:

    測式不公

    說某些殺軟對殼束手無策

    你們沒有把未加殼的樣本測試過阿,哪知道加殼前所有防軟都可以測到,加殼後束手無策

    還有NOD32對加殼樣本掃描速度實在是太慢了

    建議下次測試
    1測試未加殼樣本偵測率
    2測試加殼樣本偵測率
    3測試掃描時間
    4題供防軟更新時間證明,必免病毒庫時間不平等

  3. Steven 說:

    To Roger,

    1. 也許我在文章一開始的地方沒說的很詳細, 而且說 WinRAR/WinZip 這類要先解壓縮也確實有語病. 不過本文重點還是放在防毒軟體能否正確偵測到加殼後的檔案.

    2. 至於是否加殼後的內容完全相同? 我無法肯定有沒有. 至少這次測試的檔案裡, 並沒有這種例子存在. (不過加殼後完全相同? 那還要加殼嗎? 還是我誤解了您的意思..)

    3. 我不認為所有的防毒軟體都對 packer 無解. 至少這次隨機找到的二十個檔案加殼後所得到的 225 個檔, 有些防毒的表現確實很好. 我們在 PDF 裡面詳細紀錄了掃描結果, 說防毒軟體對 packer 無解我們無法認同.

  4. Steven 說:

    To 無名氏,

    1. 想必您沒有看過 PDF 檔裡的內容, 甚至您沒有弄清楚我們測試的內容. 所有原始未加殼的檔案, 如果防毒軟體不能偵測 (VBA32, F-PROT, Norman 都有, 但我們在一週前就送給他們了, 沒下文也沒辨法. 至於 McAfee 和 Panda 是我們的失誤, 原先以為可以偵測的, 所以並未送樣本給他們. 不過, 這些原始未加殼的檔案如果該防毒軟體無法偵測, 那個檔的加殼後的樣本, 我們就不列入統計. 這個在文章裡都已經有說明了)

    2. 掃描速度不是本次測試的項目. (不過我要說, 有某些防毒軟體的掃描速度還真是明顯很慢. 在測 NOD32 時, 我們並沒有明顯感覺特別慢.)

    3. 每個檔案是否可以被偵測, 請參見 PDF 檔.

    4. 防毒軟體的更新時間在這項測試中並不重要. 這個測試和一般偵測率的測試並不相同. 我們是拿已經可被防毒軟體偵測的舊樣本來測, 所以沒有病毒碼新舊的問題.

    5. 文章最後面說了: “防毒軟體的好壞無法透過單一指標來衡量,故本測試僅供參考,選用任何產品之前,請更全面考量與評估自己適用的產品。” 我們並不是要測試出一個 “最好” 的防毒軟體, 所以掃描時間或其他更多的指標並沒有放入這項測試中.

  5. 無名氏 說:

    抱歉,我沒注意到有PDF檔

    請問你們有確定樣本加殼後都能執行嗎? 某些樣本加殼後就變成無效的檔案了

    還有一點,當然跟病毒庫新舊有關,因為很多廠商就是愛帶殼入庫

  6. 無名氏 說:

    再補充一點
    關於NOD32有些尚未加殼的樣本就是報啟發式了,而非報已知病毒

    這樣如何證明NOD32的脫殼能力?說不定有些樣本加了殼後變成報啟發了

  7. Steven 說:

    To 無名氏,

    1. 有的, 每一個檔案 (包括未加殼或加殼後的檔案) 我們都實際執行過. 所以理論上 20 未加殼的檔案各用 12 種加殼工具去測試後, 應該有 240 個樣本檔. 但我們的測試中, 只有 225 個檔案, 因為我們剔除掉無法加殼或加殼後無法執行的檔案. (實際上這 20 個未加殼的檔案並不是一次就挑選上的, 在我們隨機挑選樣本的過程中, 某些檔案似乎很難被加殼處理. 所以這種我們也不要了, 另外再找其他的. 最後才找出這 20 個大致上都能加殼的. )

    2. 病毒庫的新舊沒關係. 因為我們要測試的是原始未加殼但可被防毒軟體偵測的檔案, 經過加殼處理後, 防毒軟體是否還能精確判別. 這也是為什麼我們要用正、反二類的樣本來測試. 因為我們想確定, 是否有某些防毒會報殼. 再說一次, 我們不認為報殼是不好的, 但我們認為要有能力判別正常檔案或惡意程式才行. 雖然我們是從 20 個未加殼的檔案去使用工具得到 225 個樣本, 這 225 個測試樣本我們並未事先交給任何一家防毒廠商. 不過我們無法保證, 會不會事前剛好某些防毒廠商就取得某些同樣的樣本. 也就是已經入庫了. 但我們用 20 個檔案及 12 種加殼工具去測, 就是希望降低這種巧合. 不太可能那麼巧, 有某些廠商事前剛好都取得 225 個樣本吧?!

    3. 同樣的, 在 pdf 檔裡面詳細記錄了每一個檔案被防毒軟體偵測到的名稱為何, 包括 NOD32, 所以您可以仔細看一下. 不過, 我要澄清一下, 我們並不是在測防毒軟體的 “解殼” 能力. 前面說過, 報殼不是壞事, 不管防毒軟體是否能解殼, 或者有什麼特殊的技術, 總之只要能精確分析加殼後的檔案, 是不是惡意程式即可. 對使用者而言, 是報殼或解殼, 並不重要. 只要能不誤判正常檔案, 惡意程式都能報. 這才是重點. 而且這個測試也不是在測防毒軟體對 “新” 的惡意程式的偵測率(我們也沒有任何計劃想做這類的測試). 我們使用的都是舊的, 已知的樣本. 未加殼前防毒軟體都能正確判別 (少數例外, 但結果已排除在統計數據中), 不管用哪一種加殼工具, 程式的功能並未改變, 防毒軟體理應可以偵測才對.

    4. 雖然 NOD32 是我們銷售的產品之一, 不過其實不必對這次測試的結果, 對 NOD32 有刻意的眼光看待. 我們自認非常公平的看待每一個產品, 而且結果出來之後, 連我們自己都很驚訝. 好幾個產品的結果讓我們很難相信, 但事實就是如此. 而且這個結果真的不代表我們就推薦某些產品, 舉例來說, VBA32 和 Microsoft 的成績很好吧! 但我們不認為這二個產品是適合 User 使用的. 理由是, VBA32 竟然無法測到這些舊樣本中的 4 個, 而且送樣本給他們, 超過一週都沒處理, 這種用會安心嗎? Microsoft 我們感覺用起來很不順手, 又很慢, 用過之後根本就沒想再用了. 再說一個好了, F-PROT 成績也還算可以吧, 但一樣送樣本一週後仍無下文, 而且在我們的 可疑檔案資料庫 中, 經常看到, 幾乎全部的防毒都能偵測, 就 F-PROT 不行, 這樣我們實在是不敢用啊.

    以上希望這樣的說明, 能解答您的疑惑!

  8. 路人丁 說:

    先說聲謝謝,貴公司真有趣,還會主動把訂單退掉:)

  9. Nameless 說:

    看完了席克這篇測試文,覺得非常中肯,請借小弟引用一下,難得看到一篇這麼精彩的文,這筆那些單方面測偵測率的報告來的準確,畢竟一個好的產品不只偵測率要高,誤判率也要低,NOD32是小弟覺得很不錯的一款產品,我真的沒遇到NOD報殼的,NOD的引擎的確蠻優秀的,但是啟發式的誤判問題也是有,舉個例,小弟曾經想抓個對岸的某個會touch到記憶體部分的軟體來玩,結果解壓縮後就報了,我記得是PE…..(我只記得PE兩個字),還有之前曾經想在一臺裝有NOD的電腦上開天空之城加速器來玩(只是無聊而已),結果也報了,如果這類問題特殊程式造成誤報的問題能夠再解決一下(這個應該不好解決),NOD就是我理想中的防毒了。

  10. Kuon 說:

    有趣的測試.
    1.測試的出發點我覺得很好, 只是原文解釋的不夠. 尤其是測試的理念, 而不是過程. 測試的理念都等到comment才回po, 這樣就讓一開始看原文章的人釐不清測試的範圍和目的….
    2.「通過加殼處理的檔案,其內容已經改變」, 這句話應該是這樣的, 有的殼是對Native Code編碼(Pack/Encrypt), 執行時還原; 有的殼是改寫target code (Obfuscate), 那麼很可能就不需要額外的 section 來作 run-time handler 之類的(手法很多, 不一定是這招, 純舉例). 不過強一點的殼, 多數並存兩種方式. 差異在改寫code的過程是自動化還是透過SDK來作.
    所以我覺得這一點還好, 只是沒寫的那麼嚴謹而已, 否則, 這要講究, 還得把每個殼的差異性評定出來才是~~ccc
    3.雖然是代理商, 而以保持中肯的技術分析, 也許是形象的訴求手法, 但我給以肯定…. 加油.
    4.oh 我沒待過各大防毒軟體上下游, 所以沒什麼產業包袱的:P

  11. Steven 說:

    原本我們的出發點很單純(絕對不是為了推銷某個產品而寫), 可是看的人並不單純, 所以用各種預設立場來解讀這篇文章. 這篇文章只是描述一個現象而已, 防毒軟體技術的優劣, 與是否能避免 User 免於惡意程式的威脅, 並沒有絕對的關係.

您的迴響