• 沒有找到結果。

使用FPGA實現應用於網路安全之可延展的字樣比對架構

N/A
N/A
Protected

Academic year: 2021

Share "使用FPGA實現應用於網路安全之可延展的字樣比對架構"

Copied!
74
0
0

加載中.... (立即查看全文)

全文

(1)

電信工程學系碩士班

碩 士 論 文

使用 FPGA 實現應用於網路安全之可延展的

字樣比對架構

Implementation of a Scalable Pattern Matching

Architecture for Network Security Applications

using FPGA

研 究 生:李世弘

指導教授:李程輝 教授

(2)

使用 FPGA 實現應用於網路安全之可延展的字

樣比對架構

Implementation of a Scalable Pattern Matching

Architecture for Network Security Applications using

FPGA

研究生:李世弘

Student:Shih-Hung Lee

指導教授:李程輝 教授 Advisor:Prof. Tsern-Huei Lee

國 立 交 通 大 學

電 信 工 程 學 系 碩 士 班

碩 士 論 文

A Thesis

Submitted to Department of Communication Engineering College of Electrical and Computer Engineering

National Chiao Tung University in Partial Fulfillment of the Requirements

For the Degree of Master of Science

in

Communication Engineering

June 2008

Hsinchu, Taiwan, Republic of China

(3)

中文摘要

使用 FPGA 實現應用於網路安全之

可延展的字樣比對架構

學生:李世弘

指導教授:李程輝 教授

國 立 交 通 大 學

電 信 工 程 學 系 碩 士 班

摘 要

因為字樣比對的準確性,使其技術近年來被廣泛地運用到一些網際網路的應 用,例如入侵偵測,防毒。現今網路入侵偵測系統在偵測網路封包的有效負載 (payload)時,是檢查其有效負載是否與所設定的網路安全規範一致。這個過程, 往往被稱之深度封包檢測(deep packet inspection),偵測有效負載中之任意起始位 置是否涉及到預先定義的字樣或關鍵字。字樣比對是一項需要高度計算密集的工 作,因此其潛在的瓶頸問題是,無法快速處理。因為傳統的實現於軟體的字樣比 對無法跟上日益增加的網路速度,因此實現於硬體的解決方式被相繼的提出。本 論文將實現 NTL 實驗室所提出一個新穎的字樣比對架構,並將其一個稱之為預 先過濾器的前置處理器實現於 FPGA。我們將展現出它如何有效率的比對成千上 萬的字樣。最後,我們將字樣比對實現於 Xilinx Virtex II Pro ML310 FPGA,並 得到一些詳細的數據和結果。

(4)

English Abstract

Implementation of a Scalable Pattern Matching

Architecture for Network Security Applications using FPGA

student:Shih-Hong

Lee

Advisor:Prof. Tsern-Huei Lee

Department of Communication Engineering

National Chiao Tung University

Abstract

Because of its accuracy, pattern matching technique has recently been applied to Internet security applications such as intrusion detection, anti-virus. Modern Network Intrusion Detection Systems (NIDS) detect the network packet payload to check if it conforms to the security policies of the given network. This step, often called that deep packet inspection, involves detection of predefined patterns or keywords starting at an arbitrary location in the payload. Pattern matching is a computationally intensive work. It has a potential bottleneck without high-speed processing. Since the conventional software-implemented pattern matching have not kept pace with the increasing network speeds, hardware-implemented solutions have been introduced. In this paper we will realize the NTL laboratory to propose a novel scalable pattern matching architecture, and the pre-processor, call that pre-filter, which implemented to FPGA. We show how Pre-filters can be used effectively to perform pattern matching for thousands of strings. Finally, we give the details of our implementation of pattern matching technique on Xilinx Virtex II Pro ML310 FPGA.

(5)

誌謝

誌 謝

誠摯的感謝指導教授 李 程輝 博士,在我研究所就讀期間悉心地教導與指 點,得以一窺網路安全領域的深奧,使我在這兩年中獲益匪淺。雖然我不是一個 能適時舉一反三的學生,但謝謝您總是包容著我的不細心,期待著我下次的完整 解答。雖然我不是一個善於表達的學生,但謝謝您總是仔細地聽完我想要對您的 陳述。您對學問的嚴謹態度更是學生作學問的一個優良典範。 感謝 NTL 實驗室,博士班-景融 學長、郁文 學長、迺倫 學姊;已畢碩士 班-嘉旂 學長、建成 學長、柏庚 學長、登煌 學長;同儕-耀誼、勁文、凱文、 明智、明鑫、錫堯;學弟-俊德、佑信、松晏、家豪、鈞傑,在我課業、生活以 及研究上不吝嗇地給我最大的關懷與指教,使我一路茁壯,讓我碩士生涯過得很 充實和愉快。謝謝每一個曾經伴我成長的戰友們,我以你們為傲。 感謝 CIC 這兩年來無怨無悔地充當我的衣食父母,也謝謝蔡博、雅慧、淑 娟、維蓓、宗盈,…等各位大哥哥、大姐姐們的提攜與照顧。 最後,感謝我的父親-李 炳森 先生、母親-李張 彩霞 女士、陪伴我五年多 的女友-吳雅婷 小妹妹、摯友-林文翔以及各位親朋好友,謝謝你們默默地支持 我,鼓勵我。我由衷地感謝每一個曾經為我付出的人,我沒有辜負您們的期盼, 我的成就與驕傲全因您們而得,我將一切的榮耀都奉獻給您們,謝謝。 謹將此論文獻給所有愛我及我愛的人 西元 2008 年 6 月 於新竹交大

(6)

目錄

目 錄

中文摘要

……… i

English Abstract ……… ii

誌謝

……… iii

目錄

……… iv

表目錄

……… vi

圖目錄

……… vii

第一章

簡介………

1

1.1

研究背景

………

1

1.2

研究動機

………

3

第二章

相關工作………

4

2.1

Aho-Corasick 演算法

………

4

2.2

Wu-Manber 演算法

………

8

第三章

應用於網路安全中可延展的字樣比對架構之預

先過濾器………

12

3.1

字樣比對架構的介紹

………

12

3.2

預先過濾器架構及相關定義

………

13

3.2.1

搜尋視窗

………

13

3.2.2

成員詢問模塊

………

14

3.2.3

最右位元偵測器

………

16

3.2.4

主位元組列

………

21

第四章

實現於 FPGA 的預先過濾器………

25

4.1

字樣比對架構的系統雛型

………

25

4.2

測試板-Xilinx Virtex II Pro ML310 介紹

………

26

4.3

測試文字檔產生與儲存設計

………

31

4.4

可疑位址的存取設計

………

34

4.5

預先過濾器設計

………

36

4.5.1

雜湊產生器

………

37

(7)

目錄

第五章

實驗數據與結果………

39

5.1

測試環境介紹

………

39

5.2

Prefilte 模組的修正版

………

41

5.3

數據與結果

………

44

第六章

結論………

50

參考文獻

……… 51

附錄一

各合成器合成之結果………

52

(8)

表目錄

表目錄

表-5.1: PF1 與 PF1_NMB 的生產量之比較(隨機產生檔)……… 44 表-5.2: PF1 與 PF1_NMB 的生產量之比較(window 執行檔)……… 44 表-5.3: PF1 與 PF1_NMB 之搜尋視窗平均移動次數和平均移動的位元組個數 46 表-5.4: PF2 與 PF2_NMB 的生產量之比較(隨機產生檔)……… 47 表-5.5: PF2 與 PF2_NMB 的生產量之比較(window 執行檔)……… 47 表-5.6: PF2 與 PF2_NMB 之搜尋視窗平均移動次數和平均移動的位元組個數 49

(9)

圖目錄

圖目錄

圖-2.1: 由{he, she, his, hers}字樣集合所建構之有限狀態機-1……… 5

圖-2.2: 由{he, she, his, hers}字樣集合所建構之有限狀態機-2……… 6

圖-2.3 由{he, she, his, hers}字樣集合所建構之有限狀態機-3……… 6

圖-2.4 由{he, she, his, hers}字樣集合所建構之有限狀態機-4……… 7

圖-2.5 {he, she, his, hers}此字樣集合所加入失效函數的有限狀態機………… 7

圖-2.6 {he, she, his, hers}此字樣集合的輸出狀態……… 8

圖-2.7 SHIFT[i]第一類的移動說明-1……… 9 圖-2.8 SHIFT[i]第一類的移動說明-2……… 10 圖-2.9 SHIFT[i]第二類的移動說明-1……… 10 圖-2.10 SHIFT[i]第二類的移動說明-2……… 10 圖-2.11 SHIFT[i]第二類的移動說明-3……… 11 圖-2.12 SHIFT[i]第二類的移動說明-4……… 11 圖-3.1 我們所提出的字樣比對架構……… 12 圖-3.2 m=6, k=3 的預先過濾器……… 13 圖-3.3 最右位元偵測器說明 1……… 17 圖-3.4 最右位元偵測器說明 2……… 17 圖-3.5 最右位元偵測器說明 3……… 18 圖-3.6 最右位元偵測器說明 4……… 19 圖-3.7 最右位元偵測器說明 5……… 20 圖-3.8 具有主位元組列的預先過濾器……… 21 圖-3.9 不具有主位元組列之預先過濾器的搜尋視窗移動概觀……… 23 圖-3.10 具有主位元組列之預先過濾器的搜尋視窗移動概觀……… 23 圖-4.1: 我所提出實現於 FPGA 的字樣比對系統雛型……… 25

圖-4.2: Xilinx Virtex II Pro ML310 FPGA 測試板……… 26

圖-4.3: ML310 FPGA 測試板的家族成員……… 27

(10)

圖目錄 圖-4.5: 測試文字檔設計簡例……… 33 圖-4.6: jail_bram 的宣告型態為 RAMB16_S18_S18……… 35 圖-4.7: 預先過濾器實現於 FPGA 之架構圖……… 36 圖-4.8: mqm_bram1~mqm_bram7 的宣告型態為 RAMB16_S1……… 37 圖-5.1: PF1,原始的 Prefilter 模組的版本……… 41 圖-5.2: PF2,以速度為導向的 Prefilter 模組修正版……… 42 圖-5.3: PF3,以功率為導向的 Prefilter 模組修正版……… 42 圖-5.4: PF1 與 PF1_NMB 的生產量表現……… 45 圖-5.5: PF1 與 PF1_NMB 所抓到的可疑字樣個數……… 45 圖-5.6: PF1 與 PF1_NMB 的平均移動的位元組個數表現……… 46 圖-5.7: PF2 與 PF2_NMB 的生產量表現……… 48 圖-5.8: PF2 與 PF2_NMB 所抓到的可疑字樣個數……… 48 圖-5.9: PF2 與 PF2_NMB 的平均移動的位元組個數表現……… 49

(11)

第一章 簡介

第一章

簡 介

1.1 研究背景

網際網路的快速成長,和出現一些嶄新的應用,如 P2P 檔案共享、視訊點播, 以及電子商務的興起,大大地提升了使用者在網路上的網路流量。網路的速度和 頻寬也迅速地增加,以滿足使用者的需求。正因如此,網路上的一些惡意攻擊, 如拒絕服務(Denial of Service, DoS)、電子郵件病毒(E-mail virus)以及網際網路 蠕蟲(Internet worm),可以更快和更具破壞性的進行攻擊。例如,Code Red 蠕蟲 和 SQL Slammer 蠕蟲在數分鐘到數小時間就造成世界上數十億美金的損失。

字樣比對(Pattern matching)是電腦科學中的一個基本問題,其研究內容在資 訊檢索、資料壓縮、搜尋引擎、入侵偵測、內容過濾以及基因排序等都佔據了重 要的一環。在字樣比對演算法中常被提及的有 KMP, D.E. Knuth, J.H. Morris and

V.R. Pratt [1]、Boyer-Moore (BM), R.S. Boyer and J.S. Moore[2]、 Wu-Manber, S.

Wu and U. Manber [3]、Aho-Corasick (AC), A.V. Aho and M.J. Corasick [4]。而當

我們在探討字樣比對演算法時,經常將它們區分成, 以複雜度的觀點:

可分為『線性(linear)』/『子線性(sub-linear)』字樣比對演算法。

AC 字樣比對演算法是一種典型且常見的線性時間演算法,它將字 樣(pattern)建構成有限狀態機(Finite state automaton),然後在輸入端一個 接一個(one by one)輸入字元(character),再根據現在狀態(current state) 與輸入的字元(input character),將狀態轉移至下一個狀態(next state)。 AC 演算法的時間複雜度為 O(n),因此它在最壞情況(worst case)的表現

(12)

第一章 簡介 尤佳。 BM 字樣比對演算法則是典型的子線性時間的演算法,在很多情況 (時間)下,它每次移動時,都跳躍(移動)一段長距離的位置,使得它就 時間複雜度而言優過於線性時間複雜度,我們稱之為子線性時間複雜 度。此演算法的設計在一般情況(average case)下的表現突出,時間複雜 度為 O(n+m),其中 n 為輸入欲比對之字串(string)的長度,m 為字樣長 度;但在最壞情況下的表現就差強人意,時間複雜度為 O(n*m)。 以可比對字樣多寡的觀點: 可分為『單一(single)』/『多(multiple)』字樣比對演算法。 上述,BM 演算法為單一字樣比對演算法,意指當輸入字串餵進 時,僅單一字樣與其進行比對工作。 AC 則為多字樣比對演算法,意指當輸入字串餵進時,由多字樣所 建構成的有限狀態機會與其進行比對工作,因此,我們可能會在輸入字 串掃描完畢後,同時偵測到多個字樣。正如所述,AC 演算法同時具備 『線性』及『多』的好處,因此經常被運用作為字樣比對中的搜尋引擎。 在第二章中,我們會再詳細的解說 AC 的動作/操作原理。 實現於軟體的字樣比對也正因網際網路的快速成長,無法跟上日益增加的網 路速度,使其無法有效與即時地替我們防堵網路上的惡意攻擊。由於無法快速的 處理網路上的流量,這個先天性的缺憾,使得人們開始將注意力轉移至以硬體化 的方式實現字樣比對的工作。相關的論文有如雨後般的春筍,絡繹不絕。

(13)

第一章 簡介

1.2 研究動機

幾乎當前市場上的網路入侵檢測系統(Network Intrusion Detection System, NIDS)都是依賴一種資料收集(data collection)的機制,此機制屬於被動協定分析 (passive protocol analysis),這種模式在本質上是有先天性的缺陷。被動協定分析 的意思是說,入侵偵測系統在網路上是處於被動地觀看網路流量,並詳細地檢查 流量中是否有可疑字樣的蹤跡。因此,我們可以大致上歸類出下列幾個主要的問 題: (1) 入侵偵測系統是否有足夠的訊息去偵測網路上流量? (2) 入侵偵測系統對於可疑字樣的操作模式是屬於 fail open,意指當入侵偵 測系統失敗時,網路仍是會通的,不會因為入侵偵測系統的失敗,而造 成網路中斷的情形,但是此時網路的安全性是有疑慮的。這種操作模式 與防火牆相異,防火牆對於可疑字樣的操作模式是屬於 fail close,意指 當防火牆失敗時,網路是不通的,以保護使用端的安全。 (3) 基於軟體的入侵偵測系統是否能夠在網際網路的快速發展以及網路速 度與頻寬日益增加下,還能有效地與即時地偵測出可疑的活動? 本論文的研究重心將致力於解決上述第三個問題。很明顯地,基於軟體的入 侵偵測系統在處理速度上遇到了瓶頸,這激發我們去為這問題找到一個新的答 案。在 NTL 實驗室,李 程輝 教授和黃 迺倫 學姐的通力合作下,開發出一個 新穎的可延展之字樣比對架構,此新穎的字樣比對架構不僅在比對的速度上有著 優越的表現,且所需儲存的空間也非常的節省,若以總和效能來進行比較,我們 的可延展之字樣比對架構是現今的字樣比對領域中的領頭者。在有著優秀的字樣 比對演算法下,我們更進一步地將它實現於硬體之上,以嚴謹和謹慎的觀點去評 估其實際實現於 FPGA 的可延展之字樣比對架構能有著如何的表現。

(14)

第二章 相關工作

第二章

相 關 工 作

2.1 Aho-Corasick 演算法

在 1975 年 6 月發表於 Communication of the ACM 的"Efficient String Matching: An Aid to Bibliographic Search"為貝爾實驗室的 Alfred V. Aho 和 Margaret J. Corasick 兩位先生共同提出。此篇論文提出了一個有效地利用有限狀態機(Finite State Machine)建構出快速且簡單的字樣比對。由於此篇論文為一古典字典比對搜 尋演算法,有效率地執行比對的工作且更具備了同時多字樣比對的功能,因此常 被人們應用於相關地方,如字樣比對,基因比對,入侵偵測系統等,常簡稱為 AC 演算法。 AC 是一種基於有限狀態機的演算法,在進行比對前,都會先對字樣集合內 的所有字樣先行預先處理,建構出樹狀的有限狀態機;然後,僅須對輸入字串搜 描一次,即可找到與字樣集合內匹配的字樣。AC 演算法預先處理部份包含了三 個函數,轉移函數(Goto function),失效函數(failure function)與輸出函數(output function)。

轉移函數,表示在現在狀態(cuurent state)下讀入一個待測的輸入字串之字元 後,將轉移到下個狀態(next state),這步驟將在建構出有限狀態機;如圖-2.1~圖 -2.4 所示,在字樣集合內有{he, she, his, hers}等 4 個字樣,我們將依次建構出屬 於此字樣集合的樹狀的有限狀態機。首先,設置一個初始狀態(initial state)為狀態 0,依字樣集合內的字樣排列順序建構出。當我們在將一字樣要建立於圖中時, 皆從狀態 0 開始,若在現在狀態下,讀入一字樣之字元,下一個狀態不存在,則 我們須編比已有狀態編號大 1 的一個新狀態,並用一條有向線從此現有狀態指向

(15)

第二章 相關工作 此新狀態且在有向線上標註此字樣之字元;若下一個狀態存在,則我們繼續走下 去,直至此字樣建構於圖上。 首先,依字樣集合所示,我們須先建構字樣 he。一開始時,整個有限狀態 機僅存在一個狀態 0,所以狀態 0 必無一條轉移函數經由字元 h 指向另一個狀態, 因此我們編入一新狀態為狀態 1,並在由狀態 0 至狀態 1 的有向線上標註 h,函 數式為 。在狀態 1 下,此字樣下一個字元 e 讀入待編,我們可知狀態 1 並無接任何的下一個狀態,因此我們編入一新狀態為狀態 2,並在由狀態 1 至狀 態 2 的有向線上標註 e,函數式為 (0, ) 1 g h = (1, ) 2 g e = 。由於目前所編入的字樣開頭僅為 h, 故其餘字元的轉移函數皆回至狀態 0,如圖-2.1 所示。

圖-2.1:由{he, she, his, hers}字樣集合所建構之有限狀態機-1

字樣 he 建構完畢,依次待建構字樣為 she。狀態 0 無一條轉移函數經由字元 s 指向另一個狀態,因此我們編入一新狀態比目前現有狀態編號最大者加 1,為 狀態 3,並在由狀態 0 至狀態 3 的有向線上標註 s,函數式為 。在狀態 3 下,此字樣下一個字元 h 讀入待編,我們可知狀態 3 並無接任何的下一個狀態, 因此我們編入一新狀態比目前現有狀態編號最大者加 1,為狀態 4,並在由狀態 3 至狀態 4 的有向線上標註 h,函數式為 (0, ) 3 g s = (3, ) 4 g h = 。在狀態 4 下,此字樣下一個 字元 h 讀入待編,我們可知狀態 4 並無接任何的下一個狀態,因此我們編入一新 狀態比目前現有狀態編號最大者加 1,為狀態 5,並在由狀態 4 至狀態 5 的有向 線上標註 e,函數式為 。由於目前所編入的字樣開頭僅為 h 與 s,故其 餘字元的轉移函數皆回至狀態 0,如圖-2.2 所示。 (4, ) 5 g e =

(16)

第二章 相關工作

圖-2.2:由{he, she, his, hers}字樣集合所建構之有限狀態機-2

圖-2.3:由{he, she, his, hers}字樣集合所建構之有限狀態機-3

依此類推,若目前待建構字樣為字樣集合的最後字樣 hers。狀態 0 已存在一 條轉移函數經由字元 h 指向狀態 1,因此我們不需編入一新狀態,下一個狀態將 停留在狀態 1,函數式為 (0, ) 1g h = 。在狀態 1 下,此字樣下一個字元 e 讀入待編, 我們可知狀態 1 已存在一條轉移函數經由字元 e 指向狀態 2,因此我們不需編入 一新狀態,我們下一個狀態將停留在狀態 2,函數式為 (1, ) 2g e = 。在狀態 2 下, 此字樣下一個字元 r 讀入待編,我們可知狀態 2 並無接任何的下一個狀態,因此 我們編入一新狀態比目前現有狀態編號最大者加 1,為狀態 8,並在由狀態 2 至 狀態 8 的有向線上標註 r,函數式為 (2, ) 8g r = 。在狀態 8 下,此字樣下一個字元 s 讀入待編,我們可知狀態 8 並無接任何的下一個狀態,因此我們編入一新狀態 比目前現有狀態編號最大者加 1,為狀態 9,並在由狀態 8 至狀態 9 的有向線上 標註 s,函數式為 。由於目前所編入的字樣開頭僅為 h 與 s,故其餘字 元的轉移函數皆回至狀態 0,如圖-2.4 所示。 (8, ) 9 g s =

(17)

第二章 相關工作

圖-2.4:由{he, she, his, hers}字樣集合所建構之有限狀態機-4

失效函數,用來指示某個『現在狀態』下,當讀入一輸入字串之字元後無法 至下一個狀態時(意指這個現在狀態為此路徑(分支)的最後狀態),我們須將轉移 到的狀態則由此失效函數決定之。圖-2.5 為由此字樣集合所加入之失效函數後的 有限狀態機。

圖-2.5:{he, she, his, hers}此字樣集合所加入失效函數的有限狀態機

失效函數 f 為逐層建構而得。當第一層,也就是狀態 1 與狀態 3 發生失效, 依 演 算 法 之 定 義 , 則 下 一 個 狀 態 將 回 至 初 始 狀 態 。 其 餘 則 遵 循 著 ' ( ) ( ( ), ) f s =g f s a ,其中狀態 ' s 為狀態 的父狀態,如下所示:

(18)

第二章 相關工作 „ 當狀態 2 發生失效,則 f(2)=g f( (1), )e =g(0, )e =0 f g f h g „ 當狀態 4 發生失效,則 (4)= ( (4), )= (0, )h = 1 „ 當狀態 5 發生失效,則 (5)f =g f( (4), )e =g(1, )e = 2 „ 當狀態 6 發生失效,則 (6)f =g f( (1), )i =g(0, )i = 0 „ 當狀態 7 發生失效,則 f(7)=g f( (6), )s =g(0, )s =3 f g f r g „ 當狀態 8 發生失效,則 (8)= ( (2), )= (0, )r = 0 „ 當狀態 2 發生失效,則 (9)f =g f( (8), )s =g(0, )s = 3 輸出函數,用來指示在比對過程中,輸出所匹配的字樣之最後狀態所停留之 處。圖-2.6 為此字樣集合的輸出狀態。

圖-2.6:{he, she, his, hers}此字樣集合的輸出狀態

2.2 Wu-Manber 演算法

在 1994 年 5 月發表的"A fast algorithm for multi-pattern searching"為 Sun Wu 和 Udi Manber 兩位先生共同提出。此演算法採用的跳躍不可能匹配之字元與雜 湊陣列(Hash array)方式加速比對字樣的進行。

(19)

第二章 相關工作 出 SHIFT 表(SHIFT table),HASH 表(HASH table),以及 PREFIX 表(PREFIX table) 等三個表。SHIFT 表用於指示當在掃描輸入字串時,根據所讀入之輸入字元串決 定可以跳躍的字元數(距離),如果所對應之值為 0,則表示可能產生匹配的情況, 這時我們須交由 HASH 表與 PREFIX 表更進一步的驗證判斷,以決定匹配了哪 些可能的字樣,再則驗證哪一個或哪些字樣完全匹配。 假設字樣集合中的最短字樣的長度為 m,則我們將取字樣集合內的每一個字 樣前 m 個字元(每一個字樣等長)進行多字樣比對,這樣的動作是為了增進比對之 速度與簡單性(不必去在意各字樣的長度,因為已將每一個字樣取等長)。 令 為輸入字元串中的待比對之區塊字串。區塊字串 X 將透過雜 湊函數映射得到一雜湊值,並將此雜湊值作為 SHIFT 表的一個索引值(index), 由 SHIFT 表得到的值將代表此區塊字串可跳躍(移動)的位元組數。 1 2... B X =x x x

1 X does not appear as a substring in any pattern of P

[ ]

X appears in some patterns

m B SHIFT i m q − + ⎧ = ⎨ 如上述方程式所示,我們經 X 得到一雜湊值為 i 所可移動的式子將分為兩大類。 第一類,X 不屬於字樣集合內的一個字樣;第二類,X 可能出現於多個字樣之中。 如圖-2.7~圖-2.8 所示,我們將舉一個例子說明 SHIFT[i]第一類的移動情況。 現在區塊字串 X 為『agc』,並且在字樣集合內存在了兩個字樣,分別為 p1與 p2。 從圖-2.7 所示,我們可以看到區塊字串 X 並不屬於 p1與 p2,因此可移動距離為 ,如圖-2.8 所示,下次的區塊字串 X 將為『rbc』。 1 7 3 1 5 m b− + = − + = 圖-2.7:SHIFT[i]第一類的移動說明-1

(20)

第二章 相關工作 圖-2.8:SHIFT[i]第一類的移動說明-2 如圖-2.9~圖-2.12 所示,我們將舉一個例子說明 SHIFT[i]第二類的移動情 況。現在區塊字串 X 為『agc』,並且在字樣集合內存在了兩個字樣,分別為 p1 與 p2。從圖-2.9~圖-2.10 所示,我們可以看到區塊字串 X 同時存在於 p1與 p2,因 此可移動距離為 ,其中 q 為區塊字串 X 結束於 p1與 p2的最大的位置。如 圖-2.11 所示,區塊字串 X 的最後一個字元結束的位置為 p1的第 3 的字元,而區 塊字串 X 的最後一個字元結束的位置為 p2的第 5 的字元。因此,我們的 q 值將 選擇 5,可移動距離將為 ,如圖-2.12 所示,下次的區塊字串 X 將 為『cxv』。 mq 7 5 2 m q− = − = 圖-2.9:SHIFT[i]第二類的移動說明-1 圖-2.10:SHIFT[i]第二類的移動說明-2

(21)

第二章 相關工作

圖-2.11:SHIFT[i]第二類的移動說明-3

圖-2.12:SHIFT[i]第二類的移動說明-4

假設現在正比對的區塊字串 X 的雜湊值 h,如果 SHIFT[h]=0,則表示可能 產 生 的 匹 配 , 因 此 我 們 須 進 一 步 地 利 用 此 雜 湊 值 h 去 查 詢 HASH 表 , HASH[h]=p,其中 p 將作為字樣鏈表(pattern list)與 PREFIX 表的一個指示值。字 樣鏈表儲存的是後 B 個字元的雜湊值與區塊字串 X 的雜湊值 h 一樣的字樣; PREFIX 表則儲存的是這些字樣的前 B 個字元的雜湊值,這樣的作法將有利於減 少比對的次數,因為僅當這些字樣的前 B 個字元的雜湊值和後 B 個字元的雜湊 值與輸入字串的前 B 個字元的雜湊值和後 B 個字元的雜湊值一樣時我們才需進 行一個一個位元組的詳細比對。

(22)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器

第三章

應用於網路安全中可延展的字樣比對架

構之預先過濾器

3.1 字樣比對架構的介紹

圖-3.1:我們所提出的字樣比對架構 圖-3.1 為我們所提出的字樣比對架構。此系統將輸入字串先透過預先過濾器 的處理,將可疑字樣的位址記錄下,然後驗證器會根據紀錄在可疑字樣位址儲存 處中的每一筆資料一一進行比對,驗證由此可疑字樣的起始位址是否真的存在一 個屬於字樣集合(Patterns set)中的成員。一個透過預先過濾器處理的字樣比對架 構大幅縮減系統對於輸入字串的處理時間,使其在網際網路的快速成長下還能保 證系統安全地受到保護。我們將此字樣比對架構主要劃分成兩個部份,預先過濾

(23)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器 器以及驗證器,分別由我以及實驗室的另一位同學-古凱文所負責。因此,接下 來我將針對我所負責的部份,預先過濾器,進行詳細的敘述與說明。

3.2 預先過濾器架構及相關定義

3.2.1. 搜尋視窗(Search Window)

圖-3.2:m=6, k=3 的預先過濾器 圖-3.2 為一個 m=6, k=3 的預先過濾器,變數 m 表示我們所設定的搜尋視窗 (Search window)的長度,我們稱 m 為視窗長度(Window length),其單位為位元組 (byte);變數 k 表示我們每一次所去觀測搜尋視窗的後幾個位元組,我們稱 k 為 區塊大小(Block size)。視窗長度以及區塊大小的選定將會影響我們接下來要討論 的成員詢問模塊的個數。

(24)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器

3.2.2. 成員詢問模塊(Membership Query Module)

我們假設有一字樣集合儲存 N 個字樣,為了加速系統的處理速度,我們僅 取字樣集合中每一個字樣的前 m 個位元組與輸入字串進行粗步的比對,假如比 對匹配,則我們須將搜尋視窗的起始位址儲存至可疑字樣位址儲存處,驗證器則 會針對其儲存於可疑字樣位址儲存處的每一筆資料做進一步詳細地判斷,驗證由 此可疑字樣位址為起始是否真的存在一個屬於字樣集合中的成員。m,也是我們 先前所提及須設定的視窗長度。以圖-3.2 為例,我們僅取字樣集合中每一個字樣 的前 6 個位元組並且我們每次僅觀測搜尋視窗的後 3 個位元組。接下來我們將開 始介紹如何將每一個字樣的前 m 個位元組分成 k 個位元組為一個群組(Group), 分別儲存至不同的成員詢問模塊(Membership Query Module, MQM)。首先,假設 我們存在一個字樣為『b9c0012e8a272e3226dd022e882743e2f2c3』(此字樣取之於 ClamAV,以 16 進制表示之),依圖-3.2,所設定之視窗長度為 6,因此我們將取 下此字樣的前 6 個位元組,也就是『b9c0012e8a27』,並將分成 3 個位元組為一 個群組分別儲存至不同的成員詢問模塊,我們分類的方式為 ‹ 第 一 個 子 字 樣 (Sub-pattern) 為 第 一 個 位 元 組 至 第 三 個 位 元 組 , 『b9c001』,儲存至第一個成員詢問模塊(MQM1)。 ‹ 第二個子字樣為第二個位元組至第四個位元組,『c0012e』,儲存至第 二個成員詢問模塊(MQM2)。 ‹ 第三個子字樣為第三個位元組至第五個位元組,『012e8a』,儲存至第 三個成員詢問模塊(MQM3)。 ‹ 第四個子字樣為第四個位元組至第六個位元組,『2e8a27』,儲存至第 四個成員詢問模塊(MQM4)。 依上述的簡例,我們可以得知,當 m=6, k=3 時,我們的分類方式共需四個 成員詢問模塊。現在我們將利用一些數學式子的推論來得知,若已知 m 和 k,則 需多少個成員詢問模塊。假設字樣集合中有一字樣為 ,為字樣集合中的第 i 個字樣,則有一子字樣 i P 1 2.... i i i k p p p ( 的第一個位元組至第 k 個位元組)將儲存至第 一個成員詢問模塊,一子字樣 i P 2 3.... 1 i i i k p p p + 將儲存至第二個成員詢問模塊,依此類

(25)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器 推,則最後一個成員詢問模塊儲存的子字樣為pm ki− +1pm ki− +2....p 。由此可知,若mi 已知 m 和 k,則需 m-k+1 個成員詢問模塊。接著,我們將說明成員詢問模塊在 預先過濾器中的角色與功能。 每一個成員詢問模塊在預先過濾器中的角色都是擔任一個雜湊陣列(Hash array),預設值為每陣列中的儲存空間都設定為 0。就先前所述,分配至每一個 成員詢問模塊中的每一個子字樣並不是真實地儲存到每一個成員詢問模塊,而是 每 一 個 成 員 詢 問 模 塊 中 的 每 一 個 子 字 樣 都 會 經 由 同 樣 的 雜 湊 函 數 (Hash function),得到其雜湊值(Hash value),並以此雜湊值為位址(Address),將雜湊陣 列中由此位址所指向的儲存空間設定為 1。因此,當成員詢問模塊所回饋值為 1, 表示在搜尋視窗所觀測的區塊大小可能存在於該成員詢問模塊之中。利用雜湊的 儲存方式雖擁有可大幅減低我們所儲存的空間和準確不遺漏(True negative)的特 性,但付出的代價就是可能發生誤報(False positive)。例 3.1 說明如何將子字樣經 由雜湊函數所得到的雜湊值,儲存至雜湊陣列之中的一個簡要例子。 例 3.1: 假設我們欲將一個位元組(8 個位元)的輸入值,經有一雜湊函數,轉換成為 3 個位元的雜湊值。則 ¾ 輸入值值域 A = {0,1,..,255},雜湊值值域 B={0,1, ..,7}。 ¾ 3 個位元的雜湊值,告訴我們此雜湊陣列的大小為 23。 ¾ 根據此題意,我們可定義出雜湊函數為一個隨機產生的 8*3 矩陣, D=[d8*3]。 ¾ 將雜湊陣列 HA 的儲存空間初始為 0。 1 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 0 0 0 0 1 0 0 0 D ⎡ ⎤ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ = ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎣ ⎦ 0 0 0 0 0 0 0 0 HA

(26)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器 ¾ 假設現有其輸入值: D016 Æ 11010000 2與 8216Æ100000102 ¾ 將 D016與 8216所得之雜湊值作為 HA 的位址,所指向的儲存空間 設定為 1 由上述簡例中我們可知,輸入值 8 個位元將由 3 個位元的雜湊值代替,減少 了我們須儲存的空間,但不可避免的是,當輸入值為 0A 16時,經同一雜湊函數 得到的雜湊值為 2,這將與 D0 16所產生的雜湊值一樣,都指向雜湊陣列 HA 的第 二個儲存空間,因此發生了誤報。

3.2.3. 最右位元偵測器(Rightmost Bit Detector)

最右位元偵測器為偵測 MQM1MQM2…MQMm-k+1因輸入值(th+3th+4th+5) 的輸 入所得的輸出值組合中最右邊的位元為 1 的位置,此功能為判斷我們下一次可以 從輸入字串中再餵進幾個位元組個數。我們先以圖-3.2 為一說明簡例(例 3.2),說 明每一輸出值組合可移動之位元組個數,在了解其意義後,我們再推廣為廣式。 例 3.2:如圖-3.2 所示,MQM1MQM2MQM3MQM4因輸入值(th+3th+4th+5) 的輸 入所得的所有可能的輸出值組合為 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111,共 16 種可能的組合。 說明 1: MQM1MQM2MQM3MQM4因區塊大小(th+3th+4th+5) 的輸入所得的輸出為 0010,表示此輸入值極有可能為 MQM3中的一個子字樣,由於 MQM3 1 0 0 0 0 1 0 0 HA 4 8 d d ⊕ 1 2 3 5 6 7 1 2 4 (11010000) (111 ) (111 ) (000 ) (111 ) (000 ) (000 ) (000 ) (000 ) 110 001 101 010 2( ) (10000010) h d d d d d d d d d decimal h d = • ⊕ • ⊕ • ⊕ • • ⊕ • ⊕ • ⊕ • = ⊕ ⊕ = ⊕ ⊕ = → = 1⊕d7 =111→7(decimal)

(27)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器 儲存的是字樣的第三個位元組至第五個位元組,因此如圖-3.3 所示 圖-3.3:最右位元偵測器說明 1 當其輸出值為 0010 時,搜尋視窗為了避免遺漏對 pi字樣的偵測,所以 僅可移動一個位元組,使其下次搜尋視窗將停留在 th+1th+2th+3th+4th+5th+6 的位置上,並將區塊大小,th+4th+5th+6,經由雜湊函數所得的雜湊值輸入 至成員詢問模塊,去得知下次可移動的位元組個數。 說明 2: MQM1MQM2MQM3MQM4因區塊大小(th+3th+4th+5) 的輸入所得的輸出為 1100,表示此輸入值極有可能為 MQM1與 MQM2中的一個子字樣,由 於 MQM1儲存的是字樣的第一個位元組至第三個位元組,MQM2儲存 的是字樣的第二個位元組至第四個位元組,因此如圖-3.4 所示 圖-3.4:最右位元偵測器說明 2 當其輸出值為 1100 時,搜尋視窗為了避免遺漏對 pj字樣的偵測,所以 僅可移動二個位元組,使其下次搜尋視窗將停留在 th+2th+3th+4th+5th+6th+7 的位置上,並將區塊大小,th+5th+6th+7,經由雜湊函數所得的雜湊值輸入 至成員詢問模塊,去得知下次可移動的位元組個數。

(28)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器 MQM1MQM2MQM3MQM4因區塊大小(th+3th+4th+5) 的輸入所得的輸出為 1001,表示此輸入值極有可能為 MQM1與 MQM4中的一個子字樣,由 於 MQM1儲存的是字樣的第一個位元組至第三個位元組,MQM4儲存 的是字樣的第四個位元組至第六個位元組,因此如圖-3.5 所示 圖-3.5:最右位元偵測器說明 3 當其輸出值為 1001 時,由於 MQM4的輸出值為 1,這不但告訴我們搜 尋視窗所觀測的區塊大小存在於 MQM4,而且整個搜尋視窗極有可能為 字樣集合中的一員。因此,我們須將此時搜尋視窗的起始位址儲存於可 疑字樣位址儲存處,也就是輸入字串中 th所代表的位址,等待由驗證器 去驗證由此可疑字樣位址為起始是否真的存在一個屬於字樣集合中的 成員。故,當 MQM4的輸出值為 1 時,我們不但須去判斷下次可移動 的位元組個數,還須將其此時搜尋視窗的起始位址儲存於可疑字樣位址 儲存處。這也就是意味著搜尋視窗為了避免遺漏對 pj字樣的偵測,將其 此時搜尋視窗的起始位址儲存於可疑字樣位址儲存處,並且為了避免遺 漏對 pi字樣的偵測,所以僅可移動三個位元組,使其下次搜尋視窗將停 留在 th+3th+4th+5th+6th+7th+8的位置上,並將區塊大小,th+6th+7th+8,經由雜 湊函數所得的雜湊值輸入至成員詢問模塊,去得知下次可移動的位元組 個數。 說明 4: MQM1MQM2MQM3MQM4因區塊大小(th+3th+4th+5) 的輸入所得的輸出為 0000,表示此輸入值不存在於 MQM1~MQM4中的任一子字樣,因此如 圖-3.6 所示

(29)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器 圖-3.6:最右位元偵測器說明 4 當其輸出值為 0000 時,搜尋視窗將可移動最大的距離,四個位元組, 使其下次搜尋視窗將停留在 th+4th+5th+6th+7th+8th+9的位置上,並將區塊大 小,th+7th+8th+9,經由雜湊函數所得的雜湊值輸入至成員詢問模塊,去得 知下次可移動的位元組個數。 備註: 最大移動距離為四個位元組,而不是六個位元組。因為我們僅確定 th+3th+4th+5 不 可 能 會 存 在 於 MQM1 ~ MQM4 中 , 意 味 著 thth+1th+2th+3th+4th+5 不可能會存在於字樣集合之中,但若我們將其移 動六個位元組,下次搜尋視窗內容為 th+6th+7th+8th+9th+10th+11,這表示 我們認定 th+4th+5th+6 的子字樣是不可能會存在於 MQM1~MQM4 中,則我們將錯過對 th+4th+5th+6th+7th+8th+9的偵測,這會使我們可能 遭遇到攻擊。因此,依此例,最大可移動的距離為四個位元組。 說明 5: MQM1MQM2MQM3MQM4因區塊大小(th+3th+4th+5) 的輸入所得的輸出為 1111,表示此輸入值極有可能為 MQM1~MQM4中的一個子字樣,由於 MQM1儲存的是字樣的第一個位元組至第三個位元組,MQM2儲存的是 字樣的第二個位元組至第四個位元組,MQM3儲存的是字樣的第三個位 元組至第五個位元組,MQM4儲存的是字樣的第四個位元組至第六個位 元組,因此如圖-3.7 所示

(30)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器 圖-3.7:最右位元偵測器說明 5 當其輸出值為 1111 時,依前面說明 1~說明 4 所述,搜尋視窗為了避 免遺漏對 ps 字樣的偵測,將其此時搜尋視窗的起始位址儲存於可疑字 樣位址儲存處,並且為了避免遺漏對 pk 字樣的偵測,所以僅可移動一 個位元組,使其下次搜尋視窗將停留在 th+1th+2th+3th+4th+5th+6的位置上, 並將區塊大小,th+4th+5th+6,經由雜湊函數所得的雜湊值輸入至成員詢問 模塊,去得知下次可移動的位元組個數。 由例 3.2 的舉列說明中,我們可歸納出,當 MQM1~MQM4的輸出值中, MQ1M~MQM3 將決定搜尋視窗可移動之距離且由最右邊位元為 1 的做決定; MQM4的輸出值 1 或 0 將決定我們是否須將搜尋視窗的起始位址儲存於可疑字樣 位址儲存處。MQM4的輸出值為 1 表示須儲存之,反之,不須儲存。這也就是為 什麼我們將『決定可移動的位元組個數』的功能命名為最右位元偵測器。最後, 若推廣成有成員詢問模塊 MQM1MQM2…MQMm-k+1,我們將在下述的通式中歸 納出由 MQM1MQM2…MQMm-k+1因輸入值(th+3th+4th+5) 的輸入所得的輸出值組合 中,如何決定可移動的位元組個數。 „ MQMm-k+1為 0 時 ¾ 『決定可移動的位元組個數』= m-k+1- id,其中 id 指的是最右邊 位元為 1 是發生在第幾個成員詢問模塊。 „ MQMm-k+1為 1 時 ¾ 『決定可移動的位元組個數』= m-k+1- id,其中 id 指的是最右邊

(31)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器 位元為 1 是發生在第幾個成員詢問模塊。 ¾ 須將現搜尋視窗的起始位址儲存於可疑字樣位址儲存處。

3.2.4. 主位元組列(Master Bitmap)

圖-3.8:具有主位元組列的預先過濾器 圖-3.8 為一具有主位元組列的預先過濾器。主位元組列,mb1、mb2、mb3以 及 mb4的儲存規則如下之歸納: „ 主位元組列的初始值 1 2 3 4 1111 MB=mb mb mb mb = „ 情況 1:r4的值為 1 將搜尋視窗的起始位址儲存於可疑字樣位址儲存處,並根據 r1r2r3的值 來決定可向前移動之位元組個數。 „ 情況 2:r1r2r3的值為 000 表示可向前移動之位元組個數為 4 個。因此,MB 向右位移 4 個位元組 並將其不足之處補上一個 1,即MBcurrent =mb mb mb mb1 2 3 4MBnext =1111。

(32)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器 表示可向前移動之位元組個數為 3 個。因此,MB 向右位移 3 個位元組 並 將 其 不 足 之 處 補 上 一 個 1 , 即 MBcurrent =mb mb mb mb1 2 3 4 , 1 111 next MB = mb 4 。 „ 情況 4:r1r2r3的值為 r110 表示可向前移動之位元組個數為 2 個。因此,MB 向右位移 2 個位元組 並 將 其 不 足 之 處 補 上 一 個 1 , 即 MBcurrent =mb mb mb mb1 2 3 , 1 2 11 next MB = mb mb 4 。 „ 情況 5:r1r2r3的值為 r1 r21 表示可向前移動之位元組個數為 1 個。因此,MB 向右位移 1 個位元組 並 將 其 不 足 之 處 補 上 一 個 1 , 即 MBcurrent =mb mb mb mb1 2 3 , 1 2 1 next 3 MB = mb mb mb 。 主位元組列的功用為提升每一次可移動位元組的個數,使其整體吞吐量 (Throughput)可以大幅提升。我們的實驗結果將可告訴我們,有主位元組列之預 先過濾器比沒有主位元組列之預先過濾器的吞吐量最高可高於近 50%,我們將在 其後加以說明。在這我們將舉例(例 3.3)說明主位元組列所帶來的優點。 例 3.3:現有一預先過濾器,其 m=6, k=3,假設第一次與第二次成員詢問模 塊的輸出值分別為 1010 以及 0010。 „ 沒有主位元組列之預先過濾器 搜尋視窗每一次僅可向前移動一個位元組,如圖-3.9 所示。

(33)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器

圖-3.9:不具有主位元組列之預先過濾器的搜尋視窗移動概觀

„ 有主位元組列之預先過濾器

圖-3.10:具有主位元組列之預先過濾器的搜尋視窗移動概觀

¾ 第一次成員詢問模塊的輸出值,1010,將與主位元組列的初始值, 1111,作『逐位和操作(Bitwise AND operation)』。所得之結果為

(34)

第三章 應用於網路安全中可延展的字樣比對架構之預先過濾器 1 2 3 4 { 1 1, , , } 10102 1 3 1 4 1 R r r r r= = mqm mb mqm mb mqm mb mqm mb = ,根據主位元組列的規則表示 9 不須將起始位址儲存於可疑字樣位址儲存處。 9 可向前移動之位元組個數為 1 個。因此,MB 向右位移 1 個位 元 組 並 將 其 不 足 之 處 補 上 一 個 1 , 即 1111, 1101。 current MB = next MB = ¾ 第二次成員詢問模塊的輸出值,0010,將與主位元組列,1101,作 逐位和操作。所得之結果為R={0 1, 0 1, 1 0, 0 1} 0000= , 根據主位元組列的規則表示 9 不須將起始位址儲存於可疑字樣位址儲存處。 9 可向前移動之位元組個數為 4 個。因此,MB 向右位移 4 個位 元 組 並 將 其 不 足 之 處 補 上 一 個 1 , 即 1101, 1111。 current MB = next MB = 我們從例 3.3 明顯地得知,第二次的結果,有主位元組列之預先過濾器 可向前移動的位元組個數是沒有主位元組列之預先過濾器的 4 倍,這說明了 主位元組列功能的必要性與優越性。

(35)

第四章 基於 FPGA 的預先過濾器

第四章

基於 FPGA 的預先過濾器

4.1 字樣比對架構的系統雛型

圖-4.1:我所提出實現於 FPGA 的字樣比對系統雛型 圖-4.1 為我所提出將要實現於 FPGA 的字樣比對系統雛型。圖中主要分成四 大部分,分別為測試文件檔(Text File)、可疑位址儲存處(Jail)、預先過濾器 (Prefilter),以及驗證器(AC)。在這,我將利用子節 4.3、子節 4.4 及子節 4.5 分別 針對前三部分的實作細節作一一深入的介紹與分析。

(36)

第四章 基於 FPGA 的預先過濾器

4.2 測試板-Xilinx Virtex II Pro ML310 介紹

在進入正題前我們要先針對我們所選用的 FPGA 板子作一大致上的說明,因 為所選用作為測試板的內部元件將會對我們所設計的系統雛型有所牽動與影響。

圖-4.2:Xilinx Virtex II Pro ML310 FPGA 測試板

我們所選用的測試板為 Xilinx 公司所出產的 Virtex II Pro ML310,如圖-4.2 所示。Virtex II Pro 系列的 FPGA 採用 0.13um、1.5V 的處理技術所製造而成,整

合了嵌入式 PowerPC405 處理器和 3.125 Gbps RocketIO 串行收發器(Serial transceiver)。圖-4.3 為 ML310 FPGA 測試板的家族成員,而我們選用的是

XVC2VP30,在這我們須特別留意的是它的 BlockRAM 個數。XVC2VP30 共有 136 個 BlockRAM,每一個 BlockRAM 可以儲存 18,432(18K)個位元,故最高可

(37)

第四章 基於 FPGA 的預先過濾器 用的 BlockRAM 空間為 2448K 個位元。每一 BlockRAM 的儲存空間可分成資料 記憶體(Data memory,16K 個位元)以及同位檢查記憶體(Parity memory,2K 個位 元)兩個部份。所謂的同位檢查記憶體指的是,當每一個位址所取得的位元數稱 為 OB(Obtained Bits),則每一個位址內可加入的同位檢查位元(Parity bit)的個數 為 8 OB ⎡ ⎤ ⎢⎢ ⎥⎥。因此,同位檢查記憶體最大容量共 2K 個位元。此外,每一個位址所 取得的資料寬度可配置為 1、2、4、9(8 個資料位元加 1 個同位檢查位元)、18(16 個資料位元加 2 個同位檢查位元)以及 36 個位元((32 個資料位元加 4 個同位檢查 位元)),依使用者設定。 圖-4.3:ML310 FPGA 測試板的家族成員

每一個 BlockRAM 皆可宣告成單埠同步塊記憶體(Single-Port Synchronous Block RAM)或雙埠同步塊記憶體(Dual-Port Synchronous Block RAM)。其宣告方 式如下:

„ 單埠同步塊記憶體,宣告為 RAMB16_Sn,n 依使用者設定。 RAMB16_Sn user_instance_name (.DO (user_DO),

.DOP (user_DOP), .ADDR (user_ADDR), .CLK (user_CLK), .DI (user_DI), .DIP (user_DIP), .ENB(user_EN), .SSR (user_SSR), .WE (user_WE)); defparam user_instance_name.INIT_00 = 256’h_hex_value; defparam user_instance_name.INIT_01 = 256’h_hex_value;

(38)

第四章 基於 FPGA 的預先過濾器 defparam user_instance_name.INIT_03 = 256’h_hex_value

defparam user_instance_name.INIT_04 = 256’h_hex_value; defparam user_instance_name.INIT_05 = 256’h_hex_value; defparam user_instance_name.INIT_06 = 256’h_hex_value; defparam user_instance_name.INIT_07 = 256’h_hex_value; defparam user_instance_name.INIT_08 = 256’h_hex_value; defparam user_instance_name.INIT_09 = 256’h_hex_value; defparam user_instance_name.INIT_0A = 256’h_hex_value; defparam user_instance_name.INIT_0B = 256’h_hex_value; defparam user_instance_name.INIT_0C = 256’h_hex_value; defparam user_instance_name.INIT_0D = 256’h_hex_value; defparam user_instance_name.INIT_0E = 256’h_hex_value; defparam user_instance_name.INIT_0F = 256’h_hex_value; defparam user_instance_name.INIT_10 = 256’h_hex_value; defparam user_instance_name.INIT_11 = 256’h_hex_value; defparam user_instance_name.INIT_12 = 256’h_hex_value; defparam user_instance_name.INIT_13 = 256’h_hex_value; defparam user_instance_name.INIT_14 = 256’h_hex_value; defparam user_instance_name.INIT_15 = 256’h_hex_value; defparam user_instance_name.INIT_16 = 256’h_hex_value; defparam user_instance_name.INIT_17 = 256’h_hex_value; defparam user_instance_name.INIT_18 = 256’h_hex_value; defparam user_instance_name.INIT_19 = 256’h_hex_value; defparam user_instance_name.INIT_1A = 256’h_hex_value; defparam user_instance_name.INIT_1B = 256’h_hex_value; defparam user_instance_name.INIT_1C = 256’h_hex_value; defparam user_instance_name.INIT_1D = 256’h_hex_value; defparam user_instance_name.INIT_1E = 256’h_hex_value; defparam user_instance_name.INIT_1F = 256’h_hex_value; defparam user_instance_name.INIT_20 = 256’h_hex_value; defparam user_instance_name.INIT_21 = 256’h_hex_value; defparam user_instance_name.INIT_22 = 256’h_hex_value; defparam user_instance_name.INIT_23 = 256’h_hex_value; defparam user_instance_name.INIT_24 = 256’h_hex_value; defparam user_instance_name.INIT_25 = 256’h_hex_value; defparam user_instance_name.INIT_26 = 256’h_hex_value; defparam user_instance_name.INIT_27 = 256’h_hex_value; defparam user_instance_name.INIT_28 = 256’h_hex_value; defparam user_instance_name.INIT_29 = 256’h_hex_value; defparam user_instance_name.INIT_2A = 256’h_hex_value; defparam user_instance_name.INIT_2B = 256’h_hex_value; defparam user_instance_name.INIT_2C = 256’h_hex_value; defparam user_instance_name.INIT_2D = 256’h_hex_value; defparam user_instance_name.INIT_2E = 256’h_hex_value; defparam user_instance_name.INIT_2F = 256’h_hex_value; defparam user_instance_name.INIT_30 = 256’h_hex_value; defparam user_instance_name.INIT_31 = 256’h_hex_value; defparam user_instance_name.INIT_32 = 256’h_hex_value; defparam user_instance_name.INIT_33 = 256’h_hex_value; defparam user_instance_name.INIT_34 = 256’h_hex_value;

(39)

第四章 基於 FPGA 的預先過濾器 defparam user_instance_name.INIT_35 = 256’h_hex_value;

defparam user_instance_name.INIT_36 = 256’h_hex_value; defparam user_instance_name.INIT_37 = 256’h_hex_value; defparam user_instance_name.INIT_38 = 256’h_hex_value; defparam user_instance_name.INIT_39 = 256’h_hex_value; defparam user_instance_name.INIT_3A = 256’h_hex_value; defparam user_instance_name.INIT_3B = 256’h_hex_value; defparam user_instance_name.INIT_3C = 256’h_hex_value; defparam user_instance_name.INIT_3D = 256’h_hex_value; defparam user_instance_name.INIT_3E = 256’h_hex_value; defparam user_instance_name.INIT_3F = 256’h_hex_value; defparam user_instance_name.INIT_A = bit_value;

defparam user_instance_name.INIT_B = bit_value;

defparam user_instance_name.INITP_00 = 256’h_hex_value; defparam user_instance_name.INITP_01 = 256’h_hex_value; defparam user_instance_name.INITP_02 = 256’h_hex_value; defparam user_instance_name.INITP_03 = 256’h_hex_value; defparam user_instance_name.INITP_04 = 256’h_hex_value; defparam user_instance_name.INITP_05 = 256’h_hex_value; defparam user_instance_name.INITP_06 = 256’h_hex_value; defparam user_instance_name.INITP_07 = 256’h_hex_value; defparam user_instance_name.SRVAL_A = bit_value; defparam user_instance_name.SRVAL_B = bit_value;

defparam user_instance_name.WRITE_MODE_A = string_value; defparam user_instance_name.WRITE_MODE_B = string_value;

上述中,正體字為宣告式,固定不變;斜體字為使用者所設定之變數或 初始值。

„ 雙埠同步塊記憶體,RAMB16_Sm_Sn,m 與 n 依使用者設定。 RAMB16_Sm_Sn user_instance_name (.DOA (user_DOA),

.DOB (user_DOB), .DOPA (user_DOPA), .DOPB (user_DOPB), .ADDRA (user_ADDRA), .ADDRB (user_ADDRB), .CLKA (user_CLKA), .CLKB (user_CLKB), .DIA (user_DIA), .DIB (user_DIB), .DIPA (user_DIPA), .DIPB (user_DIB), .ENA (user_ENA), .ENB (user_ENB), .SSRA (user_SSRA), .SSRB (user_SSRB), .WEA (user_WEA),

(40)

第四章 基於 FPGA 的預先過濾器

defparam user_instance_name.INIT_00 = 256’h_hex_value; defparam user_instance_name.INIT_01 = 256’h_hex_value; defparam user_instance_name.INIT_02 = 256’h_hex_value; defparam user_instance_name.INIT_03 = 256’h_hex_value defparam user_instance_name.INIT_04 = 256’h_hex_value; defparam user_instance_name.INIT_05 = 256’h_hex_value; defparam user_instance_name.INIT_06 = 256’h_hex_value; defparam user_instance_name.INIT_07 = 256’h_hex_value; defparam user_instance_name.INIT_08 = 256’h_hex_value; defparam user_instance_name.INIT_09 = 256’h_hex_value; defparam user_instance_name.INIT_0A = 256’h_hex_value; defparam user_instance_name.INIT_0B = 256’h_hex_value; defparam user_instance_name.INIT_0C = 256’h_hex_value; defparam user_instance_name.INIT_0D = 256’h_hex_value; defparam user_instance_name.INIT_0E = 256’h_hex_value; defparam user_instance_name.INIT_0F = 256’h_hex_value; defparam user_instance_name.INIT_10 = 256’h_hex_value; defparam user_instance_name.INIT_11 = 256’h_hex_value; defparam user_instance_name.INIT_12 = 256’h_hex_value; defparam user_instance_name.INIT_13 = 256’h_hex_value; defparam user_instance_name.INIT_14 = 256’h_hex_value; defparam user_instance_name.INIT_15 = 256’h_hex_value; defparam user_instance_name.INIT_16 = 256’h_hex_value; defparam user_instance_name.INIT_17 = 256’h_hex_value; defparam user_instance_name.INIT_18 = 256’h_hex_value; defparam user_instance_name.INIT_19 = 256’h_hex_value; defparam user_instance_name.INIT_1A = 256’h_hex_value; defparam user_instance_name.INIT_1B = 256’h_hex_value; defparam user_instance_name.INIT_1C = 256’h_hex_value; defparam user_instance_name.INIT_1D = 256’h_hex_value; defparam user_instance_name.INIT_1E = 256’h_hex_value; defparam user_instance_name.INIT_1F = 256’h_hex_value; defparam user_instance_name.INIT_20 = 256’h_hex_value; defparam user_instance_name.INIT_21 = 256’h_hex_value; defparam user_instance_name.INIT_22 = 256’h_hex_value; defparam user_instance_name.INIT_23 = 256’h_hex_value; defparam user_instance_name.INIT_24 = 256’h_hex_value; defparam user_instance_name.INIT_25 = 256’h_hex_value; defparam user_instance_name.INIT_26 = 256’h_hex_value; defparam user_instance_name.INIT_27 = 256’h_hex_value; defparam user_instance_name.INIT_28 = 256’h_hex_value; defparam user_instance_name.INIT_29 = 256’h_hex_value; defparam user_instance_name.INIT_2A = 256’h_hex_value; defparam user_instance_name.INIT_2B = 256’h_hex_value; defparam user_instance_name.INIT_2C = 256’h_hex_value; defparam user_instance_name.INIT_2D = 256’h_hex_value; defparam user_instance_name.INIT_2E = 256’h_hex_value; defparam user_instance_name.INIT_2F = 256’h_hex_value; defparam user_instance_name.INIT_30 = 256’h_hex_value;

(41)

第四章 基於 FPGA 的預先過濾器 defparam user_instance_name.INIT_31 = 256’h_hex_value;

defparam user_instance_name.INIT_32 = 256’h_hex_value; defparam user_instance_name.INIT_33 = 256’h_hex_value; defparam user_instance_name.INIT_34 = 256’h_hex_value; defparam user_instance_name.INIT_35 = 256’h_hex_value; defparam user_instance_name.INIT_36 = 256’h_hex_value; defparam user_instance_name.INIT_37 = 256’h_hex_value; defparam user_instance_name.INIT_38 = 256’h_hex_value; defparam user_instance_name.INIT_39 = 256’h_hex_value; defparam user_instance_name.INIT_3A = 256’h_hex_value; defparam user_instance_name.INIT_3B = 256’h_hex_value; defparam user_instance_name.INIT_3C = 256’h_hex_value; defparam user_instance_name.INIT_3D = 256’h_hex_value; defparam user_instance_name.INIT_3E = 256’h_hex_value; defparam user_instance_name.INIT_3F = 256’h_hex_value; defparam user_instance_name.INIT_A = bit_value;

defparam user_instance_name.INIT_B = bit_value;

defparam user_instance_name.INITP_00 = 256’h_hex_value; defparam user_instance_name.INITP_01 = 256’h_hex_value; defparam user_instance_name.INITP_02 = 256’h_hex_value; defparam user_instance_name.INITP_03 = 256’h_hex_value; defparam user_instance_name.INITP_04 = 256’h_hex_value; defparam user_instance_name.INITP_05 = 256’h_hex_value; defparam user_instance_name.INITP_06 = 256’h_hex_value; defparam user_instance_name.INITP_07 = 256’h_hex_value; defparam user_instance_name.SRVAL_A = bit_value; defparam user_instance_name.SRVAL_B = bit_value;

defparam user_instance_name.WRITE_MODE_A = string_value; defparam user_instance_name.WRITE_MODE_B = string_value;

上述中,正體字為宣告式,固定不變;斜體字為使用者所設定之變數或 初始值。 接下來我們將分節去討論如何搭配測試板的特性與功能來實現系統各部分 之操作。

4.3 測試文字檔產生與儲存設計

我們用來測試的文字檔是先透過軟體(C++)隨機產生 0 ~255 (00 ~FF )的

(42)

第四章 基於 FPGA 的預先過濾器 值,並且以十六進制儲存之,總共產生 64K 個位元(4 個 BlockRAM,其後會說 明為何隨機產生的文字檔大小是 4 個 BlockRAM)。在設計測試文字檔(圖-4.1 中 的 Text File 區塊)儲存方式時,我們須將搜尋視窗的參數 k 列入考慮。 我 們 此 次 的 研 究 是 將 預 先 過 濾 器 的 搜 尋 視 窗 長 度 (m) 設 定 為 10( 因 為 ClamAV 所釋放出的公開病毒碼中,最短長度為 10 個位元組),搜尋視窗所設定 區塊大小(k)為 4,這告訴了我們,預先過濾器每一次操作都是觀看搜尋視窗後 4 個位元組。因此,預先過濾器須有能力在一次的讀取時間內能同時餵入屬於現搜 尋視窗中的後 4 個位元組。而驗證器(由 AC 演算法為實作主軸)的運作模式為當 執行時,它每一次都需要讀取 1 個位元組,根據此位元組與現在狀態去決定下次 所停留的狀態。 總觀上述,我們所實現的測試文字檔必須滿足可同時讀取 4 個位元組與每一 次讀取 1 個位元組的操作模式,因此我們選擇 BlockRAM 的宣告型態為 RAMB16_S9_S9,這個型態每次所讀取出的資料為 8 個位元(等於 1 個位元組) , 如圖-4.4 所示;並且將測試文字檔分成 4 個群組(text_bram0、text_bram1、 text_bram2,以及 text_bram3),分別儲存於 4 個 BlockRAM 之中,使其預先過濾 器操作時可同時讀取到 4 個位元組。從圖-4.5 的簡例中,我們可以更清楚地了解 其 設 計 的 準 則 與 儲 存 的 原 理 。 從 圖 中 我 們 可 以 得 知 , 有 一 測 試 文 字 檔 為 『abcdefghijk0123456#*(@!dsaok...』,則 „ BlockRAM 的宣告型態為 RAMB16_S9_S9,表示資料記憶體的每一個 儲存空間為 8 個位元。由於一個 BlockRAM 的資料記憶體大小為 16K 個位元,因此表示了共有 11 2 個儲存空間,其中 11 這個數字即為此 BlockRAM 的位址匯流排寬度。 „ 我們將測試文字檔分成 4 個群組,分別儲存於 text_bram0、text_bram1、 text_bram2,以及 text_bram3 等 4 個 BlockRAM。

„ 存入方式:

¾ text_bram0:儲存測試文字檔的第 4i 個位元組。

¾ text_bram1:儲存測試文字檔的第 4 1i+ 個位元組。

¾ text_bram2:儲存測試文字檔的第 4i+ 個位元組。 2

(43)

第四章 基於 FPGA 的預先過濾器

圖-4.4:text_bram0 ~ text_bram3 的宣告型態為 RAMB16_S9_S9

圖-4.5:測試文字檔設計簡例

我們將 Text File 區塊單獨寫成一個模組(module),稱為 TextRAM 模組,其 內部包含了測試文字檔 text_bram0、text_bram1、text_bram2,以及 text_bram3 與 一些控制電路。在 TextRAM 模組中,對於預先過濾器而言,它須控制預先過濾 器是否應停止運作。若當我們測試文字檔內儲存之內容都已經偵測完畢或待偵測 (剩餘)位元組個數低於下次須餵入的位元組個數時,TextRAM 模組須告知 PreFilter 模組應停止運作,因為已無或不足之位元組個數可以再餵入 PreFilter 模組。而後我們都統稱儲存測試文字檔的 BlockRAM 為 text_bram 群。

(44)

第四章 基於 FPGA 的預先過濾器

4.4 可疑位址的存取設計

我們在第三章中已說明,當我們抓到一個可疑字樣時須將搜尋視窗的起始位 址儲存至可疑字樣位址儲存處(圖 4-1 中 Jail 區塊),待驗證器決策是否真為字樣 集合中的一員。 上述 4.3 節中,我們所選定實現 TextRAM 模組的 text_bram 儲存型態為 RAMB16_S9_S9,共有 個儲存空間(意指此 BlockRAM 儲存型態的位址匯流排 寬度為 11 個位元)。Jail 若須將搜尋視窗的起始位址存入,則其儲存空間須大於 或等於 11+2 個位元(11 個位元的位址匯流排寬度加上 2 個位元的 text_bram 編 號)。因此,我們選定一個適當可實現儲存可疑字樣位址的 BlockRAM 儲存型態 為 RAMB16_S18_S18,此儲存型態表示資料記憶體的每一個儲存空間為 16 個位 元,如圖-4.6 所示。 11 2

我們將 Jail 區塊中用來儲存可疑字樣位址的 BlockRAM 稱為 jail_bram。由

於一個 jail_bram 的資料記憶體大小為 16K 個位元,因此表示了共有 個儲存空 間 , 其 中 10 這 個 數 字 即 為 此 jail_bram 的 位 址 匯 流 排 寬 度 。 我 們 針 對 RAMB16_S18_S18 的儲存空間之設計有如下的歸納: 10 2 „ 儲存空間之位元數:16 位元 „ 儲存空間之初始值(initial value):000_00_00000000000 „ 可疑字樣的起始位址存入 jail_bram 形式:100_??_XXXXXXXXXXX ¾ ??:表示此可疑字樣的起始位址是屬於測試文字檔中哪一個 BlockRAM (text_bram0、text_bram1、text_bram2、text_bram3),佔 用 2 個位元。 ¾ XXXXXXXXXXX:表示此編號??之 text_bram 的位址,佔用 11 個 位元。 ¾ 當預先過濾器偵測到可疑字樣時,它會將其搜尋視窗的起始位址記 錄下來,並將可疑字樣的起始位址存入於 jail_bram 之中。儲存之 形式為 100_??_XXXXXXXXXXX。意指當儲存空間最高位元設定

(45)

第四章 基於 FPGA 的預先過濾器 為 1,驗證器須將處理之。

圖-4.6:jail_bram 的宣告型態為 RAMB16_S18_S18

我們將 Jail 區塊單獨寫成一個模組並命名成 JailRAM。在 JailRAM 模組中有 一控制電路負責偵測 jail_bram 下一個儲存空間內的儲存值中最高位元是否為 1,若否,PreFilter 區塊將可再存入所找到的可疑字樣的起始位址至 jail_bram; 若是,PreFilter 區塊則須暫停運作並保持著現有狀態直至 JailRAM 模組回報 jail_bram 下一個儲存空間內的儲存值為初始值狀態(000_00_00000000000)方可再 行運作。jail_bram 回報它下一個儲存空間不為初始值狀態時,這表示驗證器(AC) 尚未或正在對此儲存空間內所儲存的可疑字樣起始位址作一仔細之比對,如果這 時 PreFilter 區塊沒有暫停運作並將所找到的可疑字樣的起始位址儲存至此儲存 空間內,則即產生資料的複寫(overwrite)。因此,我們須等待驗證器對此儲存空 間內所儲存的可疑字樣起始位址處理完畢後,將此儲存空間內的值重新儲存為初 始值狀態,這時即表示此儲存空間內的儲存值中最高位元不為 1,PreFilter 區塊 若有找到可疑的字樣,則可將可疑字樣的起始位址儲存至此儲存空間內。

(46)

第四章 基於 FPGA 的預先過濾器

4.5 預先過濾器設計

在詳細介紹完『測試文字檔的產生與設計』和『可疑位址的存取設計』後, 我們將有足夠的資訊來完成預先過濾器之設計。如圖-4.1 所示,PreFilter 區塊即 為我們此系統最大的賣點,預先過濾器。我們將單獨把 PreFilter 區塊寫成一個模 組並命名為 Prefilter。 圖-4.7 為我們欲實現於 FPGA 之預先過濾器的雛型架構;如圖所示,在 Prefilter 模組中,我們將預先過濾器內的功能區分成兩部分,其一為『雜湊產生 器(Hash generator)』,另一為『輸入控制器(Input controller)』,也就是 HashGen 模組和 InContr 模組,而在 HashGen 模組中又包含一個 HashRule 模組。我們將 在下述次子節中分別去介紹。

(47)

第四章 基於 FPGA 的預先過濾器

4.5.1. 雜湊產生器 (Hash Generator)

在 Prefilter 模組中,我們將接收到來自 TextRAM 模組送來的 4 個位元組(32 個位元,[31:0]Text2PFData),Prefilter 模組先將其 32 個位元的資料送至 HashGen 模組中的 HashRule 模組,利用一雜湊函數使其產生 14 個位元的雜湊值,再將此 14 個 位 元 回 送 至 HashGen 模 組 中 作 為 mqm_bram1~mqm_bram7 等 7 個 BlockRAM 的位址匯流排 (這 7 個 BlockRAM 的宣告型態為 RAMB16_S1,為單 埠同步塊記憶體,這個型態每次所讀取出的資料為 1 個位元,如圖-4.8 所示。) 。 mqm_bram1~mqm_bram7 會將此位址匯流排所指向的儲存空間內的資料輸出,即

, 並 分 別 與 主 位 元 組 列

1 ~

QB=q q7 MB=b1~b7 作 逐 位 和 運 算 (Bitwise AND

operator),得到R=r1~r7之結果。而圖-4.7 中的 Right Shift Control (RSC)區塊則

會去判斷輸入 R 最右位元為 1 所發生的位置,再根據 3.2.4 節中所提的向右移動 方式,決定出下一次 MB 內所儲存的值。HashGen 模組也會將 R 的結果輸出到 InContr 模組,使其可決定出下次要餵進來的 4 個位元組。 圖-4.8:mqm_bram1~mqm_bram7 的宣告型態為 RAMB16_S1

4.5.2. 輸入控制器(Input Controller)

InContr 模組接收到來自 HashGen 模組送來的輸入 R,我們將根據此資料分 析出搜尋視窗可(向左)移動幾個位元組,並且決定出其下次要餵進來的 4 個位元 組的起始位址(13 個位元,[12:0]PF2TextAddr)並送往 TextRAM 模組,TextRAM

(48)

第四章 基於 FPGA 的預先過濾器 模組內則會根據其撰寫之規則,依此接收到的位址帶出適當的 4 個位元組,並將 送至 Prefilter 模組;InContr 模組所接收到的 R 的最低位元為 1 (R 為 7 個位元的

向量, ,其宣告為 wire [6:0] R),我們則須計算出此時搜尋視窗

的起始位址(16 個位元,[15:0]PF2JailData)並送往 JailRAM 模組儲存之。若 TextRAM 模組已無或不足之位元組個數可以再餵入 PreFilter 模組,則 TextRAM 模組將利用一條宣告為 wire 的變數 ending 告知 PreFilter 模組應停止運作(此時 ending=1)。

1 2 3 4 5 6 7

[

參考文獻

相關文件

1) Ensure that you have received a password from the Indicators Section. 2) Ensure that the system clock of the ESDA server is properly set up. 3) Ensure that the ESDA server

Mutual information is a good method widely used in image registration, so that we use the mutual information to register images.. Single-threaded program would cost

無線感測網路是個人區域網路中的一種應用,其中最常採用 Zigbee 無線通訊協 定做為主要架構。而 Zigbee 以 IEEE802.15.4 標準規範做為運用基礎,在下一小節將 會針對 IEEE

在無線區域網路部份,高傳輸速度的要求,讓 IEEE 802.11a 成為矚目 的標準。本篇論文主要是以 FPGA 晶片來實現一適合於無限區域網路 IEEE 802.11a

HP(COMPAQ)伺服器為主,作業系統多為 Windows,僅有少數為 Linux,多 數主機均已置於 VMware 虛擬化平台上,應用軟體架構大部分為 Web-Base(網 路架構示意圖如

1.基於確保安全移轉、處理及使用以現代生物技術所獲得可能對生物多樣性保

你實際的工作 不斷交相作用 專精理論架構

了解電腦網路的原理,學習使用 個人網誌及簡易的網頁設計,具 備電子商務的觀念、網路安全以 及網路犯罪與相關法規.