1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu, thiết kế và hiện thực một hệ thống xử lý biểu thức chính quy trên fpga cho hệ thống an ninh mạng internet b

50 15 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 50
Dung lượng 2,35 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tuy nhiên, do sự đa dạng trong hình thức tấn công, các mẫu độc hại có thể xuất hiện tại bất cứ vị trí nào trong các gói tin, bài toán đặt ra là cần có một giải pháp có khả năng thâm nhập

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH

BÁO CÁO TỔNG KẾT KẾT QUẢ ĐỀ TÀI KH-CN CẤP TRƯỜNG

Trang 2

Danh sách cán bộ tham gia thực hiện đề tài

3 KS Nguyễn Hòa Hưng

- Bộ môn Kỹ Thuật Máy Tính – Khoa KH&KT MT – Đại học Bách Khoa Thành phố Hồ Chí Minh

Trang 3

Mục lục

Chương 1 GIỚI THIỆU ĐỀ TÀI 1

1.1 Tính cấp thiết của đề tài 1

1.2 Đối tượng và mục tiêu nghiên cứu của đề tài 2

1.3 Tình hình nghiên cứu của đề tài 2

1.4 Hệ thống NIDS trên chip FPGA 4

Chương 2 TỔNG QUAN HỆ THỐNG NIDS VÀ BIỂU THỨC CHÍNH QUY 5

2.1 Hệ thống phát hiện xâm nhập mạng (NIDS): 5

2.1.1 Giới thiệu hệ thống NIDS 5

2.1.2 Phần mềm phát hiện xâm nhập mạng SNORT 5

2.2 Biểu thức chính quy 6

2.2.1 Giới thiệu biểu thức chính quy 6

2.2.2 Biểu thức chính quy dựa trên ngôn ngữ Perl (PCRE) 7

2.3 Các phương pháp xử lý biểu thức chính quy 7

2.3.1 Dùng NFA để biểu diễn biểu thức chính quy 9

Chương 3 THIẾT KẾ PHẦN CỨNG 12

3.1 Kiến trúc tổng thể hệ thống 12

3.2 Giới thiệu các module chính của hệ thống 13

3.2.1 Module giao tiếp đầu 13

3.2.2 Module Detect Engine 14

3.2.3 Module giao tiếp cuối (PostInterface) 19

Chương 4 THIẾT KẾ PHẦN MỀM 20

4.1 Mô tả phần mềm 20

4.2 Trích xuất PCRE 20

4.3 Định dạng PCRE và xây dựng cấu trúc cây cú pháp 22

Trang 4

4.3.1 Định dạng PCRE 22

4.3.2 Xây dựng cây cú pháp 22

4.4 Xây dựng cấu trúc NFA 23

4.5 Ánh xạ NFA sang mô hình ghép nối các khối logic 24

4.5.1 Xây dựng khối Start Block, State Block và End Block 24

4.5.2 Xây dựng khối CRB 25

4.5.3 Xây dựng khối BCCM 25

4.6 Tự động sinh code Verilog 26

Chương 5 HIỆN THỰC HỆ THỐNG 27

5.1 NetFPGA Platform 27

5.1.1 Giới thiệu NetFPGA 27

5.1.2 Cấu trúc project trong NetFPGA 28

5.2 Kết quả hiện thực hệ thống 28

5.2.1 Kết quả tổng hợp 28

5.2.2 Thiết lập môi trường thử nghiệm 30

5.2.3 Kết quả thử nghiệm 31

5.3 So sánh với các kiến trúc so trùng khác 33

Chương 6 TỔNG KẾT 35

6.1 Kết quả đạt được 35

6.2 Hướng phát triển 36

6.3 Công trình công bố liên quan 36

TÀI LIỆU THAM KHẢO 37

PHỤ LỤC 39

A Các mở rộng của tập PCRE 39

B Thống kê tập luật của phần mềm phát hiện xâm nhập mạng SNORT 41

Trang 5

Mục lục hình

Hình 1-1 Mô hình hệt hống NIDS trên phần cứng FPGA 4

Hình 2-1 Vị trí hệ thống NIDS trong môi trường mạng 5

Hình 2-2 Mô hình tổng quan kiến trúc SNORT 5

Hình 2-3 Một luật của SNORT 6

Hình 2-4 Một máy trạng thái chấp nhận chuỗi „nice‟ 8

Hình 2-5 DFA chấp nhận tất cả các chuỗi bit chứa ít nhất 2 bit 1 8

Hình 2-6 NFA chấp nhận các chuỗi bit kết thúc bởi 00 hay 0110 9

Hình 2-7 NFA chấp nhận một ký tự đơn 9

Hình 2-8 Kết nối hai biểu thức chính quy con 9

Hình 2-9 Luật luân phiên hai biểu thức chính quy 10

Hình 2-10 NFA biểu diễn * chấp nhận một chuỗi bất kỳ gồm cả chuỗi rỗng 10

Hình 2-11 NFA biểu diễn ? chấp nhận không hay chỉ một chuỗi đầu vào 10

Hình 2-12 NFA biểu diễn + chấp nhận một số dương chuỗi đầu vào 10

Hình 2-13 NFA biểu diễn ((a*b)(c|d)) được xây dựng theo các quy tắc cơ bản 11

Hình 3-1 Kiến trúc tổng quan máy so trùng biểu thức chính quy 12

Hình 3-2 Cấu trúc nhóm so trung biểu thức chính quy (REMG) 12

Hình 3-3 Cấu trúc của Module giao tiếp đầu 13

Hình 3-4 Định dạng một entry trong FIFO 13

Hình 3-5 Dạng sóng đầu ra của module giao tiếp đầu 14

Hình 3-6 Mô hình các khối logic cơ bản: a State Block; b Start Block; c End Block 15

Hình 3-7 Mô hình tổng quát khối “^(a|b)c*$” 16

Hình 3-8 Kiến trúc khối CRB cho thức chính quy “(ab+c){2,10}” 16

Hình 3-9 Khối CRB cho biểu thức chính quy “/(mip){2,10}/” 17

Hình 3-10 BlockMemory chia sẻ giữa PCRE #1: “/ab /” và PCRE #2: “/a[^ab]/” 18

Hình 3-11 Cấu trúc của Module giao tiếp cuối 19

Hình 4-1 Lược đồ hoạt động của công cụ phần mềm 20

Hình 4-2 Cây cú pháp cho PCRE: “/a*[xyz](c|d)*(mip){2,10}\x3F/” sinh ra từ công cụ 23

Hình 4-3 Cấu trúc NFA sinh ra từ cây cú pháp (a) và sau khi thực hiện rút gọn (b) 23

Trang 6

Hình 4-4 Sơ đồ giải thuật thực hiện việc ghép nối các khối logic 24

Hình 4-5 Các bước xây dựng SubRegex Unit và CouCom Unit từ chuỗi "/mip/,2,10" 25

Hình 5-1 Board NetFPGA nhìn trực diện 27

Hình 5-2 Môi trường kiểm nghiệm hệ thống 30

Hình 5-3 Môi trường kiểm nghiệm hệ thống 31

Hình 5-4 Biểu đồ tỷ lệ mất gói ứng với dữ liệu tấn công gói ngắn(200 ~ 400 bytes/packet) 32 Hình 5-5 Biểu đồ tỷ lệ mất gói với dữ liệu tấn công gói dài (1200 ~ 1400 bytes/packet) 32

Trang 7

Mục lục bảng

Bảng 3.1 Các toán tử và các khối logic hiện thực tương ứng 14

Bảng 3.2 Các thông số trong module đếm và so sánh 17

Bảng 4.1 Bảng mô tả các toán tử PCRE được hỗ trợ 21

Bảng 5.1 Kết quả phân tích và xây dựng bằng phần mềm 29

Bảng 5.2 Thống kê kết quả tổng hợp trên ISE 10.1 29

Bảng 5.3 Bảng so sánh độ hiệu quả của các kiến trúc so trùng biểu thức chính quy khác nhau 34

Trang 8

Chương 1 GIỚI THIỆU ĐỀ TÀI

1.1 Tính cấp thiết của đề tài

- Trong thời đại ngày nay, mạng máy tính đã phát triển với quy mô rất rộng trên toàn thế giới và với tốc độ ngày càng nhanh Đi kèm với sự phát triển đó là sự đa dạng về các phương pháp tấn công trên mạng Chẳng hạn như virus, spam, malwares, cũng như các hành vi độc hại khác Không những thế các loại tấn công này ngày một nguy hiểm, tinh vi hơn và các hậu quả do chúng gây ra ngày càng nghiêm trọng hơn Do đó, các phương pháp phòng chống là cần thiết hơn bao giờ hết

- Có nhiều phương pháp được triển khai áp dụng như các hệ thống mã hóa, tường lửa (firewall), anti-virus Tuy nhiên, do sự đa dạng trong hình thức tấn công, các mẫu độc hại

có thể xuất hiện tại bất cứ vị trí nào trong các gói tin, bài toán đặt ra là cần có một giải pháp có khả năng thâm nhập sâu vào toàn bộ nội dung của gói tin và so sánh với các dấu hiệu tấn công nằm trong một cơ sở dữ liệu được chọn lọc, tập hợp sẵn, để có thể báo động được các loại tấn công một cách chính xác và hiệu quả hơn Từ đó nảy sinh ra nhu cầu sử dụng hệ thống phát hiện xâm nhập mạng NIDS (Network Intrusion Detection System)

- Do quy mô mạng ngày càng lớn, tốc độ mạng máy tính hiện nay đã lên tới hàng chục Gbps và sẽ còn cao hơn nữa trong tương lai Do đó giải pháp NIDS trên phần mềm chỉ đạt được tốc độ vài trăm Mbps sẽ không thể xử lý và đáp ứng kịp tốc độ truyền dữ liệu Thêm vào đó, các giải pháp phần mềm không thể hoạt động hiệu quả với số lượng các luật và yêu cầu về tài nguyên bộ nhớ có thể sẽ rất lớ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 lợi thuộc về bản chất của mình thì việc hiện thực NIDS trên phần cứng đ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

- Do tính linh hoạt và mạnh mẽ trong khả năng biểu diễn các dạng tấn công, mã độc, các hệ thống NIDS mã nguồn mở chẳng hạn như SNORT và Bro tận dụng các biểu thức chính quy để biểu diễn các mẩu tấn công trong tập dữ liệu của mình Biểu thức chính quy cũng trở thành sự lựa chọn của các sản phẩm NIDS thương mại, chẳng hạn TippingPoint X505 của hãng 3Com, một số thiết bị an ninh mạng của Cisco như Cisco IDS 4250, 4235 Bên cạnh đó, không chỉ giới hạn trong ứng dụng NIDS, các biểu thức chính quy còn được dùng trong các chương trình diệt virus (clamav), các bộ lọc tầng 7 hệ thống, được tích hợp sẵn trong môi trường dòng lệnh và ứng dụng của các hệ điều hành Linux, …

- Mặc dù đã có nhiều cải tiến cho các phương pháp và giải thuật so trùng biểu thức chính quy trên phần mềm Tuy nhiên vơi sự gia tăng nhanh chóng về số lượng và độ phức tạp của các biểu thức chính quy cũng như yêu cầu ngày càng cao trong việc đáp ứng tốc độ

Trang 9

đường truyền mạng lên đến hàng Gigabit/s, việc giải quyết bài toán biểu thức chính quy trên các các bộ xử lý phục vụ mục đích chung (General Purpose Processor) tỏ ra không hiệu quả Các nghiên cứu gần đây bắt đầu tập trung vào việc xử lý các biểu thức chính quy trên các phần cứng khả lập trình (FPGA, ASIC, PLD,… )

- Chip khả lập trình FPGA (Field Programable Gate Array) có hai ưu điểm quan trọng là khả năng tái lập trình và khả năng xử lý song song Do bản chất của bài toán tìm kiếm các mẫu tấn công vốn có sự thay đổi và cập nhật thường xuyên, khả năng tái lập trình cho phép giảm đáng kể chi phí để triển khai hệ thống Bên cạnh đó với việc cho phép hiện thực các mạch logic có khả năng hoạt động một cách độc lập ở tốc độ cao, việc đáp ứng yêu cầu tốc độ lên đến hàng Gbps là hoàn toàn khả thi

- Với những ly do trên nhóm quyết định thực hiện đề tài này với mục tiêu xây dựng một hệ thống xử lý các mẫu tấn công dựa trên biểu thức chính quy phục vụ cho hệ thống an ninh phát hiện xâm nhập mạng Hệ thống sẽ được triển khai trên chip khả lập trình FPGA và cần phải đảm bảo các yêu cầu về độ tin cậy, tính khả mở và tốc độ cao

1.2 Đối tượng và mục tiêu nghiên cứu của đề tài

- Nghiên cứu khả năng hiện thực hệ thống so trùng biểu thức chính quy cho hệ thống an ninh mạng và củ thể ở đây là hệ thống phát hiện xâm nhập mạng

- Nghiên cứu các giải thuật so trùng biểu thức chính quy đã và đang được sử dụng từ đó lựa chọn ra giải thuật phù hợp để có thể triển khai trên phần cứng khả lập trình FPGA

- Áp dụng giải thuật vào bài toán cụ thể là tập luật biểu thức chính quy PCRE của chương trình phát hiện xâm nhập mã nguồn mở Snort từ đó tiến hành cải tiến, tối ưu giải thuật và triển khai thệ thống trên chip FPGA.Hệ thống phải khả mở, có khả năng triển khai và ứng dụng thực tế đạt tốc độ cao

- Do tính cập nhật liên tục của các tập mã độc, đề tài cũng nhắm đến việc xây dựng một công cụ tự động (software tool chain) cho phép dễ dàng cập nhật và triển khai hệ thống

1.3 Tình hình nghiên cứu của đề tài

Trên thế giới việc hiện thực so trùng biểu thức chính quy trên phần cứng đã và đang được nghiên cứu khá rộng rãi Một trong những cách hiện thực hữu hiệu nhất trên các thiết bị FPGAs

là sử dụng mô hình máy trạng thái hữu hạn FSM (Finite State Machine) Việc triển khai trên FSM được chia thành hai cách tiếp cận chính là máy trạng thái đơn định Deterministic Finite Automata (DFA) và máy trạng thái không đơn định (Non-deterministic Finite Automata)

Năm 1982, Floyd và Ullman lần đầu tiên đưa ra mô hình NFA hiện thực trên các mảng logic khả lập trình PLAs (Programmable Logic Arrays) [2] làm nền tảng cho các phương pháp hiện thực sau này Họ chỉ ra rằng khi chuyển đổi trực tiếp từ NFA sang mạch tích hợp IC (Integrated Circuit), một máy N trạng thái cần không quá O(N) diện tích mạch Năm 2001, Sidhu và Prasanna đề xuất các khối logic hiện thực NFA cơ bản cho các toán tử Concatenation (.) ,

Trang 10

Kleene-Star (*), Union (|) trên FPGAs [3] Clark và Schimmel sử dụng giải pháp pre-decoding

để chia sẻ bộ so sánh ký tự (character comparator) và do đó đã giảm được khá nhiều tài nguyên phần cứng [4] Hai phương pháp này trở thành nguyên mẫu cho nhiều nghiên cứu sau này [5],[6],[7]

Năm 2008, Yang [8] đưa ra một kiến trúc mới cho việc biểu diễn NFA trên chip FPGA Trong kiến trúc này các flipflop được đặt sau các mạch logic thay vì đặt trước như của Sidhu và Prasanna Nhờ đó thời gian so trùng ký tự có thể overlap lên thời gian chuyển trạng thái và kết quả là mạch đồng bộ được sinh ra sẽ có thể hoạt động ở tần số cao hơn

So với phương pháp NFA, thì các nghiên cứu cho phương pháp DFA ít được quan tâm hơn Năm 2003, Moscola [9] sử dụng DFA để xử lý một số phần của biểu thức chính quy Thiết kế của họ được hiện thực trên hệ thống FPX (Field programmable Port Extender) Họ hiện thực 21 biểu thức chính quy và đạt được tốc độ 1.18Gbps Kumar [10] đưa ra một số chỉnh sửa cho phương pháp DFA truyền thống và đề xuất mô hình DFA với độ trễ ngõ nhập (Delayed Input DFA – D2FA) Với thiết kế này họ đã giảm được đáng kể số lượng trạng thái yêu cầu của DFA Gần đây, nhóm nghiên cứu của học viện Kyushu [11] giới thiệu một thiết kế dạng lai ghép kết hợp giữa NFA và DFA Họ sử dụng mô hình kiến trúc DFA để xử lý các chuỗi kí tự liên tục

và các ký tự độc lập trong biểu thức chính quy, trong khi đó tận dụng các thanh ghi dịch và các kiến trúc NFA để xử lý các toán tử phức tạp

Đối với việc áp dụng cho bài toán của các biểu thức chính quy dựa theo cú pháp PERL (PCRE) Năm 2007, trong bài báo [12], Abhishek Mitra và các đồng sự đưa ra một phương pháp hiện thực NFA trên phần cứng bằng cách chuyển đổi các PCRE (Perl-Compatible Regular Expression – loại biểu thức chính qui tương thích với ngôn ngữ Perl) opcodes được tạo ra bởi trình biên dịch PCRE từ tập luật của SNORT thành ngôn ngữ VHDL, tương tự cách hoạt động của cỗ máy PCRE dựa trên phần mềm

Bài báo [5] đưa ra tất cả các khối PCRE cơ bản phục vụ cho việc xây dựng một cấu trúc NFA phân cấp, đồng thời cũng đề nghị phương pháp hiện thực cho các khối lặp bắt buộc Trong

[13], Cheng-Hung Lin cùng nhóm nghiên cứu của mình đưa ra ý tưởng chia sẻ các prefix, infix

và suffix Các NFA có các infix và suffix chung nhiều nhất sẽ được gom lại một nhóm Tuy nhiên, giải pháp này không được ứng dụng trong các nghiên cứu sau này Năm 2007, [1] Christopher áp dụng D2FA cho tập mẫu PCRE , bằng việc áp ụng thiết kế pipline và việc nhân lên nhiều mạch logic để so trùng hệ thống của ông đạt được tốc độ lên đến 10Gbps Tuy nhiên phương pháp này chỉ áp dụng được cho một số lượng nhỏ các PCRE

Trong nước, tính tới thời điểm thực hiện đề tài, vẫn chưa có công bố khoa học chính thức của các nhóm khác về đề tài nghiên cứu này

Trang 11

1.4 Hệ thống NIDS trên chip FPGA

Hình 1.1 mô tả các thành phần chủ yếu của hệ thống NIDS trên chip FPGA Các gói tin đến

hệ thống sẽ được đưa qua một FIFO đệm, module Packet Collecter sẽ đọc nội dung của FIFO và truyền cho module Packet Decoder Packet Decoder phân tách các trường Header và Payload của gói tin gửi cho các module xử lý tương ứng Kết quả xử lý sẽ được tổng hợp lại bởi module Management

Packet Classification (Header Processing)

Packet Decoder Packet

Collector Management

Hình 1-1 Mô hình hệt hống NIDS trên phần cứng FPGA

Trong mô hình này hệ thống xử lý biểu thức chính quy thực hiện việc tìm kếm trong payload của gói tin các dấu hiệu tấn công, mã độc từ đó đưa ra cảnh báo kịp thời Hiện thực module so trùng nội dung gói tin biểu diễn bằng biểu thức chính quy tận dụng cơ chế xử lý song song của các thiết bị phần cứng là một trong những giải pháp góp phần nâng cao hiệu suất của toàn bộ hệ thống phát hiện xâm nhập mạng

Trang 12

Chương 2 TỔNG QUAN HỆ THỐNG NIDS VÀ BIỂU THỨC CHÍNH QUY

2.1 Hệ thống phát hiện xâm nhập mạng (NIDS):

2.1.1 Giới thiệu hệ thống NIDS

Hệ thống Phát hiê ̣n xâm nhâ ̣p mạng (Network Intrusion Detection System – NIDS) được triển khai rộng rãi như một giải pháp an ninh cho các hệ thống mạng trong thực tế NIDS có thể kiểm tra vào sâu bên trong gói dữ liệu để so sánh nội dung gói dữ liệu với các dấu hiệu tấn công nằm trong một cơ sở dữ liệu được chọn lọc và tập hợp sẵn Từ đó có thể báo động kịp thời cho ngươi quản trị để họ có thể thực hiện các biện pháp xử lý phù hợp NIDS có thể triển khai trên cả

hệ thống phần mềm lẫn phần cứng Hình 2.1 mô tả một ví dụ triển khai hệ thống NIDS đơn giản

Dữ liệu mạng truyền nhận với môi trường bên ngoài được sao chép và chuyển cho hệ thống NIDS xử lý

Malicios Database

Hình 2-2 Mô hình tổng quan kiến trúc SNORT

Trang 13

Hình 2.2 mô tả tổng quan kiến trúc của SNORT, theo đó SNORT sẽ bao gồm 4 phần chính:

Packet sniffer: Thực hiện nhiệm vụ bắt tất cả gói tin từ môi trường mạng để đưa vào xử

Preprocessor: Thực hiện các thao tác xử lý ban đầu như tập hợp các gói tin bị phân

mảnh, định dạng nội dung…

Detection Engine: Trực tiếp so trùng nội dung gói tin với các tập luật có sẵn để phát hiện

ra các nội dung nguy hiểm

Alert and Logging Component: Nối nội dung gói tin phù hợp với luật, tùy theo cấu

hình gói tin có thể bị log lại hoặc đưa ra các cảnh báo đến quản trị viên

Để có thể nhận biết các loại tấn công cũng như làm cơ sở để đưa ra các cảnh báo tương ứng đối với lưu lượng gói tin, SNORT đòi hỏi một cơ sở dữ liệu là các luật (rule) Các tập rule mô tả các dấu hiệu tấn công đã biết trước trong quá khứ được dùng để nhận biết các tấn công có cùng dạng tại thời điểm đang xét Các luật được phân loại thành từng file riêng biệt có tên mở rộng là

.rules và được lưu trữ trong thư mục rules của SNORT

Luật của SNORT được định nghĩa dạng text (mã ASCII) có cấu trúc rõ ràng và cú pháp đơn giản Mỗi luật là sự kết hợp của hai phần: Rule Header và Rule Content Trong khi Rule Header cung cấp thông tin liên quan thuộc trường Header của gói tin, Rule Content bao gồm một loạt các tùy chọn được viết liền nhau, cung cấp thông tin cần kiểm tra trong phần thân của gói tin Ở hình 2.3 mô tả ví dụ một luật trong tập IMAP của SNORT, luật này có nhiệm vụ phát hiện ra tất

cả các kết nối có khả năng đang tấn công vào lỗ hổng buffer overflow trên IMAP server Phần in

đậm là phần Rule Header, phần còn lại trong dấu ngoặc đơn là Rule Content

2.2 Biểu thức chính quy

2.2.1 Giới thiệu biểu thức chính quy

Biểu thức chính quy, thường được gọi thông qua từ RegEx (Regular Expression) là một cách ghi chú súc tích để diễn tả một tập các chuỗi mà không cần thiết phải liệt kê tất cả các thành phần của tập đó Biểu thức chính quy thực chất là một dạng ngôn ngữ hình thức với cú pháp được quy định cụ thể và dựa trên hai dạng ký tự: các ký tự thông thường (bảng chữ cái, chữ số, ký tự trong bảng mã ASCII,…) và các siêu ký tự (hay còn gọi là các toán tử)

alert tcp $EXTERNAL_NET any -> $HOME_NET 143(msg:"IMAP create buffer overflow

attempt"; flow:to_server,established; content:"CREATE"; isdataat:1024,relative; PCRE:"/\sCREATE\s[^\n]{1024}/smi"; metadata:service imap; reference:bugtraq,7446; classtype:misc-attack; sid:2107; rev:5;)

Hình 2-3 Một luật của SNORT

Trang 14

Biểu thức chính quy được đặc trưng bởi 3 dạng toán tử chính là : toán tự gộp, toán tử lựa chọn (|), và toán tử lượng tử (*,?,+)

 Toán tử gộp được sử dụng để kết hợp các biểu thức chính quy rời rac thành một biểu

thức chính quy mới liên tục Ví dụ: Nếu r 1 so trùng s 1 và r 2 so trùng chuỗi s 2 , thì r 1 r 2 sẽ

nghĩa qua một ví dụ sau

Một số ví dụ:

Biểu thức ab|cd so trùng chuỗi „ab‟, „cd‟

Biều thức ab* so trùng chuỗi con „a‟, „ab‟, „abb‟, „abbb‟, „abbb b‟

Biểu thức ab+ so trùng chuỗi con „ab‟, „abbb‟, „abb…bb‟ không so trùng „a‟

Biểu thức ab? chỉ so trùng „a‟ và „ab‟

Ngoài ra các biểu thức chính quy còn có thể được gom nhóm lại trong trường hợp muốn làm

tăng độ ưu tiên bằng cặp dấu đóng mở ngoặc „( )‟ Chẳng hạn x(a?|b*)y chỉ so trùng xay, xy, xby,

xbby, xbb…by

2.2.2 Biểu thức chính quy dựa trên ngôn ngữ Perl (PCRE)

PCRE (Perl Compatible Regular Expressions) là một dạng biẻu thức chính quy được viết theo cú pháp của ngôn ngữ Perl PCRE thật sự mạnh mẽ và linh hoạt hơn rất nhiều so với biểu thức chính quy truyền thống, do đó được sử dụng để biểu diễn các dạng tấn công phức tạp có tính biến đổi trong tập luật của SNORT Trong Snort, các mẫu đọc hại có thể được mô tả thông

qua từ khóa pcre như ví dụ hình 2.3

Bên cạnh những toán tử truyền thống trong biều thức chính quy, PCRE bổ sung thêm một số toán tử khác từ đó tăng tính linh hoạt trong việc định nghĩa các chuỗi ký tự Một số mở rộng của PCRE bao gồm: các toán tử neo (anchor), các cờ (flag), các lớp ký tự đặc trưng (character class), toán tử lặp ràng buộc (constraint repetition), dãy ký tự thoát (escape sequence) và toán tử tham chiếu ngược (backreference)

Chi tiết các mở rộng trong PCRE có thể tham khảo thêm phần phụ lục

2.3 Các phương pháp xử lý biểu thức chính quy

Các phương pháp để xử lý biểu thức chính quy trên phần cứng chủ yếu tập trung vào việc sử dụng mô hình máy trạng thái hữu hạn (Finite State Machine – FSM) bởi độ hiệu quả và khả năng

Trang 15

hỗ trợ những toán tử phức tạp của nó FSM là một mô hình bao gồm một số lượng hữu hạn các trạng thái, sự chuyển trạng thái giữa những chúng tương tự như một lưu đồ mô tả một hành động khi điều kiện đầu vào được thỏa Hoạt động của FSM có thể được mô tả như sau FSM xuất phát

tại một trạng thái (gọi là trạng thái bắt đầu start state), đi qua các trạng thái chuyển tiếp dựa vào

các input đầu vào trước khi kết thúc tại một trạng thái nào đó Trong FSM chỉ có một trạng thái

nào đấy được đánh dấu là kết thúc thành công của hoạt động (gọi là accept state) Nếu một FSM

biểu diễn một chuỗi, ta nói FSM chấp nhận chuỗi đó

Hình 2-4 Một máy trạng thái chấp nhận chuỗi „nice‟

FSM cung cấp hai cách tiếp cận 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, trong khi hàm có chức năng tương tự ở NFA trả về một tập các trạng thái,

và 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 được tích cực Do đó, thời gian chuyển trạng thái của DFA ít hơn so với NFA và thích hợp với các giải pháp phần mềm Việc xử lý PCRE trong Snort cũng dựa trên các giải thuật DFA Hình 2.5, 2.6 là các ví dụ cho hai mô hình máy trạng thái

Hình 2-5 DFA chấp nhận tất cả các chuỗi bit chứa ít nhất 2 bit 1

Trang 16

Hình 2-6 NFA chấp nhận các chuỗi bit kết thúc bởi 00 hay 0110

Tuy nhiên phương pháp DFA lại có khả năng gây ra bùng nổ số trạng thái khi được dung để biểu diễn các biểu thức chính quy Với một NFA n trạng thái thì DFA tương đương có thể phải cần 2^n trạng thái Điều này khiến cho việc sử dụng DFA trên cho các giải pháp phần cúng và đặc biệt là FPGA trở lên khó khăn Hơn nữa, đối với FPGA, do có khả năng sử lý song song kết hợp nhiều mạch logic, việc nhiều trạng thái đồng thời tich cực của NFA có thể dễ dàng được giải quyết Từ những nhận xét này, nhóm đi dến quyết định áp dụng mô hình NFA để giải quyết bài toán so trùng biểu thức chính quy

2.3.1 Dùng NFA để biểu diễn biểu thức chính quy

Một NFA biểu diễn một biểu thức chính quy có thể được xây dựng bằng cách sử sụng các nguyên tắc cơ bản

 Nguyên tắc thứ nhất là xem mỗi phần nhỏ của biểu thức chính quy, bản thân là một biểu thức chính quy Do đó, ta áp dụng các nguyên tắc khác để tạo nên một biểu thức lớn hơn Một NFA đơn giản nhất là NFA chấp nhận một ký tự đơn Các NFA lớn hơn sẽ chứa đựng ít nhất một hay nhiều NFA nguyên tử này Hình 2.7 mô tả NFA nguyên tử với một trạng thái bắt đầu và một trạng thái kết thúc

Hình 2-7 NFA chấp nhận một ký tự đơn

 Nguyên tắc thứ hai: để kết nối hai biểu thức chính quy ta sử dụng luật trong hình bên dưới Trong đó, mỗi hình chữ nhật nét đứt biểu diễn một NFA biểu diễn một biểu thức chính quy con

Hình 2-8 Kết nối hai biểu thức chính quy con

Trang 17

 Nguyên tắc thứ ba: biểu diễn toán tử | để luân phiên hai biểu thức chính quy theo hình 2.9

Hình 2-9 Luật luân phiên hai biểu thức chính quy

 Nguyên tắc thứ tư: các toán tử lượng tử của biểu thức chính quy (*,?,+) được biểu diễn lần lượt theo các hình bên dưới dựa theo chức năng của toán tử

Hình 2-10 NFA biểu diễn * chấp nhận một chuỗi bất kỳ gồm cả chuỗi rỗng

Hình 2-11 NFA biểu diễn ? chấp nhận không hay chỉ một chuỗi đầu vào

Hình 2-12 NFA biểu diễn + chấp nhận một số dương chuỗi đầu vào

Bằng cách kết hợp các quy tắc đi từ cơ bản được trình bày trong phần này, hoàn toàn có thể xây dựng một NFA biểu diễn một biều thức chính quy phức tạp hơn Ta xét một ví dụ xây

dựng NFA từ biểu thức chính quy sau ((a*b)(c|d)).Trước tiên, ta xây dựng NFA chấp ký tự a

Sau đó áp dụng quy tắc thứ tư cho toán tử * ta xây dựng NFA cho a* và NFA này được kết nối với NFA chấp nhận b Song song với thao tác trên, ta xây dựng NFA chấp nhận c và d rùi luân

Trang 18

phiên chúng bằng quy tắc thứ ba tạo thành NFA cho (c|d) Cuối cùng kết nối NFA (a*b) và NFA (c|d) ta được NFA kết quả mô tả ở hình 2.13

Hình 2-13 NFA biểu diễn ((a*b)(c|d)) được xây dựng theo các quy tắc cơ bản

Trang 19

Chương 3 THIẾT KẾ PHẦN CỨNG

3.1 Kiến trúc tổng thể hệ thống

PreInterface buffer

Hình 3-1 Kiến trúc tổng quan máy so trùng biểu thức chính quy

Hình 3.1 trên mô tả tổng quan kiến trúc hệ thống so trùng biểu thức chính quy hiện thực trên chip FPGA Hệ thống bao gồm ba module chính: hai module giao tiếp đầu (PreInterface) và giao tiếp cuối (PosInterface) có chức năng chính là đảm bảo việc bắt tay và đồng bộ dữ liệu với các Module khác trong cùng hệ thống phát hiện xâm nhập mạng xâm nhập mạng Module máy so trùng (DetectEngine) là module trung tâm thực hiện việc tìm kiếm mẫu xâm nhập mạng trong nội dung payload của gói tin

REME n REME 2

r e g i s t e r s

1

BB

REME 1

101101 100001 110011

a b c

Hình 3-2 Cấu trúc nhóm so trung biểu thức chính quy (REMG)

Module Detect Engine được phân ra thành các nhóm so trùng biểu thức chính quy (Regular Expression Matching Group – REMG), mỗi nhóm bao gồm một tập các biểu thức chính quy được phân hoạch và chia sẻ chung một tập ký tự chuyển trạng thái Cấu trúc của một REMG được mô tả như trong hình 3.2 bao gồm một khối so trùng kí tự tập trụng dựa trên BlockRam (BlockRam Centralized Character Matching Module – BCCM) và các máy so trùng biểu thức

Trang 20

chính quy (Regular Expression Matching Engine – REME) Ở đây mỗi REME tương ứng với một biểu thức chính quy cụ thể và được xây dựng dựa trên mô hình máy trạng thái không đơn định Khi có byte ký tự mới đi vào hệ thống, module BCCM sẽ thực hiện giải mã ký tự này thành các tín hiệu điều khiển và chuyển đến các REME tương ứng Mỗi REME sẽ dựa trên trạng thái hiện tại và tín hiệu chuyển trạng thái từ BCCM để chuyển đến trạng thái so trùng phù hợp

3.2 Giới thiệu các module chính của hệ thống

3.2.1 Module giao tiếp đầu

Module này nhận nhiệm vụ giao tiếp với các module khác của hệ thống chống xâm nhập mạng mà cụ thể module phân tách payload và header của gói tin đến Mỗi khi nhận một gói tin

từ đường mạng, module phân tách sẽ tách header ra khỏi gói tin và chỉ gửi payload cho hệ thống

so trùng biểu thức chính quy Module PreInterface bao gồm 2 phần chính: máy trạng thái và một FIFO giao tiếp được minh họa qua hình 3.3

Hình 3-3 Cấu trúc của Module giao tiếp đầu

Hình 3-4 Định dạng một entry trong FIFO

Cứ mỗi cạnh lên của xung clock, mỗi byte thô từ phần payload sẽ được nối thêm 3 bit điều khiển để tạo thành dữ liệu 11 bit và sau đó được module phân tách chuyển vào FIFO giao tiếp

bên trong PreInterface Như đã mô tả trong hình 3.4 có 3 tín hiệu điều khiển: Sod, En, Eod được nối sau 7 bit dữ liệu thực của gói tin Trong khi, Sod biểu diễn tín hiệu bắt đầu gói tin (start of

data) được tích cực ngay thời điểm gói tin mới vào hệ thống, Eod mô tả tín hiệu kết thúc gói tin (end of data) báo hiệu đây là byte cuối cùng của gói tin cũ Cuối cùng, tín hiệu En (enable) cho

phép đưa hệ thống vào trạng thái chờ

Nếu FIFO không rỗng, dữ liệu sẽ được đọc từ FIFO và các tín hiệu điều khiển sẽ được rút trích và truyền đi độc lập với dữ liệu thực của payload gói tin đến module so trùng biểu thức

Trang 21

chính quy Hình 3.5 mô tả dạng sóng đầu ra của module giao tiếp đầu Sóng này sẽ được truyền

đến mạch so trùng biểu thức chính quy để xử lý Qua dạng sóng ta thấy tín hiệu Sod được tích

cực trong 2 chu kỳ clock, chu kỳ sau gối đầu lên byte dữ liệu hợp lệ đầu tiên Tín hiệu tích cực ở chu kỳ đầu dùng để reset ngõ ra của toàn bộ các máy so trùng một luật đơn trong hệ thống

Trong khi đó, chu kỳ sau đảm bảo cho việc so trùng các biểu thức chính quy có toán tử „^‟ hoạt động đúng chức năng Tín hiệu En tích cực trong suốt những byte hợp lệ của dữ liệu Khi byte

dữ liệu hợp lệ cuối cùng được truyền đi, Eod sẽ được tích cực trong khoảng 1 xung clock sau 2

chu kỳ tiếp theo

Hình 3-5 Dạng sóng đầu ra của module giao tiếp đầu

BCCM [] Character Class

[^] Neg-Character Class r{n,m} Constraint Repetition CRB

Bảng 3.1 Các toán tử và các khối logic hiện thực tương ứng

3.2.2 Module Detect Engine

Kiến trúc của module Detect Engine dựa trên sự kết hợp của năm khối logic cơ bản Bảng 3.1 mô tả các toán tử và các khối logic tương ứng để hiện thực các toán tử đó

Trang 22

3.2.2.1 State Block – Start Block – End Block

Khối State Block có thể xem như tương đương một trạng thái NFA cơ bản Khi này kí tự

chuyển trạng thái được xác định qua tín hiệu char, các trạng thái liền trước được sẽ kết nối thông qua các tín hiệu in như hình 3.6.a Khi một trạng thái được active, tương đương với giá trị Q của

Flipflop bên trong State block tích cực mức cao, điều này chỉ xảy ra khi một trong các trạng thái liền trước nó đang được tích cực và kí tự đến hệ thống phù hợp với kí tự chuyển trạng thái của

nó Cấu trúc của State Block bao gồm một cổng OR n ngõ nhập theo sau bởi một cổng AND hai ngõ nhập và một flipflop để chốt giá trị rất hiệu quả để hiện thực lên trên các thiết bị FPGA Với kiến trúc FPGA thông thường gồm 4 bit LUTs, một FlipFlop cho mỗi logic cell và 2 logic cells cho mỗi slice thì có thể dễ dàng map State Block lên trên một logic cell với n ≤ 3 hoặc 1 slice với

4 ≤ n ≤ 7

a

out Start Block

rst SoD

FF

FF State Block

c b

1

Hình 3-6 Mô hình các khối logic cơ bản: a State Block; b Start Block; c End Block

Khác với State Block, Start Block và End block được xây dựng với mục đích có thể xử lý được các toán tử neo (“^”, “$”) Các toán tử này đòi hỏi chuỗi cần tìm kiếm phải nằm tại vị trí bắt đầu hoặc kết thúc của gói tin Do đó, hai khối này cần thêm các tín hiệu điều khiển SoD (Start of Data), EoD (End of Data) để thông báo vị thời điểm bắt đầu và kết thúc của payload

Từ 3 khối logic cơ bản này có thể xây dựng được máy so trùng biểu thức chính quy cho hầu hết các PCRE đơn giản không chứa toán tử lặp bắt buộc Hình 3.7 mô tả cấu trúc của REME cho

biểu thức chính quy “^(a|b)c*$”

Trang 23

Hình 3-7 Mô hình tổng quát khối “^(a|b)c*$”

3.2.2.2 Kiến trúc khối so trùng toán tử lặp ràng buộc

Ý tưởng chính của việc hiện thực khối so trùng toán tử lặp ràng buộc (Contraint Repetition Block – CRB) dựa trên cách tiếp cận của M Faezipour và M Nourani [14] là sử dụng một bộ đếm đồng bộ để kiểm soát số lần lặp lại của một mẫu cụ thể Cấu trúc của CRB bao gồm 3 bộ phận chính: bộ phận so trùng biểu thức chính quy con (SubRegex), bộ phận Reset, bộ phận đếm

và so sánh (CouCom) Trong đó SubRegEx có nhiệm vụ kiểm tra sự xuất hiện của mẫu trong dữ liệu đi vào hệ thống, Reset sẽ khởi tạo lại giá trị của bộ đếm, khi so trùng thất bại, còn CouCom

có nhiệm vụ đếm và so sánh số lần lặp lại của mẫu với giá trị được quy định trước

match

input

Hình 3-8 Kiến trúc khối CRB cho thức chính quy “(ab+c){2,10}”

Về cơ bản CRB có vai trò tương đương với một khối State Block bình thường CRB nhận vào tín hiệu tích cực từ các khối StateBlock hay CRB phía trước, thực hiện các bước chuyển trạng thái và so trùng sau đó lại gửi tín hiệu tích cực đến các khối StateBlock hoặc CRB tiếp theo SubRegex có cấu trúc tương tự như một máy so trùng biểu thức chính quy hoàn chỉnh, bao gồm nhiều trạng thái biểu diễn bằng các Block State được kết nối trực tiếp với nhau, và các kí tự chuyển trạng thái được lấy từ khối BCCM chung Cứ mỗi chu kỳ xung clock, Sub-Regex sẽ dựa vào các tín hiệu so trùng kí tự từ Bram Block mà thực hiện các bước chuyển trạng thái Mỗi khi SubRegex so trùng thành công, nó sẽ tích cực tín hiệu ngõ ra cho phép CouCom tăng biến đếm

Trang 24

lên một đơn vị Ngược lại nếu việc so trùng thất bại bộ phận reset sẽ tích cực tín hiệu ngõ ra khởi tạo lại giá trị của biến đếm trong CouCom

Trong cú pháp của PCRE định nghĩa 4 loại toán tử lặp ràng buộc khác nhau và ứng với mỗi toán tử sẽ có một bộ CouCom tương ứng Các bộ CouCom này chia sẻ chung một mô hình kiến trúc như 3.9.a Trong mô hình này, các giá trị M,N,G có thể thay đổi trong lúc thiết kế để thu được cấu hình tương ứng Bảng 3.2 liệt kê các loại toán tử và các cấu hình Cấu trúc cụ thể của các bộ CouCom được mô tả trong hình 3.9.b,c,d

en

rst

lRst gRst

Trong mô hình State Block cơ bản mô tả bên trên, giá trị ngõ ra được quyết định bởi tín hiệu

chuyển trạng thái char từ mộ bộ so trùng ký tự tập trung Ở đây State Block không cần quan tâm

Trang 25

kí tự chuyển trạng thái là một ký tự đơn, một lớp ký tự hay các biểu tượng đặc trưng, toàn bộ việc so trùng kí tự đầu vào được thực hiện bởi bộ BCCM

Module BCCM được hiện thực trên bộ nhớ onchip của FPGA (BlockMemory) có kiến trúc tổng quát được diễn tả qua hình 3.10 Việc so trùng ký tự đầu vào dựa vào việc truy xuất nội dung của BlockMemory BlockMemory được sử dụng là một khối nhớ bao gồm 256 entry với độ rộng mỗi entry phụ thuộc vào số ký tự khác nhau trong một tập PCRE cho trước Cứ mỗi chu kỳ xung clock, một ký tự trong nội dung của gói tin được đưa vào hệ thống Giá trị byte của ký tự được sử dụng như địa chỉ (index) để truy xuất nội dung của một entry trong BlockMemory Giá trị đọc ra từ BlockMemory là một bit vector ứng với giá trị so trùng của từng trạng thái trong mạch Các bit trong vector này sẽ được kết nối đến các trạng thái tương ứng Theo như mô tả, một máy n trạng thái so trùng một PCRE, ta chỉ cần sử dụng một khối nhớ không quá 256 x n bit Hơn thế, nếu hai trạng thái sử dụng cùng một tín hiệu đầu vào của kết quả so trùng một ký tự thì chúng sẽ chia sẻ một bit output của khối nhớ trên Tương tự, để tiết kiệm diện tích và tài nguyên phần cứng, khối nhớ sẽ được chia sẻ bởi nhiều PCRE có các trạng thái nhận ký tự so trùng như nhau

Để làm giảm fan-out cho ngõ ra của BlockMemory, cũng như không ảnh hưởng đến tần số clock và throughput của hệ thống, ở đây nhóm quyết định sử dụng nhiều BlockMemory Mỗi BlockMemory sẽ phục vụ một số lượng PCRE tối đa nhất định phụ thuộc vào chính sách gom nhóm các PCRE Nội dung của BlockMemory không bị thay đổi trong suốt quá trình hoạt động của hệ thống

Hình 3-10 BlockMemory chia sẻ giữa PCRE #1: “/ab /” và PCRE #2: “/a[^ab]/”

Ngày đăng: 28/01/2021, 22:42

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1]. Christopher L. Hayes and Yan Luo, ”DPICO: A High Speed Deep Packet Inspection Engine Using Compact Finite Automata,” in Proceeding of the 3rd ACM/IEEE Symposium on Architecture for networking and communications systems (ANCS07), pp. 195-203, 2007 Sách, tạp chí
Tiêu đề: DPICO: A High Speed Deep Packet Inspection Engine Using Compact Finite Automata
[2]. R.W. Floyd and J. D. Ullman, ”The Compilation of Regular Expressions into Integrated Circuits,” Journal of the ACM (JACM), vol. 29, no. 3, July 1982, pp. 603-622 Sách, tạp chí
Tiêu đề: The Compilation of Regular Expressions into Integrated Circuits
[3]. R. Sidhu, and V. K. Prasanna, ”Fast Regular Expression Matching Using FPGAs,” in Proceedings of the 9th Annual IEEE Symposium on Field-Programmable Custom Computing Machines (FCCM‟01), pp. 277-238, 2001 Sách, tạp chí
Tiêu đề: Fast Regular Expression Matching Using FPGAs
[4] C.R. Clark and D.E. Schimmel, "Scalable pattern matching for high speed networks", FCCM '04: Proceedings of the 12th Annual IEEE Symposium on Field-Programmable Custom Computing Machines, 2004., April 2004, pp. 249-257 Sách, tạp chí
Tiêu đề: Scalable pattern matching for high speed networks
[5] I. Sourdis, J. Bispo, J. M. P. Cardoso, and S. Vassiliadis, ”Regular expression matching for reconfigurable packet inspection,” in Proceedings of the IEEE nternational Conference on Field Programmable Technology (FPT‟06), 2006, pp. 119-126 Sách, tạp chí
Tiêu đề: Regular expression matching for reconfigurable packet inspection
[6] C. R. Clark, and D. E. Schimmel, ”Scalable Parallel Pattern-Matching on High-Speed Networks,” in Proceedings of 12th IEEE Symposium on Field-Programmable CustomComputing Machines (FCCM‟04), IEEE Computer Society Press, pp. 249257, 2004 Sách, tạp chí
Tiêu đề: Scalable Parallel Pattern-Matching on High-Speed Networks
[7] B. L. Hutchings, R. Franklin, and D. Carver, ”Assisting Network Intrusion Detection with Reconfigurable Hardware,” in Proceeding of the 10th Annual IEEE Symposium on Field-Programmable Custom Computing Machines (FCCM02), IEEE Computer Society, p.111, 2002 Sách, tạp chí
Tiêu đề: Assisting Network Intrusion Detection with Reconfigurable Hardware
[8] Yi-Hua E. Yang, W. Jiang, and V. K. Prasanna,”Compact architecture for high- throughput regular expression matching on FPGA,” in Proceedings of the 4th ACM/IEEE Symposium on Architectures for Networking and Communications Systems, pp. 227-238, 2008 Sách, tạp chí
Tiêu đề: Compact architecture for high-throughput regular expression matching on FPGA
[9] J.Moscolar J. Lockwood, R.P. Loui, and M. Pachos, ”Implementation of a content- scanning module for an internet firewall,” in Filed-Programmable Custom Computing Machines (FCCM03). 11th Annual IEEE Symposium on, pp. 31-38, 2003 Sách, tạp chí
Tiêu đề: Implementation of a content-scanning module for an internet firewall
[10] S. Kumar, S. Dharmapurikar, F. Yu, P. Crowley, and J. Turner, ”Algorithms to accelerate multiple regular expressions matching for deep packet inspection,” In Proceedings Sách, tạp chí
Tiêu đề: Algorithms to accelerate multiple regular expressions matching for deep packet inspection
[13] C.-H. Lin, C.-T. Huang, C.-P. Jiang and S.-C. Chang, “Optimization of Pattern Matching Circuits for Regular Expression on FPGA,” in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, vol. 15, no. 12, pp. 1303-1310, Dec. 2007 Sách, tạp chí
Tiêu đề: “Optimization of Pattern Matching Circuits for Regular Expression on FPGA,”
[14] M. Faezipour, and M. Nourani, “Constraint Repetition Inspection for Regular Expression on FPGA,” 16th IEEE Symposium on High Performance Interconnects, pp. 111- 118, 2008 Sách, tạp chí
Tiêu đề: “Constraint Repetition Inspection for Regular "Expression on FPGA,”

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w