









Preview text:
BÀI THỰC HÀNH SỐ 2
CÀI ĐẶT VÀ CẤU HÌNH HỆ THỐNG PHÁT HIỆN XÂM NHẬP SNORT Mục đích:
• Sinh viên hiểu được vai trò của hệ thống phát hiện xâm nhập trong các giải pháp phòng chống tấn công mạng
• Làm quen với hệ thống phát hiện xâm nhập Snort
• Rèn luyện kỹ năng cấu hình hệ thống Snort theo yêu cầu Môi trường thực hành:
• Công cụ thực hành: Snort, nmap, hping3,…
• HĐH: Linux Ubuntu/Windows
I. Giới thiệu về hệ thống phát hiện xâm nhập Snort
Snort là một hệ thống IDPS (Instruction Detection System – Hệ thống phát hiện xâm nhập) mà nguồn mở
Có nhiệm vụ giám sát những gói tin (packet) vào ra hệ thống mạng. Snort có thể thực hiện phân tích giao
thức và tìm kiếm nội dung từ đó phát hiện nhiều kiểu thăn dò và tấn công khác nhau.
Khi Snort phát hiện một cuộc tấn công thì nó có thể phản ứng bằng nhiều cách khác nhau tùy thuộc vào
cấu hình mà người quản trị mạng thiết lập, chẳng hạn như nó có thể gửi thông điệp cảnh báo đến nhà
quản trị hay loại bỏ gói tin khi phát hiện có sự bất thường đối với gói tin đó.
Snort hoạt động dựa trên các luật (rule) xây dựng sẵn và phải được cập nhật thường xuyên. Mỗi luật đại
diện cho một cuộc tấn công. Khi có một gói tin đến hệ thống nó sẽ được áp vào tập luật, nếu có sự trùng
khớp Snort sẽ phản ứng lại cấu hình được cài đặt.
1. Các thành phần chính của Snort Snort gồm 5 module chính:
- Module giải mã gói tin (Packet Decoder)
- Module tiền xử lý (Preprocesssor)
- Module phát hiện (Detection Engine)
- Module Log và cảnh báo (Logging and Alerting System)
- Module kết xuất thông tin (Output module) 2. Tập luật
Các luật của Snort đều có 2 phần logic là header và options 2.1. Rule header
Phần Header chứa thông tin về hành động mà luật đó sẽ thực hiện khi phát hiện ra có xâm nhập nằm trong
gói tin và nó cũng chứa các tiêu chuẩn để áp dụng luật với gói tin đó. Cấu trúc chung của rule header như sau: Action Protocol Address -
Action: là phần qui định loại hành động nào được thực thi khi các dấu hiệu của góitin được nhận
dạng chính xác bằng luật đó. Thông thường, các hành động tạo ra một cảnh báo hoặc log thông điệp hoặc
kích hoạt một luật khác. -
Protocol: là phần qui định việc áp dụng luật cho các packet chỉ thuộc một giaothức cụ thể nào đó.
Ví dụ như IP, TCP, UDP …Chú ý rằng có 2 trường địa chỉ trong rule. Địa chỉ nguồn và đích được xác định
dựa trên trên trường direction. -
Address: là phần địa chỉ nguồn và địa chỉ đích. Các địa chỉ có thể là một máy đơn,nhiều máy hoặc
của một mạng nào đó. Cú pháp của phần này như sau:
Địa chỉ IP nguồn Số hiệu cổng nguồn -> Địa chỉ IP đích Số hiệu cổng đích
- Port: xác định các cổng nguồn và đích của một gói tin mà trên đó luật được ápdụng. Trong giao thức
TCP/UDP, port xác định cổng nguồn và đích của gói khi rule áp dụng lên đó. Trong trường hợp những
giao thức lớp network như IP và ICMP, port numbers không có ý nghĩa.
- Direction: phần này sẽ chỉ ra đâu là địa chỉ nguồn, đâu là địa chỉ đích. 2.2 Rule Options
Phần rule option nằm sau phần rule header, được bao bọc bằng 2 dấu ngoặc đơn. Khi có nhiều options
khác nhau thì các options này được ngăn cách với nhau bởi dấu “;”. Mỗi option thường có 2 phần, từ khóa
và đối số, được phân chia với nhau bởi dấu “:”.
Các hành động được định nghĩa trong phần header chỉ được thực thi khi tất cả các tiêu chuẩn trong phần options được thỏa mãn.
Một số options thường được sử dụng:
Các tùy chọn cơ bản Keyword Mô tả msg
Từ khóa msg định nghĩa nội dung thông điệp cảnh báo cho các module logging và alert reference
Từ khóa reference cho phép luật có thể bao gồm các tài liệu tham khảo tới các hệ
thống nhận dạng tấn công bên ngoài gid
Từ khóa gid (general id) được sử dụng để xác định những phần của Snort tạo ra sự
kiện khi khi một luật cụ thể được khởi động. Vd: gid 1 tới 100 được dành riêng cho
bộ phận tiền xử lý và bộ giải mã (decoder). sid
Từ khóa sid được sử dụng để định danh duy nhất một luật Snort, giúp output plugin
nhận diện luật dễ dàng hơn. Nên được sử dụng cùng từ khóa rev rev
Từ khóa rev được sử dụng để nhận diện, phân biệt các phiên bản của một luật Snort.
Cho phép câp nhật các dấu hiệu và mô tả trong luật. classtype
Từ khóa classtype được sử dụng để phân loại một luật priority
Thẻ priority đánh dấu các mức độ ưu tiên của luật. Chỉ số càng cao, độ ưu tiên càng
thấp. Khi một gói tin khớp với các luật có độ ưu tiên khác nhau, trong chế độ NIDS
thì sẽ phát đi thông báo(msg) của luật có độ ưu tiên cao hơn. metadat a
Từ khóa metadata cho phép một người viết luật giải thích thêm thông tin về các luật,
thường ở dạng key-value.
Format: metadata: engine shared, soid gid|sid, service http
Các tùy chọn cho luật dựa trên phân tích nội dung gói tin Từ khóa Mô tả content
Từ khóa content dùng để tìm kiếm chính xác 1 chuỗi kí tự (string) ở bất kì vị trí nào
bên trong gói tin. Từ khóa này có rất nhiều từ
khóa đi kèm được sử dụng để thay đổi hoạt động của content. Vd: để xác định vị trí
của chuỗi kí tự cần tìm kiếm với từ khóa “offset” hay độ dài tìm kiếm với “depth”. rawbytes
Từ khóa rawbytes cho phép các luật theo dõi phần dữ liệu thô (chưa giải mã) của
gói, bỏ qua bất cứ phần giải mã nào đã được module tiền xử lý giải mã trước đó. Đa
số các bộ tiền xử lý sử dụng dữ liệu giải mã cho phần nội dung được so sánh 1 cách
mặc định, nếu rawbytes không được chỉ định 1 cách rõ ràng. Bởi vậy, rawbytes nên
được xác định để kiểm tra dữ liệu thô tùy ý từ các gói tin. depth
Từ khóa depth cho phép người viết luật xác định số bytes đầu tiên trong gói tin mà
Snort sẽ tìm kiếm. Khoảng giá trị của depth là từ 1 – 65535. offset
Từ khóa offset cho phép người viết luật xác định nơi bắt đầu tìm kiếm trong gói tin. distance
Từ khóa distance cho phép người viết luật xác định số bytes cần bỏ qua tính từ phần
phù hợp trước trong gói tin trước khi bắt đầu tìm kiếm. Nó làm việc giống hệt từ
khóa offset, chỉ khác là thay vì bắt đầu tìm kiếm từ đầu gói tin thì distance tìm kiếm
từ vị trí kết thúc của phần so sánh trước. within
within: n giúp tìm kiếm nội dung content trong n bytes. Từ khóa này được thiết kế
để sử dụng kết hợp với tùy chọn distance. fastpattern
Khi chọn được 1 content là fast-pattern, Snort sẽ tìm kiếm chuỗi đó trong gói tin,
nếu khớp, Snort mới tiếp tục tìm những chuỗi content khác, nếu không khớp, Snort
sẽ bỏ qua các chuỗi phía sau cùng câu luật. isdataat
Từ khóa isdataat xác nhận rằng payload có dữ liệu tại một vị trí quy định. pcre
Đi cùng 1 biểu thức chính quy regex để so khớp chuỗi ký tự byte_test
Kiểm tra 1 trường byte có vượt quá 1 giá trị xác định .Có khả năng kiểm tra giá trị
nhị phân hoặc chuyển đổi chuỗi byte về dạng nhị phân tương đương và kiểm tra chúng. byte_jump
Cho phép bỏ qua 1 số byte nào đó trước khi bắt đầu tìm kiếm trong gói tin. Thường
là bỏ qua độ dài mã hóa của protocol.
Các tùy chọn cho luật dựa trên phân tích tiêu đề gói tin Từ khóa Mô tả ttl
Dùng để kiểm tra giá trị time to live trong tiêu đề IP. tos
Dùng để phát hiện giá trị trong trường Type of service của phần tiêu đề IP. id
Dùng để so sánh các trường ID trong phần IP header. ipopts
Dùng để phát hiện bất kì cố gắng tìm kiếm đường đi trong mạng của hacker. fragbits
Trong IP header có 3 bit để đánh dấu cho việc phân mảnh và tái hợp. fragbit giúp
kiểm tra các bit này có được thiết lập trong IP header hay không. dsize
Dùng để kiểm tra kích thước gói dữ liệu của 1 gói tin. flags
Dùng để xác định xem có flag bit nào được thiết lập trong tiêu đề gói TCP. flow
Cho phép luật chỉ áp dụng trên phiên TCP cho gói tin chiều xác định của lưu lượng. flowbits
Cho phép luật theo dấu các trạng thái của phiên seq
Dùng để kiểm tra sequence number của 1 gói tin TCP. ack
Dùng để kiểm tra TCP acknowledge number .
Các tùy chọn cho luật sau khi phát hiện xâm nhập Từ khóa Mô tả logto
Ghi lại tất cả các gói tin mà kích hoạt luật vào một file nhật ký session
Trích xuất dữ liệu người dùng từ TCP Sessions. resp Đóng phiên làm việc react
Gửi thông báo tới địa chỉ nguồn của lưu lượng và đóng phiên làm việc tag
Gắn thẻ cho các lưu lượng theo sau gói tin kích hoạt luật replace
Thay thế các nội dung phù hợp với chuỗi cho trước có cùng chiều dài. Chỉ có sẵn trong chế độ inline.
II. Nhiệm vụ thực hành 1. Cài đặt môi trường
1.1. Sơ đồ triển khai
Để thực hiện nội dung thực hành, chúng ta sẽ cài đặt một môi trường mình họa như hình dưới đây. Trong đó:
- Snort Server: Minh họa cho một hệ thống Network-based IDPS để bảo vệ cho vùng mạng bên trong có
địa chỉ là 172.16.x.0 /24. Snort Server có cổng mạng, được gán địa chỉ 192.168.x.4 /24, kết nối với mạng bên ngoài.
- Attacker: Minh họa cho vùng mạng bên ngoài. Địa chỉ của Attacker là
192.168.x.100 /24. Trên máy Attacker, chúng ta sẽ thực hiện các hành vi tấn công tới Snort Server và mạng bên trong. Lưu ý:
- Thay x bằng số thứ tự của sinh viên trong danh sách.
- Do hạn chế của tài nguyên tính toán trên máy tính cá nhân, chúng ta không mô phỏng các nút của
mạng bên trong. Điều này không làm ảnh hưởng đến các thao tác trong bài thực hành.
1.2. Triển khai Snort Server - Bước 1: Download máy ảo Snort Server ở địa chỉ sau:
https://drive.google.com/file/d/1AUpYWd9rywfTESmeZbAPkO6akcjUlH2T/view - Bước 2: Triển khai
máy ảo Snort Server tương tự như thao tác trong Bài tập số 2 - Bước 3: Khởi động máy ảo và đăng
nhập với tài khoản sau: Username: admin Password: 123456 -
Bước 4: Trên màn hình máy ảo lựa chọn nhấp chuột phải vào biểu tượng kết nối mạng -
Bước 5: Chọn cạc mạng Wired connection 2 và nhấn Edit… -
Bước 6: Chọn thẻ IPv4 Settings và chọn Method là Manual -
Bước 7: Nhấn nút Add và thiết lập các thông số địa chỉ IP cho cạc mạng này với địa chỉ IP như sau: Address: 192.168.x.4 Netmask: 24 -
Bước 8: Nhấn nút Save để hoàn tất
1.3. Triển khai Attacker
- Bước 1: Download máy ảo Attacker ở địa chỉ sau:
https://drive.google.com/file/d/13k-lKAOvedBqfQzNCCA4rKa9bdKXvAn_/view
- Bước 2: Triển khai máy ảo Attacker tương tự như thao tác trong Bài tập số 2
- Bước 3: Khởi động máy ảo và đăng nhập với tài khoản sau: Username: attacker Password: 123456
Thực hiện các bước tiếp theo tương tự như triển khai Snort Server. Cấu hình thông số địa chỉ IP cho máy Attack như sau: o Address: 192.168.x.100 Netmask: 24 Gateway: 192.168.x.4
2. Kết quả cần đạt
- Thiết lập đúng thông số hoạt động cho Snort
- Định nghĩa được các luật phát hiện tấn công thăm dò
- Định nghĩa được các luật phát hiện các kỹ thuật tấn công từ chối dịch vụ: Ping of Death, TCP SYN Flood 3. Nhiệm vụ 1
3.1. Thiết lập thông số hoạt động cho Snort -
Bước 1: [Server] Mở cửa sổ Terminal và thực hiện lệnh ifconfig để xem thông tin các kết nối mạng của
máy chủ. Hình sau minh họa kết quả.
Có thể thấy máy chủ có cổng mạng eth16 có địa chỉ là 192.168.117.4
Lưu ý: Sinh viên căn cứ vào kết quả thực hiện câu lệnh trên môi trường đã triển khai để xác định các
thông tin tương tự. -
Bước 2: [Server] Thực hiện lệnh sudo gedit /etc/snort/snort.conf mở file cấu hình của Snort để chỉnh sửa -
Bước 3: [Server] Thay đổi giá trị của biến HOME_NET thành địa chỉ của cổng mạng trên máy chủ. Dưới
đây là hình ảnh minh họa với địa chỉ 192.168.117.4 -
Bước 4: [Server] Tạo biến INTERNAL_NET là địa chỉ của mạng bên trong. -
Bước 5: [Server] Thay đổi giá trị biến EXTERNAL_NET để chỉ đến tất cả các mạng bên ngoài
[Server] Lưu lại thay đổi đã thực hiện file snort.conf
3.2. Thiết lập luật phát hiện tấn công thăm dò
- Bước 6: [Server] Thực hiện lệnh sudo gedit /etc/snort/rules/local.rules để thêm các luật phát hiện.
- Bước 7: [Server] Thêm luật có nội dung như sau để phát hiện tấn công ICMP Ping Scan từ mạng bên
ngoài tới mạng bên trong
alert icmp $EXTERNAL_NET any -> $INTERNAL_NET any (msg:" ICMP Ping Scan detected";
sid:1000001; rev:1; classtype:network-scan;) Trong đó:
Phần tiêu đề của luật alert: Rule action là phát thông điệp cảnh báo Áp
dụng luật cho các gói tin có những đặc điểm sau: icmp: Gói tin ICMP
$EXTERNAL_NET any: địa chỉ IP nguồn và số hiệu cổng nguồn là bất kỳ ở mạng bên ngoài
-> Hướng của lưu lượng từ nguồn tới đích
$INTERNAL_NET any: địa chỉ IP đích là địa chỉ máy chủ và số hiệu cổng đích là bất kỳ
Phần tùy chọn của luật msg:”ICMP Ping Scan detected”: Nội dung thông
điệp cảnh báo sid:10000001: ID của luật(các giá trị <1000000 là dành
riêng) rev:1: Phiên bản của luật
classtype:network-scan: Phân loại sự kiện này là hành vi quét mạng
Với luật này, Snort sẽ phát cảnh báo nếu như có gói tin ICMP gửi từ mạng bất kỳ bên ngoài tới máy
chủ. Vì vậy, luật này được kích hoạt nếu có một nút bên ngoài thực hiện thăm dò bằng kỹ thuật ICMP Ping Scan tới máy chủ.
- Bước 8: [Server] Thêm luật có nội dung như sau để phát hiện hành vi quét cổng dịch vụ tới máy chủ Snort Server.
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:”TCP SYN Scan detected”; flags:S;
detection_filter:track by_src, count 30, seconds 60; sid:1000002; rev:1; classtype:network-scan;) Trong đó
Phần tiêu đề của luật alert: Rule action là phát thông điệp cảnh báo Áp dụng
luật cho các gói tin có những đặc điểm sau: tcp: Gói tin TCP
$EXTERNAL_NET any: địa chỉ IP nguồn và số hiệu cổng nguồn là bất kỳ ở mạng bên ngoài
-> Hướng của lưu lượng từ nguồn tới đích
$HOME_NET any: địa chỉ IP đích là địa chỉ máy chủ và số hiệu cổng đích là bất kỳ
Phần tùy chọn của luật
flags:S: tiêu đề gói tin có cờ SYN được bật detection_filter định nghĩa ra một ngưỡng mà nếu vượt
qua ngưỡng đó thì hành động của luật được thực hiện. track by_src: Đếm gói tin theo địa chỉ nguồn
count 30: Ngưỡng giới hạn là 30 gói tin
seconds 60: Cửa sổ thời gian quan sát để thống kê là 60 giây
Với luật này, Snort sẽ phát cảnh báo nếu có một nút mạng nào đó gửi quá 30 gói tin TCP SYN trong 60
giây. Lưu ý, các giá trị của ngưỡng này là tùy thuộc ý muốn chủ quan của người quản trị.
3.3. Thiết lập luật phát hiện tấn công từ chối dịch vụ
- Bước 9: [Server] Thêm luật có nội dung như sau để phát hiện hành vi tấn công Ping of Death vào máy chủ Snort Server.
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"Ping of Death detected"; dsize: >4500;
sid:1000003; rev:001; classtype:denial-ofservice;)
Trong phần tùy chọn, tham số dsize: >4500 được sử dụng để thiết lập để phát hiện các gói tin có kích
thước lớn hơn 4500 bytes (đây là giá trị bảo đảm lớn hơn MTU của tất cả các mạng hiện nay).
- Bước 10: [Server] Thêm luật có nội dung như sau để phát hiện hành vi tấn công TCP SYN Flood tới cổng
23 của dịch vụ Telnet trên máy chủ Snort Server.
alert tcp $EXTERNAL_NET any -> $HOME_NET 23 (msg:”TCP SYN Flood detected”; flags:S; detection_filter:track
by_dst, count 500, seconds 60; sid:1000004; rev:1; classtype:denial-of-service;) detection_filter định nghĩa ra
một ngưỡng mà nếu vượt qua ngưỡng đó thì hành động của luật được thực hiện.
track by_dst: Đếm gói tin theo địa chỉ đích count 500: Ngưỡng giới hạn là 500 gói tin
seconds 60: Cửa sổ thời gian quan sát để thống kê là 60 giây
Với luật này, Snort sẽ phát cảnh báo nếu có một nút mạng nào đó gửi quá 500 gói tin TCP SYN tới cổng 23
trong 60 giây. Lưu ý, các giá trị của ngưỡng này là tùy thuộc ý muốn chủ quan của người quản trị.
3.4. Khởi động Snort -
Bước 11: [Server] Lưu thay đổi của file local.rules.
- Bước 12: [Server] Khởi động Snort để giám sát lưu lượng trên cổng eth16 sudo snort -A console -q -c
/etc/snort/snort.conf -i eth16
3.5. Thử nghiệm tấn công
Yêu cầu: Sử dụng phần mềm quay màn hình trên máy vật lý để ghi lại quá trình.
- Bước 1: Bắt đầu quay màn hình
- Bước 2: [Attack] Thực hiện lệnh quét mạng bằng kỹ thuật ICMP Ping Scan
- Bước 3: [Server] Xem cảnh báo phát hiện tấn công
- Bước 4: [Attack] Kết thúc tấn công quét mạng. Thực hiện tấn công quét cổng dịch vụ bằng kỹ thuật TCP SYN Scan.
- Bước 5: [Server] Xem cảnh báo phát hiện tấn công
- Bước 6: [Attack] Kết thúc tấn công quét cổng dịch vụ. Thực hiện tấn công Ping of Death.
- Bước 7: [Server] Xem cảnh báo phát hiện tấn công
- Bước 8: [Attack] Kết thúc tấn công Ping of Death. Thực hiện tấn công TCP SYN Flood
- Bước 9: [Server] Xem cảnh báo phát hiện tấn công.
- Bước 10: Kết thúc quay màn hình. Upload video lên Youtube.