• 沒有找到結果。

以下我們將根據開發之工具分別介紹其研究方法。

線上即時軟體行為分析檢測工具

現今惡意程式為了達成其目的,皆試圖延長自身在目標電腦中存活的時間。因此,規避 防毒軟體偵測與隱藏自身存在是惡意程式不可避免的行為。但為了達成上述的目標,惡意程式 必須對系統中的重要資料進行修改,以開機時自動執行此一常見的行為為例,惡意程式便必須 修改註冊機碼中的系統啟動項目,或是在系統ini檔案中加入自身的路徑。因此,若能分析出檢 測目標程式在執行後對系統中重要物件的修改行為,便能大幅度提升資安人員在判定時的效 率。

本子項目利用Dynamic Information Flow Tracking, DIFT,檢測檢測目標程式對系統中物件 的修改行為。整體系統架構為,利用一可追蹤暫存器、記憶體、硬碟磁區以及網路卡中資訊流 動的全系統IA-32模擬器,檢測一分鐘後目標程式對系統中重要物件的修改。請注意我們並無 法檢測Trigger-based的程式行為,因為若目標程式的行為需要達成某條件才會發生,要自動觸 發該行為屬於可被證明為無解的Undecidable的問題。本系統檢測功能如下:

 檔案系統變動監測

當檢測目標儲存至虛擬機器的虛擬硬碟後,便成為本系統追蹤資訊流動的起始點,在 運行一分鐘後,所有硬碟中有被該資訊流作用的磁區,將被我們抽取出來,透過解析 NTFS 檔案系統的 metadata,我們可以從這些磁區編號反推回檔案名稱,而得知該檢測目標對系 統中那些檔案進行了修改。此作法與其他研究透過監測系統 IO 或系統呼叫以得知修改檔 案項目相比,由於後者監測的是系統運行過程中所有的修改檔案項目,而又因作業系統本 身及時常對檔案系統有寫入行為,因此有非常多的 False positives,亦即將會有很多並非由 於檢測目標所導致的檔案系統修改行為被監測出,而我們的做法由於使用了資訊流動的概 念,將正確抓出所有確實由檢測目標所導致的檔案系統修改行為。

 登錄檔變動監測

與前項檔案系統修改檢測功能類似,此分析一樣會透過分析被該資訊流作用磁區的方 式,找出登錄檔中被修改的機碼與鍵值。然而此分析目標較困難的是,如何由磁區位址反 推回機碼鍵值的步驟。首先,由於登錄檔在硬碟中也未必以連續的方式存放,若僅有磁區 編號,要反推為檔案中的偏移位址,也必須先將該檔案在硬碟中所佔據的磁區編號一一取 出。此外,Windows 的登錄機碼的儲存方式有一定格式,稱為 Hive File。在 Hive File 中,

所有的機碼與鍵值是以二進位的方式儲存,且必須依照特殊格式才能解析,所以我們必須 依照 Hive File 格式自行撰寫從鍵值逆推回機碼的演算法,以找出鍵值的所在位址。

在登錄機碼的部分,由於 Windows 的登錄機碼是以特殊的二進位檔的格式,儲存在 硬碟中的數個 Hive 檔案中,因此我們是透過觀察這幾個檔案中是否有被寫入,來找出程 式所修改的機碼值。這些 Hive 檔包括:

C:\WINDOWS\system32\config\SAM C:\WINDOWS\system32\config\SECURITY C:\WINDOWS\system32\config\SOFTWARE

23

C:\WINDOWS\system32\config\SYSTEM C:\WINDOWS\system32\config\DEFAULT %UserProfile%\Ntuser.dat

由於在找出修改對象的過程必須符合 Hive 檔的格式規定,因此我們將這些檔案中被 修改的部分找出來後,在其中搜尋代表機碼值 VKEY 的字樣,若搜尋到則代表此為一真 正被分析程式所修改的機碼值。

 程序可執行碼插入(Code Injection) 監測

許多惡意程式為了避免被防毒軟體偵測其行為,往往會將程式碼插入至其他程序後,

在該程序的位址空間內執行。透過本系統偵測資訊流動的功能,可檢測出是否有程序間的 資訊流動行為,然而僅透過以上作法由於程序間原本就會有訊息交換的行為,因此並無法 斷定該資訊流動為程式碼的插入,故我們還需檢查該資訊流在進入其他程序後,是否進一 步流動被 CPU 所執行。在判斷程序間的資訊流動方面,我們是透過 CR3 暫存器的變動,

以判斷目前正被執行的程序,並在虛擬機器的 CPU 從記憶體中載入程式碼時,判斷該次 讀取的記憶體位址是否之前已受到過資訊流動的汙染。此外,僅讀取 CR3 暫存器的值隊 分析人員來說並不具備較好的判斷效果,因此本系統還將透過 Hooking 的方式,在任何程 序剛建立時建立其程序名稱與 CR3 暫存器的值的對應,以利在產生分析結果時可查閱並 顯示被插入可執行碼的程序名稱。

在 Windows 中提供了一項功能,能夠讓一個程式將程式碼插入至其他執行中的程式 記憶體中,在該程式的位址空間內執行。透過本工具偵測資訊流動的功能,我們可檢測出 是否有程式之間的資訊流動行為,然而由於多個程式之間原本就會有訊息交換的行為,因 此僅透過以上作法並無法斷定該資訊流動為程式碼的插入,因此我們還需檢查該資訊流在 進入其他程式後,是否進一步流動被 CPU 所執行。在判斷這方面的資訊流動時,我們是 透過 CR3 暫存器的變動,以判斷目前正在被執行的程式,並且在虛擬機器的 CPU 從記憶 體中載入程式碼時,判斷該次讀取的記憶體位址是否之前已受到過資訊流動的變動。此外,

僅讀取 CR3 暫存器對於分析人員來說並不具備較好的判斷效果,因此本工具還透過 Hooking 的方式,在任何程式剛建立時建立其程式名稱與 CR3 暫存器的值的對應,以利在 產生分析結果時可查閱並顯示被插入可執行碼的程式名稱。

 作業系統核心可執行碼插入監測

先進的惡意程式多已經使用核心層級的 Rootkit 技術以取得系統最高權限,如此才能 躲避同樣具有核心層級權限的防毒軟體的偵測。我們的系統透過觀察資訊流動是否進入核 心層級的方式,也可監測此種行為。在 IA-32 架構中,CPU 的執行權限分為 Ring0~3 四種 等級,其中 Ring0 為最高權限,而平常的應用程式僅具有 Ring3 等級。在系統運行的過程 中,我們將檢查是否 CPU 在執行指令時,是否讀取了被資訊流動污染的記憶體位址,且 CPU 的運行權限處於 Ring 0。

最近許多惡意程式已經開始使用核心層級的 Rootkit 技術以取得系統最高權限,如 此才能躲避同樣具有核心層級權限的防毒軟體的偵測。本工具透過觀察資訊流動是否進入 核心層級的方式,也可監測此種行為。在 IA-32 架構中,CPU 的執行權限分為 Ring0~3 四 種等級,其中 Ring0 為最高權限,而平常的應用程式僅具有 Ring3 等級。在系統運行的過

24

程中,我們將檢查是否 CPU 在執行指令時,是否曾經讀取了被資訊流動污染的記憶體位 址,且 CPU 的運行權限是否處於 Ring 0 層級。

 網路封包監測

透過檢查資訊流動是否流動至網路卡的 TX Buffer,本系統可準確抓出該檢測目標傳 送至網路的所有封包。由於現今惡意程式往往會偷取系統資訊,甚至連結外部網站以更新 自身,因此側錄這些網路封包是分析工具非常重要的一環。然而,以往的分析工具僅僅是 側錄系統運行過程中所有對外的網路傳輸,與第一項檔案系統修改分析類似,在正常的作 業系統中,原本就會自行發生許多的網路傳輸行為,例如 Windows Update 的更新檢查、

網路芳鄰 Netbios 的查訪、ARP 的更新等等,而這些封包發生的頻率是非常頻繁,以往的 分析工具便因此受到大量的干擾或產生 False positives。而我們的系統由於透過追蹤資訊流 動的方式,所側錄到的封包皆是確實由一開始的檢測目標,在執行後所產生的,因此具有 非常高的準確性與可讀性。

本工具透過檢查資訊流動是否流動至網路卡的 TX Buffer,可準確側錄出所分析程式 所傳送至網路的所有封包。由於許多軟體都會連上網路後對自身進行更新,或是接受來自 網路的指令,因此側錄這些網路封包是分析工具非常重要的一環。然而,以往的分析工具 僅僅是側錄整個系統在運行過程中所有對外的網路傳輸,與第一項檔案系統修改分析類似,

在正常的作業系統中,原本就會有許多系統本身的網路傳輸行為,例如 Windows Update 的更新檢查、網路芳鄰 Netbios 的查訪、ARP 的更新等等,而這些封包發生的頻率是非常 頻繁,因此以往的分析工具就會有大量的干擾或產生 False positives。而我們的系統由於透 過追蹤資訊流動的方式,所側錄到的封包皆是確實由一開始的檢測目標,在執行後所產生 的,因此具有非常高的準確性與可讀性。

此外,為了分析人員的便利性,我們將把讀取到的封包依照 TCP/IP 的分層架構做解 析,以類似 Wireshark 封包側錄程式的顯示方式列出,如此一來,分析人員可快速的判讀 該方包的目的 IP 位址以及所使用的 Protocol。甚至將這些 IP 提報給網路管理員進行黑名 單的過濾。

線上 Windows 與 Linux 系統組態安全檢測系統

本研究的目的在於提供一個線上安全服務用以檢測異質多網環境中終端系統的架構 設定安全性。由於終端裝置系統千奇百怪,其上的運行應用程式亦是數以千萬計,並仍不 斷在新增中。顯然我們不能單靠一己之力來分析所有可能存在的各種系統組態設定。因此,

我們希望能集合眾使用者的力量來匯聚對於各式組態設定的安全資訊並基於這些資訊來

我們希望能集合眾使用者的力量來匯聚對於各式組態設定的安全資訊並基於這些資訊來