Tự động hóa việc cập nhật bảng luật lọc gói cho các firewall mã nguồn mở
Tóm tắt Trong các hệ thống bảo mật mạng doanh nghiệp dựa vào Intrusion Detection System (IDS) và Firewall (tường lửa bảo mật), thông thường, nhiệm vụ của IDS là theo dõi tất cả dòng traffic vào/ra mạng, để từ đó phát hiện và đưa ra cảnh báo về các dòng traffic bất thường, về các gói tin có nguy cơ mang theo mã độc. Dựa vào những những thông tin cảnh báo này, người quản trị an ninh mạng sẽ thiết kế các luật chính sách mới, tiến hành cập nhật lại bảng luật lọc gói của Firewall, nhờ đó firewall có thể ngăn chặn kịp thời các dòng traffic không mong muốn. Trong bài báo này, chúng tôi đề xuất và triển khai một mô hình mới về sự kết hợp trong hoạt động giữa IDS và Firewall, nó cho phép IDS tự động cập nhật bảng luật lọc gói của firewall mỗi khi phát hiện có sự bất thường. Điều này giúp việc bảo vệ mạng trước các tấn công từ Internet trở nên tức thời hơn
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tóm tắt nội dung tài liệu: Tự động hóa việc cập nhật bảng luật lọc gói cho các firewall mã nguồn mở
hệ Đại học Duy Tân 03(40) (2020) 16-25 21 Có thể thấy, khác nhau cơ bản giữa hai loại IDS này là, signature-based IDS dựa vào tập signature đã biết để phát hiện sự bất thường, trong khi đó, anomaly-based IDS, dựa vào những traffic “bình thường” làm cơ sở để phát hiện ra sự bất thường. Hình 2.2 là sơ đồ minh họa mạng doanh nghiệp, trong đó sử dụng cả NIDS và HIDS. Trong mạng này, các HIDS được đặt tại các server trong vùng DMZ (Web, File, Mail), để phát hiện sự truy cập bất hợp pháp hoặc bất thường có thể đến với các server này. NIDS được đặt sau firewall để quan sát tất cả dòng traffic đi vào/đi ra mạng bên trong. Hoạt động của loại Signature-based IDS là như sau, khi có một dòng traffic mạng đi qua nó, IDS sẽ copy traffic này lại, rồi tách lấy những thông tin cần thiết trong header và/hoặc payload từ những traffic này. Sau đó IDS tiến hành "so khớp" những thông tin này với cơ sở dữ liệu chứa tập signature về những mối đe dọa biết trước. Nếu một sự "khớp" được tìm thấy thì IDS sẽ gửi cảnh báo đến các hệ thống liên quan. Khi IDS nhận định rằng có một sự bất thường mới hay một mối đe dọa mới từ những dòng traffic qua nó thì cơ sở dữ liệu này cũng sẽ được cập nhật để chuẩn bị cho những lần "so khớp" sau này. Với loại Anomaly-based IDS, đầu tiên nó quan sát tất cả dòng traffic đi qua, thu thập thông tin liên quan để tìm ra “sự bình thường”. Sau đó dựa vào “sự bình thường” này để phát hiện ra những dòng traffic ẩn chứa trong đó “sự bất thường”. Loại IDS này mang lại hiệu quả cao trong việc phát hiện những mối đe dọa mới, những cuộc “tấn công mới”. Tuy nhiên, IDS phải có “trí tuệ” thì mới làm tốt việc này. 3. Mô hình đề xuất 3.1. Mô hình mạng Mô hình đề xuất về sự kết hợp hoạt động giữa firewall và HIDS của chúng tôi được thể hiện ở Hình 3.1 sau đây: Hình 3.1 Sơ đồ mạng với sự kết hợp giữa firewall và HIDS Trong mô hình này: Firewall chịu trách nhiệm điều khiển truy cập cho toàn mạng. Về cơ bản, firewall chỉ cho phép các kết nối từ Internet vào vùng DMZ, cấm các kết nối từ Internet vào vùng mạng người dùng bên trong. Nhưng mọi kết nối từ bên trong mạng đi ra thì đều được phép. Chúng tôi sử dụng phần mềm tường lửa mã nguồn mở IPTables để xây dựng firewall này. Bảng luật lọc gói ban đầu được xây dựng thông qua các lệnh cho phép của IPTables. IDS chịu trách nhiệm quan sát dòng traffic đi vào vùng DMZ. Nếu IDS phát hiện thấy sự bất thường hay hành động đáng ngờ từ dòng traffic hay packet nào đó thì nó sẽ báo cáo điều này đến các thành phần/đối tượng liên quan. Đặc biệt, Sniffer có thể tự động cập nhật bảng luật lọc gói trên IPTables. Chúng tôi sử dụng thư viện Scapy của ngôn ngữ Python để xây dựng chương trình Sniffer thực hiện chức năng và nhiệm vụ này của IDS. Điểm mới của mô hình đề xuất này là chúng tôi đã tạo được kết nối trong hoạt động và thực hiện nhiệm vụ được giao giữa chương trình Sniffer với tường lửa mã nguồn mở IPTables: Một khi đã xác định được nguồn gốc của dòng traffic hoặc packet được cho là bất thường hay được cho là có hành động đáng ngờ thì Sniffer N. K. Tuấn, N. T. Thuận, Phan Long / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 03(40) (2020) 16-25 22 def update_rule1(black,Port): cmd = 'iptables -A FORWARD -i ens33 -o ens38 -p tcp -d 192.168.10.50 --dport "'+Port+'" -m string --algo bm --string "'+black+'" -j DROP' p = paramiko.SSHClient() p.set_missing_host_key_policy (paramiko. AutoAddPolicy()) p.connect(add1, username=user1, password=pass1) stdin, stdout, stderr = p.exec_command(cmd) print "", Port #--------------------------------------------------- def update_rule2 (ipsrc): cmd = 'iptables -A FORWARD -i ens33 -o ens38 -p tcp -s '+ipsrc+' -d address2 -j DROP' p = paramiko.SSHClient() p.set_missing_host_key_policy (paramiko. AutoAddPolicy()) p.connect(add2, username=user2, password=pass2) stdin, stdout, stderr = p.exec_command(cmd) lập tức gửi lệnh đến IPTables để cập nhật lại bảng luật lọc gói của nó. Firewall IPTables sẽ hoạt động theo bảng luật lọc gói mới này để ngăn chặn những dòng traffic, những gói tin không mong muốn đi vào mạng. Ưu điểm của mô hình đề xuất là rất rõ, ngoài chức năng thông thường của một IDS chuyên dụng, Sniffer hoàn toàn chủ động trong việc thay đổi bảng luật lọc gói trên tường lửa IPTables một cách tức thời và tự động. Điều này không những giúp kịp thời ngăn chặn những ý đồ phá hoại mạng của tổ chức từ Internet mà còn giúp giảm công sức của người quản trị an ninh mạng. Hình 3.2 Đoạn code chính của chương trình 3.2. Công việc liên quan Đầu tiên chúng tôi thực hiện các công việc cần thiết để đưa mạng, theo thiết kế, của mô hình đề xuất đi vào hoạt động. Chúng tôi tiến hành xây dựng Bảng luật lọc gói của tường lửa IPTables theo chính sách truy cập mạng đã đưa ra, trong đó, chúng tôi hướng mọi dòng traffic sau khi đã vượt qua được tường lửa IPTables thì phải đi qua IDS, máy chạy chương trình Sniffer. Đóng góp chính của chúng tôi ở đây không chỉ là đề xuất mô hình mới trong sự kết hợp giữa IDS và Firewall mà còn là xây dựng được chương trình Sniffer từ Python. Chương trình Sniffer gồm các function chính sau đây: Function process_packet (): Đây là function khá quan trọng của Sniffer, nó có nhiệm vụ sao chép tất cả các packet đi qua các port được chỉ định (đã được chỉ ra ở các tập tin: Listports và Blacklist). Sau đó tách lấy các thông tin cần thiết từ header của packet này như: Loại gói tin (TCP hay UDP), địa chỉ IP nguồn, Port nguồn Dữ liệu này sẽ là đầu vào cho function test_for_active. Function test_for_active (): Thực hiện chức năng so khớp thông tin của các packet nhận được từ process_packet với thông tin lưu trong Listports và Blacklist. Nếu tìm thấy sự khớp từ một traffic hay packet nào đó thì Sniffer tiến hành đếm sự xuất hiện của chúng, nếu số lần này chạm ngưỡng đã được xác định thì test_for_active sẽ tiến hành cập nhật bảng luật của IPTables để firewall này ngăn chặn các traffic này lại, không cho đi vào mạng. Function này còn có nhiệm vụ phát hiện và cảnh báo những về dòng traffic đáng ngờ, đó thường là những dòng traffic được gửi đến Sniffer một cách ồ ạt từ một địa chỉ IP hoặc từ nhiều địa chỉ IP. Function setup_logfile (): Thiết lập các thông số liên quan đến tập tin nhật ký (logfile) mà Sniffer sử dụng để lưu thông tin về những N. K. Tuấn, N. T. Thuận, Phan Long / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 03(40) (2020) 16-25 23 traffic, packet mà nó được chỉ định cần phải chú ý trong quá trình quan sát. Ngoài ra, chúng tôi còn xây dựng 1 class và 2 chương trình hỗ trợ: Class limitedPool: Class này gồm function init_ và function _setup_queues. Function init_ thực hiện việc khởi tạo các hàng đợi cho các ThreadPool, được sử dụng trong trường hợp xử lý đa luồng. Ở đây chúng tôi chọn kích thước hàng đợi tối đa là 10000 (chứa được 10000 thread). Function _setup_queues được sử dụng để thiết lập các thông số về hàng đợi. Nhờ sự hỗ trợ này của Python [4] mà Sniffer có thể xử lý được tất cả packet tới nó, cho dù có đến 10000 packet được gửi đến đồng thời. Chương trình update_rule_iptables.py: Được xây dựng dựa trên giao thức SSH, được Sniffer sử dụng để gửi lệnh đến IPTables, yêu cầu tường lửa này cập nhật bảng luật để chặn các packet có chứa các string mà Sniffer cho rằng nó có nguy cơ làm tổn hại đến hệ thống mạng bên trong. Hai function này được Sniffer sử dụng để gửi lệnh thay đổi bảng luật của IPTables, để IPTables kịp thời ngăn chặn những dòng traffic, những packet không mong muốn đi vào mạng bên trong. Và chương trình report2email.py: Được xây dựng trên nền giao thức SMTP, được sử dụng để Sniffer gửi email với nội dung về cảnh báo bất thường đến cho người quản trị an ninh mạng. 3.3. Kiểm thử và đánh giá mô hình đề xuất Chúng tôi đã tiến hành kiểm thử mô hình đề xuất theo 3 kịch bản như sau: Kiểm thử lọc string (kịch bản 1): Kịch bản này nhằm kiểm tra sự phối hợp giữa Sniffer với IPTables trong việc cảnh báo và ngăn chặn những dòng packet mà trong đó có chứa một string thuộc diện cần lưu ý và đã được chỉ ra ở blacklist. Kết quả đúng như mong đợi, trong một khoảng thời gian xác định, nếu có lượng lớn packet đi vào Sniffer mà payload của nó có chứa cùng một string đã ghi trong blacklist thì ngay lập tức những packet này sẽ bị chặn bởi IPTables. Kiểm thử lọc theo IP nguồn (kịch bản 2): Kịch bản này nhằm kiểm tra phản ứng của Sniffer khi có quá nhiều kết nối đến từ một nguồn có địa chỉ IP xác định. Sniffer phải xác định được đây là kết nối đáng ngờ và IPTables phải chặn được những traffic xuất phát từ địa chỉ IP này. Kết quả là, trong một khoảng thời gian xác định, nếu có lượng lớn traffic đi vào Sniffer mà có cùng một địa chỉ IP nguồn thì ngay lập tức dòng traffic này sẽ bị chặn bởi IPTables. Kiểm thử ngăn chặn tấn công SYN_Flood (kịch bản 3): Kịch bản này yêu cầu Sniffer phải phản ứng khi có quá nhiều gói tin TCP_SYN gửi đến nó (nghi ngờ có tấn công DoS dạng SYN_Flood). Trong tình huống này Sniffer sẽ phải gửi yêu cầu đến IPTables, nhờ nó chặn các dòng traffic chứa gói tin TCP_SYN, công việc còn lại là của IPTables. Không ngoài dự đoán, trong một khoảng thời gian xác định, nếu có lượng lớn packet TCP_SYN đi vào Sniffer thì lập tức dòng traffic có packet khởi tạo này bị chặn bởi IPTables. Trong quá trình kiểm thử, chúng tôi cũng đã tiến hành đánh giá hiệu quả phối hợp hoạt động giữa Sniffer và IPTables. Ở đây, chúng tôi sử dụng công cụ Tcpdump và Wireshark để kiểm tra kết quả lọc và chặn packet của mô hình đề xuất: Đối với việc lọc string: Trong khoảng thời gian xác định chúng tôi tấn công vào IPTable bằng cách tạo và gửi đến IPTables khoảng hơn 1000 packet, trong đó có một lượng lớn vượt ngưỡng cho phép, packet có chứa string đã được yêu cầu Sniffer theo dõi (ở đây là lệnh “ls –ls”). Chúng tôi tiến hành đồng thời dump các packet trên firewall và trên server chạy Sniffer. Sau đó tiến hành phân tích hai kết quả dump được thì N. K. Tuấn, N. T. Thuận, Phan Long / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 03(40) (2020) 16-25 24 thấy rằng: Có hơn 1000 packet đến firewall nhưng chỉ có hơn 800 packet đến được server. Hình 3.3a Các packet nhận được trên tường lửa IPTables Hình 3.3b Các packet nhận được trên server Sniffer Như vậy, Tcpdump đã cho thấy, trước sự quan sát và hành động của Sniffer và IPTables thì các packet (một lượng lớn) có chứa string “ls – ls” đã bị chặn lại ở IPTable. Đối với việc ngăn chặn tấn công SYN_Flood: Chúng tôi thực hiện tấn công vào mạng đề xuất bằng cách tạo và gửi một lượng lớn packet TCP_SYN từ bên ngoài, qua IPTables, đến server Sniffer. Sau đó chúng tôi tiến hành dump các packet đến/đi ở Sniffer. Kết quả dump được nhìn thấy trên Tcpdump như sau: Hình 3.4 Các packet TCP_SYN và RST, ACK Trong quá trình “bắt tay 3 bước” TCP, thông thường, cứ mỗi khi bên đích nhận được một packet [TCP_SYN] thì nó phải gửi ngay một packet phản hồi [TCP_RST, ACK]. Nhưng ở đây, do nghi ngờ hệ thống bị tấn công DoS theo dạng SYN_Flood nên Sniffer đã yêu cầu IPTables hạn chế hồi đáp các packet khởi tạo kết nối [TCP_SYN]. Điều này đã được kiểm chứng bởi Tcpdump. Đối với việc lọc theo IP nguồn: Thử nghiệm này được tiến hành tương tự như “lọc string” nhưng ở đây yêu cầu Sniffer phát hiện và ngăn chặn sự bất thường đến từ những dòng traffic đến từ cùng một địa chỉ IP nguồn. Kết quả dump và phân tích các packet nhận được tại IPTables và Sniffer được thể hiện ở hai hình sau: Hình 3.5a Các packet nhận được trên tường lửa IPTables Hình 3.5b Các packet nhận được trên server Sniffer Như vậy, Tcpdump đã cho thấy, nhờ sự quan sát và hành động của Sniffer và IPTables mà các packet xuất phát từ IP: 10.7.7.100 (với lượng lớn) đã bị chặn lại ở IPTables. Hầu hết các sản phẩm firewall mã nguồn mở đều cho phép tương tác với nó thông qua cơ chế dòng lệnh, nên việc chúng tôi sử dụng IPTables trong các kịch bản thử nghiệm và đánh giá của mình vẫn không làm mất tính tổng quát của mô hình đề xuất. N. K. Tuấn, N. T. Thuận, Phan Long / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 03(40) (2020) 16-25 25 Từ kết quả đánh giá, chúng tôi tin tưởng rằng hệ thống đề xuất hoàn toàn có thể đóng vai trò phát hiện và xâm nhập trái phép vào mạng nội bộ doanh nghiệp như các hệ thống IDS và firewall riêng lẻ khác trên thị trường sản phẩm an toàn thông tin. 4. Kết luận Trong bài báo này, chúng tôi đề xuất và đã triển khai thành công một mô hình mới trong việc kết hợp hoạt động giữa IDS và firewall mã nguồn mở IPTables. Chúng tôi cũng đã xây dựng được chương trình Sniffer đảm nhận vai trò IDS của hệ thống mạng. Sự cập nhật bảng luật này là hoàn toàn tự động nên có tính tức thời rất cao. Tính chính xác trong việc đưa ra nhận định về các hành động đáng ngờ của một IDS vừa phụ thuộc vào việc thu thập và phân tích thông tin, từ những dòng traffic vào/ra mạng, vừa phụ thuộc vào khả năng thống kê và dự báo của nó. Có thể nói, “trí tuệ” của bộ phận này quyết định rất lớn đến độ chính xác trong việc nhận định dòng traffic nào là có hành động đáng ngờ trong số rất nhiều dòng traffic đi qua IDS. Cũng vậy, với khả năng “giả mạo” và “đánh lừa” ngày càng cao của hacker trên không gian mạng, nếu không có “trí tuệ” cao thì IDS khó có thể xác định chính xác một packet nào đó là có mang theo mã độc hay không. Hạn chế của Sniffer của chúng tôi là “trí tuệ” của nó còn thấp. Trong tương lai chúng tôi sẽ cải thiện “trí tuệ” của Sniffer bằng cách xây dựng nó theo hướng tiếp cận Machine learning [5]. Tài liệu tham khảo [1] Kanika & Urmila, “Security of Network Using IDS and Firewall”, International Journal of Scientific and Research Publications, vol. 3, iss. 6, June 2013. [2] Waleed Bul'ajoul, Anne James & Mandeep Pannu, “Improving network intrusion detection system performance through quality of service configuration and parallel technology”, Journal of Computer and System Sciences, pp. 981-999, vol. 81, iss. 6, September 2015. [3] D. Ashok Kumar & S.R Venugopala, “Intrusion Detection Systems: A review”, International Journal of Advanced Research in Computer Science, vol. 8 , no. 8, Octorber 2017. [4] Mrinal Wahal, Tanupriya Choudhury & Manik Arora, “Intrusion Detection System in Python”, 8th International Conference on Cloud Computing, Data Science & Engineering, pp. 348-353, August 2018. [5] Suad Mohamed Othman, Fadl Mutaher Ba-Alwi, Nabeel T.Alsohybe & Amal Y.Al- Hashida,“Intrusion detection model using machine learning algorithm on Big Data environment”, Journal of Big Data, no. 34, September 2018.
File đính kèm:
- tu_dong_hoa_viec_cap_nhat_bang_luat_loc_goi_cho_cac_firewall.pdf