CHƯƠNG 4: TRIỂN KHAI HỆ THỐNG PHÁT HIỆN XÂM NHẬM

Một phần của tài liệu xây dựng hệ thống phát hiện và phòng chống xâm nhập (NIDS) mô phỏng trên phần mềm snort (Trang 62 - 74)

4.1. Giới thiệu về phần mềm Snort.

Snort được phát triển năm 1988 bởi Source và CTO Martin Roesch, là một phần mềm miễn phí mã nguồn mở có khả năng phát hiện và phòng chống xâm nhập trái phép vào hệ thống mạng, có khả năng phân tích thời gian thực lưu lượng mạng và ghi log gói tin trên nền mạng IP. Ban đầu được gọi là công nghệ phát hiện và phòng chống xâm nhập hạng nhẹ, Snort đã dần phát triển thành tiêu chuẩn trong việc phát hiện và phòng chống xâm nhập.

Snort có thể thực hiện phân tích các giao thức và tìm kiếm nội dung, từ đó có thể phát hiệ rất nhiều kiểu thăm dò và tấn công như buffer-overflow, stealth port scanning, tấn công CGI, OS fingerprint, thăm dò SMB. Để có thể làm được điều này, Snort dùng một loại ngôn ngữ mô tả các quy tắc giao thông mạng mà nó sẽ thu thập hoặc bỏ qua, cũng như sử dụng cơ chế phát hiện xâm nhập theo kiến trúc modular plugin. Snort cũng có khả năng cảnh báo tức thời, kết hợp với các cơ chế cảnh báo syslog, tập tin người dùng chỉ định, Unix socket hoặc winpopup message.

Snort chủ yếu là một IDS dựa trên luật, tuy nhiên các input plug-in cũng tồn tại để phát hiện sự bất thường trong các header của giao thức.

Snort sử dụng các luật được lưu trữ trong các file text, có thể được chỉnh sửa bởi người quản trị. 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 các file khác nhau. File cấu hình chính của Snort là snort.conf. Snort đọc những luật này vào lúc khởi tạo và xây dựng cấu trúc dữ liệu để cung cấp các luật để bắt giữ dữ liệu. Tìm ra các dấu hiệu và sử dụng chúng trong các luật là một vấn đề đòi hỏi sự tinh tế, vì bạn càng sử dụng nhiều luật thì năng lực xử lý càng được đòi hỏi để thu thập dữ liệu trong thực tế. Snort có một 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 và bạn cũng có thể thêm vào

các luật của chính bạn. Bạn cũng có thể xóa một vài luật đã được tạo trước để tránh việc báo động sai.

Snort có thể sử dụng với 3 kiểu chính:

• Packet sniffer như tcpdump • Packet logger

• Hệ thống phát hiện và phòng chống xâm nhập hoàn chỉnh

4.2. Thành phần của Snort

Snort được chia thành nhiều thành phần khác nhau. Những thành phần này làm việc với nhau để phát hiện các cách tấn công cụ thể vào tạo ra output theo một định dạng được đòi hỏi. Một hệ thống được xây dựng có thể được biểu diễn như hình, Và trên đó các thành phần chính của snort cũng đã được liệt kê [1],[2],[3].

Hình 4.1 : Các thành phần của snort [1],[3]

• Packet Decoder. • Preprocessor. • Detection Engine.

• Logging và Alearting System. • Output Modules.

4.2.1. Packet Decoder (bộ phân giải mã gói)

Bộ phận giải mã gói lấy các gói từ các giao diện mạng khác nhau và chuẩn bị cho việc gói tin được xử lí trước hoặc được gửi cho bộ phận phát hiện[1].

4.2.2. Preprocessor (bộ phận tiền xử lý).

Bộ phận xử lí trước là những thành phần được sử dụng với Snort để sắp xếp hoặc chỉnh sửa gói dữ liệu trước khi bộ phận phát hiện làm một vài xử lý để tìm ra gói tin có được sử dụng bởi kẻ xâm nhập hay không. Một vài bộ phận xử lý trước cũng thực thi việc phát hiện bằng cách tìm các dấu hiệu bất thường trong header của gói tin và tạo ra các cảnh báo. Bộ phận xử lí trước là rất quan trọng trong bất kì IDS nào, chúng chuẩn bị cho các gói dữ liệu được phân tích dựa trên các luật trong bộ phận phát hiện. Kẻ tấn công sử dụng nhiều kĩ thuật khác nhau để lừa IDS theo nhiều cách. Bộ phận xử lí trước cũng được sử dụng để tái hợp các gói tin. Trên IDS, trước khi áp dụng bất kì luật nào, bạn phải tái hợp các gói tin lại để tìm ra các dấu hiệu. Bộ phận xử lí trước trong Snort có thể tái hợp các gói tin, giải mã HTTP, URL, ráp lại các dòng TCP. Những chức năng này rất quan trọng trong hệ thống phát hiện xâm nhập[1].

4.2.3. Detection Engine (bộ phận phát hiện)

Đây là phần quan trọng nhất của Snort. Trách nhiệm của nó là phát hiện có sự xâm nhập tồn tại trong gói tin hay không. Bộ phận phát hiện sử dụng các luật của Snort cho mục đích này. 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. Dựa vào bộ phận phát hiện mạnh như thế nào và bao nhiêu luật bạn định nghĩa mà nó có thể tốn những khoảng thời gian khác nhau đối với các gói tin khác nhau. Nếu lưu lượng trên mạng là quá lớn khi Snort đang hoạt động trong chế độ NIDS, bạn có thể mất một vài gói tin và có thể thời gian đáp ứng không chính xác. Lưu lượng trên bộ phận phát hiện phụ thuộc vào các yếu tố sau:

• Số lượng các luật.

• Tốc độ của bus được sử dụng truyền dữ liệu. • Lưu lượng trên mạng.

• Logging và alerting System (hệ thống ghi và cảnh báo).

Phụ thuộc vào Dectection Engine phát hiện tìm thấy trong gói tin, gói tin có thể được sử dụng để ghi lại các hành vi hoặc tạo ra một cảnh báo. Các thông tin ghi lại được giữ trong các file text đơn giản hoặc các dạng khác.

Output Modules (Bộ phận đầu ra): module đầu ra hoặc plug-in có thể hoạt động theo nhiều cách phụ thuộc vào việc muốn lưu các output được tạo ra bằng hệ thống ghi và tạo cảnh báo như thế nào.

4.3. Các chế độ hoạt động của Snort. 4.3.1. Sniffer.

Các công cụ sniffer mạng như tcpdump, ethereal, và Tethereal có đầy đủ các đặc tính và phân tích gói tin một cách xuất sắc nó theo dõi lượng mạng trên bộ cảm biến Snort. Kết quả xuất của chế độ Snort sniffer hơi khác so với các sniffer khác. Nó rất dễ để đọc và có thể thấy thích khả năng bắt giữ gói tin nhanh. Một đặc tính hay của chế độ này là việc tóm tắt lưu lượng mạng khi kết thúc việc bắt giữ gói tin.

Bật chế độ sniffer cho snort bằng cờ -v: Code:

#snort –v

Trong lúc khởi động, Snort hiển thị chế độ, thư mục ghi log, và các giao diện mà nó đang lắng nghe. Khi việc khởi động hoàn tất, Snort bắt đầu xuất các gói tin ra màn hình. Kết quả xuất này khá cơ bản: nó chỉ hiển thị các header IP, TCP/UDP/ICMP và một số cái khác.

Để xem dữ liệu ứng dụng, sử dụng cờ -d. Tùy chọn này cung cấp các kết quả chi tiết hơn:

Dữ liệu ứng dụng có thể thấy được qua các plain text trong gói tin.Trong trường hợp này, văn bản gửi từ một server DNS được thể hiện dưới dạng plain text.

Để xem được chi tiết hơn, bao gồm các header lớp liên kết dữ liệu, sử dụng cờ -e. Việc sử dụng cả hai tùy chọn –d và –e sẽ cho hiển thị hầu như tất cả các dữ liệu trong gói tin:

Code: # snort –vde

Các chuỗi thập lục phân hiển thị nhiều dữ liệu hơn.Có địa chỉ MAC và địa chỉ IP.Khi thực hiện kiểm tra trên một mạng hoặc bắt giữ dữ liệu bằng Snort, việc bật –vde cung cấp nhiều thông tin nhất.

Để lưu lại trong logfile thay vì xuất ra console, sử dụng: Code:

# snort -dve > alertfile.log.

Tóm lại, đây là các tùy chọn có thể sử dụng với chế độ sniffer của Snort. Những tùy chọn này có thể chạy độc lập hoặc kết hợp với cái khác.

4.3.2. Logger

Việc ghi log chỉ đơn giản bằng cách thêm tùy chọn –l, theo sau đó là thư mục muốn lưu trữ các log. Thư mục mặc định trong Snort là /var/log/snort. Có thể sử dụng các tùy chọn –d, -a và –e để điều khiển số lượng thông tin sẽ được ghi log cho mỗi gói tin.

Trong ví dụ sau đây, thư mục log được thiết lập là /usr/local/log/snort, và các logfile bao gồm các payload gói tin:

Code:

# snort -1/usr/local/log/snort –d

Khi chạy trong chế độ này, Snort thu thập mỗi gói tin nó thấy và lưu chúng trong thư mục log theo kiểu phân cấp. Snort lưu các gói tin thành các file ASCII, với tên file được tạo ra từ giao thức và số cổng. Cách tổ chức này làm cho nhà quản trị có thể dễ dàng thấy được ai đang kết nối với mạng, số cổng và giao thức họ đang sử dụng (sử dụng ls –R để liệt kê thư mục log).

Tuy nhiên, thư mục log có thể ngày càng nhiều vì sự gia tăng thư mục và các file. Nếu ghi log tất cả lưu lượng trên một mạng lớn thì có thể sẽ bị tràn index Unix (giới hạn tổng số file trong một file hệ thống) trước khi bị tràn bộ nhớ. Nếu một người nào đó thực hiện việc quét mạng và ánh xạ tất cả 65536 cổng TCP cũng như 65536 cổng UDP, sẽ đột ngột có hơn 131000 file trong một thư mục đơn. Sự bùng nổ file này có thể là một thử thách lớn cho bất kì một máy nào, và rất dễ trở thành cách tấn công DOS. Việc ghi log theo kiểu nhị phân có thể đọc được bởi Snort, tcpdump hoặc ethereal. Cách này làm tăng tốc độ và khả năng vận chuyển của việc bắt giữ gói tin.

Để ghi log các gói tin theo kiểu nhị phân, sử dụng –b switch. Ví dụ:

Code:

#snort-b -l /usr/local/log/snort/ttoip.log

Khi đã thực hiện việc bắt giữ gói tin, có thể đọc lại các file vừa tạo ra bằng khóa –r. Kết quả giống như sniffer của Snort. Lưu ý rằng –r không thể sử dụng với –C.

Code:

# snort -r /usr/local/log/snort/ttoip.log

Ở chế độ này, Snort không giới hạn việc đọc dữ liệu nhị phân được lưu trữ trong chế độ sniffer.

4.3.3. NIDS

Khi được sử dụng như là một NIDS, Snort cung cấp khả năng phát hiện xâm nhập gần như là thời gian thực. Trong chế độ cảnh báo, Snort cần một file cấu hình (thật ra, chỉ cần xác định vị trí của file snort.conf là đặt Snort trong chế độ này). Vị trí mặc định của file này là /etc/snort.conf. Nếu muốn đặt ở một vị trí khác, phải sử dụng khóa –c kèm với vị trí đặt file. Các cảnh báo được đặt trong file alert trong thư mục log (mặc định là (/var/log/snort).

Các cài đặt mặc định cho hầu như tất cả các mục trong file này là khá tốt (mặc dù sẽ có các cảnh báo nhầm). Biến duy nhất chúng ta mới thiết lập là biến RULE_PATH, chỉ cho Snort nơi của các file luật. File cảnh báo nằm trong thư mục /var/log/snort. File này chứa các cảnh báo được tạo ra khi Snort đang chạy. Các cảnh báo Snort được phân loại theo kiểu cảnh báo. Một luật Snort cũng xác

định một mức độ ưu tiên cho một cảnh báo. Điều này cho phép lọc các cảnh báo có độ ưu tiên thấp.

4.4. Kết luận

Trong chương này trình bày cho chúng ta biết về phần mềm mã nguồn mở Snort, các thành phần của snort và các chế độ hoạt động của snort.

Dựa trên cơ sở đó cho phép chúng ta có thể triển khai những mô hình phù hợp cho hệ thống của mình. Chúng ta nên chọn mô hình HIDS, NIDS hoặc kết hợp cả hai trong hệ thống mạng của chúng ta đều được.

Hệ thống cảnh báo ở những chế độ khác nhau :

 Lưu lại cảnh báo hệ thống trong file log.

 Chế độ cảnh báo thông qua giao diện đồ họa là BASE.

 Chúng có thể xem và thống kê in ra trên report web.

 Cảnh báo thông qua mail hoặc SMS qua điện thoại di động thông qua tin nhắn.

CHƯƠNG 5: GIỚI THIỆU SNORT RULE

Marty Roesch, tác giả của Snort, ngay từ đầu đã chọn cách tạo ra một cú pháp đơn giản và có tính mở rộng để viết rule, điều này cho phép người dùng trên toàn thế giới tạo ra một trong những dấu hiệu nhận dạng (signature) toàn diện nhất có sẵn cho mọi hệ IDS [1].

Mỗi rule có thể được sửa đổi riêng biệt. Ngoài ra các rule có thể được tự tạo ra từ đầu và hoàn toàn sử dụng được với Snort, điều này cho phép người dùng tùy chọn tinh chỉnh để tạo ra các quy tắc làm cho Snort trở thành một ứng dụng bảo mật thật sự thực dụng cho nhu cầu hiện nay[1], [2],[4].

Cấu trúc của một rule: Gồm 2 phần rule header, rule option.

 Rule header : chứa thông tin về hành động mà luật sẽ thực hiện. Tiêu chuẩn của việc so sánh luật trên một gói tin [1], [2],[4].

 Rule option: chứa thông điệp cảnh báo. Và thông tin thông tin về phần nào của gói tin được sử dụng để tạo ra cảnh báo [1], [2],[4].

Hình 5.1. Cấu trúc một rule trong snort [4].

5.1. Rule header

Rule header quy định loại cảnh báo loại giao thức, địa chỉ IP, Ports được giám sát trong dấu hiệu nhận dạng[2][4][6].

Cú pháp:

Rule_action protocol source_address_range source_port_range dicrection_operator destination_address_range destination_port_range

a. Rule action: Thông số đàu tiên quy định Snort sẽ làm gì khi các gói tin phù hợp với rule.Có 3 lựa chọn:

o Alert o Log o Pass

o Drop (action riêng, mới của Snort Inline)

b. Protocol: Snort hỗ trợ 3 loại giao thức tại rule header : TCP,UDP, và ICMP

c. Director operator: Chỉ đình cho Snort biết hướng sẽ áp dụng: ->, <> d. Source and destination IP address: Snort hỗ trợ khai báo theo nhiều dạng: 1 vùng địa chỉ với netmask, hỗn hợp vừa dùng địa chỉ, khai báo qua biến hoặc kiểu loại trừ với dấu “!”.

e. Source and destination Ports: Snort hỗ trợ khai báo 1 port, 1 dải port hoặc loại trừ.

5.2. Rule Option

Đây chính là phần nhận biết và được quy định ưu tiên. Phần dấu hiệu này được chỉ định bởi một hay nhiều từ khóa lựa chọn. Những từ khóa lựa chọn này dùng để xây dựng nên dấu hiệu nhận biết cho lưu thông mạng mà ta muốn Snort giám sát.Các từ kháo lựa chọn này được phân làm các loại sau[1], [2],[4]:

5.2.1. Các từ khóa lựa chọn liên quan đến nội dung (Content related)

Từ khóa lựa chọn quan trọng nhất liên quan đến việc kiểm tra nội dung, dùng để giám sát một mẫu đặc trưng trong phần tải cảu gói tin (packet’s payload). Các từ khóa lựa chọn liên quan đến nội dung chiếm khoảng 75% trong bộ rule của Snort, tuy nhiên việc sử dụng chúng cần rất cẩn thận vì chúng thường chiếm nhiều tài nguyên. Vì vậy, người ta thường hạn chế vùng tiềm kiếm trong payload của gói tin bằng cách giới hạn tìm kiếm bằng các từ khóa offset, depth, flow [1], [2],[4]. Bao gồm các từ khóa sau:

o Content o Uricontent o Nocase o Offset

o Depth o Regex

5.2.2. Các từ khóa lựa chọn liên quan đến phiên làm việc (Session related)

o Flow: to_client, to_server, from_client, from_server. Ngoài ra có thể áp dụng rule cho các trạng thái riêng của phiên làm việc TCP bằng 2 thông số: established, stateless.

o Session.

5.2.3. Các từ khóa lựa chọn liên quan đến IP (ip related)

Dùng để kiểm tra các thông số chứa trong IP Header, bao gồm: o TTL

o Tos o Id

o Ipopts (eol, sec, nop, ts, satid, rr,lsrr, ssrr)

o Fragbits (M-More Fragments, D-Don’t Fragments,R-Reserved Bit, +, -, !) o Dsize

o Ip_proto: quy định các loại giao thức.

Bảng 5.1 Quy định các loại giao thức

0 IP 1 ICMP 2 GGP 6 TCP 8 EGP 12 PUP 17 UDP 22 IDP o Sameip o Fragoffset

5.2.4. Các từ khóa lựa chọn liên quan đến TCP (TCP related)

o Flags (TCP flags)

S SYN A ACK R Reset P Push U Urgent 0 No TCP Flags set 1 Reserved-Bit #1 2 Reserved-Bit #2 o Seq o Ack

5.2.5. Các từ khóa lựa chọn liên quan đến ICMP (ICMP related)

o Itype

Bảng 5.3 Các từ khóa lựa chọn Itype liên quan đến ICMP

0 Echo reply 1 Unassigned 2 Unassigned 3 Destination unreachable 4 Source quench 5 Redirect

6 Alternate host address

7 Unassigned 8 Echo 9 Router advertisement 10 Router Selection 11 Time Exceeded 12 Parameter problem 13 Timestamp 14 Timestamp reply 15 Information request 16 Information reply

17 Address mask request

18 Address mask reply

19-29 Reserved (for robustness experiment)

30 Traceroute

31 Datagram conversion error

32 Mobile host redirect

33 IPv6 where-are-you

34 IPv6 I-am-here

36 37-255 Mobile registration reply Reserved o Icode

Bảng 5.4 Các từ khóa lựa chọn Icode liên quan đến ICMP

Một phần của tài liệu xây dựng hệ thống phát hiện và phòng chống xâm nhập (NIDS) mô phỏng trên phần mềm snort (Trang 62 - 74)