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

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ở trang 1

Trang 1

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ở trang 2

Trang 2

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ở trang 3

Trang 3

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ở trang 4

Trang 4

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ở trang 5

Trang 5

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ở trang 6

Trang 6

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ở trang 7

Trang 7

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ở trang 8

Trang 8

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ở trang 9

Trang 9

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ở trang 10

Trang 10

pdf 10 trang xuanhieu 5260
Bạn đang xem 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ở", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

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ở

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:

  • pdftu_dong_hoa_viec_cap_nhat_bang_luat_loc_goi_cho_cac_firewall.pdf