Mô hình B-FSM trong [4] có thêm tính năng chuyển bảng băm khi có sự xung đột, cho ra được kết quả với hiệu suất và hiệu quả sử dụng bộ nhớ cao.Tuy nhiên, với những cải tiến này, giải phá
Trang 1ĐẠI HỌC QUỐC GIA TP HCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
-
NGUYỄN KIM ĐIỀN
NGHIÊN CỨU HIỆN THỰC BỘ SO TRÙNG CHUỖI ĐỘNG TRONG CLAMAV DỰA TRÊN
Trang 2CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA –ĐHQG -HCM
Cán bộ hướng dẫn khoa học : TS Trần Ngọc Thịnh
Cán bộ chấm nhận xét 1 : TS Trần Mạnh Hà
Cán bộ chấm nhận xét 2 : TS Trương Quang Vinh
Luận văn thạc sĩ được bảo vệ tại Trường Đại học Bách Khoa, ĐHQG Tp HCM ngày 8 tháng 1 năm 2015 Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: (Ghi rõ họ, tên, học hàm, học vị của Hội đồng chấm bảo vệ luận văn thạc sĩ) 1 TS Lê Lam Sơn……
2 TS Phạm Hoàng Anh
3 TS Nguyễn Thanh Bình
4 TS Trần Mạnh Hà
5 TS Trương Quang Vinh
Xác nhận của Chủ tịch Hội đồng đánh giá LV và Trưởng Khoa quản lý chuyên ngành sau khi luận văn đã được sửa chữa (nếu có) CHỦ TỊCH HỘI ĐỒNG TRƯỞNG KHOA…………
Trang 3NHIỆM VỤ LUẬN VĂN THẠC SĨ
Họ tên học viên: Nguyễn Kim Điền MSHV: 11070443
Ngày, tháng, năm sinh: 23/09/1988 Nơi sinh: TP Hồ Chí Minh Chuyên ngành: Khoa học máy tính Mã số : 604801
I TÊN ĐỀ TÀI:
NGHIÊN CỨU HIỆN THỰC BỘ SO TRÙNG CHUỖI ĐỘNG TRONG
CLAMAV DỰA TRÊN NỀN TẢNG PHẦN CỨNG
II NHIỆM VỤ VÀ NỘI DUNG:
Tìm hiểu và đề xuất phương pháp so trùng mẫu cho tập mẫu động của chương
trình Clam Antivirus
Thiết kế và hiện thực hệ thống so trùng chuỗi động trên nền tảng phần cứng
FPGA
Xây dựng công cụ phân tích và xử lý chuỗi động từ tập mẫu của Clam antivirus
III NGÀY GIAO NHIỆM VỤ : 20/01/2014
IV NGÀY HOÀN THÀNH NHIỆM VỤ: 21/11/2014
Trang 4Lời cám ơn
Đầu tiên, tôi xin gửi lời cám ơn chân thành tới Thầy hướng dẫn của tôi TS Trần Ngọc Thịnh Trong suốt qua trình thực hiện luận văn, Thầy đã luôn quan tâm theo sát và hỗ trợ tôi Những lời động viên và hướng dẫn tận tình của Thầy là nguồn động lực lớn nhất cho tôi hoàn thành luận văn này
Tôi cũng xin gửi lời cám ơn đến bạn Trần Trung Hiếu, anh Trần Huy Vũ, anh Nguyễn Duy Thái những người bạn đã động viên và hỗ trợ tôi rất nhiều trong thời gian học tập
và nghiên cứu tại trường Bên cạnh đó tôi cũng xin gửi lời cám ơn đến các bạn học viên cao học khóa 2011, các em sinh viên khóa 2010,làm thực tập và luận văn trên NetFPGA platform, về những hỗ trợ và chia sẻ trong suốt quá trình tôi thực hiện luận văn này
Và cuối cùng, tôi xin gửi lời cám ơn sâu sắc đến gia đình, bạn bè và những người thân
đã luôn là chỗ dựa tinh thần vững chắc, cổ vũ cho tôi trong suốt quá trình học tập, nghiên cứu
TP Hồ Chí Minh tháng 12/2014
Nguyễn Kim Điền
Trang 5Tóm tắt luận văn
So trùng mẫu đóng một vai trò quan trọng trong các ứng dụng bảo mật hiện đại như quét virus, hệ thống phát hiện xâm nhập mạng, và tường lửa Bằng cách so sánh dòng
dữ liệu đầu với các mẫu chứa các chuỗi byte được xác định trước, các đoạn mã độc hại
có thể được phát hiện Mặc dù có rất nhiều cải tiến trong mô hình thuật toán so trùng mẫu, quá trình này vẫn chiếm một số lượng đáng kể tài nguyên và làm giảm hiệu suất hệ thống Ngoài ra, do số lượng ngày càng tăng và sự phức tạp của mẫu virus, là nguyên nhân chính tạo ra tắc nghẽn cổ chai trong ứng dụng chống virus dựa trên phần mềm Nhu cầu quét virus tốc độ cao dẫn đến các nỗ lực xây dựng các công cụ so trùng mẫu dựa trên phần cứng Luận văn trình bày một kiến trúc hiệu quả cho việc so trùng mẫu động với tập mẫu virus của chương trình Clam AntiVirus (ClamAV) trên nền tảng công nghệ có khả năng cấu hình FPGA Luận văn cũng áp dụng phương pháp bộ lọc Bloom
để lọc dữ liệu đầu vào và bộ lọc Bloomier cho việc kiểm tra dữ liệu khả nghi Phương pháp tiếp cận được đề xuất trong luân văn có thể hỗ trợ các mẫu virus có chiều dài lên đến 256 byte và phương pháp này có thể áp dụng được cho mẫu động và cả mẫu tĩnh Thiết kế thử nghiệm được trình bày trong luận văn có thể hỗ trợ lên đến 8K số lượng mẫu động của ClamAV (chiếm 84.75% toàn bộ tập mẫu động)
Trong phương pháp phân tích và tổng hợp tập mẫu, luận văn trình bày quy trình và phát triển các công cụ cho phép tự động phân tích, xử lý tập mẫu virus của ClamAV và xây dựng các tham số cho bộ so trùng mẫu động
Kiến trúc phần cứng được kiểm tra với tập mẫu động của ClamAV Các bước kiểm tra được thực hiện thành công cả trên phần mềm với công cụ mô phỏng của Xilinx và trên phần cứng với nền tảng phát triển ứng dụng mạng NetFPGA
Trang 6ABSTRACT
Signature scanning plays an important role on modern security application such as virus scanners, intrusion detection/prevention systems, and firewalls By comparing an input data stream against a set of predefined byte-string patterns, malicious activities can
be detected Although there are many improvements in pattern matching algorithms, this process still occupies a significant amount of resources and slowdown system performance In addition, due to the growing number and the complexity of virus signatures, it has become a bottle-neck task in software-based antivirus program
High demand of scanning throughput gives rise to recent efforts on hardware-based matching engine This thesis proposed an efficient architecture for matching Clam Antivirus (ClamAV) signatures on reconfigurable platform (FPGA) Thesis utilize Bloom filter technique for filtering input data and Bloomier filter technique for one round check suspect data Thesis proposed approach supports up to 256 byte length signatures and can handle both basic and regular expression signatures Implemented prototype on NetFPGA platform could handle up to 8K regular expression signatures (84.75% in total)
The pattern analyzer and complier provide an automatic and fully configurable approach to analyze ClamAV signature set and construct parameter for regular expression scan engine
The proposed multi-pattern matching architecture has been evaluated using ClamAV regular expression signature set Experimental system has been verified on software using Xilinx simulation tool and deployed on NetFPGA platform
Trang 7Lời cam đoan
Tôi xin cam đoan rằng, ngoài những tài liệu tham khảo và các tài liệu khác như đã chú thích nguồn gốc đính kèm thì toàn bộ nội dung trong báo cáo này đều là kết quả nghiên cứu của chính tôi và do tôi tự soạn thảo
Nếu có bất cứ sai phạm nào so với lời cam kết, tôi xin chịu các hình thức xử lý theo quy định
Nguyễn Kim Điền
Trang 8MỤC LỤC
Lời cám ơn i
Tóm tắt luận văn ii
ABSTRACT iii
Lời cam đoan iv
CHƯƠNG 1 GIỚI THIỆU 1
1.1 Tính cấp thiết của đề tài 1
1.2 Phát biểu vấn đề 2
1.3 Đóng góp của luận văn 2
1.4 Cấu trúc luận văn 3
CHƯƠNG 2 KIẾN THỨC NỀN TẢNG 4
2.1 So trùng mẫu 4
2.2 Tổng quan các nghiên cứu trước đây 5
2.2.1 Phương pháp máy trạng thái 6
2.2.2 Hash checksum 10
2.2.3 Bộ lọc Bloom 12
2.2.4 Perfect Hash 15
2.2.5 Bộ lọc Bloomier 17
2.3 Bộ so trùng mẫu đơn Bloom và Bloomier 20
2.3.1 Bộ lọc Bloom và Bloomier 20
2.3.2 Hàm Hash 21
2.3.3 Kiến trúc bộ so trùng mẫu BBF 23
2.4 NetFPGA Platform 27
Trang 9CHƯƠNG 3 TỔNG QUAN 29
3.1 Tập cơ sở dữ liệu chữ ký mẫu virus của ClamAV 29
3.1.1 Phân loại mẫu 31
3.1.2 Thống kê mẫu động 33
3.2 So trùng mẫu động trên phần cứng 36
3.2.1 Phân tích và tổng hợp tập mẫu virus 37
3.2.2 Kiến trúc phần cứng 39
CHƯƠNG 4 HIỆN THỰC PHẦN CỨNG 41
4.1 Tổng quan 41
4.2 Khối Arbiter 43
4.3 Event Buffer 44
4.4 Sub-pattern Metadata 44
4.5 Khối Trace Validate 45
4.6 Trace Metadata 47
4.7 Pattern Reassembly Controller 48
CHƯƠNG 5 PHÂN TÍCH VÀ XỬ LÝ TẬP MẪU 53
5.1 Signature Classification 54
5.2 Wildcard Extraction 55
5.2.1 Ký tự wildcard Byte-Or 55
5.2.2 Loại bỏ trường hợp đặc biệt 57
5.2.3 Segmentation 57
5.2.4 Wildcard Conversation 58
5.3 Fragmentation 60
Trang 105.4 Tạo Metadata 61
5.4.1 Tìm kiếm hàm Hash 61
5.4.2 Tính toán dữ liệu cho mỗi fragment 63
5.4.3 Sub-pattern Metadata 65
CHƯƠNG 6 ĐÁNH GIÁ VÀ KIỂM NGHIỆM HỆ THỐNG 66
6.1 Đánh giá kiến trúc hệ thống 66
6.1.1 Thống kê đánh giá phân tích tập mẫu 66
6.1.2 Hiện thực thử nghiệm hệ thống trên FPGA 69
6.2 Thử nghiệm hệ thống 66
CHƯƠNG 7 TỔNG KẾT 77
7.1 Kết quả luận văn 77
7.2 Định hướng phát triển 77
Tài liệu tham khảo 78
Trang 11MỤC LỤC HÌNH
Hình 2-7 Số lượng các hàm hash và tỷ lệ “false positive” tương ứng Tỷ lệ “false positive” giảm đáng kể với sự gia tăng của các hàm hash: từ 83% (2 hàm
Hình 3-1 các mẫu chữ ký virus trong các tập tin cở sở dữ liệu của ClamAV 30
Hình 3-3 Biểu đồ số lượng mẫu chứa từng loại wildcard 35 Hình 3-4 Mô hình giao tiếp của module xử lý mẫu động 37 Hình 3-5 Mô hình tổng quát phân tích xử lý mẫu động và xây dựng hẹ thống 38 Hình 3-6 Mô hình tổng quát kiến trúc phần cứng của bộ so trùng mẫu động 39 Hình 4-1 Tổng quan kiến trúc so trùng mẫu chữ ký virus động 41 Hình 4-2 Biểu đồ tín hiệu giao tiếp đọc ghi trên FIFO 44 Hình 4-3 Thiết kế pipeline cho xử lý tái ghép mẫu động 50 Hình 5-1 Sơ đồ hoạt động của phần mềm phân tích và xử lý mẫu 54
Hình 6-1 Phân bố số lượng mẫu con trong mẫu động 66
Hình 6-3 Thống kê số phần tử thay thế trong các mẫu có 3 Byte-OR 68
Trang 12Hình 6-5 Tổng hợp Pattern Reassembly Module 72 Hình 6-6 Tổng hợp Pattern Reassembly Controller 73
Trang 13MỤC LỤC BẢNG
Bảng 2-1 Hash Table 11
Bảng 2-2 Quá trình so trùng sử dụng Hash 11
Bảng 2-3 So sánh hoạt động của các bộ lọc Bloom, Bloomier và Bloom-Bloomier21 Bảng 2-4 Nội dung của một Fragment 25
Bảng 2-5 Các loại Fragment 26
Bảng 3-1 Kết quả phân tích cơ sở dữ liệu ClamAV 31
Bảng 3-2 Các wildcard xuất hiện trong cở sở dữ liệu ClamAV 34
Bảng 3-3 Một số thống kê tập mẫu động 35
Bảng 4-1 Mô tả chức năng Control Information 43
Bảng 4-2 Nội dung sub-pattern metadata 45
Bảng 4-3 Nội dung Trace Metadata 48
Bảng 4-4 Các trạng thái pipeline của Pattern Reassembly Controller 49
Bảng 5-1 Thống kê số lượng mẫu tĩnh và mẫu động 54
Bảng 5-2 Thống kê số mẫu với từng loại Byte-Or 56
Bảng 5-3 Chuyển đổi wildcard 59
Bảng 5-4 Dữ liệu mã hóa trong Bloomier của mỗi fragment 63
Bảng 5-5 Dữ liệu lưu trữ trong SRAM của mỗi fragment 63
Bảng 6-1 Thống kê theo số mẫu chứa và có thể sinh ra của Byte-Or 67
Bảng 6-2 Thống kê số lương mẫu và mẫu con phát sinh thêm trong trường hợp 3 Byte-Or 69
Bảng 6-3 Giá trị các tham số trong bảng hiện thực thử nghiệm 70
Bảng 6-4 Tài nguyên để hiện thực Pattern Reassembly Module 70
Bảng 6-5 So sánh với các phương pháp khác dựa trên chỉ số PEM 75
Trang 14CHƯƠNG 1 GIỚI THIỆU
1.1 Tính cấp thiết của đề tài
Ngày nay, mạng máy tính bùng nổ trở thành một phần thiết yếu của cuộc sống hàng ngày cũng như trong công việc kinh doanh Theo thống kê thì số lượng người sử dụng Internet trên toàn thế giới đã tăng gấp đôi trong 5 năm qua và đã vượt qua mốc 2
tỷ trong năm 2010, với phần lớn trong số 226 triệu người dùng mới đến từ các nước đang phát triển
Song song với sự phát triển mạnh mẽ, Internet còn là phương tiện hữu hiệu để phát tán các virus máy tính Những virus mới được viết trong thời gian gần đây không còn thực hiện các trò đùa hay sự phá hoại đối máy tính của nạn nhân bị lây nhiễm nữa,
mà đa phần hướng đến việc lấy cắp các thông tin cá nhân nhạy cảm (các mã số thẻ tín dụng) mở cửa sau cho tin tặc đột nhập chiếm quyền điều khiển hoặc các hành động khác nhằm có lợi cho người phát tán virus Kết quả là, an ninh thông tin, virus máy tính cụ thể hơn, đang trở thành một trong những vấn đề quan trọng nhất với người sử dụng Internet Vì vậy, chương trình chống virus là thành phần thiết yếu trong tất cả các giải pháp bảo mật
So trùng mẫu là quá trình xử lý chính trong các chương trình chống virus, kiểm tra sự xuất hiện của các mẫu virus được biết đến trong nội dung tập tin Điều này tốn một số lượng đáng kể thời gian cũng như tài nguyên hệ thống do số lượng ngày càng tăng của virus Bên cạnh đó, tốc độ của quá trình quét giảm khi số lượng mẫu tăng Đồng thời, hiệu suất của hệ thống mà chạy chương trình chống virus cũng bị ảnh hưởng
Mặc dù có nhiều lợi thế và cải tiến trong chương trình chống virus dựa trên phần mềm, nhưng kích thước và sự đa dạng của virus ngày càng tăng, việc đảm bảo độ ổn định và tính chính xác của hệ thống càng trở lên khó khăn hơn Vì vậy các giải pháp phần cứng (hardware) cho bài toán này là cần thiết và tất yếu Với các đặc điểm thuận
Trang 15lợi của mình thì việc cải tiến các chương trình anti-virus trên phần cứng, đặc biệt là các thiết bị phần cứng khả lập trình (Field Programable Gate Array- FPGA) đang là một lĩnh vực nghiên cứu ứng dụng rất mới mẻ và có nhiều tiềm năng phát triển trên thế giới
1.2 Phát biểu vấn đề
ClamAV là phần mềm anti-virus, mã nguồn mở nổi tiếng nhất hiện nay trên hệ linux, và được sử dụng trong các công trình nghiên cứu Vì vậy, lựa chọn ClamAV để nghiên cứu cải tiến là thích hợp
Công trình nghiên cứu của Xin Zhou và các cộng sự [1], chứng tỏ rằng hầu hết thời gian trong giai đoạn quét virus chỉ đơn giản là so trùng mẫu (chiếm 73.4% thời gian quét) Trong đó, thời gian so trùng chuỗi động chiếm 25.9%, mặc dù số lượng mẫu động chỉ 3.3% trong tổng số mẫu Bên cạnh đó, tốc độ quét sẽ giảm khi số lượng các mẫu tăng lên Dẫn đến hiệu suất của các chương trình anti-virus bị ảnh hưởng
Vì vậy, đề tài luận văn tập trung vào bài toán so trùng mẫu động trên phần cứng nhằm giảm thời gian quét virus của phần mềm ClamAV Đây là một phần quan trọng đóng vai trò quyết định trong tốc độ và hiệu năng của ClamAV, và các chương trình anti-virus khác
1.3 Đóng góp của luận văn
Luận văn chỉ ra được tính khả thi trong vấn đề tăng tốc độ trong các chương trình antivirus bằng cách sử dụng phần cứng và mở ra tiềm năng trong việc sử dụng các thiết
bị FPGA
Những đóng góp chính của luận văn là:
Kiến trúc so trùng mẫu động, hỗ trợ các ký tự wildcard
Phương pháp phân tích, xử lý tập mẫu của ClamAV, tạo ra các file cấu hình cho phần cứng dựa vào lựa chọn của người dùng
Trang 16 Các kết quả nghiên cứu và thực nghiệm trong giai đoạn luận văn đã được công
bố trong tạp chí khoa học công nghệ năm 2013 và kỷ yếu hội nghị quốc tế FDSE của Springer năm 2014
1.4 Cấu trúc luận văn
Phần còn lại của luận văn có cấu trúc như sau:
Chương 2: Trình bày các kiến thức nền tảng liên quan đến đề tài, bao gồm các giải thuật so trùng mẫu và các kết quả nghiên cứu trước đây
Chương 3: Tổng quan về cơ sở dữ liệu mẫu ClamAV và kiến trúc so trùng mẫu động trên phần cứng
Chương 4: Trình bày thiết kế kiến trúc phần cứng của module so trùng mẫu động Chương 5: Trình bày giải pháp, quy trình tổng hợp và phân tích mẫu, cho phép cập nhật và xây dựng nhanh chóng hệ thống
Chương 6: Đánh giá và kiểm nghiệm hệ thống trên board NetFPGA
Chương 7: Tổng kết các kết quả của luận văn và đề xuất hướng phát triển tiếp theo
Trang 17CHƯƠNG 2 KIẾN THỨC NỀN TẢNG
Chương này được chia thành bốn phần Phần đầu tiên giới thiệu, cung cấp một cái nhìn tổng quan về vấn đề so trùng mẫu Phần thứ hai giới thiệu các giải pháp phần cứng hiện có Phần ba giới thiệu bộ lọc Bloom-Bloomier và mô hình so trùng mẫu tĩnh trên phần cứng BBFex, mà luận văn sử dụng Phần cuối cùng giới thiệu nền tảng phần cứng netFPGA 10G, được sử dụng để hiện thực hệ thống
2.1 So trùng mẫu
So trùng mẫu là một trong những bài toán cơ bản và quan trọng của ngành máy tính Trong ngữ cảnh của luận văn, so trùng mẫu là tác vụ kiểm tra sự tồn tại của một hay nhiều chuỗi cho trước trong một chuỗi liên tục các ký tự Trong NIDS (hệ thống phát hiện xâm nhập mạng) và các ứng dụng antivirus, mỗi ký tự là một byte Mỗi chuỗi cho trước được gọi là một mẫu Một tập hợp các mẫu được gọi là một cơ sở dữ liệu Mỗi mẫu trong một cơ sở dữ liệu là duy nhất
Do sự phát triển và đa dạng của các virus siêu đa hình (polymorphic), một dạng virus máy tính có thể làm thay đổi diện mạo chữ ký của mình thông qua các kỹ thuật như
mã hóa để tránh các phần mềm chống virus phát hiện, cho nên các mẫu virus trong các ứng dụng antivirus có thể chứa các biểu thức chính qui Các biểu thức chính qui cho phép các mẫu virus được mô tả tổng quát hơn nên làm giảm số lượng mẫu trong cơ sở
dữ liệu
Giải thuật cho so trùng mẫu được chia thành hai loại: so trùng mẫu đơn (single pattern) và so trùng đa mẫu (multi pattern) Trong một lần tìm kiếm virus, so trùng mẫu đơn chỉ thực hiện so trùng với một mẫu duy nhất, trong khi so trùng đa mẫu phải tìm kiếm nhiều mẫu cùng lúc có mối quan hệ ràng buộc lẫn nhau Cả 2 loại thường đòi hỏi các mẫu phải được tiền xử lý, các thông tin phụ sau quá trình tiền xử lý được dùng để tăng tốc quá trình so sánh thực tế sau này Trong một số thuật toán chẳng hạn như Aho-
Trang 18Corasick [2] toàn bộ tập mẫu phải được xử lý thành một cấu trúc dữ liệu dạng cây, hoàn toàn khác với ban đầu
Các thuật toán so trùng mẫu đơn, như Boyer-Moore hoặc Knuth-Morris-Pratt, sử dụng heuristics để giảm số lượng các ký tự so sánh cần thiết để so trùng Bằng cách lặp
đi lặp lại việc tìm kiếm các mẫu đơn trong các đa mẫu, mô hình thuật toán tìm kiếm mẫu đơn có thể áp dụng để tìm kiếm đa mẫu Tuy nhiên, cách tiếp cận này không áp dụng cho cơ sở dữ liệu có quy mô lớn và có kích thước biến thiên lớn Các thuật toán áp dụng phương pháp này không cần phải lưu kết quả so trùng qua từng giai đoạn tìm kiếm và cũng không lợi dụng đặc điểm của cơ sở dữ liệu
Phần mềm hiện thực tìm kiếm đa mẫu thường tiêu thụ tài nguyên hệ thống lớn hơn so với so trùng mẫu đơn Khi số lượng mẫu càng lớn, vì tính chất tuần tự thuần túy trong bộ xử lý trung tâm của phần mềm, nên tốc độ của hệ thống sẽ giảm đáng kể Kết quả là nhiều công trình nghiên cứu để hiện thực thuật toán so trùng đa mẫu trên phần cứng để tăng tốc quá trình này Tuy nhiên việc so trùng đa mẫu vẫn là bài toán phức tạp đặc biệt là xử lý trên phần cứng
Trong phần tiếp theo chủ yếu giới thiệu các dạng của thuật toán so trùng đa mẫu thực hiện trên phần cứng
2.2 Tổng quan các nghiên cứu trước đây
Phần này nêu ra các phương pháp tiếp cận bài toán so trùng mẫu sử dụng phần cứng Các giải pháp cho bài toán so trùng mẫu sử dụng phần cứng đầu tiên dựa trên CAM (content-addressable memory) và nền tảng phần cứng ASIC (application-specific integrated circuit) Các giải pháp mới sau này sử dụng FPGA
CAM lưu các mẫu virus trong các bảng trong bộ nhớ Quá trình quét tuy diễn ra song song nhưng cần phải so sánh qua toàn bộ các mẫu Các ứng dụng CAM thường tiêu tốn bộ nhớ rất lớn, khi tập dữ liệu gia tăng, ngoài ra ra chi phí bộ nhớ phần cứng của CAM khá lớn và tiêu tốn nhiều năng lượng hơn
Trang 19Giải pháp ASIC hoạt động như một vi xử lý có thể sử dụng cho nhiều mục đích
Vì vậy giải pháp này không có khả năng đạt được mức độ xử lý song song được cung cấp bởi FPGA
Với những đặc điểm nổi trội, FPGA trở thành công nghệ nền tảng để tăng tốc các
bộ so trùng chuỗi Đặc tính song song của nó giúp cho việc tăng tốc bộ so trùng chuỗi trở nên dễ dàng Quan trọng nhất, khả năng tái lập trình của FPGA cung cấp khả năng cập nhật dễ dàng cho các cơ sở dữ liệu virus thay đổi hằng ngày, của các ứng dụng so trùng chuỗi Với công nghệ FPGA, phần cứng có thể được tối ưu hóa cho sơ sở dữ liệu
có khả năng cập nhật dữ liệu thường xuyên Các hướng tiếp cận bài toán so trùng chuỗi động trên FPGA bao gồm phương pháp máy trạng thái (FSM), và nhóm kỹ thuật hash: Perfect Hash, bộ lọc Bloom, bộ lọc Bloomier
2.2.1 Phương pháp máy trạng thái
Phương pháp sử dụng máy trạng thái hữu hạn là một mô hình bao gồm một số lượng nhất định các trạng thái, sự chuyển trạng thái giữa các trạng thái tương tự như một lưu đồ mô tả hoạt động nào sẽ diễn ra khi điều kiện đầu vào được thỏa mãn Phương pháp tiếp cận này đặc biệt phù hợp cho phần cứng FPGA, do có thể sử dụng các bộ flip flop có sẵn để hiện thực các trạng thái Nhìn chung, phương pháp máy trạng thái thường được nghiên cứu và hiện thực dựa trên thuật toán Aho-Corasick (AC) [2] và các biến thể của nó Đầu tiên, thuật toán sẽ chuyển đổi các mẫu trong tập cơ sở dữ liệu mẫu thành các cây AC (cây trạng thái Aho-Corasick), mỗi cạnh của cây biểu diễn cho một ký tự trong mẫu đang xét Hình 2-1 biểu diễn một cây AC đơn giản
Trang 20Có hai cách hiện thực cây AC là máy trạng thái hữu hạn đơn định (Deterministic Finite Automata – DFA) và máy trạng thái hữu hạn không đơn định (Non-deterministic Finite Automata)
Điểm khác biệt chính giữa hai cách tiếp cận của máy trạng thái hữu hạn nằm ở chỗ hàm chuyển trạng thái của chúng Hàm chuyển trạng thái của DFA trả về một kết quả là một trạng thái đơn kế tiếp và hàm có chức năng tương tự ở NFA trả về một tập các trạng thái, có thể là một tập rỗng Do đó, trong khi NFA cho phép nhiều hơn một trạng thái cùng tích cực tại một thời điểm, DFA chỉ cho phép một trạng thái tích cực Do
Trang 21đó, thời gian chuyển trạng thái của DFA ít hơn so với NFA, tuy nhiên DFA lại chịu sự bùng nổ trạng thái hơn so với NFA Chính những ưu khuyết điểm của từng mô hình này tạo nên những thuận lợi và khó khăn khi hiện thực trên các thiết bị phần cứng
Hình 2-2 là ví dụ về DFA và NFA Trạng thái S0 đóng vai trò là trạng thái bắt đầu trong cả hai mô hình Tại trạng thái S0 trong mô hình DFA các tín hiệu chuyển trạng thái có thể là 0 hoặc 1, nhưng trong NFA cho phép các cạnh ra có thể không có nhãn (không có ký tự đầu vào), các cạnh này gọi là chuyển trạng thái epsilon (ɛ-transition)
Trang 22 Độ phức tạp của giải thuật là một hằng số, nó chỉ phụ thuộc vào chiều dài của mẫu, không phục thuộc vào độ lớn của tập dữ liệu Mặc dù giải thuật
AC thực hiện chậm hơn so với các phương pháp sử dụng heuristic, nhưng trong trường hợp xấu nhất, thời gian thực thi vẫn là một hằng số
Các biểu thức chính qui có thể ánh xạ dễ dàng vào cây AC Như đã đề cập
ở trên, đặc tính này đặc biệt hữu ích cho các ứng dụng antivirus Tuy nhiên, việc sử dụng có thể dẫn đến sự bùng nổ trạng thái trong các mô hình máy trạng thái NFA và DFA
Tuy nhiên, giải thuật AC tồn tại hai giới hạn lớn:
Sử dụng nhiều bộ nhớ hơn so với phương pháp sử dụng băm như bộ lọc Bloom, đặc biệt đối với tập mẫu có chiều dài trung bình lớn như ClamAV
Khi thêm một mẫu mới vào, cần phải xây dựng lại toàn bộ cây AC Hạn chế này có ý nghĩa lớn khi hiện thực trên phần cứng mà các trạng thái sử dụng các bộ flip flop Xây dựng lại cây AC đồng nghĩa với việc phải lập trình lại phần cứng Trong khi với kỹ thuật FPGA, việc tạo ra và kiểm tra các bitstream tốn rất nhiều thời gian và công sức cho mỗi lần cập nhật Dữ liệu virus thay đổi hằng ngày, vì vậy việc cập nhật liên tục là một thách thức không nhỏ khi sử dụng phương pháp này
Nhiều biến thể của thuật toán AC đã được đề xuất để cải thiện hiệu suất và sử dụng bộ nhớ hiệu quả hơn Ví dụ như chia phân vùng trạng thái được giới thiệu trong [3] Mô hình B-FSM trong [4] có thêm tính năng chuyển bảng băm khi có sự xung đột, cho ra được kết quả với hiệu suất và hiệu quả sử dụng bộ nhớ cao.Tuy nhiên, với những cải tiến này, giải pháp xây dựng cây AC dựa trên phần cứng chỉ có thể thực hiện được với hơn vài ngàn mẫu trong Snort trên các dòng FPGA hiện nay Số lượng bộ nhớ tiêu thụ tỷ lệ thuận với số ký tự trong cơ sở dữ liệu
Trang 232.2.2 Hash checksum
Hash checksum là một phương pháp dựa trên giải thuật băm (hash) để xác định mẫu bằng cách so sánh giá trị băm (checksum) của chuỗi ký tự đầu vào với các giá trị băm của các mẫu trong cơ sở dữ liệu Đầu tiên, phương pháp này chọn một hàm băm (hash function) bất kỳ để tính toán trước các giá trị băm của toàn bộ mẫu trong tập cơ sở
dữ liệu Sau đó kết quả băm như trên được lưu trữ trong một tập hợp, thường là mảng Với cùng một hàm băm như trên, mẫu có thể xác định có xuất hiện hay không dữ liệu đầu vào, chỉ đơn giản bằng cách tiến hành băm dữ liệu đầu vào và so sánh kết quả giá trị băm đó với các tập giá trị băm của các mẫu đã được tính toán trước Nếu giá trị băm của đầu vào giống với giá trị băm của một mẫu nào đó, ta có thể nói mẫu đó có xuất hiện trong dữ liệu đầu vào
Ưu điểm chính của phương pháp tiếp cận này cho bài toán so trùng mẫu là sự đơn giản của thuật toán, phương pháp này dễ dàng thực hiện trên cả phần mềm và phần cứng Ngoài ra, bởi vì phương pháp này chỉ lưu trữ các giá trị băm và các giá trị băm thường không phụ thuộc vào chiều dài của mẫu và cấu trúc dữ liệu đơn giản hơn, nên các giải pháp lưu trữ thường hiệu quả hơn nhiều so với các phương pháp khác
Tuy nhiên, việc sử dụng hash checksum cũng có hai nhược điểm chính sau:
Đầu tiên, không giống như FSM thể hiện kết quả chính xác, phương pháp băm chỉ cho câu trả lời gần chính xác với một xác suất nhỏ xảy ra “false positive”, ”false positive” là tên gọi cho trường hợp xảy ra khi trong chuỗi đầu vào không có xuất hiện một mẫu nào trong tập cơ sở dữ liệu, nhưng khi qua bộ so trùng bảo là có xuất hiện “false positive” là một vấn đề phổ biến và không tránh khỏi của các phương pháp sử dụng băm Kết quả là cần thêm một bước so sánh để xác định có thực sự trùng hay không
Trang 24 Thứ hai, phương pháp này chỉ áp dụng cho đơn mẫu Nếu một virus có khả năng thay đổi nội dung của chính nó có thể vượt qua các bộ máy so trùng một cách dễ dàng
Ví dụ sau mô tả sơ bộ cách thức hoạt động của phương pháp này
Ví dụ: Giả sử tập cơ sở dữ liệu mẫu gồm các mẫu có chung độ dài như sau
Mẫu P1 = “custom”
Mẫu P2 = “tomato”
Chuỗi đầu vào T = “tocustomator”
Hàm băm (hash function): H() với input là P1 và P2 Sau khi tính toán H(), chúng
ta có giá trị hash cho mỗi mẫu Các giá trị này cũng là vị trí của các mẫu trong bảng hash
Bảng hash (Hash table): là một mảng của các chuỗi mà độ dài là 10 Chuỗi sẽ được lưu trong phần tử tương ứng với giá trị hash H() của các mẫu Bảng 2-1 là kết quả của bảng băm khi băm hai mẫu P1 và P2
Bảng 2-1 Hash Table
Null Null “custom” Null Null Null “tomato” Null Null Null Chuỗi T sẽ chia thành các chuỗi con có chiều dài là 5 ký tự, tương ứng với chiều dài của tập mẫu, sau đó các chuỗi con sẽ được xem xét để xác nhận có trùng với mẫu P1 hay P2 Bảng 2-2 mô tả quá trình so trùng
Bảng 2-2 Quá trình so trùng sử dụng Hash
Trang 25“custom” 2 “custom” Trùng
Tại vị trí cuối cùng (được đánh dấu *) mặc dù kết quả thực tế là không trùng nhưng kết quả từ phương pháp trả về là trùng Trường hợp này được gọi là “false positive” như đã mô tả trước đó
2.2.3 Bộ lọc Bloom
Bộ lọc Bloom [5] là một phương pháp áp dụng kỹ thuật băm để giải quyết bài toán so trùng chuỗi, sử dụng mảng có chiều dài là 1 bit để so trùng dữ liệu đầu vào với tập các mẫu Cũng giống như các phương pháp sử dụng kỹ thuật băm, bộ lọc Bloom có cấu trúc đơn giản hơn FSM Tuy nhiên, khác với phương pháp hash checksum, bộ lọc Bloom được thiết kế dành cho so trùng đa mẫu, có thể dùng nhiều hàm băm cùng một lúc
Một trong những đặc điểm của bộ lọc Bloom là chỉ kiểm tra có tồn tại chuỗi ký
tự trong tập mẫu hay không Nếu kết quả là không thì có nghĩa là chuỗi đầu vào không trùng với bất kỳ mẫu nào trong cơ sở dữ liệu Nếu kết quả là có, có thể dữ liệu đầu vào
sẽ trùng với một trong các mẫu trong tập dữ liệu mẫu Tuy nhiên, bộ lọc Bloom không chỉ ra được chính xác là mẫu nào trong tập dữ liệu Khi có kết quả là có trùng xảy ra, một quá trình so trùng chính xác là cần thiết để thực hiện so trùng đa mẫu
Với các hàm băm được lựa chọn phù hợp, bộ lọc Bloom và các hướng tiếp cận sử dụng kỹ thuật băm có thể đưa ra một hình phần cứng đơn giản hơn, và do đó có thể hoạt động ở tần số cao hơn và chi phí thấp hơn
Cách thức xây dựng bộ lọc Bloom cho một cơ sở dữ liệu gồm n mẫu như sau Ban đầu, một bảng băm bao gồm m phần tử được tạo ra Mỗi phần từ trong bảng được khởi
Trang 26tạo với giá trị là 0 (false) Sau đó, lựa chọn k hàm hash khác nhau Tuy không bắt buộc, thường k lớn hơn 1, và việc chọn k sao cho phù hợp với tài nguyên lưu trữ và xác suất xảy ra “false positive” là thấp nhất có thể, công thức sau tính toán giá trị xác suất “false positive” Ngoài ra, tuy việc chọn hàm băm là tùy ý nhưng kết quả băm phải nằm trong khoảng từ 0 đến m-1 Cuối cùng là băm toàn bộ mẫu trong cơ sở dữ liệu vào bảng băm Thứ tự trong bảng tương ứng với giá trị băm được thiết lập là 1 (true) Bởi vì sử dụng k hàm băm, nên mỗi lần băm một mẫu ta thiết lâp được k vị trí trong bảng Lưu ý chỉ có một bảng băm sử dụng cùng với k hàm băm
𝐹𝑎𝑙𝑠𝑒 𝑃𝑜𝑠𝑖𝑡𝑖𝑣𝑒 𝑃𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑡𝑦 ≈ (1 − 𝑒−𝑘𝑛/𝑚)𝑘
Kiểm tra dữ liệu đầu vào với bộ lọc Bloom bao gồm hai bước:
Bước 1: Băm chuỗi đầu vào với cùng k hàm băm đã chọn trong quá trình xây dựng bảng băm đã được đề cập
Bước 2: Chuỗi đầu vào qua k hàm băm chỉ đến k vị trí trên bảng băm Các giá trị
trong k vị trí là đầu vào của toán tử logic and Nếu kết quả là 0 (false), chuỗi đang
kiểm tra chắc chắn không có xuất hiện các mẫu trong tập mẫu Nếu kết quả là 1 (true), chuỗi kiểm tra có thể có xuất hiện một mẫu nào đó trong tập cơ sở dữ liệu Cách hoạt động của bộ lọc Bloom được minh họa trong Hình 2-3, với k = 2, m = 10
Trang 27Hình 2-3 Quá trình hoạt động của bộ lọc Bloom
Bộ lọc Bloom có 3 ưu điểm chính so với phương pháp tiếp cận máy trạng thái:
1 Các quá trình tính toán đơn giản hơn, chỉ đơn thuần là băm chuỗi đầu vào, truy
cập k bộ nhớ và thực hiện toán tử logic AND
2 Sử dụng tài nguyên bộ nhớ ít hơn và hiệu quả hơn rất nhiều Bởi vì bộ lọc Bloom chỉ sử dụng bảng chỉ mục 1 bit, bộ nhớ sử dụng không phụ thuộc vào chiều dài của mẫu
3 Việc cập nhật dữ liệu mới trên tập cơ sở dữ liệu mẫu đơn giản Vì toàn bộ bảng băm nằm trên bộ nhớ
Mặc dù có những ưu điểm như đã nói ở trên, bộ lọc Bloom có những hạn chế như sau:
1 Vì mỗi bộ lọc Bloom chỉ hoạt động trên một chiều dài cụ thể, cho nên các mẫu
có chiều dài khác nhau cần có một bộ lọc Bloom riêng Điều đó dẫn đến việc sử dụng rất nhiều bộ lọc Bloom nếu sử dụng chung với cơ sở dữ liệu của ClamAV (các mẫu trong ClamAV có khoảng cách độ dài lớn)
Trang 282 Quá trình so trùng chính xác khi có bộ lọc Bloom cho kết quả là 1, và quá trình này cần phải quét qua toàn bộ tập dữ liệu Vì bộ lọc Bloom vẫn còn tồn tại xác suất “false positive” và chỉ trả về kết quả có hoặc không
3 Việc hỗ trợ biểu thức chính qui gặp nhiều khó khăn so với các phương pháp tiếp cận dựa trên máy trạng thái
Một số nhược điểm của bộ lọc Bloom có thể giải quyết bằng cách kết hợp Bloom với thuật toán AC Trong các mẫu được chia thành các phân mảnh với chiều dài là m, sau
đó các phân mảnh được ánh xá tới m bộ lọc Bloom với chiều dài chuỗi có thể xử lý là m-1 Do đó giảm thiểu đáng kể chiều dài của mẫu và vì thế cũng giảm thiểu số lượng bộ lọc Bloom cần thiết Để liên kết các phân mảnh ngược lại thành một mẫu hoàn chỉnh Cây AC được xây dựng trên những phân mảnh (thay vì những ký tự riêng lẻ) Bảng băm được lưu trữ trên các bộ nhớ nội (nằm trong chip FPGA), nhưng các trạng thái và các chuỗi ký tự đã được phân mảnh thực sự được lưu ở các bộ nhớ ngoài Bất cứ một kết quả
là 1 từ bộ lọc Bloom, bộ so trùng chính xác sẽ tải các phân mảnh tương ứng từ bộ nhớ ngoài Mô hình thử nghiệm trong bài báo chỉ hoạt động với 2,259 mẫu đã chiếm tới vài
MB SRAM Mô hình chỉ tương thích với tập cơ sở dữ liệu giới hạn với chiều dài mẫu là ngắn, nó không phù hợp với cơ sở dữ liệu lớn với chiều dài mẫu có thể lớn hơn 1000 như trong ClamAV
2.2.4 Perfect Hash
Perfect Hash được giới thiệu trong [6], [7], với các tiêu chí thiết kế vẫn duy trì được các lợi thế của bộ lọc Bloom nhưng vẫn giải quyết được các nhược điểm của bộ lọc Bloom là xác xuất “false positive” và chỉ cho ra kết quả “có” hoặc “không” Không giống như bộ lọc Bloom, vẫn có thế thể xảy ra xung đột (collision), Perfect Hash thiết
kế mỗi mục trong bảng băm chỉ được tương ứng với một mẫu duy nhất Do đó, một mẫu chỉ có thể lưu trữ tại một vị trí mà giá trị băm trỏ đến và quá trình so trùng chính xác cuối cùng có thể dễ dàng tìm kiếm được mẫu nghi ngờ trùng với dữ liệu đầu vào đang kiểm tra
Trang 29Về mặt lý thuyết, Perfect Hash cung cấp toàn bộ ưu điểm của bộ lọc Bloom và
tạo điều kiện cho quá trình so trùng chính xác thực hiện dễ dàng để loại bỏ các trường
hợp “false positive” Tuy nhiên, trên thực tế một Perfect Hash khó hiện thực được cho
dù mảng băm có kích thước lớn Các mẫu không hoàn toàn ngẫu nhiên và các hàm băm
cho ra các giá trị phân bố không đều Nếu các giá trị băm của mẫu xảy ra xung đột, việc
xây dựng Perfect Hash sẽ thất bại Trong trường hợp này, một bảng lớn hơn hoặc một
hàm băm khác được thiết kế sao cho việc băm toàn bộ tập mẫu không xảy ra đụng độ
Hình 2-4 là kiến trúc tổng quát của Phmem [4] Thanh ghi dịch (Shift Register)
nhận dữ liệu từ bên ngoài Module Hash Tree lấy dữ liệu từ thanh ghi dịch để tính toán
các giá trị băm, kết quả của giá trị băm là vị trí của địa chỉ của mẫu tương ứng trong bảng
băm chứa trong “Indirection Memory” Mẫu thực sự được lưu trong “Pattern Memory”
Bộ so sánh sẽ so sánh chuỗi ký tự của mẫu mới lấy được với chuỗi tương ứng trong thanh
ghi dịch, để đảm bảo có trùng hay không
Hình 2-4 Kiến trúc tổng quát PHmem
Việc xây dựng bảng băm khó khăn, chính là nguyên nhân chủ yếu dẫn tới những
hạn chế của phương pháp này:
Trang 30 Với cùng số lượng các mẫu, phương pháp băm hoàn toàn cần đến bảng băm lớn hơn so với bộ lọc Bloom
Việc cập nhật các mẫu mới có thể dẫn đến việc thay đổi hàm băm và phải băm lại toàn bộ tập mẫu trước đó
Như bộ lọc Bloom, Perfect Hash chỉ được thiết kế với chiều dài của mẫu
là cố định
Toàn bộ ký tự của chuỗi có thể lưu trong các chỉ mục của bảng băm Điều này khá khó khăn nếu bảng băm được lưu trữ thực sự trên bộ nhớ nội rất giới hạn trên phần cứng Tuy nhiên, các giá trị checksum của mẫu có thể được lưu trong bảng băm, điều này có thể dẫn đến sự xuất hiện của “false positive” Một cách tiếp cận khác là toàn bộ ký tự của mẫu được lưu trong
bộ nhớ ngoài, các chỉ mục của bảng băm chỉ chứa các giá trị trỏ đến các ô nhớ của mẫu tương ứng Cách tiếp cận này làm giảm hiệu năng của hệ thống
Bộ lọc Bloomier hoạt động như sau Khi có dữ liệu vào, k hàm băm tính toán trên chuỗi ký tự vào và chỉ đến nhiều chỉ mục cùng lúc Trong bộ lọc Bloom, các chỉ mục trong bảng băm có giá trị là 1 dùng để chỉ một kết quả trùng Nhưng trong bộ lọc Bloomier bảng băm được xây dựng trên một phương thức hoàn toàn khác Thay vì chỉ
sử dụng 1 bit trong mỗi mục trong bảng băm, bộ lọc Bloomier lưu trữ thêm nhiều thông tin trong một mục (entry) Kết quả là, kích thước của mỗi mục tùy thuộc vào thông tin
Trang 31mã hóa Bởi vì các thông tin mở rộng, bảng băm trong Bloomier được xây dựng phức tạp hơn bộ lọc Bloom
Công thức sau mô tả cách để giải mã các thông tin trong bảng băm của bộ lọc Bloom Cũng giống như bộ lọc Bloom, chuỗi đầu vào sau khi qua k hàm băm chỉ ra k vị trí trong bảng băm Sau đó, thực hiện phép logic XOR cho toàn bộ giá trị trong các vị trí
kể trên Ở giai đoạn này, thông tin được phục hồi về ban đầu
là phép XOR liên tiếp trong mảng từ 1 tới k
Ví dụ trong Hình 2-5 mô tả cách tìm kiếm trong bộ lọc Bloomier
Ví dụ:
Hình 2-5 Ví dụ của bộ lọc Bloomier
Giả sử, tập hợp mẫu gồm 3 phần tử {x,y,z} Sau khi thực thi các bước để xây dựng bảng băm của bộ lọc Bloomier với 2 hàm băm, bảng băm cuối cùng có các giá trị
Trang 32như trong Hình 2-5 Với dấu mũi tên chỉ ra các vị trí băm của mẫu, thông tin chuỗi ký tự của mẫu được lưu trữ trong các bộ nhớ ngoài
Trong các hoạt động tìm kiếm, giả sử chuỗi đầu vào "y" được băm vào vị trí 1 và
6, giá trị 1001, sau khi XOR hai giá trị 0101 và 1100, là giá trị địa chỉ của bộ nhớ ngoài Khi truy cập vào địa chỉ 1001 mà thực sự có chứa mẫu "y", chúng ta có thể kết luận rằng một kết quả trùng
Trong trường hợp, chuỗi đầu vào "t", vị trí 0100 trong bộ nhớ ngoài không chứa bất kỳ mẫu hợp lệ nào Vì vậy, không có kết quả trùng xảy ra
Một trong những hệ thống sử dụng bộ lọc Bloomier cho cơ sở dữ liệu lớn là PERG [8] PERG sử dụng phương pháp băm, mà cụ thể là kết hợp giữa bộ lọc Bloomier và mô hình CRC, để định địa chỉ mẫu Các chuỗi ký tự ban đầu được xem xét kỹ để tìm ra cách tốt nhất để chia các mẫu thành các phân mảnh (fragment), từ đó tiến hành xây dựng bộ lọc Bloomier với tỷ lệ “false positive” là thấp nhất PERG cũng cần thêm các bộ nhớ cache trong chip để lưu trữ thông tin các fragment trùng nhau và phân tích chúng khi giá trị băm khi các phân mảnh đó trùng với chuỗi đầu vào Sau đó, chuỗi đang xem xét có thể được so sánh với các phân mảnh khác trong mỗi bản siêu dữ liệu (metadata) tương ứng với phân mảnh trùng, để xác định mẫu thực sự Kết quả là, thời gian cần thiết cho quá trình tuần tự này phụ thuộc vào số lượng phân mảnh trùng lặp PERG sử dụng CRC-
8 như là bộ lọc đầu tiên trước khi đọc metadata của các phân mảnh này trong các bộ nhớ ngoài Tuy nhiên, xác suất trùng lặp trong CRC-8 vào khoảng 12,5% là lớn, dẫn đến việc PERG sẽ truy vấn các bộ nhớ ngoài 12,5 lần cho mỗi 100 byte đầu vào Ngoài ra, mặc
dù có tỷ lệ “false possitive” là thấp, một kết quả trùng được công nhận trong PERG phải được kiểm tra bởi phần mềm
Trang 332.3 Bộ so trùng mẫu đơn Bloom và Bloomier
Tuy nhiên, bộ lọc Bloomier lại chỉ ra được vị trí của mẫu trong bảng băm Vì vậy, quá trình so trùng chính xác cuối cùng chỉ cần thực hiện một tác vụ so sánh Mặc dù vậy,
bộ lọc Bloomier luôn luôn phải thực hiện quá trình so trùng chính xác Đây cũng là điểm bất lợi lớn nhất khi triển khai trên các hệ thống lưu trữ chuỗi ký tự của mẫu trong các bộ nhớ ngoài Hệ thống phải thực hiện truy cập vào bộ nhớ ngoài trong mỗi chuỗi tìm kiếm Việc truy cập bộ nhớ ngoài liên tục làm giảm hiệu suất của hệ thống đáng kể Chính vì điểm này, mà bộ lọc Bloomier có hiệu năng thấp hơn so với bộ lọc Bloom, bộ lọc Bloom chỉ thực hiện đối chiếu khi tất cả các vị trí mà các giá trị băm trỏ tới có giá trị là “1”
Việc kết hợp bộ lọc Bloom và bộ lọc Bloomier được đề cập trong [9], để giảm thiểu quá trình so trùng chính xác yêu cầu phải truy xuất bộ nhớ ngoài có tốc độ thấp Phương pháp này đòi hỏi phải sử dụng nhiều hơn một bit chỉ mục của bảng băm Các
“Bloom bit” được đặt cạnh các bit của Bloomier Các “Bloom bit” này không phải là một phần các bit thông tin mã hóa của Bloomier Tất cả các “Bloom bit” trong bảng băm hoạt động độc lập với các bit thông tin của Bloomier Bộ lọc Bloom được sử dụng để kiểm tra xem chuỗi đang truy vấn có trong tập hay không Nếu tất cả các bit trong các vị trí băm có giá trị là “1”, sau đó hệ thống sẽ giải mã thông tin từ các bit Bloomier để tìm
ra mẫu tương ứng Ưu điểm chính của sự kết hợp này so với bộ lọc Bloom và Bloomier được thể hiện trong ví dụ sau
Trang 34Ví dụ
Cho trước tập mẫu P = {a,b,c,d,e,f}
Các giá trị đầu vào T = {w,y,d}
Bảng 2-3 So sánh hoạt động của bộ lọc Bloom, bộ lọc Bloomier và Bloom Bloomier Kết quả cho thấy rằng bộ lọc Bloom-Bloomier có tối thiểu số lần truy cập bộ nhớ off-chip Vì thế, hiệu quả của Bloom-Bloomier là cao nhất so với bộ lọc Bloom Filter và bộ lọc Bloomier
Bảng 2-3 So sánh hoạt động của các bộ lọc Bloom, Bloomier và Bloom-Bloomier
P Kết quả không trùng
Có thể có trong tập
P So sánh “d” với tất cả mẫu trong tập
P Kết quả trùng
Bộ lọc Bloomier So sánh “w” với
mẫu “b” Kết quả không trùng
So sánh “y” với mẫu “e” Kết quả không trùng
So sánh “d” với mẫu “d” Kết quả trùng
Có thể có trong tập
P So sánh “d” với mẫu “d” Kết quả không trùng
2.3.2 Hàm Hash
Do cấu trúc song song và pipeline của hệ thống, bộ so trùng BBF sử dùng add-xor (SAX) là hàm băm của hệ thống [11] Ngoài ra, các BBF sẽ so sánh các chuỗi
Trang 35Shift-tìm kiếm với các chuỗi ký tự ban đầu của mẫu từ bộ nhớ off-chip khi có một tín hiệu từ các bộ BBU xác nhận là trùng, do đó các thông tin được mã hóa trong các chỉ mục của bảng băm là địa chỉ của mẫu tương ứng trong bộ nhớ off-chip
SAX là một lớp hàm băm, với giá trị băm là chuỗi ký tự, được thể hiện ở công thức sau
𝐻𝑖 = 𝐻𝑖−1 𝑋𝑂𝑅 (( 𝐻𝑖−1 ≪ 𝑆𝐿𝑖) + (𝐻𝑖−1 ≫ 𝑆𝑅𝑖) + 𝐶𝑖) SAX rất dễ dàng hiện thực trên phần cứng Chỉ với các tác vụ dịch (shift), cộng (add) và XOR, phần cứng hiện thực SAX chỉ sử dụng các bộ logic đơn giản mà không cần bất kỳ bộ nhân hay các bộ tốn nhiều chu kỳ clock Ngoài ra, hàm SAX có thể hoàn toàn hiện thực bằng phương pháp pipeline Bằng cách chọn chiều dài của hàm SAX bằng với chiều dài của mẫu lớn nhất, các bộ lọc BBF, có cùng chiều dài với các bộ SAX tương ứng, có thể sử dụng chung các dữ liệu đầu ra Thiết kế này được thể hiện ở Hình 2-6
Hình 2-6 Cấu trúc pipline của hàm hash
Số lượng các hàm băm sử dụng trong BBF có ảnh hưởng lớn đến hiệu suất của hệ thống
vì nó ảnh hưởng đến tỷ lệ “false positive” của bộ lọc Tỷ lệ “false possitive” cao dẫn đến
sẽ có nhiều chuỗi nghi ngờ cần phải được kiểm tra, khả năng tràn các vùng đệm (FIFO) cũng sẽ tăng lên Khi trường hợp này xảy ra, hệ thống sẽ chấm dứt hoạt động, các dữ
Trang 36liệu trước đó sẽ bị xóa Sơ đồ trong Hình 2-7 mô tả mối liên hệ giữa số lượng hàm băm với tỷ lệ “false positive”
Hình 2-7 Số lượng các hàm hash và tỷ lệ “false positive” tương ứng Tỷ lệ “false positive” giảm đáng kể với sự gia tăng của các hàm hash: từ 83% (2 hàm hash)
đến 0,02% (14 hàm hash)
2.3.3 Kiến trúc bộ so trùng mẫu BBF
Hệ thống BBFex là một hệ thống so trùng chuỗi với tốc độ cao Hệ thống được thiết kế theo phương pháp hashing và có khả năng so trùng cho một cơ sở dữ liệu với nhiều chuỗi tĩnh có độ dài khác nhau, Hình 2-8
Trang 37Defrag Module 1
Defrag Module 2
Defrag Module 3
Defrag Module 4
Wait-for Compare FIFO String
Buffer
Comparator SRAM
SDRAM
Match ID Offset
Char out
Trang 38Bloomier bits Nếu các Bloom bit đều bằng 1, thông tin của chuỗi (giá trị hash, fragment type) được đưa tiếp qua khối Arbiter Unit để xử lý
Khối Arbiter Unit gồm năm khối DM (Defrag Module) tương ứng với năm khối BBM ở Character Scanning Unit Vì khối so trùng ký tự có năm bộ BBM chỉ so trùng được các chuỗi có độ dài cố định là 8, 16, 32, 64, 128 nên để có thể so trùng các chuỗi
có độ dài từ 8 đến 256, ta chia mỗi chuỗi này thành hai mảnh có độ dài cố định là 8, 16,
Bảng 2-4 Nội dung của một Fragment
Next hash value 17 Giá trị hash của mảnh được
mong được
Base ID 16 ID của mẫu tạo thành từ 2
mảnh Referenced next
Trang 3911 Vừa là mảnh thứ nhất trong mẫu này
và là mảnh thứ hai trong mẫu khác
Mỗi khối DM chứa tám khối PE (Processing Element) Tám khối PE cho phép lưu thông tin tám mảnh thứ nhất khác nhau để đợi mảnh thứ hai của chúng trong cùng một lúc Khởi đầu, tám khối PE đều ở trạng thái không hoạt động Một PE chỉ được kích hoạt khi một mảnh thứ nhất được đưa vào Khi một mảnh mới được vào, thông tin mảnh
đó sẽ được so sánh với thông tin lưu trên khối PE Nếu đúng là mảnh cần tìm, thông tin base_ID sẽ được lưu trong một bộ FIFO đợi để được so sánh với mẫu gốc trong khối Comparison Unit, sau đó khối PE sẽ trở lại trạng thái không hoạt động Ngược lại, nếu không phải mảnh cần tìm, thông tin của mảnh sẽ bị loại bỏ, khối PE tiếp tục chờ cho đến khi gặp mảnh phù hợp hoặc mảnh tiếp theo có khoảng cách lớn hơn khoảng cách cho phép giữa hai mảnh (lúc đó khối PE trở lại trạng thái không hoạt động)
Khối Comparison Unit dựa vào base_id làm địa chỉ tra cứu vào SDRAM lấy giá trị mẫu gốc rồi so sánh với chuỗi được so trùng
Nhìn chung, hệ thống BBFex có thể so trùng một chuỗi tĩnh với tốc độ cao và cho biết chính xác được vị trí của chuỗi đó trong tập chuỗi tĩnh cho trước Nhưng nhược điểm
Trang 40của hệ thống này là vẫn chưa xử lý được các chuỗi virus có chứa wildcard trong tập dữ liệu của chương trình ClamAV
2.4 NetFPGA Platform
NetFPGA là đề tài nghiên cứu của trường đại học Standford, là một platform phần cứng tái cấu hình chi phí thấp chuyên dụng cho mạng tốc độ cao Trên board NetFPGA bao gồm các khối logic, bộ nhớ và các card Gigabit Ethernet để từ đó người sử dụng có thể xây dựng nên một switch, router hay một thiết bị an ninh mạng Bởi vì toàn bộ module truyền/định tuyến gói dữ liệu được hiện thực trên phần cứng, hệ thống có thể hỗ trợ các gói dữ liệu truyền ở tốc độ Gigabit với độ trễ xử lý (processing latency) chỉ trong vài chu
kỳ clock
Hình 2-9 Kiến trúc netFPGA 10G
Hình 2-9 mô tả sơ đồ khối của NetFPGA 10G [10] bao gồm một chip Xilinx FPGA lớn của họ Virtex-5 hoạt động với tần số clock là 250 MHz Chức năng của chip này được lập trình bởi người sử dụng Bên cạnh, NetFPGA cung cấp 8 kênh chuẩn truyền PCI express thế hệ thứ 2, có thể đạt tốc độ 5Gbps cho một kênh