• 沒有找到結果。

可疑字樣過濾器 (pre-filter)

第二章 相關工作

2.2 可疑字樣過濾器 (pre-filter)

使用 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 使用一個包含 256 個元素(element) 的查詢陣列(array)當作一個節點(node)之樹狀結構,256 個位置分別代表 ASCII 字元所對應的位置。由此可知,ClamAV 的記憶體(memory)使用量由樹狀結構的 深度來決定,深度愈深,樹狀結構的節點就愈多,所需要的記憶體量就會愈大。

每一個節點大概需要 1,049-位元組(查詢陣列和一些輔助比對的資訊)。

因為 AC 演算法建構有限狀態機會隨著字樣的長度變長而使得樹狀結構的 深度變深。ClamAV 的病毒定義資料庫只允許每一個字樣最多耗掉 2K-位元組左 右的記憶體,如此看來,若 ClamAV 完全使用 AC 演算法勢必因為記憶體的不足 而不可行。

ClamAV 的做法對 AC 演算法做了些微修改,因為 ClamAV 的病毒定義資料 庫記憶體的限制,所以它只對每一個字樣的前 2 個位元組建立 AC 演算法之有限 狀態機,深度為 2 的我們稱為葉節點(leaf node)並存一個連結清單(linked list)給這 一個節點;舉例來說,字樣{abcde},ClamAV 會將{ab}建立 AC 演算法有限狀態 機,並存連結清單{cde}給代表字串{ab}的這一個葉節點。當我們在比對時,如

11

Chapter 3 入侵偵測系統 果在有限狀態機中走到了葉節點,ClamAV 會對此葉節點之連結清單內所有字樣 的所有位元組做逐一的比對。其動作示意如圖 3-1。

圖 3-1 ClamAV 比對動作示意圖,實線代表 goto,虛線代表 failure

12

Chapter 4 應用於網路安全之正規表示式字樣比對演算法

第 四 章

應用於網路安全之正規表示式字樣比對 演算法

我們提出的字樣比對有限狀態機結構可以指出第一個病毒/蠕蟲惡意碼字樣 發生的位置,字樣可以是一般字樣或是由正規表示式呈現的字樣。本篇論文中提 到的正規表示式特殊字元定義於ClamAV 中,ClamAV 是一個自由軟體且可任意 修改的防毒程式。

4.1 相關問題與定義

4.1.1 相關問題

在本篇論文中,我們提出了一個問題,若AC演算法建造之有限狀態機可以 比對一般字樣所組成的集合X,我們如何在原來的X中加入n個由正規表示式呈現 的字樣(RE1, RE2,…, REn)? 本篇論文所提及的正規表示式特殊字元有 3 種,

(1)*:比對任意數量的任意位元組,(2)??:比對任意一個位元組,(3){min, max}:

比對min~max個任意位元組,如表 4-1 所示。每一個正規表示式至少包含了一個 特殊字元。簡單來說,我們的目的是要建造包含正規表示式之有限狀態字樣比對 機(finite state pattern matching machine),也就是X'=XRE1RE2∪ ∪... REn

13

Chapter 4 應用於網路安全之正規表示式字樣比對演算法

特殊字元 比對行為

* 比對任意數量的任意位元組

?? 比對任意一個位元組

{min, max} 比對min~max 個任意位元組

4-1 正規表示式之特殊字元

本篇論文提出一個有限狀態字樣比對機的建構程序,當字串 x 輸入字樣比對 機,它可以在 x 中標出第一次某個字樣發生的結束位置(ending position)。假使有 一個字樣 m 在字串 x 中被比對到,若其在 x 中之結束位置比其它字樣 n 在 x 中比 對到的結束位置小,如此,我們稱字樣 m 在 x 中之結束位置為第一次出現字樣 之結束位置。一個位置可能同時比對到多個字樣。

假使一般字樣所成之集合 X 之 goto 狀態圖 G 已經經由 AC 演算法建構出來,

G 的起始狀態我們定義為 I;倘若 X 是一個空集合,則 G 只包含了 I 這一個狀態,

且 goto(I, a)=I,a 代表所有可能的字元。

4.1.2 相關定義

在介紹本篇論文所提出的演算法之前,有一些定義必須要在此說明。若有一 個字串為 xy,我們稱x為字串 xy 的字首(prefix),y 為字串 xy 的字尾(suffix);若 不是一個空字串,我們可以稱

y

x為字串 xy 的完全字首(proper prefix);同理,若x 不是一個空字串,我們可以稱 為字串y xy 的完全字尾(proper suffix)。在一個 goto 狀態圖中,字串x從起始狀態開始走,若走至狀態P,我們稱狀態 P 代表字串x, 如圖4-1 所示。

14

Chapter 4 應用於網路安全之正規表示式字樣比對演算法

4-1 字串表示狀態圖,字串x=ab,代表狀態 P

在 goto 狀態圖的起始狀態有可能有自我迴圈(self-loop),若 goto 狀態圖存在 自我迴圈,我們將自我迴圈移除,它就可以稱為一顆樹(tree)。以下不考慮自我 迴圈,假使 goto(P, a)=R,a 為任意的符號,我們可以稱狀態 P 為狀態 R 之父狀 態;狀態R 為狀態 P 之子狀態。若在 goto 狀態圖中,從狀態 P 開始走,存在一 非空字串x走至狀態R,我們稱狀態 R 為狀態 P 之子孫(descendant)狀態。一顆樹 包含了狀態S 以及其所有子孫狀態,我們稱這棵樹為狀態 S 的子樹(sub-tree),如 圖4-2 所示。若某一狀態之 output 函式為非空,我們可以稱這一個狀態為終了狀 態(final state),表示比對到某一字樣。

4-2 狀態 S 之子樹

在 goto 狀態圖中,若一個狀態 所代表的字串為 p,在此 goto 狀態圖中所

在 goto 狀態圖中,若一個狀態 所代表的字串為 p,在此 goto 狀態圖中所

相關文件