第一章 簡介
1.2 研究動機
利用 AC 演算法來做字樣比對雖然很有效率,但是它只能針對一般字樣做比 對,若病毒/蠕蟲之惡意碼是利用正規表示式的方式呈現,則 AC 演算法無法對 其 做 比 對 。 正 規 表 示 式 可 以 被 非 決 定 性 有 限 狀 態 機 (non-deterministic finite automata, NFA) 所 識 別 , 非 決 定 性 有 限 狀 態 機 等 效 於 決 定 性 有 限 狀 態 機 (deterministic finite automata, DFA),因此我們可以使用決定性有限狀態機來比對 利用正規表示式呈現的字樣。決定性有限狀態機所需要的狀態(state)會隨正規表 示式呈現的字樣長度成指數性的增加。一個正規表示式呈現的字樣就需要一個決 定性有限狀態機,若有很多的字樣都是利用正規表示式呈現,則比對的程序會耗 費許多的時間。我們可以將多個決定性有限狀態機結合成一個,但是,卻仍然沒 有解決因為正規表示式造成的大量狀態。本篇論文我們提出了一個不一樣的方法 來建造一個決定性有限狀態機,可以同時比對多個由正規表示式呈現的字樣以及 一般字樣。
論文剩下的章節介紹如下:第二章介紹 AC 演算法與可疑字樣過濾器
2
Chapter 1 簡介 (pre-filter)的想法;第三章介紹一些網路入侵偵測系統,像是 ClamAV;第四章是 本篇論文提出之演算法;若利用可疑字樣過濾器找出字樣的嫌疑起始位置,如此 可以大量的改進比對的速度,此方法記載於第五章;第六章是實驗模擬結果與比 較;第七章是結論。
3
Chapter 2 相關工作
第 二 章
相 關 工 作
2.1 Aho-Corasick 演算法
AC 演算法針對多個字樣建造一個有限狀態機,可以同時比對多個字樣;且 保證其在任何情況下有一定的效能。因此,AC 演算法在許多的系統中被廣泛的 使用,特別是當效能為主要訴求時。
AC 演算法建造一個有限狀態機來做字樣比對,此有限狀態機的動作由 3 個 函式(function)來決定:(1) goto 函式,(2) failure 函式以及(3) output 函式。有限狀 態機中的每一個狀態都代表一個號碼,其中,狀態 0 代表起始狀態。字串(string) 是由一連串的符號所(symbol)組成,當我們輸入一段字串進入有限狀態機時,它 會從起始狀態開始走,利用現在的狀態(current state)號碼以及輸入的符號,查詢 goto 函式或是 failure 函式決定下一步走到那一個狀態。假使走到某一個非起始
狀態 S,則代表現在所輸入字串的字尾(suffix)是某一個字樣的字首(prefix)。圖 2-1 是一個 AC 演算法的範例,它包含 4 個字樣{he, she, his, hers}。
4
Chapter 2 相關工作
圖 2-1 字樣{he, she, his, hers}之 AC 演算法
在圖 2-1 中,共有 10 個狀態(0,…,9),goto 是個需要兩個參數的函式,一個 參數是現在的狀態,另一個則是輸入的符號;回傳會有兩種訊息,當可以成功走 到下一個狀態,回傳狀態號碼;反之,回傳失敗訊息。以圖 2-1(a)為例,若現在 之狀態為 1,輸入符號為 i,回傳 goto(1,i)=6;若輸入符號非 e 或是 i,則回傳失 敗訊息。
除了起始狀態,每一個狀態都有一個其對應的 failure 函式。簡單來說,在 有限狀態機中的某一個非起始狀態 S,若其代表的字串為 s,也許可以在有限狀 態機中找一個字串 s 最長字尾的字首字串 t,其代表的狀態 T,就是狀態 S 的 failure 函式;若找不到最長字尾的字首字串 t,則以起始狀態為其 failure 函式。以圖 2-1 為例,狀態 7 所代表的字串為 his ,它可以在圖 2-1(a)中找到最長字尾的字首字 串 h,也就是狀態 3;換句話說,failure(7)=3。若有某些字樣在狀態 A 被比對到,
則我們將這些字樣放入 output(A)中,以圖 2-1 為例,狀態 5 有兩個字樣被比對到,
分別是 he 以及 she,所以 output(5)={he, she}。
5
Chapter 2 相關工作
利用AC的三個函式以及有限狀態機,我們可以用來做字樣比對。輸入一串 字串S={c1c2… cn},其中ci (1 i≤ ≤ n)代表一個符號,以狀態 0 為起始狀態,查詢 goto,若回傳狀態號碼,則以此狀態為現在狀態,並輸入下一個符號;若回傳失
敗訊息,則去查詢failure函式,以failure函式走到的狀態為現在狀態,再重新查 詢goto直到走得下去為止。若經過某些狀態的output函式是非空的,代表有某些 字樣被比對到。
舉例來說,以圖 2-1 為例,若輸入字串 S={ushers},其有限狀態機的走法如 圖 2-2 所示。當現在狀態是 4,輸入符號 e 時,因為 goto(4,e)=5,現在狀態變為 5,因為 output(5)是非空的,查詢 output 函式得知在位置 4 比對到字樣{he, she}。
輸入下一個符號 r,因為 goto(5,r)回傳失敗訊息,查詢 failure(5)=2,以狀態 2 為 現在狀態,重新查詢 goto(2,r)=8,以狀態 8 為現在狀態,繼續輸入剩下的符號,
可以發現在位置 6 比對到字樣{hers}。
圖 2-2 輸入字串 S={ushers}的範例走法
2.2 可疑字樣過濾器(pre-filter)[8]
使用 AC 演算法做字樣比對,我們可以同時比對多個字樣,且保證其在任何 情況下有一定的效能。我們可以知道,若輸入的字串長度為 n,則狀態轉移(state transition)至多只會有 2n-1 次。因此,AC 演算法在許多的系統中被廣泛的使用,
6
Chapter 2 相關工作 特別是當效能為主要訴求時。但是,隨著高速網路傳輸技術的進步,AC 演算法 的效能無法一直維持在網路的速度,若能有個方法可以一次處理多個符號,勢必 可大幅增加比對的效能。
可疑字樣過濾器可以在輸入字串中,過濾出有嫌疑的字樣起始位置,只有可 疑的位置才需要利用 AC 演算法建造有限狀態機來做比對,如此可以大幅增加字 樣比對的效能。
找出嫌疑字樣起始位置的方法,採用[8]所提出的SHIFT表。假使一個符號代 表 1-位元組(byte),所有的字樣都取其前K-位元組,以L-位元組(L<K)為一組做 HASH,HASH成M-位元(bit)(M<8*L);若L-位元組的起始位置在K-L+1-N,HASH 的結果為i,則在SHIFT表中的第i個位置紀錄N值,若SHIFT表中第i個位置已經 被填入n且N<n,則SHIFT(i)=N。當所有字樣的L-位元組都已經HASH至SHIFT 表,假使SHIFT(i)沒有被填入任何值(0≤ i ≤ 2M-1),則SHIFT(i)=K-L+1。
我們在輸入字串中以一個 K-位元組為搜尋視窗(search window),將搜尋視窗 的最後 L-位元組 HASH,假使 HASH 的結果為 i,查詢 SHIFT(i)中的值,若是一 個非 0 的值 N,則我們將搜尋視窗往後移 N-位元組;若是 0,則表示搜尋視窗的 起始位置是某個可疑的字樣起始位置。
以圖 2-3 為例,若比對字樣為{abcde, fghij},輸入字串 S={xxxabcde},K=4,
L=3,搜尋視窗的長度為 4-位元組,一開始對其最後 3-位元組(xxa)HASH 並查詢 SHIFT 表,得知搜尋視窗需往後移 K-L+1=2-位元組;對 abc 做 HASH 並查詢 SHIFT 表,得知搜尋視窗需往後移 1-位元組;此時搜尋視窗內含{abcd},HASH bcd 查詢 SHIFT 表得到 0,此時搜尋視窗的起始字元 a 為一字樣之可疑起始位置。
7
Chapter 2 相關工作
圖 2-3 比對字樣{abcde, fghij},輸入字串 S={xxxabcde},K=4,L=3,找出可疑的字樣起始位置之 程序
8
Chapter 3 入侵偵測系統
第 三 章
入侵偵測系統
由於人們對於網際網路應用的倚賴,加以透過網路交易、網路行銷的廠商亦 不在少數,因此不論是個人或者企業都可能成為網路攻擊的潛在目標。網路攻擊 事件的發生,不僅個人網路安全失去保障,企業更可能因網路駭客的攻擊,損傷 企業形象,更可能連帶失去客戶的信任。
3.1 入侵偵測系統簡介
入侵偵測系統(Intrusion Detection System, IDS)可以是軟體或是硬體,設計來 監測資訊系統或網路系統上可能潛在的惡意破壞活動。入侵偵測的原理簡單的 說,是將從資訊系統或網路系統上收集到的活動資訊,與惡意破壞活動特徵 (signature)辨識資料庫做比對以判斷是否有惡意或未授權的活動正在進行。依據 其應用方法的不同,大致可以分為兩大類:(1)網路型入侵偵測系統(NIDS),(2) 主機型入侵偵測系統(HIDS)。
網路型入侵偵測系統(NIDS):與網路連結,並分析從網路收集來的封包。從 封包取得的資訊與攻擊特徵資訊做比對,如果封包資訊並不符合攻擊特徵資料庫 中的攻擊,網路流量便會被判定為正常的流量;相反的,如果封包的資訊符合資 料庫中的某項攻擊特徵,反制攻擊的機制便會被啟動。ClamAV就是一個網路型 入侵偵測系統軟體。
9
Chapter 3 入侵偵測系統 主機型入侵偵測系統(HIDS):從主機系統稽核日誌檔案演進而來。傳統的作 法是,系統管理人員在每天作業結束前,在日誌檔案中檢查是否有任何可疑的非 法行為。這種方式不僅耗時費力,而且無法即時的偵測出潛在的惡意活動。現今 的主機型入侵偵測系統在每一台主要的主機上安裝一個代理程式(agent),執行監 控的工作,若有任何系統事件(event)被記錄至日誌檔案中,代理程式便會立即將 系統事件與攻擊特徵資料庫做比對,有些主機型入侵偵測系統能夠監控應用程式 的日誌檔案,甚至檢查系統的檔案是否遭更改過。
快速增加的安全漏洞:以比對特徵為基礎(signature-based)的安全機制在 1990 年中期成形,當時已知的安全漏洞數目並不多。根據CERT的資料,在 1995 年,
只有 171 個安全漏洞被發佈。隨著安全漏洞的數目不斷快速增加,加上變形攻擊 (mutations)的出現,上述情形已逐漸改觀。針對每一種不同的攻擊,以比對特徵 為基礎的產品都需要一個相對應的攻擊特徵,在 2001 年,每一天至少需增加 6 個攻擊特徵到資料庫中。
以下將簡單的介紹網路型入侵偵測系統軟體--ClamAV,是一個免費而且開 放原始碼的防毒軟體。
3.2 ClamAV[3]
ClamAV 是個免費而且開放原始碼的防毒軟體,軟體與病毒碼的更新皆由社 群免費發佈。目前 ClamAV 主要是使用在由 Linux、FreeBSD 等 Unix-like 系統架 設的郵件伺服器上,提供電子郵件的病毒掃描服務。ClamAV 本身是在文字介面 下運作,但也有許多圖形介面的前端工具(GUI front-end)可用,另外由於其開 放原始碼的特性,在 Windows 與 Mac OS X 平台都有其移植版。
10
Chapter 3 入侵偵測系統
ClamAV 病毒定義資料庫包含兩種類型的病毒字樣,(1)由一連串的普通字元 (character)所組成的基本病毒字樣,(2)由正規表示式呈現的字樣。由正規表示式 呈現的字樣由多個基本病毒字樣所組成,在此我們稱基本病毒字樣為子字樣 (sub-pattern),子字樣之間由特殊字元(wildcard)隔開,要比對此一類型的病毒字 樣,子字樣必需依序被比對到。ClamAV 所定義的特殊字元有 4 種, (1)*:比對 任意數量的任意位元組, (2){min, max}:比對 min~max 個任意位元組, (3)??:
比對任意一個位元組, (4)(a|b):比對 a 字元或是 b 字元。
ClamAV 的實做方法,是以 AC 演算法為基本想法。為了快速查詢輸入的符
ClamAV 的實做方法,是以 AC 演算法為基本想法。為了快速查詢輸入的符