Qua quá trình nghiên cứu phát hiện xâm nhập mạng bằng phần cứng và phần mềm, đề tài đề nghị một sự kết hợp của hai giải pháp trên nhằm đảm bảo các gói tin có thể xử lí ở tốc độ cao cũng
GIỚI THIỆU ĐỀ TÀI
Tổng quan
Trong những năm gần đây, vấn đề an toàn trong hệ thống mạng (network security) ngày càng được quan tâm và phát triển Bức tường lửa (firewall) đã không còn hiệu quả trước những đợt tấn công tinh vi và phức tạp, do đó cần nhiều phương pháp khác để bảo vệ hệ thống mạng Hệ thống phát hiện xâm nhập (Intrusion Detection System – IDS) là những công cụ để theo dõi những sự kiện xảy ra trên hệ thống máy tính và hệ thống mạng, bên cạnh đó phát hiện những dấu hiệu bất thường có thể gây nguy hiểm cho hệ thống Hệ thống chống xâm nhập (Intrusion Prevention System – IPS) ngoài việc phát hiện bất thường còn có thể chủ động ngăn chặn những nguy hiểm mà hệ thống phát hiện được
Hệ thống phát hiện xâm nhập trên mạng (Network Intrusion Detection System – NIDS) thông qua việc theo dõi mạng nhận biết những cuộc tấn công từ chối dịch vụ (DoS), quét cổng (port scan),… qua đó phát hiện được những sự nguy hiểm tấn công nguy hiểm vào hệ thống máy tính Hệ thống NIDS đọc tất cả những gói tin đầu vào, tìm kiếm những mẫu đáng ngờ đã được định nghĩa theo những luật (rule) trước đó SNORT được biết đến như là một trong những phần mềm mã nguồn mở nổi tiếng được sử dụng rộng rãi trong hệ thống NIDS
Cùng với sự phát triển và mở rộng hệ thống mạng, những yêu cầu được đặt ra cho NIDS ngày càng tăng Đã có nhiều kiến trúc và giải thuật được đề nghị nhằm tăng hiệu quả cho hệ thống Tuy nhiên tốc độ đường truyền mạng tăng một cách đáng kể từ OC-48(2.4Gbs) lên đến OC-192(10Gbs) và dự kiến có thể đạt đến tốc độ OC-763(40Gbs) Giải pháp phần mềm không thể xử lí hiệu quả khi chạy với tốc độ cao và kết quả là hệ thống sẽ không thể kiểm tra tất cả đường truyền trên mạng cũng như phát hiện ra những mối nguy hại cho hệ thống
Giải pháp phần cứng cũng được đưa ra và đạt được hiệu quả cao so với phần mềm Tuy nhiên giá thành trở nên rất cao khi hệ thống thiết kế một tập luật lớn (khoảng 100.000 luật) Ngoài ra khả năng mềm dẻo, linh hoạt của hệ thống trở nên thấp mỗi khi cần cập nhật những luật mới cần thiết cho hệ thống Đề tài được xây dựng nhằm giải quyết những hạn chế nêu trên của hệ thống NIDS, đưa ra giải pháp xây dựng một hệ thống NIDS phù hợp với đường truyền mạng tốc độ cao, đồng thời đạt được các yêu cầu về hiệu quả và linh hoạt.
Mục tiêu của đề tài
Mục tiêu của đề tài là xây dựng mô hình cho hệ thống NIDS bằng cách đề nghị một kiến trúc kết hợp giải pháp giữa phần cứng và phần mềm Hệ thống chạy trên NetFPGA board bao gồm các module được thiết kế bằng phần cứng trong việc so trùng chuỗi và phần mềm Snort chạy trên Multithread Soft-processor NetThread (đã được tích hợp trên NetFPGA) Việc hiện thực phần cứng và phần mềm trên cùng một board sẽ góp phần tăng tốc cũng như sự ổn định của hệ thống NIDS Bên cạnh đó, Soft-processor NetThread sẽ được phát huy được tính linh động, mềm dẻo của hệ thống trong việc thay đổi chương trình
Khả năng của hệ thống:
- Theo dõi hoạt động của đường truyền: đọc gói tin trên mạng, sau đó hiển thị lên màn hình hoặc lưu trữ vào log file Hệ thống có chức năng lọc gói tin theo protocol tuỳ thuộc vào yêu cầu của người dùng
- Phát hiện những xâm nhập vào hệ thống: các truy cập trái phép; phát hiện các loại virus, worm Những xâm nhập trái phép này sẽ được lưu trữ cũng như gởi cảnh báo đến nhà quản trị.
Giới hạn của đề tài
Trong quá trình phát triển hệ thống, đề tài tập trung vào việc xây dựng kết nối giữa phần cứng và phần mềm, hiện thực phần mềm Snort chạy bằng NetThread trên NetFPGA board Hiện thực phần cứng trong việc so trùng chuỗi được nghiên cứu bởi những nhóm khác và không nằm trong phạm vi của đề tài này.
Cấu trúc luận văn
Luận văn được tổ chức theo cấu trúc như sau:
Phần 2 mô tả những nghiên cứu phát hiện xâm nhập mạng bằng phần cứng và phần mềm Bên cạnh đó, một số mô hình kết hợp giữa phần cứng và phần mềm cũng được đưa ra thảo luận và phân tích Ở phần 3, luận văn xây dựng mô hình cho hệ thống, đồng thời giải thích chức năng cơ bản của các thành phần chính Phần 4 mô tả chức năng và hiện thực của hệ thống
Cuối cùng, phần 5 mô tả các tiêu chí đánh giá của hệ thống và phần 6 nêu lên một số kết luận khi thực hiện đề tài.
Giải pháp cho hệ thống IDS và các nghiên cứu liên quan
Giải pháp phần mềm
Trong hệ thống IDS có hai phần mềm nổi tiếng là OSSEC và SNORT
OSSEC là phần mềm mã nguồn mở dùng cho hệ thống phát hiện xâm nhập cho máy tính (Host-based Intrusion Detection System – HIDS) [5]
OSSEC khởi đầu được thiết kế cho hệ thống Linux, hiện nay đã hỗ trợ hầu hết các hệ điều hành, bao gồm Linux, OpenBSD, FreeBSD, MAC OS X, Solaris và Window OSSEC – HIDS có thể được cài đặt trên một hoặc nhiều máy để theo dõi hệ thống mạng
OSSEC hỗ trợ công cụ phân tích mạnh, có thể phân tích log file từ nhiều thiết bị với nhiều định dạng khác nhau: FTP server, mail server, database… Ở hình 2.1: Trong hệ thống HIDS, việc phát hiện sự xâm nhập được cài đặt trên các máy, các máy sẽ được bảo vệ kĩ hơn cho dù có kết nối với hệ thống mạng hay không
- File integrity checking: Mục tiêu của các tấn công phổ biến vào máy tính là thay đổi hệ thống bằng một cách nào đó File intergrity checking (hoặc FIM – file integrity monitoring) phát hiện những sự thay đổi này và cảnh báo khi chúng xảy ra Những thay đổi có thể là một cuộc tấn công, sự sai sót của người dùng, thậm chí là sự điều khiển hệ thống của admin: mỗi một file, thư mục hay registry thay đổi đều có sự cảnh báo để bảo đảm an toàn cho hệ thống
- Log monitoring: Hệ điều hành, chương trình ứng dụng, các thiết bị trong hệ thống mạng thông báo trạng thái của hệ thống chủ yếu dựa vào log file OSSEC làm nhiệm vụ tổng hợp và phân tích log file và sẽ cảnh báo người dùng khi có cuộc tấn công hoặc lỗi của hệ thống
Hình 1 OSSEC – Host-based Instrusion Detection System (HIDS)
Snort là một hệ thống phát hiện và ngăn chặn xâm nhậm mạng (IDS/IPS) được phát triển bởi sourcefire – một tổ chức phát triển bảo mật cả phần cứng lẫn phần mềm
Snort được đánh giá là một trong những hệ thống tốt nhất hiện nay với hàng triệu lượt download và gần 400,000 thành viên đăng kí sử dụng Bằng sự kết hợp phát hiện xâm nhập dựa trên các tín hiệu xâm nhập mạng cũng như các phát hiện bất thường trong hệ thống, Snort thực sự đã trở thành một chuẩn thực tế cho IDS/IPS ([5],[7])
Hình 2 SNORT – Network Instrusion Detection System (NIDS)
- Snort sử dụng các luật được lưu trữ ở dạng file text, có thể được chỉnh sửa bởi nhà quản trị File cấu hình chính của Snort là snort.conf: Snort đọc những luật này lúc khởi tạo và xây dựng cấu trúc dữ liệu để bắt dữ liệu trên đường truyền
- Snort chủ yếu là một IDS dựa trên luật, tuy nhiên Snort vẫn hỗ trợ các plug- in để phát hiện sự bất thường trong các header của giao thức
- Snort xây dựng tập hợp các luật được định nghĩa trước để phát hiện các hành động xâm nhập Các luật được nhóm thành các kiểu, các luật thuộc về mỗi loại được lưu trong những file khác nhau Nhận ra các dấu hiệu và xây dựng các luật đòi hỏi sự tinh tế, nỗ lực trong việc thu thập dữ liệu trong thực tế Nhà quản trị có thể thêm một số luật dựa vào yêu cầu của hệ thống, cũng có thể xoá một vài luật đã tạo trước đó để tránh việc báo động sai
1.2.3 Phân loại a Phân loại theo cách sử dụng
- Inline: khi ở chế độ Inline mode, Snort hoạt động như IPS (Intrusion Prevention System): cho phép các luật có thể loại bỏ gói tin
- Passive: khi ở chế độ Passive mode, Snort hoạt động như IDS (Intrusion Detection System): không thực hiện các luật loại bỏ gói tin
- Inline-test: Inline-test mode mô phỏng hoạt động Inline của Snort, cho phép đánh giá hoạt động của inline nhưng không ảnh hưởng đến đường truyền Các luật loại bỏ gói tin chỉ được sử dụng dưới dạng cảnh báo b Phân loại theo chế độ hoạt động
- Sniffer: được dùng để xem lưu lượng mạng bằng cách đọc các gói tin trên đường truyền và hiển thị chúng lên màn hình Một trong những đặc tính hay của chế độ Sniffer là khả năng tóm tắt lưu lượng mạng khi bắt giữ các gói tin hay việc lưu trữ kết quả vào log file Thỉnh thoảng Snort sniffer là công cụ gỡ rối hữu dụng cho nhà quản trị
- NIDS: Snort là một công cụ chống xâm nhập tuyệt vời Ở chế độ NIDS, Snort phân tích đường truyền dựa trên tập luật được định nghĩa bởi người dùng, sau đó thực hiện một số tác động dựa vào kết quả phân tích Chúng ta sẽ tìm hiểu kĩ hơn về chế độ NIDS thông qua các thành phần chính của Snort.
Giải pháp phần cứng
Trong hệ thống mạng viễn thông, giải pháp phần cứng sử dụng Integrated circuit (IC) được chuẩn hoá để xử lí gói thông tin trên đường truyền mạng ([8]) Trong quá trình phát triển của hệ thống, nhu cầu về độc phức tạp cũng như sự uyển chuyển của các IC ngày càng cao Network processor ra đời cung cấp khả năng lập trình được (như general purpose processor), góp phần cải thiện việc xử lí các gói thông tin một cách uyển chuyển và hiệu quả
Network processor được sử dụng rất nhiều trong sản xuất các thiết bị trong hệ thống mạng:
Một số chức năng chủ yếu của Network processor:
• Pattern matching: tìm kiếm mẫu bit hoặc byte cho trước trong packet stream
• Key lookup (address lookup): truy tìm thông tin trong cơ sở dữ liệu Từ địa chỉ có được trên gói dữ liệu, network processor phải tìm kiếm thông tin về đường đi của gói dữ liệu trên một cách nhanh chóng
• Computation: thao tác trên dữ liệu ở dạng bit
• Control processing: liên lạc và quản lí giữa nhiều node khác nhau trong hệ thống
Các nghiên cứu về sự kết hợp giữa phần mềm và phần cứng
Có hai dạng kết hợp giữa phần cứng và phần mềm trong hệ thống NIDS:
Hardware/Software cooperation và Hardware header
Hệ thống NIDS được chia làm 2 thành phần chính ([1],[2]):
• packet classification: phân tích các gói dữ liệu đầu vào
• payload matching: so trùng gói dữ liệu với tập luật được định nghĩa bởi user để đưa ra hành động thích hợp cho hệ thống Đã có nhiều nghiên cứu về packet classification và đạt được thành công nhất định Tuy nhiên, yêu cầu đặt ra payload matching ngày một tăng và trở thành vấn đề quan trọng trong việc ngăn chặn những cuộc tấn công do virus cũng như hacker
Hệ thống là sự tương tác giữa software và hardware: trong quá trình xử lí gói dữ liệu, phần mềm (Snort) sẽ nhận và phân chia các gói dữ liệu trước Những công việc tốn thời gian CPU như so trùng chuỗi sẽ được chuyển xuống phần cứng nhằm tăng hiệu quả của hệ thống Một số giải thuật được sử dụng trong việc so trùng (Signature based)
Hình 3 Mô hình Hardware/Software cooperation
Hệ thống bao gồm 2 phần: thành phần driver cho thiết bị phần cứng FPGA và thành phần phần mềm cho người sử dụng (user software) quản lí tập luật mới Driver sử dụng hệ thống giao tiếp mạng chuẩn (standard network interface) nhằm đảm bảo tính trong suốt giữa phần mềm Snort và hệ thống mạng.([3],[4])
Driver là một thiết bị phần cứng kiểm tra những gói dữ liệu từ đầu vào của mạng truyền thông Driver sẽ loại bỏ những gói dữ liệu thông thường và chỉ gởi cho hệ thống phần mềm những gói tin nghi ngờ nguy hiểm đến hệ thống Để hiện thực phần cứng đơn giản, driver sẽ chấp nhận tính chất ‘False positive’ ‘False positive’ là tính chất driver ngoài lọc được những gói dữ liệu nguy hiểm cho hệ thống, driver còn có thể chuyển cho hệ thống phần mềm những gói dữ liệu thông thường (với một xác suất nhỏ) Hệ thống phần mềm sẽ kiểm tra lại những gói dữ liệu ‘false possitive’ và loại bỏ những gói dữ liệu thông thường này
Sau khi driver đã làm nhiệm vụ tiền xử lí, các gói dữ liệu được cho là nguy hiểm sẽ được kiểm tra bởi Snort Các gói dữ liệu sẽ được đưa vào phần giải mã (decoder) Tại đây các thông tin ở mức liên kết được loại bỏ Tiếp theo Snort sẽ tiếp tục kiểm tra các gói dữ liệu dựa trên các tập luật (rules) và mẫu chữ kí (pattern or signature) của Snort
Khi phát hiện dữ liệu nghi ngờ, Snort sinh ra các cảnh báo như là “drop this packet” hay “log this packet”
Hình 4 Mô hình Hardware header
Mô hình đề nghị và các thành phần chính của hệ thống
Mô hình đề nghị
Hình 5 Mô hình điều khiển hệ thống NIDS
Mô hình hệ thống NIDS dựa trên sự kết hợp giữa phần cứng và phần mềm Các module phần cứng hiện thực việc so trùng chuỗi nhằm đáp ứng đường truyền mạng với tốc độ cao Về mặt phần mềm, hệ thống sử dụng soft-processor NetThread thực thi chương trình Snort Hệ thống sẽ nhận các gói tin từ đường truyền mạng, thông qua quá trình tiền xử lí, so trùng chuỗi, sau đó sẽ phát hiện những gói tin xâm nhập mạng và gởi cảnh báo đến nhà quản trị Ưu điểm của hệ thống:
• Do chương trình Snort không cài đặt trên máy tính như các mô hình trước đây mà được thực thi trên NetFPGA thông qua soft-processor NetThread
Từ đó hệ thống NIDS xây dựng sẽ trở nên nhỏ gọn, di chuyển dễ dàng và có thể thương mại hóa
• Hệ thống kết hợp được khả năng tính toán của phần cứng cũng như sự linh động, uyển chuyển của phần mềm trên cùng một FPGA board: chức năng tổng quát sẽ hiện thực bằng phần mềm trong khi chức năng cần hiệu quả cao sẽ được hiện thực bằng phần cứng
• Để kiểm tra lợi ích của một tính năng mới trong hệ thống, chúng ta có thể hiện thực chức năng bằng phần mềm trước do quá trình phát triển nhanh Sau đó, thông qua quá trình đánh giá sự hiệu quả, tốc độ đáp ứng chúng ta sẽ quyết định việc hiện phần cứng hoặc phần mềm cho tính năng này
Những khó khăn trong quá trình hiện thực hệ thống:
• Trong quá trình hiện thực, việc chọn lựa soft-processor được cần được cân nhắc kĩ lưỡng dựa trên những tính năng cũng như sự hỗ trợ trên
FPGA board NetThread được đánh giá cao do sử dụng kiến trúc MIPS, hiện thực đánh giá hiệu suất của pipeline stage trong quá trình phát triển processor Ngoài ra, NetThread còn có sự hỗ trợ tốt về tool trong việc biên dịch từ ngôn ngữ cấp cao (ngôn ngữ C) sang file thực thi, từ đó nhiều chương trình xử lí gói tin đã được phát triển trên NetThread
• Bên cạnh đó, Snort là một hệ thống lớn (gần 100.000 code line với nhiều option tùy chọn), dẫn đến khó khăn trong quá trình lựa chọn những tính năng của Snort cài đặt trên NetThread Việc chọn lựa phải được dựa trên chức năng cần thiết cho hệ thống cùng với việc xem xét tài nguyên trên NetFPGA board
• Cuối cùng, do chạy hoàn toàn trên nền FPGA, quá trình debug hệ thống trong giai đoạn đầu phát triển gặp phải một số trở ngại nhất định cho đến khi hệ thống dần đi vào sự ổn định.
SNORT
Snort trong hệ thống được chia thành nhiều phần Những thành phần này phối hợp với nhau để phát hiện các cách tấn công cụ thể và tạo ra output theo một định dạng được đòi hỏi Một NIDS dựa trên Snort bao gồm các thành phần chính sau đây:
Nhiệm vụ của Packet Decoder là phân tích gói dữ liệu thô trên mạng và phục hồi thành gói dữ liệu hoàn chỉnh Đây là bước chuẩn bị cho các gói tin sẽ được xử lí ở Preprocessor hay Detection Engine Cụ thể, quá trình giải mã sẽ từ tầng datalink, network, transport
Quá trình Tiền xử lí nhằm mục đích “chuẩn hoá” đường truyền, đảm bảo các packet Snort đang theo dõi sẽ có cơ hội tốt nhất để so sánh với các tín hiệu nhận dạng (singnatures) mà Snort được trang bị Một chức năng khác trong quá trình tiền xử lí là tự phòng thủ Trong các cuộc tấn công, attacker có thể chia nhỏ gói tin tấn công hoặc dùng phương pháp tấn công ARP (Address Resolution Protocol) Chức năng frag2 và arpspoof của tiền xử lí có chức năng chính để chống lại các phương pháp này arpspoof
• frag2: Khi một gói tin đi từ mạng này sang mạng khác, nó thường được phân mảnh thành các gói tin nhỏ hơn (do mạng thứ 2 sẽ giới hạn kích thước của gói tin hơn mạng đầu tiên), sau đó các gói tin sẽ được sắp xếp lại khi đến nơi Một trong những phương pháp tấn công là tạo ra một dãy các gói tin nhỏ chỉ chứa vài byte của gói tin Ví dụ: luật của Snort đang dò tìm chuỗi “/users.pwd” trong các section của packet, một attacker có thể tạo ra 2 phân mảnh nhỏ: mảnh đầu tiên chứa “/user” và phân mảnh 2 chứa
“s.pwd” Các gói tin này sẽ không bị kích hoạt báo động do không vi phạm luật nào cả Tuy nhiên, frag2 của tiền xử lí sẽ tổng hợp phân mảnh này và phát hiện sự ẩn dấu đó
• arpspoof: arpspoof có chức năng phát hiện những tấn công mạng dựa trên lỗ hổng của giao thức arp Trong quá trình truyền nhận trong mạng LAN, các máy tính cần phải biết địa chỉ MAC của các máy khác, việc trao đổi thông tin địa chỉ MAC thông qua giao thức ARP Kẻ tấn công có thể tạo một gói ARP giả báo cho máy tính A địa chỉ máy tính B tương ứng với địa chỉ MAC của mình Từ đó, khi máy tính A cần truyền nội dung đến máy tính B, dữ liệu đều được đi qua máy tính của kẻ tấn công Để phòng chống việc tấn công ARP spoof, hệ thống cần phải có thông tin về địa chỉ các máy tính trong mạng và địa chỉ MAC tương ứng Preprocessor sẽ đọc và so sánh những thông tin này trong gói tin ARP để phát hiện sự tấn công
• Đây là quá trình phát hiện sự xâm nhập có tồn tại trong gói tin hay không dựa vào các luật được định nghĩa trước của Snort Nếu một gói tin giống với bất kì luật nào, một hành động tương ứng sẽ được thực hiện Đây là bộ phận then chốt về thời gian thực thi của Snort Nếu lưu lượng trên mạng quá lớn khi Snort đang hoạt động ở chế độ NIDS, hệ thống sẽ drop các gói tin hay thời gian đáp ứng sẽ không chính xác
• Để tăng hiệu suất của hệ thống, Detection Engine nên được hiện thực bằng phần cứng
• Phụ thuộc vào thông tin mà Detection Engine phát hiện trong gói tin, Snort sẽ ghi lại các hành vi hoặc tạo ra cảnh báo Các thông tin ghi lại ở dạng file text đơn giản hoặc các dạng khác
• Module đầu ra hoặc plug-in có thể hoạt động theo nhiều cách phụ thuộc vào việc bạn muốn xuất các output và tạo cảnh báo như thế nào.
NetFPGA
• Xilinx Virtex-II Pro (53,136 logic cells)
• 4 kết nối 1 Gigabit interface (RJ45)
Những người sử dụng NetFPGA
• Giáo viên / Sinh viên ở trường đại học
• Những nhà nghiên cứu và phát triển hệ thống mạng
NetFPGA bao gồm 2 thành phần
• Chương trình phần mềm xử lí mạng trên standard PC
• Phần cứng được thiết kế để tăng tốc hệ thống xây dựng trên FPGA (Field Programable Gate Array)
Hình 9 Thành phần của NetFPGA
NetThread
NetFPGA platform hỗ trợ những nhà nghiên cứu hệ thống mạng thiết kế phần cứng để kiểm tra chương trình, giải thuật, lý thuyết mới gần sát với thực tế Tuy nhiên nhiều nhà nghiên cứu mạng không quen với việc thiết kế phần cứng, cũng như việc thiết kế phần cứng xử lí các gói tin trong hệ thống đòi hỏi nhiều thời gian và công sức Bên cạnh đó, soft-processor có những ưu điểm đặc biệt như:
(i) Có thể sử dụng để điều khiển những thành phần khác trong hệ thống
(ii) easy using: dễ dàng lập trình bằng ngôn ngữ C
(iii) portable: có thể chuyển đổi sang nhiều FPGA platform khác nhau
(iv) flexible: có thể cấu hình, thay đổi tuỳ theo yêu cầu của hệ thống
Bắt đầu từ kiến trúc MIPS, nhóm nghiên cứu của Martin Labreque ở trường đại học Toronto, Canada đã phát triển, thiết kế và đánh giá soft-processor trên NetFPGA, từ đó xây dựng nên hệ thống NetThread NetThread được ra đời nhằm mục đích hỗ trợ việc thực thi phần mềm trên NetFPGA board một cách tiện dụng
MIPS (Microprocessor without Interlocked Pipeline Stages) là kiến trúc được phát triển từ năm 1981 bởi MIPS technology Cho đến ngày nay, nhiều processor với kiến trúc MIPS được ứng dụng rộng rãi trong công nghiệp: các thiết bị điện tử trong gia đình, hệ thống mạng cũng như điện thoại di động Ngoài ra, kiến trúc MIPS thường xuyên được sử dụng trong khoá học về kiến trúc máy tính của nhiều trường đại học trên thế giới MIPS thực sự đã trở nên quen thuộc với ngày công nghệ thông tin chúng ta
Một số đặc điểm của kiến trúc MIPS:
• Tập lệnh đơn giản hoá RISC (Reduced Instructions Set Computer)
• Load/store architecture: chỉ có lệnh load/store mới được truy xuất vào vùng nhớ
• Fixed length instruction: chiều dài của mỗi câu lệnh đều là 32 bit
• Hỗ trợ 32 thanh ghi, mỗi thanh ghi chứa 32 bit dữ liệu
Hình 10 MIPS architecture Hình 10 mô tả 5 stage cơ bản của kiến trúc MIPS
• IF (Instruction Fetch): đọc lệnh từ vùng nhớ
• ID (Instruction Decode): giải mã lệnh và chuẩn bị dữ liệu cần thiết
• EX (Execute): thực thi lệnh
• MEM (Memory access): truy xuất vùng nhớ
• WB (Write back): ghi kết quả vào thanh ghi
4.2 Soft-processor in FPGA Để hiện thực soft-processor trên FPGA, nhóm tác giả ở trường đại học Toronto đã sử dụng SPREE để sinh ra RTL của Processor dựa trên ISA (Instruction Set Architecture) và datapath đầu vào
Tiếp theo, họ tiến hành đánh giá hiệu quả của multithread soft-processor: area được sử dụng tốt hơn 33%, 77% và 106% khi áp dụng Multi-thread cho 3, 5, 7 stage pipeline Trong đó, 5-stage pipeline với multi-thread đạt hiệu quả cao nhất
Hình 11 Đánh giá soft-processor trên FPGA
• 2 processor, 5-stage pipeline, 4-way multithread
• 8 thread chạy luân phiên theo giải thuật định thời round-robin
• 2 processor dùng chung 3 bộ nhớ của NetThreads, tổng dung lượng của input và output là 16KB
• Diện tích chiếm 71% block RAM của NetFPGA, mỗi processor hoạt động ở tầng số 125MHz
HIỆN THỰC HỆ THỐNG
Giới thiệu hệ thống
Hệ thống mô phỏng những chức năng chính của Snort 2.1 trên NetFPGA
Hệ thống bao gồm 3 module: module chính thực hiện Snort trên NetFPGA; module client gởi gói tin và module trên server nhận kết quả từ NetFPGA board
Hình 13 Hiện thực hệ thống
Hệ thống chạy trên board với 3 chế độ sniffer, filter, NIDS
Hình 14 Hoạt động cơ bản của hệ thống
Hệ thống chỉ có thể chạy 1 trong 3 mode một tại một thời điểm, không thể chạy cùng lúc nhiều mode Việc thay đổi chế độ hoạt động được thực hiện thông qua việc gửi gói tin cấu hình hệ thống xuống board Gói tin này có cấu trúc đặc biệt được gởi từ server dùng để cấu hình một số chức năng sau:
• Cấu hình các cổng nf2c0, nf2c1, nf2c2, nf2c3: các cổng này có thể dùng để kết nối với client (gởi gói tin vào hệ thống), server (nhận thông báo từ hệ thống) hoặc không sử dung
• Cấu hình chế độ hoạt động của hệ thống: Sniffer, Filter, hay NIDS Ở chế độ Filter gói tin cấu hình có thêm option để chọn các chuẩn lọc gói tin
Mỗi gói tin khi đi vào board sẽ được đẩy vào input buffer của netthreads Từ input buffer hệ thống sẽ sẽ lấy gói tin xử lý theo tác vụ của từng mode a Sniffer mode
Hình 15 Chế độ hoạt động ở Sniffer mode
Chế độ Sniffer phục vụ cho công việc theo dõi lưu lượng trên đường truyền mạng
Gói tin khi đi vào board ở cổng nf2c0 sẽ được đưa vào input buffer, tại đây hệ thống sẽ lấy gói tin, sao chép toàn bộ gói tin và ghi vào output buffer , sau đó gói tin sẽ được đẩy ra cổng nf2c1
Chế độ sniffer được chạy với 8 threads (chạy theo cơ chế round robin), mỗi threads có một khoảng thời gian time-out chay nhất định, khi hết thời gian này nó sẽ chuyển công việc hiện tại cho threads kế tiếp thực hiện Điều này giúp hệ thống chạy hiệu quả hơn cũng như tốc độ xử lý cao hơn Nếu chỉ chạy với 1 thread thì khi thread này hết thời gian time-out thì hệ thống sẽ phải chờ cho đến khi thread đó được phép chạy lại b Filter mode
Hình 16 Chế độ hoạt động ở Filter mode
Chế độ Filter có chức năng lọc gói tin đi vào board theo những chuẩn được qui định sẳn Những gói tin không nằm trong qui định này sẽ bị loại bỏ Hệ thống hỗ trợ một số chuẩn lọc như sau:
Hình 16 mô tả chế độ Filter lọc theo TCP protocol: khi gói tin vào hệ thống sẽ được kiểm tra xem có phải gói TCP không, nếu đúng sẽ chép toàn bộ gói tin vào output buffer để đẩy ra cổng nf2c1 Nếu không thì sẽ loại bỏ gói tin đó (xóa gói tin đó khỏi input buffer) c NIDS mode
Chế độ NIDS giúp phát hiện một số tấn công mạng
Module frag2 có chức năng phát hiện những gói tin bị phân mảnh, tái hợp những mảnh đó thành 1 gói tin hoàn chỉnh Nếu các mảnh của gói tin không đến đủ sau một khoảng thời gian quy định thì sẽ bỏ toàn bộ những mảnh của gói đó, đồng thời alert cho người dùng biết Fragment buffer dùng để chứa những phân mảnh của gói tin
Module arpspoof có chức năng phát hiện những tấn công mạng dựa trên lỗ hổng của giao thức arp, nếu có tấn công thì sẽ báo động cho người quản trị, đồng thời loại bỏ gói tin đó đi Arp table để chứa thông tin ánh xạ ip-mac address Kích thước của bảng này khoảng 1 KB
Flow chart của hệ thống
Hình 18 Flow chart của hệ thống
Cấu trúc thư mục của hệ thống
Root_directory bit/ netthreads.bit Bit file của soft-processor Netthread compiler/ Thư viện dùng trong việc biên dịch từ ngôn ngữ C ra file thực thi loader/ Chương trình nạp file thực thi xuống board src/ bench/ common Thư việc các hàm API dùng trong Netthreads snort_netthread/ Source code chương trình chính test_packet/ sniffer/ Gói tin dùng để kiểm tra chế độ Sniffer filter/ Gói tin dùng để kiểm tra chế độ Filter
NIDS/ Gói tin dùng để kiểm tra chế độ NIDS others/ Gói tin dùng để kiểm tra input, output…
Bảng 1 Cấu trúc thư mục của hệ thống
Cách nạp chương trình snort_netthred
Bước 1: Nạp soft-processor NetThread xuống NetFPGA board
$: sudo cpci_reprogram.pl –all
$: nf_download bit/netthreads.bit
Bước 2: Biên dịch chương trình snort_netthread
$: cd src/bench/snort_netthread
Bước 3: Nạp chương trình xuống board
$: / / /loader/loader –i netthread_snort.inst.mif
$: / / /loader/loader –d netthread_snort.data.mif –nodebug
Bước 4: Kiểm tra chương trình – giả lập máy tấn công gởi gói tin vào hệ thống
$: tcpreplay –I eht0 –mps=0.4 test_packet/sniffer/test_sniffer_5959.pcap
Một số hàm chính của hệ thống
a Hàm giao tiếp trên đường truyền mạng
Trong quá trình giao tiếp với đường truyền mạng, hệ thống sử dụng một số hàm API được cung cấp bởi NetThread: các hàm gởi/nhận các gói tin và cấu trúc IOQ Header Chương trình sau đây mô phỏng hoạt động thường gặp trong quá trình giao tiếp với đường truyền mạng: typedef char t_addr; t_addr* next_packet; nf_pktin_init(); nf_pktout_init(); while(1) { current_packet = nf_pktin_pop(); if (nf_pktin_is_valid(current_packet)) { struct ioq_header *ioq = (struct ioq_header*) current_packet; int size = ntohs(ioq->byte_length); int length = sizeof(struct ioq_header) + size;
// Forward packet t_addr* out_packet = nf_pktout_alloc(length); memcpy32( current_packet + sizeof(struct ioq_header), out_packet + sizeof(struct ioq_header), size ); nf_pktin_free(current_packet); struct ioq_header *dioq = (struct ioq_header*) out_packet; fill_ioq(dioq, PORT, size); nf_pktout_send(out_packet, out_packet+length) ;
Hàm nhận gói tin từ đường truyền mạng
• void nf_pktin_init(): hàm khởi tạo input buffer
• t_addr* nf_pktin_pop(): hàm trả về địa chỉ của gói tin được nhận (theo thứ tự) khi đi vào hệ thống
• int nf_pktin_is_valid(t_addr* addr): xác định con trỏ trả về bởi hàm nf_pktin_pop() có thật sự là một gói tin hay không
• void nf_pktin_free(t_addr* val): hàm xóa gói tin trong input buffer (sau khi đã xử lí và đưa gói tin vào output buffer) Hàm cần được gọi sớm do nếu gói tin chứa đầy trong input buffer, các gói tin đến tiếp theo sẽ không được chứa vào input buffer và dẫn đến bị drop
Hàm gởi gói tin ra đường truyền mạng
• void nf_pktout_init(): hàm khởi tạo output buffer
• t_addr* nf_pktout_alloc(uint size): hàm khai báo vùng nhớ để lưu trữ gói tin vào output buffer Hàm trả về địa chỉ được cấp phát cho gói tin hoặc trả về 0 trong trường hợp không đủ vùng nhớ
• void nf_pktout_send(char* start_addr, char* end_addr): hàm gởi gói tin có chiều dài (end_addr – start_addr) ra cổng Ethernet
IOQ Header struct ioq_header: mỗi gói tin được nhận vào và truyền ra bởi NetThread đều được gắn thêm 8 byte – được gọi là ioq_header với cấu trúc như sau: struct ioq_header { unsigned short dst_port; unsigned short word_length; unsigned short src_port; unsigned short byte_length;
}; ioq_header dùng để chỉ định port nguồn, port đích và chiều dài gói tin
• fill_ioq(struct ioq_header *ioq, unsigned short port, unsigned short bytes): cập nhật thông tin của ioq_header của gói tin chuẩn bị gởi ra cổng Ethernet
(port=0: nf2c0, port=2: nf2c1, port=4:nf2c2, port=6:nf2c3) Hàm không cần cập nhật thông tin của port nguồn của gói tin do phần cứng của NetThread bỏ qua thông tin này khi gởi gói tin ra cổng Ethernet b Hàm xử lí gói tin trong hệ thống
Bảng 2 mô tả hàm xử lí gói tin tương ứng với chế độ hoạt động
Hàm sử dụng Config Sniffer Filter NIDS check_packet(t_addr* packet) √ forward_packet(void* data) √ √ √ filter_packet() √ arpspoof() √ frag2() √ alert() √ debug() √ √ √ √
Bảng 2 Hàm xử lí gói tin trong hệ thống
• check_packet(t_addr* packet): hàm phân loại gói tin đi vào hệ thống o Gói tin rác: dùng để loại bỏ gói tin được gởi từ những cổng không được cho phép trong hệ thống o Gói tin cấu hình: nhận dạng gói tin cấu hình để thay đổi chức năng của hệ thống o Gói tin bình thường: Đưa những gói tin này vào hệ thống để xử lí
• void forward_packet(void* data): sao chép nội dung của gói tin từ input buffer ra output buffer, sau đó gắn ioq_header để xác định cổng gói tin được truyền ra Hàm này được sử dụng sau khi gói tin được xử lí xong và cần truyền lên server
• int filter_packet(t_addr* packet): hàm dùng để kiểm tra gói tin có tuân theo chuẩn được qui định trước đó hay không
• bool frag2(t_addr* packet, struct fragment_buffer* b): Hàm phát hiện gói tin bị phân mảnh và lưu giữ chúng trong fragment buffer Nếu tồn tại 2 gói tin phân mảnh trùng nhau (do gói tin bị trùng hoặc do kẻ tấn công cố tình gởi làm tràn ngập hệ thống), chương trình sẽ loại bỏ gói tin đến sau Sau khi tập hợp đầy đủ các gói tin phần mảnh, chương trình sẽ kết nối chúng lại thành gói tin hoàn chỉnh
• bool arpspoof(t_addr* packet, struct arp_table* arp_table): mỗi gói tin ARP khi đi vào hệ thống sẽ được kiểm tra src_mac, des_mac (của Ehternet header), sender_mac, target_mac, sender_ip, target_ip (của ARP header) Dựa vào sự bất thường của các giá trị trên, hàm đưa ra 6 dạng cảnh báo đến hệ thống o “ARP Unicast request”: Gói tin yêu cầu ARP được một máy gởi trực tiếp đến server, không phải broadcast toàn hệ thống o “Ethernet/ARP request is mismatch source MAC”: src_mac != sender_mac o “Attacking arpspoof: mac address of sender is ff:ff:ff:ff:ff:ff”: kẻ tấn công gởi gói tin ARP reply trả lời rằng: “địa chỉ MAC tương ứng với một IP nào đó là ff:ff:ff:ff:ff:ff” Điều này không hợp lí do địa chỉ MAC ff:ff:ff:ff:ff:ff chỉ được dùng để gởi broadcast Hệ thống sẽ tự động loại bỏ gói tin này o “Ethernet/ARP reply is mismatch source MAC”: src_mac != sender_mac o “Ethernet/ARP reply is mismatch destination MAC”: des_mac != target_mac o “Attacking arpspoof: Overwrite ARP cache”: kẻ tấn công gởi gói tin ARP reply để ghi đè giá trị ánh xạ MAC – IP có sẳn trong ARP table Hệ thống sẽ tự động loại bỏ gói tin này
• int alert (char* str): hàm gởi gói tin cảnh báo từ NetFPGA board đến server Nội dung của gói tin được qui định bởi người lập trình tương ứng với các loại tấn công vào hệ thống
• int debug (char* str): hàm dùng để debug chương trình bằng cách gởi gói tin từ
Mô hình mở rộng của hệ thống
Hệ thống NIDS hoàn chỉnh cần có sự phối hợp giữa phần cứng và phần mềm Quá trình kết nối được hiện thực bằng 2 mô hình sau:
Detection Engine nf2c0 nf2c1 nf2c2 packet
Hình 19 Mô hình mở rộng 1
Mô hình 1 (hình 19): chương trình snort_netthread (phần mềm) và Detection Engine (phần cứng) được nạp lên cùng một board NetFPGA Quá trình giao tiếp có thể được thực hiện bằng cách xây dựng bộ buffer giao tiếp hoặc thông qua cổng nf2c2
• Ưu điểm: Hệ thống nhỏ gọn, đơn giản
• Nhược điểm: logic cell của bộ phận Detection Engine bị giới hạn do phải chia sẽ tài nguyên với soft-processor NetThread
Hình 20 Mô hình mở rộng 2
Mô hình 2 (hình 20): chương trình snort_netthread (phần mềm) và Detection Engine (phần cứng) được nạp lên hai board NetFPGA khác nhau Quá trình giao tiếp được thực hiện thông qua cổng Ethernet
• Ưu điểm: gia tăng số lượng logic cell cho bộ phận Detection Engine Bên cạnh đó, tính độc lập cũng như sự uyển chuyển của từng bộ phận sẽ tốt hơn
• Nhược điểm: do hệ thống cần đến hai FPGA board nên chi phí cho hệ thống sẽ cao hơn
Kết quả thực nghiệm và đánh giá hệ thống
Kết quả thực nghiệm
Bảng 3 mô tả tập dữ liệu kiểm tra chức năng của hệ thống
Sniffer Xây dựng 5959 gói tin cho chế độ Sniffer
Filter Xây dựng 9000 gói tin cho chế độ Filter
- 200.200.0.1 : 25 gói tin Destination IP - 10.10.10.2 : 25 gói tin
- 200.200.0.2 : 75 gói tin Source port - 443 : 486 gói tin
- 3600 : 25 gói tin Destination port - 80 : 3063 gói tin
- 1352 : 25 gói tin Ethernet packet - IP : 8994 gói tin
- ARP : 14 gói tin Protocol - TCP : 8532 gói tin
Frag2 Xây dựng gói tin phân mảnh cho giao thức UDP, ICMP Arpspoof Xây dựng 6 loại tân công cho giao thức ARP
Bảng 3 Gói tin kiểm tra chức năng hệ thống a Sniffer mode
Hình 21 mô tả hoạt động của server ở chế độ Sniffer mode: hệ thống bắt được gói tin gởi từ phía client thông qua chương trình phần mềm Wireshark
Hình 21 Kết quả chương trình ở hệ thống Sniffer mode b Filter mode Ở chế độ Filter mode, hệ thống có thể lọc được các gói tin theo chuẩn được qui định trước
• Hình 22: hệ thống lọc được 25 gói tin có IP nguồn là 10.10.10.1
• Hình 23: hệ thống lọc được 352 gói tin sử dụng UDP protocol
Hình 22 Hệ thống ở chế độ Filter mode (IP nguồn = 10.0.0.1)
Hình 23 Hệ thống ở chế độ Filter mode (UDP protocol) c NIDS mode Ở chế độ NIDS mode, hệ thống có thể phát hiện 6 dạng tấn công của giao thức ARP Khi phát hiện tấn công, hệ thống sẽ gởi gói tin cảnh báo lên server và ở phía server sẽ có chương trình để bắt các gói tin cảnh báo này
Hình 24 Hệ thống ở chế độ NIDS mode trong tấn công ARP
Đánh giá hệ thống
Để đánh giá hệ thống một cách tổng quát, hệ thống sử dụng tập gói tin trên đường truyền mạng a Thay đổi số lượng threads trong quá trình hoạt động
Bảng 4 mô tả kết quả khi thay đổi số lương thread (4 thread hoặc 8 thread) khi đưa vào hệ thống 100.000 gói tin Về cơ bản, thời gian hoạt động của khi sử dụng 1 processor (4 thread) và 2 processor (8 thread) gần như tương đương nhau Tuy nhiên khi chạy với 2 processor, chương trình nhanh hơn do có tận dụng khả năng song song
Số thread Thời gian thực thi
8 1466 Bảng 4 Hệ thống với sự thay đổi số thread thực thi chương trình b Thay đổi số lượng gói tin vào hệ thống Để kiểm tra độ ổn định của hệ thống ở 3 chế độ Sniffer, Filter, NIDS: quá trình đánh giá lần lượt tăng tốc độ cũng như số lượng gói tin đi vào hệ thống như mô tả ở bảng sau
Số lượng gói tin Tốc độ gửi(Mbps) sniffer(ms) filter(ms) NIDS(ms)
Bảng 5 Hệ thống với sự thay đổi số lượng gói tin đầu vào
Với những số liệu đo được ta thấy hệ thống hoạt động ổn định ở cả 3 chế độ với tốc độ lưu lượng mạng vào khoảng 580Mbps Hình 25 tóm tắt lại thời gian thực thi của hệ thống Dựa vào kết quả thực nghiệm ta thấy rằng ở giai đoạn đầu tiên, hệ thống cần thời gian nhất định để khởi tạo buffer, xây dựng bảng ARP table Sau khi quá trình khởi động hoàn tất, thời gian thực thi chương trình tăng tuyến tính so với số lượng gói tin đi vào hệ thống
1600 sniffer(ms) filter(ms) NIDS(ms)
Hình 25 Thời gian thực thi của hệ thống ở 3 chế độ hoạt động