行政院國家科學委員會專題研究計畫 成果報告
前瞻性雲端安全儲存、防護、行為分析與觀測平台--子計
畫二:基於機器碼之 Windows 惡意程式行為分析雲端平台
(2/2)
研究成果報告(完整版)
計 畫 類 別 : 整合型 計 畫 編 號 : NSC 100-2218-E-009-004- 執 行 期 間 : 100 年 08 月 01 日至 101 年 07 月 31 日 執 行 單 位 : 國立交通大學資訊工程學系(所) 計 畫 主 持 人 : 謝續平 計畫參與人員: 博士班研究生-兼任助理人員:卓政逸 博士班研究生-兼任助理人員:陳仲寬 博士班研究生-兼任助理人員:李秉翰 公 開 資 訊 : 本計畫可公開查詢中 華 民 國 101 年 10 月 31 日
中 文 摘 要 : 全系統層次的惡意程式行為分析技術可以比以往傳統靜態分 析技術更精確地判斷一個執行檔案行為是否影響系統安全。 本計畫擬提供一個可信賴性的分析服務與雲端應用層的安全 防禦做結合,藉此為雲端服務技術做安全性的把關。本研究 將探討此技術如何結合虛擬機器技術與雲端運算,以適用於 分析工作的分派,使檔案可以自動地、大量地透過連續的分 析檢驗來達到程式行為分析。有別於傳統的軟體即服務 (SaaS)模式,本計畫除了提供可疑檔案上傳平台介面外, 還開發出一個較為主動的檢驗服務,針對網際網路上現有檔 案進行蒐集與分析,除了可供使用者判斷下載檔案的安全 性,也可讓資安人員用來驗證其開發出的檢測軟體是否做出 正確的判斷。 本研究計畫共有兩大研究成果:(一)使用全系統層次的行 為分析技術來擷取惡意程式行為以達到更準確的分析、 (二)開發與設計雲端架構分析平台以提高安全分析產能。 雲端架構分析平台可以自動地蒐集網路上的惡意程式樣本進 行分析,並且對其行為的分析結果利用分散式資料庫儲存。 而分析的階段皆以自動化、平行化的方式來增加運算節點的 使用率以提高分析的產能。本計畫將會實際設計與開發一個 雲端架構分析平台,並會對惡意樣本做行為分析,以利用其 惡意行為來偵測未知的惡意程式樣本。 中文關鍵詞: 惡意程式、程式行為分析、雲端安全
英 文 摘 要 : Whole-system-level behavior-based analysis is more accurate than tranditional signature-baed for malware detection. Behavior-based analysis can be used to expose the system effects after executing malware. By providing service trustworthiness and cloud security, our analysis platform can examine cloud storage
automatically to secure the cloud application. To this end, we integrate the VM-based malware analysis with cloud computing for both accuracy and
efficiency. This project developed a proactive service for the Internet to collect and analyze malware. The analysis results can provide a security judge for users before file download, and the whole-system level behavior-based analysis is helpful verify developed software for security testing. There are two major accomplishments of this research project: (1) To extract the behaviors of malware by
using whole-system-based analysis, (2) To design and develop a cloud analysis platform which benefits on the ability of cloud computing. The cloud analysis platform can automatically collect and analyze executables on the Internet, and save the analysis result as reports which are stored in distributed database. Due to the scalability of computation on the cloud, the platform can provide better
performance for analysis. In this project, we developed a security analysis platform and a whole-system-wide analysis tool. Both of them are aim to extract the malicious behaviors of malware for further malware research.
英文關鍵詞: Cloud computing, Malware behavior analysis, Malware detection
I
行政院國家科學委員會補助專題研究計畫
■成果報告
□期中進度報告
前瞻性雲端安全儲存、防護、行為分析與觀測平台--子計畫二:
基於機器碼之 Windows 惡意程式行為分析雲端平台(2/2)
計畫類別:■個別型計畫 □整合型計畫
計畫編號:NSC 100-2218-E-009-004-
執行期間: 100 年 8 月 01 日 至 101 年 7 月 31 日
執行機構及系所:國立交通大學資訊工程學系(所)
計畫主持人:謝續平
共同主持人:
成果報告類型(依經費核定清單規定繳交):□精簡報告 ■完整報告
本計畫除繳交成果報告外,另須繳交以下出國心得報告:
□赴國外出差或研習心得報告
□赴大陸地區出差或研習心得報告
□出席國際學術會議心得報告
□國際合作研究計畫國外研究報告
處理方式:除列管計畫及下列情形者外,得立即公開查詢
□涉及專利或其他智慧財產權,□一年□二年後可公開查詢
中 華 民 國 101 年 10 月 31 日
II
摘 要
全系統層次的惡意程式行為分析技術可以比以往傳統靜態分析技術更精確地判斷一個執 行檔案行為是否影響系統安全。本計畫擬提供一個可信賴性的分析服務與雲端應用層的安全 防禦做結合,藉此為雲端服務技術做安全性的把關。本研究將探討此技術如何結合虛擬機器 技術與雲端運算,以適用於分析工作的分派,使檔案可以自動地、大量地透過連續的分析檢 驗來達到程式行為分析。有別於傳統的軟體即服務(SaaS)模式,本計畫除了提供可疑檔案 上傳平台介面外,還開發出一個較為主動的檢驗服務,針對網際網路上現有檔案進行蒐集與 分析,除了可供使用者判斷下載檔案的安全性,也可讓資安人員用來驗證其開發出的檢測軟 體是否做出正確的判斷。 本研究計畫共有兩大研究成果:(一)使用全系統層次的行為分析技術來擷取惡意程式 行為以達到更準確的分析、(二)開發與設計雲端架構分析平台以提高安全分析產能。雲端 架構分析平台可以自動地蒐集網路上的惡意程式樣本進行分析,並且對其行為的分析結果利 用分散式資料庫儲存。而分析的階段皆以自動化、平行化的方式來增加運算節點的使用率以 提高分析的產能。本計畫將會實際設計與開發一個雲端架構分析平台,並會對惡意樣本做行 為分析,以利用其惡意行為來偵測未知的惡意程式樣本。 關鍵詞 惡意程式、程式行為分析、雲端安全III
Abstract
Whole-system-level behavior-based analysis is more accurate than tranditional
signature-baed for malware detection. Behavior-based analysis can be used to expose
the system effects after executing malware. By providing service trustworthiness and
cloud security, our analysis platform can examine cloud storage automatically to
secure the cloud application. To this end, we integrate the VM-based malware
analysis with cloud computing for both accuracy and efficiency. This project
developed a proactive service for the Internet to collect and analyze malware. The
analysis results can provide a security judge for users before file download, and the
whole-system level behavior-based analysis is helpful verify developed software for
security testing.
There are two major accomplishments of this research project: (1) To extract the
behaviors of malware by using whole-system-based analysis, (2) To design and
develop a cloud analysis platform which benefits on the ability of cloud computing.
The cloud analysis platform can automatically collect and analyze executables on the
Internet, and save the analysis result as reports which are stored in distributed
database. Due to the scalability of computation on the cloud, the platform can provide
better performance for analysis. In this project, we developed a security analysis
platform and a whole-system-wide analysis tool. Both of them are aim to extract the
malicious behaviors of malware for further malware research.
Keywords
IV
目 錄
壹、 計畫內容及目的 ... 1 一、 前言及背景說明 ... 1 二、 文獻探討與相關研究 ... 2 三、 計畫目的 ... 4 四、 研究方法 ... 5 貳、 計畫項目完成度 ... 14 參、 計畫成果 ... 16 一、 產學合作計畫 ... 16 二、 學術貢獻 ... 17 三、 產業貢獻 ... 18 四、 特殊榮譽 ... 18 五、 系統建置-雲端惡意程式分析平台 ... 20 肆、 技術方案優越性 ... 41 伍、 結論與展望 ... 43 陸、 參考文獻 ... 441
壹 、 計 畫 內 容 及 目 的
一 、 前 言 及 背 景 說 明
由於雲端計算能有效利用實體機器的運算資源,藉著聯集所有相連接的運算節點來增加安 全分析的產量。防毒軟體公司早在進行郵件過濾時便發現,以傳統的方式如透過特徵偵測或靜 態分析技術先取得惡意程式之特徵,再將此特徵用於系統中的檔案或是網路上的封包做掃瞄比 對,可以十分準確且快速的達到阻擋攻擊的效果。因為目前病毒的數量更為龐大、變化又快, 病毒碼擷取特徵的方式來處理惡意程式已成效不彰,所以借助雲端運算的能力去收集大量的樣 本並進行資料探勘以找出有用資訊,以解決病毒防疫空窗期與防毒軟體日益肥大的問題。 除此之外,新型的攻擊手法使傳統病毒碼的偵測效益降低。先進的惡意程式撰寫技術,加 殼(Packing)、多型(Polymorphism)、變形(Metamorphism)、核心等級匿蹤技術(Kernel Level Rootkit)等,會讓同一種行為的惡意程式有不同的病毒特徵。故國內外學者在近年來皆 朝著動態分析方式來萃取惡意程式的行為特徵,而不再是靜態的二進位執行檔案之特徵值。為 了更全面的分析,越來越多學者開始採用多面向的分析方式來做惡意程式偵測。目前分析技術 可分成兩大類:(一)靜態分析(static analysis)、(二)動態分析(dynamic analysis)。靜 態分析將能夠針對檔案的內容做檢測,希望能夠找出不應該存在於檔案內容,或是能夠判斷該 檔案是否有可疑的加殼加密行為。此部分主要以特徵比對(signature-based)來做判斷。此外, 動態分析而是直接模擬運行時的狀態,若該檔案為可執行檔時,我們將利用已知的動態堆疊資 訊取得技術,來檢測該檔案是否在執行時期,有取得堆疊資訊的能力。由於動態分析與靜態分 析能夠互相彌補之不足的地方,所以本計畫目標將設計一個分析平台,藉此平台能夠結合多種 分析技術,已達到較完整的檔案檢測分析。 本系統架設在一個不對外公開的區域網路之內,屬於一種「內部雲 (private cloud)」的雲 端應用。不同於國內大部分雲端系統,業者或是系統管理員只能夠提供Hadoop運算的帳號,其 「公開雲 (public cloud)」的系統架構並不適用於惡意樣本分析平台,原因有下列敘述:第一, 動態程式分析不能夠利用MapReduce來平行化其動態分析的流程,因為程式被執行的控制流程 是相互關聯的,在不同的系統狀態,即使給予相同的指令也會有不同的結果產生,所以不能把 動態程式分析分散處理。第二,提供虛擬環境來讓租用者分析惡意程式,可能會造成誤判。近 年來已經有出現偵測虛擬環境的惡意樣本,如果在分析環境都只有在虛擬環境之中,則該樣本 將永遠不會執行其惡意程式碼。最後,公開雲端架構往往需要複雜的使用者權限管理,而因為 資料分享共用的原因,個人與系統的安全性也會面臨考驗。如果此系統架構太過於公開,很有 可能被有心人士入侵,修改其分析結果。綜合以上三點,本系統要提出一個利用雲端運算所帶 來的高產量、可擴充性和高儲存能力,來實作一個樣本分析平台。 雲端分析平台並不需要有繁雜的使用者管理,它可以被視為一個惡意程式分析的叢集式電 腦。主要的架構包含分散式資料庫、檔案輸入介面和惡意樣本分析程式。而蒐集到的樣本資料 可以利用Hadoop做資料統計或是更深入的特徵碼分析。分散式的資料庫目前以Facebook團隊開 發的Cassandra作為基礎,其讀寫速度與資料庫的大小只有常數關係,並不會因為資料庫太大而 造成寫入速度變慢。而檔案輸入介面,可包含網路爬蟲以及使用者上傳兩大部分。網路爬蟲則2 是利用Nutch (利用Hadoop實做的搜尋引擎建立系統) 來蒐集散播在網路上的資料,當作本系統 的輸入。除此之外,還可以接收使用者上傳的檔案,提供雲端檔案安全性檢驗的服務。惡意樣 本分析程式將會整合先前所開發的動態程式分析工具,其分析項目有包含靜態可執行檔分析、 檔案文件安全性分析和利用虛擬機器觀測程式行為。惡意程式樣本分析可以持續的開發,有彈 性的掛載在本子系統上,以檢驗雲端的檔案或是使用者欲檢測的檔案之安全性。
二 、 文 獻 探 討 與 相 關 研 究
惡意樣本的蒐集已是資安相關領域中相當重要的問題,許多樣本蒐集平台也紛紛被開發出 來[1][2][4][5]。以往的樣本蒐集大多採取 Honeypot 的方式來誘捕攻擊者,分析其一連串的入侵 手法以及殘留在電腦系統中的惡意檔案。但利用 Honeypot 蒐集的效率並不高,故有學者紛紛 提出增加被攻擊的機率以提高樣本蒐集的速率[3]。由於雲端技術的誕生,使用者可以靠著自行 架設的機器來擷取網路的檔案,並且可以多台同時合作和達到橫向擴展(Horizontal expandable) 來達到運算的可擴充性。利用 MapReduce 的雲端計算架構來平行化擷取網路檔案,可以讓使 用者在最短的時間內建置自己檔案樣本來源。 近年來,惡意程式樣本分析也因虛擬機器的發展,而有了更多分析的可能性。透過虛擬機 器所提供的隔離性與對系統的完全控制,可以讓分析人員深入的了解其資料流向以及對系統的 影響。這些利用虛擬機器分析的系統[10][11][12][14],因為需要龐大的運算能力來模擬整個系 統的運行,所以無法大量的被應用在現實生活中。尤其是在樣本儲存的架構中,傳統的 SQL-like 的資料庫已被證實其存取速度會因項目數量增加而減少。在分散式儲存系統中的 Cassandra 利 用 DHT(Distributed hash table)的方式來儲存資料,除了存取時間不與資料量的大小成正比,還 可以輕易的擴充儲存節點,非常適合用來儲存惡意樣本。儲存在資料庫中的惡意樣本除了可以 供研究使用,也可以利用分群的技術來實作未知樣本的惡意行為偵測[6][7][8][9]。 結合分析以及樣本蒐集的惡意樣本分析平台,並非本系統的獨特創新[13][15][18]。這也驗 證了此系統的可行性之高,並且可以實際的運用在病毒分析與偵測的領域。本系統的創新在於 如何簡易的掛載不同種類的分析工具,甚至往後可以推廣到其他相關研究或是提供樣本給學術 界研究分析。為了在為期一年的開發期完成,我們評估了不同種的工具系統,並且修改和整合 其原始碼至此子系統。除了整合現有的工具,還實作一些機器管理機制以及節點間通訊協定, 讓此系統更加有彈性。在實作部分,我們利用高階語言來物件化功能、提高可讀性和簡易化偵 錯以縮短開發時程。 在惡意程式分析的方法中,本系統將模擬特殊的記憶體與暫存器架構,在記憶體與暫存器 額外附上一個 bit,用以標記該暫存器或是記憶體所存的值是否遭受污染(tainted),1 為 tainted, 0 為 clean。在此系統會將不是由程式本身產生的記憶體位址覆寫標記為 taint,並監控程式的執 行過程中,是否由已標記 taint 的記憶體或暫存器感染其它更多的記憶體和暫存器,並觀察系 統是否執行已標記 taint 記憶體區塊內容。 觀察現今多數惡意軟體,常常不以癱瘓對方電腦為主要目的,而是以竊取對方隱私資訊為 首要目標,如:間諜軟體與側錄程式…等。這些惡意程式不經使用者同意,將竊取來的私密資 訊透過網路封包傳送給惡意攻擊者。因此,在 Panorama[25]的方法中提出,若將使用者的隱私 資料標示起來,並監控存取此資料的程序或應用軟體,記錄其存取途徑是否有任何的惡意行為,3 如:不經使用者許可將資訊經過網路封包傳遞,若發現這一類程序,則該程序極有可能是惡意 程式。透過這種方式,便能以自動化的方式檢測是否有可疑的間諜程式夾雜於應用程式當中。 此外,惡意軟體常運用 Hooking 技術來控制惡意程式的執行流程,讓惡意程式等待使用者 執行某些特定的動作後,(如:當使用者敲擊鍵盤時,鍵盤側錄軟體便開始計記錄使用者所敲 擊的資訊,或者當惡意程式開始執行時,會通知 rootkit 將自己的程序隱藏起來)。因此如果能 在記憶體中找到這些惡意程式的掛載點,便很有機會檢測到惡意程式的存在。現今大多數檢測 軟體的作法是觀察程式執行記憶體中是否存在惡意軟體中,通常會包含的 Hooking 特徵,這類 軟體包括 VICE[36]、System Virginity Verifier[37]。假若檢測結果發現應用程式中包含特定 Hooking 特徵碼,則代表該程式有可能是惡意程式,但如果惡意程式使用一個未曾見過的 Hooking,則無法被偵測出來。因此 HookFinder[38]提出的方法中將模擬一個系統,嘗試標記惡 意軟體所帶來的更動,如:機碼的更改。這些更動很可能是由某個 Hook 所為,接下來系統會 監控整個程式的執行流程。如果發現 X86 CPU 的 Program Counter 所載進來的記憶體位置,是 因為剛才的更動所造成的,則代表目前的程式可能正嘗試要執行惡意軟體,因此可以判斷目前 執行的程式極有可能夾帶惡意程式。 惡意軟體為了隱藏自己的存在,不被防毒軟體偵測,因此常透過加殼的方式來打亂程式特 徵碼,逃過反向程式追蹤。只有在程式執行的過程中,才依序將程式解譯出來並寫入記憶體執 行,因此在執行前,無法透過特徵碼檢驗的方式發現此類惡意程式。目前已有許多研究希望能 夠以自動化的方式解譯惡意程序正確執行順序的方法。不過目前為止,除了特定已知的解譯方 式,還無法針對特殊加殼的方式進行解譯。由於執行任何程式之前,必須先將該程式載到記憶 體中才有可能執行,惡意程式當然也不例外。因此在 Renovo[39]的方法中提出,使用模擬環境, 讓目標程式在模擬系統上執行,並監控所有進行記憶體寫入與程式執行流程變更的指令。此外, 開闢一塊虛擬的記憶體區塊,標記程式執行過程新寫入記憶體的程式碼,最後將這些程式碼依 序 Dump 出來,以取回程式碼執行的正確順序,便能對程式碼進行特徵碼比對。
動態汙染分析除了使用軟體實作外也可以使用硬體實作,例如:MIT 的 Computer Science and Artificial Intelligence Laboratory 提出建構一個特製處理器去實作的方法[41],在處理器中的 暫存器都有一個額外的位元去記錄該暫存器的值是否有被 taint,而記憶體中可被存取的最小單 位也有一個功能相同的額外位元。在[42]中也提出一種建構在 Raksha[43]系統上的實作方法。 資料一開始進入系統時就會根據設定的規則去判斷要不要 taint 資料,若是 taint 的資料被拿來 當作指令執行或是跳躍指令的目標位址,則可判定為惡意攻擊。由於使用硬體來實作,速度快 但是成本花費太高;若使用軟體來實作,則雖可降低成本但是效率不佳,所以我們選擇使用軟 體實作再加上平行處理的技術,這樣就可以提高效率及降低成本的目標了。
4
三 、 計 畫 目 的
本研究執行之目的有二:(一)使用全系統層次的行為分析技術來擷取惡意程式行為,(二) 開發與設計雲端架構分析平台以提高安全分析產能。以下對此二大目的加以說明: 使用全系統層次的行為分析技術來擷取惡意程式行為 由於雲端計算在應用上提供平台服務(PaaS),不管是客戶或是終端使用者皆有可能放置 檔案到此平台,並藉由此平台進行傳遞、交換、散播等動作,這些方式與傳統網際網路上檔案 交換並無太大不同,造成雲端平台上也有傳統網路攻擊的疑慮。對於雲端提供商與雲端平台客 戶來說,若是在雲端上發生類似傳統網路的蠕蟲攻擊,營運上的損失與對商譽的傷害將是無法 想像的巨大。因此,放置在雲端平台上的檔案安全與否變得格外重要。而如背景所述,傳統靜 態分析對於雲端平台上千變萬化的檔案已經不夠及時,必須等待特徵碼產生後才能提供為判斷 的依據。 因此本研究計畫之首要目標為,開發與整合多項檔案安全分析技術,並將其融合至雲端分 析平台以顧及多面向的雲端檔案。首先,分析雲端平台上的目標檔案是否內藏加殼程式來躲避 分析。若目標檔案為可執行檔,則進一步利用全系統層次的行為分析技術來詳細分析該執行檔 是否可能對使用者系統造成危害,並進一步產生報告。有了以上的安全分析,可保護雲端服務 平台,降低使用者上傳的未知檔案傷害風險。 開發與設計雲端架構分析平台以提高安全分析產能 檔案分析的方式眾多,越來越多不同面向的分析工具大量的產出。這些不同面向的分析工 具因為分析的方法不同而有互補的作用。靜態分析與動態分析各有其優缺點,靜態分析雖然運 算負擔較動態分析小,但卻無法得知執行時期的資訊,所以在分析應用上較適合特徵式偵測。 另一方面,動態分析除了負擔較大的運算開銷以外,分析範圍需要大量的運算時間搭配,故並 沒有一種方法是完美的。如果能夠簡易的整合市面上各種分析工具而達到互補作用,又可有效 且平均的分配至多台電腦,則可以加強分析能力又可縮短分析時間。 為了增加分析的效率與產出,需開發一個雲端架構式的分析平台,把目前現有的分析工具 模組化,依使用者需求掛載分析模組且動態的去管理。這個平台必須具備有:一)可擴充性、 二)自動化、三)高容錯性。可擴充性可以讓本分析平台藉著增加運算節點來達到效能的提升, 有效的利用運算資源。然而,管理者需要同時管理多台電腦,而此系統的眾多繁雜的設定檔, 將會是往後維護人員的最大問題,自動化的管理與設定將會使系統更方便使用。由於在雲端架 構中有需多節點會交互溝通,容錯性可以讓系統工作得更久更穩定。我們將實作與設計一套系 統架構,符合雲端架構之精神來實作該分析平台。除了可以提供分析服務以外,該平台還有自 行蒐集網路文件檔案的能力,可以讓資安人員測試自行開發的分析工具,提早搜集網路上行為 可疑的文件檔案。開發人員可以不用費心去管理其分析模組與複雜的架設系統,也可以輕鬆快 速地擁有客製化的分析結果。5
四 、 研 究 方 法
本分析平台主要由四個部分所組成:一)檔案來源子系統、二)儲存子系統、三)分析器 管理子系統、四)全系統層次的行為分析系統,彼此間的關聯性可由錯誤! 找不到參照來源。 及錯誤! 找不到參照來源。的架構看出。本平台主要分成兩大流程(圖表 10),第一,透過檔案 來源子系統來取得分析所需的檔案資料,接著依照固定的格式放入儲存子系統中。第二,分析 器管理子系統從儲存子系統中取得待分析的檔案資料後,開始進行分析。全系統層次的行為分 析系統為分析器管理子系統中的其中一模組,亦為本計畫的重點開發項目。以下將分部介紹之 上述四大子系統,並在最後以一個正規化的模式表現之。 圖 表 1 本 系 統 架 構 圖 檔案來源子系統 本系統需要接收大量的檔案作為分析的對象,而此系統必須具備以下特色:(1) 處理大量檔案的能力、(2)各種不同的檔案來源,例如:網際網路、檔案系統、P2P 網路、E-mail…等,以分析並取得各種不同型態的惡意軟體、(3)適用於各種不同的 使用方式,例如:網路爬取、使用者上傳。為滿足以上需求,本系統實做一個 PushTask 之函式庫,此 API 可將任意檔案輸入本系統進行分析,並指定該檔案的優先權。此 PushTask 函式庫先產生檔案的工作識別(UID),在將此 UID 放入 Redis 中,並將檔 案內容存入 Cassandra 中,將檔案輸入我們的系統中。利用此 API 為基礎,我們實做 了兩種檔案來源系統:網頁爬取系統和批次檔案輸入。在網頁爬取部分,我們使用了 Nutch 為爬取的開發工具基礎。Nutch 為 Apache Fundation 名下的開放原始碼計畫,是一套由 Java 建構的網路搜尋引擎軟體,具有相
6
當良好的跨平台特性。並且支援 hadoop 系統,具有良好的可擴充性。Nutch 也提供了 許多 API 可以使用,分便於系統的架構開發。
圖 表 2NUTCH系 統 架 構
圖表 2為 Nutch 的系統架構,如圖中所示 Nutch 可以分為網頁爬取(Crawler)以
及搜尋引擎(Searcher)兩部分。網頁爬取部分由一組使用者定義好的初始網頁(seed) 做為搜尋的起點,搜尋與起始網頁相關聯的網頁,並將網頁的連結資料取出(update) 建構成新的初始網頁(web db)進行下一輪的搜索。在本系統中,只需要對網頁做抓 取(圖表 2左半部)的動作,而不需要進行索引以及搜尋的部分,因此我們利用 Nutch 提供的 API 進行網頁爬取並省略做索引搜尋的部分以增加系統效能。並透過 hadoop 系統,藉由 mapreduce 將運算分散至各節點進行運算,增加整體產出。 在 Nutch 爬取大量網頁時,會抓取許多不同格式的檔案,如:exe、jpg、zip、html… 等,而我們系統目前主要是以分析可執行檔為主,因此在爬取網頁檔案時,僅保留系 統可以分析的檔案格式(exe、zip、rar),過濾掉其他無法分析的檔案格式。在 Nutch 抓取檔案後,會執行 PushTask 函式,將檔案輸入到我們的系統中做分析儲存。Crawler 部分為此系統一長期穩定的檔案來源,僅具有最低程度的優先權。 在批次檔案輸入部分,我們撰寫一支程式將一個資料夾下的所有檔案透過分析平 台的函式庫輸入到分析平台上做分析。此程式會搜尋所有資料夾下的檔案,並產生該 檔案之工作識別(UID),並將工作識別放入 Redis,在將工作識別連同檔案內容放入 Cassandra 做保存。檔案系統輸入這部分是將檔案系統上的資料輸入到我們的系統做 分析,例如:單一資料夾、或遠端掛載的資料…等,這部分主要是應用在批次處理資 料,會需要一定的反應時間,應此在系統中具有高於 Crawler 的優先權。 儲存子系統 在儲存系統方面,由於此研究已經被探討多年,市面上也有大量的資料庫可以應 用於本分析平台上。為了節省開發時間以及維護方便,經過深入地了解以及搜索之後, 我們選擇了兩個現有的資料庫系統 Cassandra 和 Redis,透過修改程式、設定檔案和內 部些許的程式碼,快速地達到本分析平台所需要的儲存能力。 Cassandra 是一套分散式的資料庫系統,在分析平台中用來儲存未分析的檔案內 容以及分析完的結果。會選用 Cassandra 的考量在於以下三點。
7 1. NoSQL:Cassandra 是採用 Key-Value 的儲存方式,因此在資料庫有大量資 料的情況下,讀寫速度遠快於一般 SQL 的資料庫。此外,Cassandra 在資料庫的 欄位也有別於 SQL 資料庫,通常 SQL 資料庫的欄位必須在一開始就訂定,之後 如果有新增或移除,則必須重新處理資料庫的內容,而 Cassandra 正好相反,它 能動態的新增或移除欄位,讓整個分析平台在新增分析模組的情況下變得更為簡 單。
2. 系統穩定度高: Cassandra 的分散式是採取 ring 的架構,因此每台 Cassandra 都是相同的身分,意即非主從式(Master-Slave)的架構,所以當任何一台資料庫毀 壞,也不會造成整個儲存系統停擺。另外,在新增資料庫機器時也不需要將資料 庫全部關閉,所以能使整個分析平台的執行更加穩定,不需要因為新增機器而暫 停運作。
3. 可與 Hadoop 整合:Cassandra 在 0.7 版以後提供與 Hadoop 整合的功能,能 將資料庫的內容直接進行 Map-Reduce ,因此分析平台系統在後期的發展能將分 析完的結果做進一步的處理。 由於以上考量,本系統將 Cassandra 當作是整個系統的後端,專門儲存所有 的檔案以及其結果,相較於稍後會提及的 Redis,Cassandra 所存放的資料是屬於 永久性的。 Redis 是一單機的資料庫系統。在分析平台中以佇列(Queue)的模式來儲存未 分析的檔案的工作識別號碼,而分析模組則從此處拿取工作識別號碼來向 Cassandra 取得未處理的檔案。選用的考量如下: 1. 讀寫快速:Redis 將所有的資料庫內容存放在記憶體中,並且定期會備份至 硬碟內。一般而言,硬碟的讀寫速度小於記憶體的讀寫速度,所以在考慮 儲 存 暫 時 性 的 過 渡 資料 ( 例 如 : 工 作識 別號 碼 ) 時 採 用 Redis 而 不 是 Cassandra。
2. 豐富的資料結構支援性:Redis 本身支援 List(有序) 和 Set(無序)兩種 資料結構,同時也有實作排序的功能,因此在本系統的開發過程中就運用 到其 List 功能以及不同的檔案來源來實作出工作優先權佇列(Priority Queue),將其運用在工作識別號碼的分配。下面詳述。 本系統在 Redis 部份實作了工作優先權佇列,架構如圖表 3,其主要目的是為了 因應不同的檔案來源而給予不同執行順序的安排。分析器 A 到 D 代表不同種類的分 析器,每種分析器都有三個佇列,佇列則是用 Redis 的 List 資料結構實作而成,每個 佇列分別代表不同的檔案來源: 使用者上傳、硬碟讀取和 Crawler 取得。當分析器拿取工作識別號碼時就由優先序高 (越小越高)的拿起。
8 圖 表 3 工 作 優 先 權 佇 列 於 REDIS 內 的 實 作 概 況 分析器管理子系統 在本系統中,可以掛載多個分析器。藉由多個分析器的分析結果,以取得更準確 的結果。因此我們需要建構一套分析器管理子系統來管理各種不同的分析器,讓各種 不同輸入輸出的分析器能正常運作於本系統中。分析器管理子系統具有以下功能: 1. 自動化管理分析輸入輸出:透過將輸入輸出流程自動化,可以降低分析器 開發者測試所需時間,也可為此系統取得大量分析結果可供使用比較。本 子系統會自動從資料庫抓取分析檔案,並在執行完成後自動將結果存回資 料庫,可以達成自動化管理分析輸入輸出。 2. 快速方便的安裝、起動、停止分析器,易於管理:藉由快速安裝分析器, 可以將分析器快速的安裝在新節點之上,增進系統可擴充性。而快速啟動 停止分析器,可以增加本系統運作上的彈性,進而達到分析器的動態調整。 本子系統會自動讀取分析器開發者所撰寫的設定檔,根據該設定檔可以讓 我們快速的安裝起動分析器。而在起動時,系統會記錄分析器執行時的 PID, 系統便可依此停止分析器。 3. 整合各種不同形式的分析器:由於惡意軟體的種類眾多,並無任何可以偵 測所有惡意軟體之技術。因此需要使用多種不同形式之分析技術,以取得 最完整的結果報告及準確的偵測率。本子系統透過一個統一的設定檔,來 記錄不同形式分析器的使用方式,讓系統可以整合各種不同形式的分析 器。 4. 執行多個分析器於單一節點,以增進系統產量:由於各種分析器執行時所 消耗的系統資源不一,而單一一台分析器也鮮少用盡系統資源。因此透過 同時執行多個不同分析器於單一節點上,增加系統資源的使用率,並促進 系統產量。在此子系統中,我們可以動態增減執行的分析器,並同時分派 任務執行,以達到單一節點執行多分析器。 欄位名稱 欄位說明 範例
COMMAND 執行分析器時所需的指令 COMMAND= ./scanner.sh
LOG 分析報告的儲存位置 LOG = clamav.out
TYPE 分析器的名稱 TYPE=ClamAV
9
要將分析器運行於本系統中,只需要編寫一個額外的設定檔(config),以 key-value 的形式將分析器的啟動以及結果位置做設定,如圖表 4。 透過設定 設定檔中的 command 欄位(如:COMMAND= ./scanner.sh),可以指定分 析器執行的方式,本系統便可自動分配檔案並且執行分析。log 欄位則用來 指定最後的結果存放位置(如:LOG = clamav.out),本系統便會自動保存 分析結果。 我們實做 AnalyzerInvoker.rb,搜尋分析器目錄裡的設定檔(config),取得各分析器的啟動方 式以及輸出檔案。接著透過先從 Redis 中的佇列取得要分析的工作識別後,以該工作識別去查 詢 Cassandra 資料庫中抓取相對應的檔案。並利用設定檔中的起動方式將分析器啟動。分析完 畢後,則依據設定檔中的分析結果位置取得分析報告,將最後結果回存到資料庫中。 全系統層次的行為分析系統 在惡意程式分析系統部分,本計畫已開發一分析系統,藉由著整合虛擬機器與程式行為分 析來達成揭露隱藏行為的惡意程式。揭露方式主要以登錄檔、檔案系統、網路行為等為主,利 用去年開發的分析平台繼續增強其功能性。 圖 表 5 全 系 統 層 次 的 行 為 分 析 系 統 偵測程序修改行為:本子系統為了達到偵測所有程序的行為,進一步分析惡意程式的攻擊 行為,此實做系統將針對兩個方向進行分析:是否有新增的程序、是否有隱藏程序存在。基於 虛擬機器的應用上,根據虛擬機器內所得到的程序資訊以及從虛擬機器外取得系統資料並分析 後的資訊,進一步比對兩方程序紀錄是否存在差異,藉此來偵測出是否有可疑未知程序產生以 及隱藏程序的存在。我們將在 LINUX環境下以 QEMU 建立虛擬機器,當欲檢測之檔案輸入時, 將其運行在虛擬機器上,再利用 QEMU 的 SNAPSHOT功能來協助實做此系統。
10 偵測檔案修改行為:運行惡意樣本(ROOTKIT)之後可能讓系統查詢檔案的函式遭受竄改。 故無法在系統內部直接做偵測。為了達到精準的偵測,我們透過虛擬磁碟上的內容,逐一的將 檔案萃取出來比對。利用修改前後的差異性,來得知那些檔案被修改、創建、刪除。本子系統 利用此資訊來達到偵測檔案修改行為之目的。為了找出系統內是否有被ROOTKIT隱藏的惡意檔 案,本系統運用了 TSK(THE SLEUTH KIT)來協助我們偵測該行為。此套件可以觀察虛擬硬像檔 的檔案系統裡所有資訊,包含有目前硬碟裡的附加資料(METADATA)、或檔案的內容等。找
出被隱藏的檔案,GUEST OS 執行可疑程式時,遇到要修改檔案時,在 HOST OS 透過 QEMU 把
要修該檔案的磁區號碼記錄下來,利用 TSKLIBRARY查詢硬碟映像檔的 FILE ALLOCATION TABLE
找出存在該磁區的檔案名稱及檔案路徑,再去 GUEST OS 利用 WIN 32API 查詢是否有該檔案的 存在,若沒有,則表示該檔案被隱藏。為了找出開機磁區是否有被修改,GUEST OS 執行可疑 程式時,遇到要修改檔案時,透過 QEMU 把要修該檔案的磁區號碼記錄下來,如果修改的是 第一個磁區(開機磁區),我們則判斷有開機磁區修改的行為(預計整體流程如下圖)。 偵測登錄機碼修改行為:子系統將會精準地列出所有被更動過之登錄機碼。因為惡意程式 往往會修改系統上的登錄檔,在開機時啟動惡意程式。除此之外,ROOTKIT還會竄改 WIN32 函 式庫或系統呼叫(SYSTEM CALL),以避免某些新增之機碼被發現。本系統將直接讀取硬碟中 用以儲存這些登錄檔的 HIVE檔案,並透過自己的程式加以解析。惡意程式為了讓自己在系統 重開機後仍然能夠運作,必須修改登錄機碼並指定開機啟動程式的目錄,甚至為了比防護軟體 獲得更早啟動的優先權,會把自己註冊成驅動程式或系統服務。要達成這些目的,系統登錄檔 往往是惡意程式必須更動之處。然而,防護軟體或使用者自身常常會對這些地方作基本的檢查, 如 HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES或
HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\POLICIES\EXPL
ORER\RUN這些機碼,都是現今最常見的檢驗點。因此,現今的惡意程式程式為了避免被發現,
就必須要使用 ROOTKIT技術來隱藏這些特定的機碼。在 WINDOWS程式中,多數的登錄檔編輯
軟體在對這些登錄檔進行查詢時,是使用 WIN32 程式庫所提供的 API 如 REGENUMKEY,
REGENUMVALUE或是 WINDOWS本身的 SYSTEM SERVICE如 DIRECTNTENUMERATEKEY或
DIRECTNTOPENKEY等等,這些函式往往被已經侵入系統的 ROOTKIT進行 HOOKING的動作,因
此在查尋這些登錄資料時,將完全無法發現某些被隱藏的項目。我們分析的步驟如下,首先我
們將儲存登錄資訊的幾個重要 HIVE檔案,從虛擬機器的硬碟映像檔中抽取出來,這些檔案包
括:
C:\WINDOWS\SYSTEM32\CONFIG\SAM
C:\WINDOWS\SYSTEM32\CONFIG\SECURITY
C:\WINDOWS\SYSTEM32\CONFIG\SOFTWARE
C:\WINDOWS\SYSTEM32\CONFIG\SYSTEM
C:\WINDOWS\SYSTEM32\CONFIG\DEFAULT
%USERPROFILE%\NTUSER.DAT
請注意以上的抽取動作皆由系統外部進行,而不經由系統內部的 API 或系統呼叫。當以上
檔案從硬碟映像檔中抽取出來後,我們將解析這些 HIVE檔案,並列出某些重要登錄目錄下所
有的機碼值,如:
HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES
11
HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\SESSION MANAGER\BOOTEXECUTE
HKLM\SOFTWARE\MICROSOFT\WINDOWSNT\CURRENTVERSION\WINLOGON\USERINIT
HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON\SHELL
HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUNONCE
HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN
HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUNONCEEX
HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUNEX
HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUNONCE
HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN
HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUNONCEEX
HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUNEX
等等,之後由系統內部的觀察程式,以 WIN32API 去取得同樣目錄下所有的機碼值,並與
系統外部的觀察結果進行比對,以確認是否有隱藏機碼的 ROOTKIT行為。
偵測網路通訊行為:為找出程式是否會開啟網路通訊阜並隱藏其行為,需要比對不同時間 先後的通訊阜列表。列出系統中所有被打開的通訊阜,透過篩選出最近新增的,這些新增的通 訊阜即是該程序所開啟的。而這些列表往往常駐在記憶體中,且由系統保護著,並無法用一般
USER-MODE存取。所以我們利用虛擬機器可以隨意的讀取GUEST端記憶體的特性,把記憶體的
狀態全都記錄到HOST端的硬碟。參考現有的 ROOTKIT技術,在記憶體中找出系統資訊,來得 到正被載入執行的通訊阜列表。現有的 WIN32 系統架構裡,其存放的資料結構固定,使其可 以利用SIGNATURE的方式來偵測記憶體裡,所存放的通訊阜開啟列表資訊。新增的通訊阜開啟 列表,會存在於兩個不同的時間點的清單差集內。整體流程大致如下: 把欲偵測的程式放到虛擬機器裡。 把虛擬機器的記憶體全部記錄下來(MEMORY DUMP)。 執行目標檔案,等待結束,或是等待一段時間。
執行後,除了把虛擬機器的記憶體再次記錄下來外,也在 GUEST OS 內使用 USER-MODE
指令讀取通訊阜開啟列表。 讀取兩個記憶體映像檔的內容,並且找出通訊阜開啟列表。 比對兩個列表,找出這段時間內新增的通訊阜位置。 比對新增的通訊阜位置與 User-mode 指令所讀取通訊阜開啟列表,找出隱藏的已開啟通 訊阜。 偵測驅動程式植入行為:為找出程式是否會動態載入可疑的驅動程式,需要比對不同時間 先後的載入列表。列出系統中所有被使用的驅動程式,透過篩選出最近新增的,將可把可疑 的惡意驅動程式找出。惡意驅動程式往往是 rootkit 為了有更高的執行權限而慣用的手法。 Rootkit 進入系統時,大多會存取檔案系統,或者寫入一些資訊到硬碟裡。伴隨著惡意程式, 可能會有自我複製、修改系統檔案等。當使用者查覺有可疑檔案時,欲刪除或還原的時候, 可能因為 rootkit 佔住執行權而不讓使用者刪除或是修改。有些 Rootkit 程式為了隱藏這些檔案, 會使用 API Hooking 的方式,干擾對硬碟的查詢動作,讓使用者完全無法由正常的管道得知這 些檔案的存在。一般來說,在 Windows OS 下要取得檔案列表,可以透過 Win 32 函式庫 FindFileFirst 或 FindFileNext。因此,若 rootkit 想達到隱藏檔案的目的,就會攔截(hook)這
12
兩個函式呼叫,如果回傳的檔案名稱是 rootkit 想要隱藏的,就略過這個檔案名稱,讓該檔案 無法顯示出來。如此一來,使用者就無法察覺有一隱藏檔案存在,而防毒軟體也可能透過這 兩個 API 去取得檔案列表掃毒,所以也無法針對被 rootkit 隱藏的檔案進行掃毒。除了對 Hook Win32 API 外,也可以利用 Windows Driver 的階層式架構來達成隱藏檔案的目的(如下圖)。 此 類型的 Rootkit 會把自己註冊一個驅動程式,當一個開啟檔案的要求送往檔案系統的時候, Rootkit 將會攔截到並且判斷此要求是否為 Rootkit 想要隱藏的檔案。如果是,Rootkit 將回傳 開檔失敗訊息或是將要求導到別的檔案藉此欺騙使用者或防毒軟體。當一個寫檔的 I/O 進來時, Rootkit 可以竄改寫檔的內容或是改變讀檔的結果。
以下將透過正規化的方式,描述本平台的演算法以及各元件間的關係。
名詞 定義
ALLURL(u) A set of links that can be traversed by a URL u.
File(u) A file downloaded by network crawler with URL u
UUID(f) An universally unique identifier of file f
DB(uuid) Query a File f with UUID uuid in database
DB_store(uuid , f) Store a File f with UUID uuid in database
DB_report(uuid , r) Store a Report r with UUID uuid in database
Q A global queue stores UUIDs wiht actions push() and pop()
Analyze() Action taken by analyzer and generate report
Analyzer A set of analyzers used in this system
TBA Taint-Based Malware Behavior Analyzer
ClamAV, Kaspersky Anti-viurs software
關聯性
Given a URL u, if uuid = UUID(File(u)) , then File(u) = DB(uuid). {TBA, ClamAV, Kaspersky } Analyzer .
檔案來源子系統 與 儲存子系統
Given a URL as an input to network crawler. For each URL ALLURL( )
F File( ) uuid UUID(F)
DB_store(uuid , f) push( uuid ) end
13
儲存子系統 與 分析器管理子系統 For each Analyzer in our system while( uuid pop() )
DB(uuid).
# start analyzing and generate report r Analyze()
DB_report(uuid , r) end
14
貳 、 計 畫 項 目 完 成 度
本計畫於期兩年共實作下列五項工作,完成度皆為 100%: 一)網路檔案蒐集(完成度:100%) 此模組會藉由網域種子清單,來當作擷取網站檔案模組的起點。透過瀏覽這些網站的網頁, 能夠找出對外連結的 URL,以擴充探索的網域範圍。在網站回覆的網頁 (html, htm) 裡,將會 有檔案的下載連結。再透過這些連結,網路爬蟲即可擷取這些放置在網站的檔案。本系統並非 只是單純的下載檔案,而是透過一層一層的網路連結關係,擴大搜索整個網路上的檔案,與搜 尋引擎類似。而每擷取到一個 URL,將會將檔案下載,除放置分散式資料庫中。本項目利用現 有的搜尋引擎客製化系統 Nutch,來達到上述之功能。Nutch 是一款基於 Hadoop 時實作出的網 路搜尋引擎,該系統可以爬取網路上的資料,透過分析建檔來提供資料搜索的服務。但本模組 並不需要後續對網頁分析的部分,並且有實作與後端資料庫存取的部分。 二)分散式的資料儲存(完成度:100%) NoSQL 資料庫提供了 Key-Value 的存取方式,利用特殊的雜湊函式來保證讀取和寫入為常 數時間。本子系統將結合分散式資料庫 Cassandra 與集中式 Key-Value Redis 來實現分散式分析 資料儲存。由於 Cassandra 是分散式的資料庫,在存取的時間與存取的能力較傳統 Sql 系統來 的有優勢。但是其缺點是無法快速地列舉其儲存的資料。為了依序處理分析平台內待處理的分 析工作,我們使用了 Redis 內所提供的 List 資料結構來實現佇列的功能,依序地從工作佇列取 出欲分析的工作識別(tasd ID)。在按照取出的工作識別去 Cassandra 資料庫內尋找更多的檔 案資訊。 三)惡意程式分析(完成度:100%) 本子系統將分析程式模組化,藉由著制定的介面來達到有彈性的掛載分析工具。由於分析 工具可能會有數種,需要統一化其分析工具的 I/O。提供一套組態設定來讓此分析平台可以掛 載和移除分析模組。對於本系統與分析模組的銜接部分,將會定義各種分析工具的 I/O 要如何 導入與輸出資料,藉著一套統一的機制來方便管理不同實作出的分析工具,來達到本分析平台 可擴充的能力,讓使用者可以新增自己的分析工具,讓本平台的分析功能多樣化。 四)文件 Call/Pop 分析器(完成度:100%) 本分析模組會檢查可執行檔是否具有堆疊位址取得的技術。給予一個欲檢測的執行檔,本 分析模組能夠判斷該程式是否會刻意的存取堆疊的內容。如果該執行檔試圖取出堆疊的內容, 將會被此系統偵測出。此分析模組會包含一個模擬的 x86 CPU,來模擬堆疊與 CPU 暫存器的 狀況。而我們透過這 CPU 模擬器,可以完全觀測此程式會不會取出事先寫入在記憶體中的魔 法數值(magic number)。不同於虛擬機器,此分析模組不用模擬所有的硬體裝置,只要簡單的 模擬 CPU 暫存器與堆疊,故能減少其他較不必要的運算開銷。由於 CPU 模擬器的實作較複雜15 冗長,我們將會結合利用 libemu 來縮短此分析模組的開發時間。藉由著修改 libemu 的系統, 觀測模擬運算時記憶體的狀態,來實作出偵測取得堆疊位址資訊的可疑檔案。 五)全系統層次的行為分析系統(完成度:100%) 本分析系統將利用動態汙染源技術來分析惡意程式在虛擬機器上的攻擊行為。藉著整合汙染源 追蹤系統來觀測資訊流動的狀態,來判斷該程式之行為。由於資訊流動都是以機械碼為基礎來 觀測,故惡意程式的行為可以鉅細靡底的被列出。由於這些二進位的資料,對於一般安全人員 並無太大的意義。所以,本全系統層次的行為分析系統,將會把這些觀測到的資訊流動還原到 作業系統中對應的物件存取,以利判斷分析。該系統將包含下列:偵測程序修改行為(PRC)、 偵測檔案修改行為(FLM)、偵測登錄機碼修改行為(REG)、偵測網路通訊修改行為(NET)、偵測 驅動程式植入行為(DRV)。
16
參 、 計 畫 成 果
本計畫提出一個新全系統層次的行為分析技術來擷取惡意程式行為並將其整合至雲端 分析平台中,詳細方法已於第壹章第四節研究方法中說明,依據該方法我們已經開發完成 系統,在第本章第五節系統建置將詳細介紹,其內容有實際佈建情況、系統架構、工作流 程、實作細節以及實驗數據結果。同時,本計畫並且獲得多項成果,包含產學合作計畫、 學術貢獻等部分,將在以下各節中詳述。 本計畫的雲端惡意程式分析平台包含下列四項關鍵技術:1)雲端節點機器管理、2) 分析工作分配與排程、3)可擴充式掛載介面、4)動態汙染源技術,將會在第肆章節技 術優越性詳細敘述,並於第伍章寫明本計畫的結論與未來展望。一 、 產 學 合 作 計 畫
本計畫所涵蓋的研究範圍以及所發展的技術深具產業應用價值,已陸續與友訊科 技與中華電信等國內業界大廠簽訂產學合作計畫,其計畫名稱與合作方式如下圖表 6: 合作計畫名稱 合作對象 動態惡意程式行為側錄與污染分析 中華電信 DNSsec 推動先期型計畫 教育部 DNSSEC 網域名稱安全架構建置與推廣計畫 教育部委託 Open D-Link Routers Forum 建置、維護與測試技術與諮詢
服務 友訊科技 法務部調查局惡意程式自動檢測技術支援系統委託研究案 調查局 前瞻性檔案完整性驗證與可疑嵌入碼檢測平台 喬鼎科技 雲端行動的安全及時分析可行性評估先期探討 工業技術研究院 智慧終端技術研究 工業技術研究院 雲端惡意程式鑑識與行動平台安全 宏達電子(HTC) 雙階層式全系統汙染鑑識分析 中華電信
Technology Transfer on Network Threat Detection using
Security Log Correlation 趨勢科技
17
二 、 學 術 貢 獻
期刊論文:
1. Chia-Wei Hsu, C.W. Wang, Shiuhpyng Shieh, “Reliability and Security of Large Scale Data Storage in Cloud Computing,” IEEE ATR, 2011.
2. Pokai Chen, Shiuhpyng Shieh, “Security for Future Internet Architecture - Motivation from DNSSEC,” IEEE ATR, 2011.
3. C.W. Wang, Shiuhpyng Shieh, “SWIFT: Decoupling System-Wide Information Flow Tracking for Malware Analysis,” in revision, IEEE Transactions on Reliability.
4. LY, Yeh, Y.L. Huang, S.P. Shieh, Anthony Joseph, “A Batch Authenticated and Key Agreement Framework for P2P-based Online Social Networks,” IEEE Transactions on Vehicular Technology, 2012.
5. Yu-Lung Huang, Chiya Shen, Shiuhpyng Shieh, "S-AKA: A Provable and Secure
Authentication Key Agreement Protocol for UMTS Networks," IEEE Transactions on Vehicular Technology, Volume 60, Issue 9, Nov. 2011, PP. 4509 – 4519.
會議論文:
1. Yin-Change Song, Michael Cho, C.W. Wang, Chia-Wei Hsu, Shiuhpyng Winston Shieh, “Light-Weight CSRF Protection by Labeling User-Created Contents,” submitted to IEEE Symposium on Software Reliability Engineering (ISSRE), 2012.
2. Chung-Kwan Chen, Wei-Chi Chen, Vic Hsu, Shiuhyng Shieh, “Mutant Malware Discovery and Behavior Analysis for Cyber Crime Investigation,” Crypto and Information Security Conference, 2012.
3. Fan-Shin Shih, Chia-Wei Hsu, Shiuhpyng Shieh, “Detecting VM-Awareness Using Divergent Multi-Execution Traces,” submitted to USENIX Symposium on Operating Systems Design and Implementation, 2012.
4. Yun-Min Cheng, Bing-Han Li and Shiuhpyng Shieh, “Accelerating Taint-based Concolic Testing by Pruning Pointer Overtaint,” accepted for publication, IEEE Conference on Software Security and Reliability (SERE), Washington DC, June 2012.
5. Chia-Ming Fan, Bing-Han Li, Shiuhpyng Shieh, “On The Security of Password-Based Pairing Protocol in Bluetooth” The 13th Asia-Pacific Network Operations and Management Symposium, (APNOMS 2011), 2011
6. Yen-Ru Liu, C.W. Wang, J.W. Hsu, T.C. Tseng, S.P. Shieh, “Extracting Hidden Code from Packed Malware based on Virtual Machine Memory Comparison,” 21th Cryptology and Information Security Conference (CISC 2011), 2011.
7. Bing-Han Li, Shiuhpyng Shieh, “RELEASE: Generating Exploits Using Loop-Aware Concolic Execution,” IEEE Conference on Secure Software Integration and Reliability Improvement, June 2011
18
8. Wei Shi-Sue, Shiuhpyng Shieh, Bing-Han Li, Michael Cheng Yi Cho and Chin-Wei Tien, "A Framework Using Fingerprinting for Signal Overlapping-Based Method in WLAN," in Proceedings of the International Computer Symposium on Computer Networks and Web Technologies (ICS 2010), Tainan, Taiwan, Dec. 16-18, 2010.
9. Yen-Ru Liu, C.W. Wang, J.W. Hsu, T.C. Tseng, S.P. Shieh, “Extracting Hidden Code from Packed Malware based on Virtual Machine Memory Comparison,” 21th Cryptology and Information Security Conference (CISC 2011), 2011.
10. Chia-Ming Fan, Bing-Han Li, Shiuhpyng Shieh, “On The Security of Password-Based Pairing Protocol in Bluetooth,” The 13th Asia-Pacific Network Operations and Management
Symposium, (APNOMS 2011), 2011.
三 、 產 業 貢 獻
國外專利
1. CW Wang, SP Shieh, YR Liu, “Method for Decoupling System-Wide Information Flow Tracking for Malware Analysis and Its Applications,” US patent pending
2. S.I. Huang, S.P. Shieh, “Method and System for Secure Data Aggregation in Wireless Sensor Networks,” China patent number ZL200710301500.9, 2011.
3. S.I. Huang, S.P. Shieh, “Method and System for Secure Data Aggregation in Wireless Sensor Networks,” US patent no. 8027474, 2011.9.27.
國內專利
1. 王繼偉,謝續平,劉晏如,“分離式的全系統層次模擬器與資訊流動追蹤方法與其應用,”
Taiwan patent pending
2. S.I. Huang, S.P. Shieh, “Method and System for Secure Data Aggregation in Wireless Sensor Networks, 用於在無線感應器網路中進行安全資料聚合的方法以及系統” ROC patent no. I350086. 10, 2011.
四 、 特 殊 榮 譽
學生獲獎
1. 2010 Hacks in Taiwan Conference 台灣駭客年會 Wargame 競賽冠軍 2. 2011 Hacks in Taiwan Conference 台灣駭客年會 Wargame 競賽冠軍 3. 2012 Hacks in Taiwan Conference 台灣駭客年會 Wargame 競賽殿軍 4. 2011 資策會資安技能金盾獎亞軍
19
主持人社會服務
1. 總統府國家安全會議顧問
20
五 、 系 統 建 置 -雲 端 惡 意 程 式 分 析 平 台
本項目將簡介本子計畫於第一年度的系統建置情況,將分別介紹實際佈建狀況、系統 架構、工作流程、系統實作、效能分析。經由以上的介紹可突顯本計畫將不只著力於新興 技術的研究,更注重實務的系統開發。 實際佈建 本子計畫於第一年度100年實際架設Windows惡意程式行為分析雲端平台,並建置 於國立交通大學網路安全實驗室內,以進行第一年度的雲端分析平台研究。本平台利 用市面上能夠採買之高效能運算個人電腦,以節省開發成本。利用這些高運算量來實 現「基於虛擬機器技術之動態程式行為分析」以及「高可靠性惡意程式樣本雲端儲存 系統」。在動態程式行為分析部分,透過整合本實驗室所開發之惡意程式分析模組, 有效地利用此平台的運算效能。而雲端樣本儲存系統,則可以大量的儲存已知或是分 析過可疑的惡意樣本,以供往後的研究、查詢。此平台已經透過產學合作之關係,正 與調查局、中華電信、趨勢科技、交通大學資訊服務中心等相關產業合作。進行實務 性質的惡意程式分析,以提供多樣化的病毒分析研究。 圖 表 7WINDOWS 惡 意 程 式 分 析 雲 端 平 台 實 際 佈 建21
22 系統架構 本分析平台主要由三個部分所組成:一)檔案來源子系統、二)儲存子系統、三) 分析器管理子系統。在檔案來源子系統中,本子系統需要接收大量的檔案作為分析的 對象,以分析並取得各種不同型態的惡意軟體。本系統實做一個 PushTask 之函式庫, 此 API 可將任意檔案輸入本系統進行分析,並指定該檔案的優先權。此 PushTask 函 式庫先產生檔案的工作識別(UID),在將此 UID 放入 Redis 中,並將檔案內容存入 Cassandra 中,將檔案輸入我們的系統中。利用此 API 為基礎,我們實做了兩種檔案 來源系統:網頁爬取系統和批次檔案輸入。在儲存系統方面,由於此研究已經被探討 多年,市面上也有大量的資料庫可以應用於本分析平台上。為了節省開發時間以及維 護方便,經過深入地了解以及搜索之後,我們選擇了兩個現有的資料庫系統 Cassandra 和 Redis,透過修改程式、設定檔案和內部些許的程式碼,快速地達到本分析平台所 需要的儲存能力。Cassandra 是一套分散式的資料庫系統,在分析平台中用來儲存未 分析的檔案內容以及分析完的結果。Redis 是一單機的資料庫系統。在分析平台中以 佇列(Queue)的模式來儲存未分析的檔案的工作識別號碼。在分析器管理子系統中, 藉著可以掛載多個分析器的能力。同時進行多個分析器的分析,以取得更準確的結 果。因此我們需要建構一套分析器管理子系統來管理各種不同的分析器,讓各種不 同輸入輸出的分析器能正常運作於本系統中。 圖 表 9 基 於 機 器 碼 之 WINDOWS惡 意 程 式 行 為 分 析 雲 端 平 台 系 統 架 構 圖
23 工作流程 本系統主要的流程可分為兩部分(如圖表 14),彼此間連繫的管道是透過儲存子系 統,詳細如下: 1.由檔案來源子系統至儲存子系統:負責將檔案存入系統中,同時產生後續分析所需的 工作識別。此處的檔案來源目前有三種:使用者上傳、硬碟讀取和Crawler。 2. 由儲存子系統至分析器管理子系統:負責處理未分析的檔案。首先至儲存子系統中的 Redis拿取工作識別後,再去向Cassandra拿取檔案來進行分析,之後儲存結果。 圖 表 10 基 於 機 器 碼 之 WINDOWS惡 意 程 式 行 為 分 析 雲 端 平 台 工 作 流 程
24 系統實作概要 以下將會詳細地列出實作的細節,藉著閃示其虛擬碼,讓讀者能更清楚的了解各部分 的流程。 程式 名稱 功能 參考 pseudocode secmap.rb 啟動本雲端惡意程式分析平台 圖表 15 startnutch.sh 啟動網路爬取子模組 圖表 16 NutchSlave.rb 傳送爬取網頁內容至分析平台 圖表 17 AnalyzerInvoker.rb 呼叫分析器子模組 圖表 20 common.rb 環境變數的設定和產生工作識別 號碼(TaskID) 圖表 23 invokeAnalysis.rb 啟動分析器,之後拿取未分析檔案 進行分析。 圖表 21
putToRedis.rb Analysis input 元件將取得檔案
的 TaskID 存入 Redis,並且依據 不同的檔案來源給予不同的優先 權。
圖表 18
putToCassandra.rb Analysis input 元件將檔案放入 Cassandra。
圖表 19
getTaskID.rb invokeAnalysis.rb 取得存放在
Redis 內的 TaskID。
圖表 22
getFileContent.rb invokeAnalysis.rb 用 TaskID 至 Cassandra 取得相對應的檔案。 圖表 24 saveReportToCassandra.rb 分析器將分析結果存入 Cassandra。 圖表 26 getReportFromCassandra.rb 將分析器分析完的結果取出。 圖表 25
25 圖 表 11 SECMAP.RB之 虛 擬 碼 本平台的運行主要下的指令如圖表 15,我們將所有系統指令包裝成一個執行檔案。並且會有許 多個元件,可以互相的配合執行。圖表 15 的./secmap 是整合本系統個元件主要執行程式,透 過此介面可以快速啟動、停止下列四個系統主要元件(role):1.)cassandra,本系統中用來儲 存大量資料的分散式資料庫、 2.)dispatcher,用於儲存工作與分配的佇列、3.)nutch,為本 系統來爬取網路資料的元件及 4.)各種 analyzer,掛載於本系統的不同分析器。starttable 和 stoptable 是兩個 Hash 資料結構,將系統元件的名稱對應到一字串值。此介面利用 starttable 將啟動系統儲存及網路爬取元件的所需執行的動作儲存,並利用 stoptable 將停止 系統儲存及網路爬取元件的動作儲存,並根據所取得的參數執行相對應的動作。透過使用 starttable 和 stoptable,可以同時啟動多個不同的元件。例如: ./secmap start cassandra redis,便可以一次將 cassandra 和 redis 運行起來。
以下將對上圖做詳述: (一) 參數介紹: cmd:代表所要執行的動作,分為 start 和 stop 兩種指令。 roles[] :執行指令的目標元件的陣列,共有 cassandra、nutch、dispatcher、 analyzer(以名稱區別) (二) 判別執行指令是’start’或是’stop’。
(三) 對 roles 裡面的各個元件,根據所要執行的指令(stop 或 start),查詢並執行其對應
26
startnutch.sh 負責在主節點將 nutch crawler 啟動並透過 map-reduce 的機制將爬取網頁的工 作自動化分配至各附屬節點上。由於 nutch 原本提供的爬網功能包含許多我們系統不需要的部 分,如:製作索引、建構搜尋網頁,因此我們直接利用 nutch 提供的 API 執行爬網的功能,能 提高 nutch 爬網的效率,增加每天搜尋過的網頁數量。 以下將對圖表 16做詳述: (一)參數介紹: Seed:為一包含多個網址檔案,代表系統欲抓取的起始網頁(seed)。 (二) nutch_inject_seed
nutch_inject_seed 負責將這些網頁輸入待爬取資料庫(crawldb),以便 nutch 之後 由這些網頁開始爬取網頁。圖()是 seed 檔案的範例。 (三) nutch_generate_URLs、nutch_get_download_filename 此函數由帶爬取資料庫中選取前若干組網頁資料,在本系統中預設是抓取 100,000 組 網 頁 資 料 , 產 生 一 組 待 爬 取 清 單 (fetch list) 。 並 將 產 生 的 清 單 名 稱 傳 給 nutch_fetch_files 作為輸入。 (四) nutch_fetch_files 根據取得的待爬取清單,利用 mapreduce 將檔案分配至各台 slave 上面做爬取的動作。 而個別 slave 在抓取到可執行檔後,便會執行 NutchSlave.rb 將檔案儲存到資料庫 中。 (五) nutch_update_URLs 將在 nutch_fetch_files 找出來的新連結加入待爬取資料庫,並更新已爬取網頁的資 訊 圖 表 12 STARTNUTCH.SH之 虛 擬 碼
27
圖 表 13NUTCH 之 原 始 碼 物 件 以 及 NUTCHSLAVE.RB
當我們在主節點執行 nutch 後,主節點(nutch master)便會自動將所需執行的工作分配至附屬 節點(slave)做網頁爬取的動作。我們改寫 nutch 的程式碼,在做網頁爬取的部分我們加入了 NutchSlaveCrawler() , 此 函 數 利 用 JAVA 提 供 的 Runtime 及 Process 函 式 庫 去 執 行 NutchSlave.rb,並將爬取下來的網頁檔名做為其參數。NutchSlave.rb 負責將檔案上傳至我們 系統。 以下將對圖表 17(NutchSlave.rb)做詳述: (一)參數介紹: filename:Nutch 所抓取下來的檔案名稱。 (二) 首先呼叫 generateSecmapUID,計算出檔案的 MD5 以及 SHA1 值,再加上檔案本身大 小作為其唯一識別(UID)回傳。 (三) 接著利用 loadCommandsTable()取得各個函式庫的位置。 (四) 透過 commandsTable,NutchSlave.rb 先執行 putToCassandra 將檔案內容及屬性存入 分散式惡意樣本資料庫內。 (五) 最後利用 putToRedis 將檔案的唯一識別輸入特定優先權的工作佇列,等待分析器處 理。
28
圖 表 14 PUTTOREDIS.RB之 虛 擬 碼
此程式 putToRedis.rb 是用於將 taskUID 根據不同的優先順序(priority)存入 Redis Queue 中。另外,本系統針對不同的分析器都產生一組 Redis Queue(針對不同的 priority)。EX: 有 分析器 A 和分析器 B,兩種分析器,並同時有 3 種優先序,因此一共有 6 個 Redis Queue。 以下將對圖表 18做詳述:
(一)參數介紹:
priority: 代表這筆資料的優先序,同時也是 Redis Queue 命名的一部分。
taskUID: 由分析檔案所產生的 ID,而產生方法則是將檔案內容作 MD5 以及 SHA1,並 將兩者相連最後連上檔案大小而得。
(二) 連線到 Redis server,其中的變數 REDIS_ADDR 和 REDIS_PORT 分別代表 IP 以及 port, EX:1.2.3.4 和 10001。
將此 taskUID 透過 redis.rpush 放入所有分析器相對應優先序的 Queue 中,以上述的 A B 分析 器為例,當優先序為 3 時,則會將 taskUID 放入 A3 以及 B3 的 Queue 中。
29 圖 表 15 PUTTOCASSANDRA.RB 之 虛 擬 碼 此程式 putToCassandra.rb 的作用是將取得的檔案名稱、取得的時間、檔案的來源以及檔案 內容存入資料庫中。 以下將按步驟解說,如圖表 19所示: (一) 首先,透過 parseToHashTable 先從 ARGV[] 內取出檔案的基本資料,有檔案名稱、來 源和取得時間。 (二) 再來,連線至資料庫,其中 CassandraHosts.pickAtRandom()是用來連到不同的資料 庫,回傳的值是任一資料庫的 IP 地址,目的是為了流量能夠均勻分到每一台分散式 的資料庫上。 (三) 取出檔案資料。 (四) 針對檔案內容透過 generateSecmapUID()產生相對應的 ID,而產生方法則是將檔案內 容作 MD5 以及 SHA1,並將兩者相連最後再連上檔案大小而得。
(五) 最後透過 client.insert 來對資料庫的相對應欄位(super column:SUMMARY 和 column name:content…etc)填入相對的值(value)。
30 圖 表 16ANALYZERINVOKER之 虛 擬 碼 AnalyzerInvoker 負責將分析器運行起來,自動從系統取得檔案並執行分析,最後再將結果存 回系統。分析器只要放置於特定目錄(如:~/analysis),並且具有 config 檔案並設定啟動分 析器的方式以及報告儲存的位置,便可以整合進我們系統。以下將對圖表 20做詳述: (一)參數介紹: analyzerName:所要執行的分析器名稱
AnalyzerInvoker 會先執行 loadCommandsTable 取得各個 API 的位置。
(二) 執行 readAnalyzerConfig,此函數分析分析器 config 設定,記錄分析器執行方式及 報告位置。執行 getTaskID API,此 API 會連線至 redis 工作佇列,取得指定分析器 所需要分析的檔案 UID。
(三) 透過檔案的 UID,我們可以利用 getFileContent 從 cassandra 取得檔案內容,並儲 存於本地端。
(四) 根據分析 config 取得的執行方式,AnalyzerInvoker 可以利用 invokeAnalysis API 將分析器執行起來,並將待分析檔案傳給分析器做為參數,
31 圖 表 17 INVOKEANALYSIS.RB之 虛 擬 碼 invokeAnalysis.rb 會接收啟動分析器所需的命令以及待分析的檔案名稱作為參數,並 fork 出一支新的行程並啟動分析器以分析檔案。 以下將對圖表 21做詳述: (一)參數介紹: command:執行分析器所要執行的指令 filename:所要分析的檔案名稱 (二) invokeAnalysis.rb 執行 getCommand()、getFilename()從參數列取得分析器執行指 令以及待測檔案名稱。 (三) 接著利用 fork()指令創造出一支新的行程執行分析。 (四) 為了避免分析器運作太久,系統必須監控分析器執行狀態,並在分析器超時後中斷分
析器的執行。因此我們利用 setrlimit()設定 CPU time 的限制。
(五) 當行程執行超時候,作業系統會自動發出 SIGXCPU 訊號並結處該行程,SIGXCPU 是當
一 個 行 程 資 源 使 用 量 超 過 系 統 規 範 實 , 用 來 通 知 該 行 程 的 訊 號 。 我 們 利 用 Singnal.trap()去抓取 SIGXCPU 訊號,並執行 timeout()紀錄分析器運行的狀況。 (六) 執行 command 將分析器運行起來。
32
圖 表 18 GETTASKID.RB之 虛 擬 碼
此程式 getTaskID.rb 是從 Redis 中取出一組 TaskID。其中,Redis 為一 Queue 的資料結構, 在此基礎上實作出優先序(priority)的功能;而 TaskID 則是一組用來查詢資料庫的 key,key 的產生法法於 putToCassandra.rb 處有說明。
以下將對上圖做詳述:
(一)首先,透過 parseToHashTable 先從 ARGV[] 內取出分析器名稱(analyzerName)。
(二) 連線到 Redis server,其中的變數 REDIS_ADDR 和 REDIS_PORT 分別代表 IP 以及 port, EX:1.2.3.4 和 10001。
(三) 在 For 迴圈內部則是藉由 redis.lpop()來內取出 Redis 中的一筆資料,從優先序高 的先取,取得後離開迴圈。
33 圖 表 19 COMMON.RB之 內 容 common.rb 是此系統共用的設定及函式庫,所有相關的程式都必須先載入 common.rb。主要分 成三個部分: 第一部分是本地端設定,定義系統的環境變數,這些設定在每個節點上不一定相同,因此沒個 節點需要單獨設定,包含系統相關路徑與分析器路徑。 第二部分是整體系統設定,設定一些系統共用的設定,這些設定在所有節點上需要保持一致。 例如:cassandra 節點網路位置、redis 節點網路位置。 第三部分是公用函式,將不同程式會使用的函式集中,方便管理及使用。包括載入指令表的 loadCommandsTable 及產生系統識別碼的 generateSecmapUID 等。
34
圖 表 20 GETFILECONTENT.RB之 虛 擬 碼
此程式 getFileContent.rb 是連線到資料庫端,並透過 taskID 來取得檔案,最後將檔案存在 指定路徑。 以下將對上圖做詳述: (一) 首先,連線至資料庫,其中 CassandraHosts.pickAtRandom()是用來連到不同的資料 庫,回傳的值是任一資料庫的 IP 地址,目的是為了流量能夠均勻分到每一台分散式 的資料庫上。 (二) 透過 client.get()函式以及 taskID 從資料庫中取得相對應的檔案。 (三) 設定分析器的路徑,由 ANALYZER_HOME 和 analyzerName 組成,之後儲存檔案的資料 夾就在此路徑下。 (四) 設定檔案的儲存路徑,由 analyzerPath 和 outfile 組成。 (五) 將檔案寫入(四)的路徑中。
35
圖 表 21 GETREPORTFROMCASSANDRA.RB之 虛 擬 碼
此程式 getReportFromCassandra.rb 是藉由 taskUID 和 ANALYZER_TYPE 來從資料庫中取得相 對應的報告。
以下將對圖表 25做詳述:
(一)參數介紹:
taskUID: 由分析檔案產生的 ID,產生方法則是將檔案內容作 MD5 以及 SHA1,並將兩 者相連最後再連上檔案大小而得。
ANALYZER_TYPE: 分析器的種類名稱,依據此參數來區別報告。
(二) 連線至資料庫,其中 CassandraHosts.pickAtRandom()是用來連到不同的資料庫,回 傳的值是任一資料庫的 IP 地址,目的是為了流量能夠均勻分到每一台分散式的資料 庫上。
(三) 透過 client.get()再加上 taskUID 以及 ANALYZER_TYPE 來取得相對應的報告。