惡意程式檢測vs防毒軟體 (下)

上期介紹了惡意程式、防毒軟體(靜態分析)以及病毒檢測(動態分析)。靜態分析是透過研究並分析程式碼內容,找出其中唯一的程式碼作為辨識特徵之病毒碼,搭配防毒軟體中之掃描功能,方能自遭受感染的電腦中,找出有問題的惡意程式。

相對於透過特徵值分析惡意程式的靜態分析方法,動態分析方法是將惡意程式放置於沙箱(SandBox)──一個幾乎與實體主機隔絕的環境──中,並於其中促使惡意程式實際執行,觀察該惡意程式的行為並記錄。動態分析本身是著重於惡意程式執行時的行為觀察,即便駭客將惡意程式的程式碼進行更動,則因其執行時仍然進行對受害電腦產生影響的惡意行為,因此不會被混淆分析,仍然可以判斷出該程式為惡意程式。

 

惡意程式vs靜態分析

在此方法中,研究者會先將惡意程式進行反編譯──亦即將惡意程式轉換回程式碼的樣態,並取得惡意程式可能執行的行為及命令等進行相關分析,研究人員會將其中特殊之程式碼片段,指定為特徵辨識用途之病毒碼,彙整之後放入防毒軟體資料庫中供使用者進行病毒防護。若電腦不幸接觸到該惡意程式,則防毒軟體在掃描到惡意程式後,會將其進行反編譯,將程式碼和資料庫中的病毒碼進行比對,若該程式擁有和病毒碼相同之程式片段,則防毒軟體會認定此為惡意程式,並且進行相關處置動作。在以上行為中,研究人員僅是對於惡意程式中的程式碼進行「預測」,判斷此程式是否為惡意程式,因此並未真正執行惡意程式。

而惡意程式為了避免被反編譯、阻止反向工程,在其程式碼中,經常會包含「程式隱匿技術 (Code Obfuscation technique)」,讓解析者無法知道該程式的運作流程和行為。程式隱匿技術原本的作用是用於一般合法軟體中,用來保護程式內容、智慧財產權等,避免軟體的商業機密被他人反編譯後,損害公司之商業利益,或是避免機密性質之內容遭到第三者的竊取和窺視。然而,此種技術卻經常被用於惡意程式中,將自身偽裝成一般正常之程式,規避防毒軟體的偵測。

除了程式隱匿技術之外,阻止軟體被反編譯的還有加殼(Packer)技術,也就是將程式碼用另一段正常的程式碼包裹,保護其中的程式碼不會輕易地被反編譯。在最初,加殼的目的主要是為防止檔案被破解,保護軟體的版權等,但是若此技術被應用於惡意程式中,便是一個防止惡意程式被破解及分析的便利工具。而這樣的加殼,會使得研究人員難以反編譯,進行近態分析動作。

除了以上兩種方法,還有一種透過加密技術(Crypter),將程式碼進行加密,使得惡意程式難以被反編譯以及分析。在加密技術的運行下,會使得研究人員無法順利分析之外,也會因為程式碼經過加密,而規避了防毒軟體的偵測,導致電腦受到惡意程式的侵駭。

雖然靜態分析所需工具和資源較少,並且有一定的準確率,但由於靜態分析並沒有真正執行惡意程式,僅僅是分析程式碼的架構和行為,因此,只要將惡意程式中的惡意行為程式碼隱匿起來,靜態分析便難以準確偵測惡意程式。

 

惡意程式 vs 動態分析

相較於研究程式碼為主的靜態分析,動態分析是實際將程式在幾乎與實體主機隔絕的環境執行,並記錄該程式的行為,若有任何惡意之行為,便可以清楚判斷該程式為惡意程式,可抵禦靜態分析困難的隱匿技術、加殼及加密等,彌補靜態分析的缺陷。在動態分析方法中,多半是以建立沙箱的方式,將惡意程式在其中執行以取得更準確的惡意程式行為。然而,這種方法因需讓惡意程式實際執行,因此所需花費的時間較長,且建立沙箱以及運作所需要的資源和技術都較靜態分析高。此外,若惡意程式裡包含了偵測虛擬環境之功能,則可能被惡意程式偵測到本身處於虛擬環境中,進而不執行或不進行惡意行為以規避研究人員的分析。

為了規避動態分析,最為直接的方式便是偵測程式本身所在的環境是否為虛擬沙箱。由於虛擬化技術往往並非直接與硬體溝通,因此惡意程式便可監測到環境的行為,因而認為自己處於虛擬監測環境中,導致惡意程式停止運作或隱藏其惡意行為,待惡意程式入侵正常電腦後,方開始其惡意行為。

另一種迴避動態分析的方式,是拉長執行時間。有些惡意程式本身會有一定時間的潛伏期,例如電腦遭感染後數天才開始運作、進行惡意行為。由於無從得知、不固定的潛伏時間,即便研究人員將惡意程式放入沙箱中執行,也無法確定該程式是單純的程式或處於潛伏期,待條件滿足後,便會立刻進行竊取或破壞等惡意行為,因此,此種惡意程式對動態分析而言有一定之難度。

除上述兩種規避模式外,還有一種「無檔案攻擊」,顧名思義,這種攻擊一般無實際檔案或下載檔案,而是直接於受害電腦的記憶體中執行。由於此種攻擊無實際檔案,導致研究人員也無實際檔案可供分析,是反制動態分析的一種方式。在動態分析的過程中,一般沙箱會對內部檔案進行隨機掃描,但無檔案攻擊因不使用檔案,使得沙箱無法掃描含有惡意之檔案;並且,此種攻擊不似其餘惡意程式將本身包裝為應用程式,透過應用程式介面(API)進行溝通和惡意行為,無檔案攻擊多半躲藏於系統執行序中,即便沙箱攔截API的資訊,也無從取得惡意程式的訊息;無檔案攻擊通常也包含潛伏之功能,延後惡意行為的執行,招致沙箱有限的觀察時間中,無法順利觀察到惡意程式真正執行惡意行為;甚至此種攻擊往往會移除在記憶體內的感染痕跡,使得研究人員在事後要進行鑑識分析都有其難度。

 

靜態分析 & 動態分析

雖然目前分析技術及設備越來越完備,以及相關工具的進化,針對大部分的惡意程式已可以順利分析。但惡意程式隨著防護及鑑識工具的提升,也會為了避免被分析而增添更多的防護功能。若僅僅透過一種分析方式,難免會因其分析特性的弱點,而產生誤判或無法處理之狀況。因此,必須透過將兩種分析方式結合、互補,方能達到最好之惡意程式防護成效。

靜態分析可能因為隱匿技術而無法判斷,然而,若將該程式放入動態分析環境中,即便該惡意程式經過加殼方式而規避了靜態分析,但該程式要執行時,勢必得自行進行解殼並開始執行,此時,便可以透過動態分析對惡意程式進行分析和判斷,取得準確的判斷結果。

相反地,當惡意程式本身有潛伏期,需數天時間方進行惡意行為。此時,則可以將其程式碼直接進行反編譯,以靜態分析方式觀察並分析,取得其病毒碼,並以此作為判斷之特徵值。

透過靜態分析及動態分析的搭配,可以有效且正確地對惡意程式進行辨識以及後續處理。

為了有效將靜態分析(防毒軟體)與動態分析(沙箱)結合,Virus Check系統透過國家實驗研究院高速網路與計算中心的沙箱以及趨勢科技的防毒軟體,達到全面且完整地對檔案進行分析,減少惡意程式對使用者的威脅。

首先,此系統致力於保護檔案之機密性,由於國際上檢測系統多會將使用者所上傳之檔案分享給付費使用者,導致隱私和機密的流失。

收到檔案後,系統會以防毒軟體進行檢測,同時交予沙箱進行動態分析,將靜態以及動態分析同時且互補地檢驗,以達到最佳檢測成效。

待檢驗完畢後,系統會透過風險值告知使用者該檔案可能為惡意程式之風險為多少,並且附上完整檢測報告供使用者下載。

Virus Check相較於僅進行靜態分析之國際檢測系統,更增添了動態分析之優勢,補足了防毒軟體的不足之處,以獲得完整之分析成果。除此之外,此系統可透過上傳之檔案,建構專屬於台灣之惡意程式資料庫,完整國家資安防線。

為了提高台灣整體資安防護能量、減少感染惡意程式之風險,除了不要下載來路不明之檔案,對於下載之檔案,最好透過檢測系統完整分析,避免電腦遭到惡意程式之威脅。台灣資安能量,需要大家共同參與和努力。

資料來源:

  1. https://www.nccst.nat.gov.tw/ArticlesDetail?lang=zh&seq=1108
  2. http://140.125.45.29/courses/files/network%20security/network%20security%20ch%2016.pdf
  3. https://ithelp.ithome.com.tw/articles/10188209
  4. https://www.itsfun.com.tw/加殼/wiki-9332436-9719216
  5. https://www.itread01.com/content/1551727225.html
  6. https://paper.seebug.org/222/#33
  7. http://speed.cis.nctu.edu.tw/~ydlin/miscpub/indep_study_cywu.pdf
  8. https://www.easyatm.com.tw/wiki/電腦病毒
  9. https://blog.trendmicro.com.tw/?p=49025

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *