báo cáo thực tập tốt nghiệp

47
ĐẠI HỌC BÁCH KHOA HÀ NỘI Chương trình kỹ sư Chất lượng cao BÁO CÁO THỰC TẬP TỐT NGHIỆP SNORT IDS Giảng viên: PGS TS. Nguyễn Linh Giang Sinh viên thực hiện: Ngô Doãn Dương SHSV: 20090596 Lớp: HTTT và truyền thông - KSCLCK54 Hà Nội, 04/2014

Upload: hieu-andree

Post on 28-Dec-2015

32 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Báo Cáo Thực Tập Tốt Nghiệp

ĐẠI HỌC BÁCH KHOA HÀ NỘI

Chương trình kỹ sư Chất lượng cao

BÁO CÁO THỰC TẬP TỐT NGHIỆP

SNORT IDS

Giảng viên: PGS TS. Nguyễn Linh Giang

Sinh viên thực hiện: Ngô Doãn Dương

SHSV: 20090596

Lớp: HTTT và truyền thông - KSCLCK54

Hà Nội, 04/2014

Page 2: Báo Cáo Thực Tập Tốt Nghiệp

2

Mục lục

Lời nói đầu ....................................................... 3

Phần 1. Tổng quan về IDS Snort ........................ 4 Phát hiện xâm nhập là gì?.............................................................................................. 4

Các thành phần và cơ chế hoạt động của Snort .............................................................. 8

Tập luật trong Snort .................................................................................................... 13

Cấu hình Snort ............................................................................................................ 27

Phần 2. Snort và các sản phẩm kết hợp ............ 34

Phần 3. Thử nghiệm khả năng phản ứng của Snort

IDS ................................................................... 43

Phần 4. Kết luận ............................................... 47

Page 3: Báo Cáo Thực Tập Tốt Nghiệp

3

Lời nói đầu

Bảo mật là một vấn đề lớn đối với tất cả các mạng trong môi trường

doanh nghiệp ngày nay. Hacker và intruder (kẻ xâm nhập) đã nhiều lần thành công

xâm nhập vào mạng công ty và đem ra ngoài rất nhiều thông tin giá tri.. Nhiều

phương pháp đã phát triển để đảm bảo cho hạ tầng mạng và giao tiếp trên

Internet, giữa chúng là sử dụng firewall (tường lửa), encryption (mã hóa), và

VPN (mạng riêng ảo). Phát hiện xâm nhập là một công nghệ mới. Các phương

pháp phát hiện xâm nhập bắt đầu xuất hiện những năm gần đây. Sử dụng

phương thức phát hiện xâm nhập, có thể thu thập và sử dụng thông tin từ

những loại tấn công đã biết và tìm ra một ai đó cố gắng tấn công vào mạng hay

máy cá nhân. Thông tin thu thập theo cách này có thể sử dụng làm cho mạng

chúng ta bảo mật hơn, nó hoàn toàn hợp pháp. Sản phẩm thương mại và mã

nguồn mở đều sẵn có cho mục đích này. Nhiều công cụ đánh giá tình trạng nguy

hiểm cũng sẵn có trên thị trường , nó dùng để đánh giá nhiều loại hình bảo mật

khác nhau và vai trò của nó trong mạng.

Snort là một hệ thống phát hiện xâm nhập mạng (NIDS) mã nguồn mở, là

miễn phí. NIDS là một dạng IDS, được sử dụng để quét luồng dữ liệu trên mạng.

Cũng có những IDS cơ bản trên host (host-based), nó được cài đặt trên host

riêng và phát hiện những cuộc tấn công chỉ trên host đó thôi. Mặc dù tất cả

phương pháp phát hiện xâm nhập vẫn còn mới, nhưng Snort giữ một vị trí là hệ

thống chất lượng thuộc loại top (hàng đầu) ngày nay.

Snort có thể làm việc chung với những sản phẩm khác. Những sản phẩm đó

bao gồm cơ sở dữ liệu MySQL (http://mysql.org) và điều khiển phân tích cho cơ sở

dữ liệu xâm nhập (ACID) (http://www.cert.org/kb/acid). Snort có khả năng ghi dữ

liệu thu thập được (như là những cảnh báo – alerts – và những thông điệp dạng

log khác) vào một cơ sở dữ liệu. MySQL được sử dụng làm cơ sở dữ liệu thông

dụng, nó là nơi mà dữ liệu sẽ lưu giữ. Sử dụng Apache web server

(http://apache.org) và ACID, có thể phân tích dữ liệu này. Sự kết hợp của

Snort, Apache, MySQL, và ACID giúp ta ghi dữ liệu phát hiện xâm nhập vào trong

cơ sở dữ liệu và xem, phân tích nó về sau, bằng một giao diện web cơ bản.

Page 4: Báo Cáo Thực Tập Tốt Nghiệp

4

Phần 1. Tổng quan về IDS Snort

1. Phát hiện xâm nhập là gì?

Phát hiện xâm nhập là một tập những công nghệ và phương thức

dùng để phát hiện hành động khả nghi trên cả host và mạng. Hệ thống phát

hiện xâm nhập (IDS)có 2 loại cơ bản sau: IDS signature-based (IDS dựa trên

dấu hiệu) và IDS anomaly-based (IDS dựa trên sự bất thường). Intruder có

những dấu hiệu, giống như virus máy tính - có thể được phát hiện bằng cách

sử dụng phẩn mềm quét virus. có thể cố gắng tìm những gói dữ liệu có chứa

những dấu hiệu liên quan đến xâm nhập đã biết hay những điều bất thường

liên quan đến giao thức. Dựa trên những tập signature và rules, hệ thống

phát hiện có thể tìm và ghi những hành động xâm nhập và phát ra cảnh báo.

Sự phát hiện xâm nhập dựa trên sự bất thường thường phụ thuộc vào tính

bất thường của tiêu đề (header) giao thức trong gói dữ liệu. Trong nhiều

trường hợp, phương pháp này có thể đem lại kết quả tốt hơn đối với IDS

signature-based. Thông thường một IDS capture dữ liệu từ mạng và áp dụng

những rule của nó vào dữ liệu này hoặc phát hiện những anomaly trong nó.

Snort là một IDS rule-base (IDS dựa trên tập luật) chính, tuy nhiên những

input plug-in giúp phát hiện những anomaly trong tiêu đề giao thức.

Snort sử dụng những rule lưu trong những text file, nó có thể xem

được bằng một trình soạn thảo văn bản. Những rule được nhóm theo từng

loại. Những rule đi cùng với mỗi loại được lưu trữ trong những file riêng.

Những file này sau đó được tập hợp trong một file cấu hình chính, gọi là

snort.conf. Snort đọc những rule này mỗi lần chạy và xây dựng các cấu trúc dữ

liệu bên trong nó hoặc áp dụng những rule đó để capture dữ liệu. Việc tìm

những signature và sử dụng chúng trong rule là một công việc đòi hỏi phải

tinh tế, khi dùng nhiều rule, sẽ có nhiều công việc xử lý hơn được yêu cầu để

capture dữ liệu trong thời gian thực. Snort cho phép định nghĩa lại rule cho

việc phát hiện xâm nhập và rất “linh hoạt” cho ta thêm vào rule riêng của

mình.

Page 5: Báo Cáo Thực Tập Tốt Nghiệp

5

Một số định nghĩa cơ bản:

1.1 IDS:

Intrusion Detection System (hệ thống phát hiện xâm nhập) hay IDS là phần

mềm, phần cứng hoặc kết hợp cả ha i, dùng để phát hiện hành động của

kẻ xâm nhập. Snort là một IDS mã nguồn mở sẵn có trên mạng. Một IDS

có nhiều khả năng khác nhau tùy thuộc vào độ phức tạp của các thành

phần trong nó. Nhiều công ty đã ứng dụng IDS kết hợp phần cứng và

phần mềm. Nói cách khác, một IDS có thể sử dụng những công nghệ dựa

trên các dấu dấu hiệu hoặcsự bất thường hoặc cả hai.

1.2 Network IDS hay NIDS:

NIDS là một IDS capture dữ liệu trong quá trình truyền dữ liệu trên

mạng (cáp, wireless) và gắn chúng vào một cơ sở dữ liệu của những

signature. Phụ thuộc vào nơi mà một gói bi phát hiện với một tín hiệu

xâm nhập, lúc đó một cảnh báo sẽ được phát sinh hoặc gói đó sẽ được

ghi vào trong một file hay cơ sở dữ liệu. Một chuyên gia sử dụng Snort như

là một NIDS.

1.3 Host IDS hay HIDS:

Những hệ thống HIDS được cài đặt như là những agent (tác nhân)

trên một host. Những hệ thống này có thể nhìn vào trong những log file

ứng dụng để phát hiện ra hành vi kẻ xâm nhập. Một vài loại là reactive,

có nghĩa nó chúng chỉ báo cho ta biết khi mà mọi việc đã xảy ra. Cũng có

một số là proactive (đoán trước), chúng quét lưu lượng mạng tại những

HIDS đã được cài đặt và phát cảnh báo ngay cho ta.

1.4 Signatures (dấu hiệu):

Khi chúng ta nhìn vào trong gói dữ liệu, ta rút ra được một mẫu (lấy

mẫu dữ liệu), mẫu đó gọi là signature. Một signature dùng để phát hiện

một hoặc nhiều loại tấn công. Cho ví dụ, chuỗi “script/iisad-min” trong gói

dữ liệu đi vào web server có thể nói cho ta biết đó là một hành vi xâm

nhập.

Signatures có thể trình bày nhiều thành phần khác nhau trong một gói

dữ liệu phụ thuộc vào cách tấn công tự nhiên. Cho ví dụ, ban có thể tìm

Page 6: Báo Cáo Thực Tập Tốt Nghiệp

6

signature trong IP header, transport layer header (TCP, UDP) và/hoặc

application layer header hay payload.

Thường thì IDS phụ thuộc vào signature để tìm những hành vi xâm nhập.

Một vài sản phẩm IDS cần phải cập nhật từ nhà cung cấp những

signature mới khi có một loại tấn công nào đó ra đời.Trong IDS khác,

như Snort, có thể cập nhật signature của riêng mình.

1.5 Alerts (cảnh báo):

Alerts là những loại thông báo người dùng của một hành vi xâm nhập.

Khi một IDS phát hiện ra một intruder, nó sẽ báo cho người quản trị bảo

mật bằng cách dùng những cảnh báo này. Alerts có thể là một dạng cửa sổ

pop-up, dạng console, gửi một e-mail, v.v.. Alerts cũng có thể được lưu

trong những log file hay cơ sở dữ liệu, nơi mà chúng có thể xem lại về

sau.

Snort có thể phát ra Alerts trong nhiều hình thức và được điều khiển bởi

những output plug-ins. Snort cũng có thể gửi cùng một alert đến nhiều

điểm đích. Cho ví dụ, nó có thể ghi Alerts vào trong cơ sở dữ liệu và

phát ra SNMP trap cùng một lúc. Một vài plug-ins cũng có thể thay đổi

cấu hình firewall nhằm ngăn những host xâm phạm vào firewall hay

router.

1.6 Logs:

Thông điệp log thường được lưu trong một file. Mặc định, Snort lưu

những thông điệp này dưới thư mục /var/log/snort. Tuy hiên, vị trí của nó

có thể thay đổi bằng cách sử dụng lệnh khi khởi động Snort. Thông điệp

log có thể lưu ở dạng text (văn bản) hay binary (nhị phân). Những file

binary có thể xem sau này bằng Snort hay chương trình tcpdump. Một

công cụ mới gọi là Barnyard cũng có thể phân tích những log file nhị phân.

Ghi ở dạng nhị phân thì nhanh hơn bởi vì nó lưu theo mức cao. Ghi theo

dạng nhị phân rất hữu dụng trong trường hợp khi thực thi Snort đòi hỏi

tốc độ cao.

1.7 False Alarms (cảnh báo lỗi):

False alarm là loại cảnh báo phát ra biểu thi một dấu hiệu mà không có

Page 7: Báo Cáo Thực Tập Tốt Nghiệp

7

hành vi xâm nhập nào. Cho ví dụ, những host bên trong mạng do cấu

hình sai có thể những thông điệp broadcast khớp với một rule nào đó,

kết quả là nó phát ra một cảnh báo sai. Ở một vài router như Linksys,

nó sinh ra nhiều cảnh báo “lost of UpnP realated”. Để tránh những lỗi

trên, phải thay đổi điều chỉnh những rule mặc định khác. Trong vài

trường hợp, cần phải disable một vài rule để tránh False alarm.

Page 8: Báo Cáo Thực Tập Tốt Nghiệp

8

2. Các thành phần và cơ chế hoạt động của Snort:

Snort được chia thành nhiều phần. Những phần này làm việc cùng nhau

nhằm phát hiện những loại tấn công khác nhau và sinh ra trong một định

dạng yêu cầu từ hệ thống phái hiện. Một Snort IDS cơ bản gồm các thành

phần chính sau:

a. Packet Decoder : bộ giải mã gói

b. Preprocessors : Bộ tiền xử lý.

c. Detection Engine : bộ máy phát hiện

d. Logging and Alerting System : hệ thống ghi và cảnh báo.

e. Output Modules : các mô đun xuất.

Dưới đây là mô hình của các thành phần Snort:

Hình 3.1: Cơ chế hoạt động của IDS

Sau đây sẽ giới thiệu ngắn gọn những thành phần này. Thông qua đó, có

thể tạo một vài rule.

Page 9: Báo Cáo Thực Tập Tốt Nghiệp

9

2.1 Packet Decoder:

Packet decoder lấy những gói từ những loại khác nhau của giao diện mạng

và chuẩn bị đưa chúng vào preprocessed hoặc gửi nó qua detection

engine. Giao diện có thể là Ethernet, SLIP, PPP, v.v..

2.2 Preprocessors:

Preprocessors là những thành phần hay những plug-in được sử dụng

cùng với Snort để sắp xếp và thay đổi những gói dữ liệu trước khi detection

engine thực hiện công việc tìm kiếm nếu gói dữ liệu đó là nguy hiểm. Một

vài preprocessor còn có thể thực hiện tìm ra những dấu hiệu bất thường

trong tiêu đề gói và sinh ra cảnh báo. Preprocessor rất là quan trọng đối với

IDS nhằm chuẩn bị những gói dữ liệu để phân tích cho việc thiết lập rule

trong detection engine. Hacker sử dụng những công nghệ khác nhau nhằm

đánh lừa một IDS bằng nhiều cách khác nhau. Cho ví dụ, có thể tạo một

rule để tìm một dấu hiệu “script/iiadmin” trong gói HTTP. Nếu so khớp

chính xác chuỗi này, có thể dễ dàng bắt lấy. Cho ví du:

“script/./iisadmin”

“script/examples/../iisadmin”

“script/iisadmin”

Để làm phức tạp trạng thái, hacker cũng có thể chèn vào Uniform

Resource Identifier (URI) ký tự nhị phân hay Unicode mà vẫn hợp quy tắc

của một web server. Chú ý rằng web server thường hiểu tất cả những chuỗi

và có thể xử lý chúng chính xác như mong muốn trong chuỗi

“script/iisadmin”. Tuy nhiên IDS vẫn theo dõi so khớp chính xác, nó không

thể phát hiện ra sự tấn công này. Một preprocessor có thể sắp xếp lại chuỗi đó

để nó có thể phát hiện được.

Preprocessor cũng có thể sử dụng cho những gói phân mảnh. Khi

một gói dữ liệu có kích thước lớn truyền vào một host, gói đó thường bị

phân mảnh. Cho ví dụ, kích thước mặc định lớn nhất cho gói dữ liệu trong

mạng Ethernet thường là 1500 byte. Giá trị này được điều khiển bởi giá trị

MTU (Maximum Transfer Unit) cho giao diện mạng. Điều này có nghĩa là nếu

gửi dữ liệu lớn hơn 1500 byte, nó sẽ cắt thành nhiều gói, mỗi gói phân mảnh

Page 10: Báo Cáo Thực Tập Tốt Nghiệp

10

đó có kích thước nhỏ hơn hoặc bằng 1500 byte. Hệ thống nhận sẽ tái hợp

để thành gói dữ liệu nguyên thủy. Trên IDS, trước khi áp dụng những

rule hay tìm một signature, phải tái hợp gói. Cho ví dụ, phân nửa dấu

hiệu có thể cho thấy trong một đoạn này và nửa kia trong đoạn khác. Để

phát hiện chính xác dấu hiệu, phải kết hợp tất cả phân đoạn của mảnh.

Hacker sử dụng sự phân mảnh để đánh bại những hệ thống IDS. Preprocessor

thường được dùng để bảo vệ những loại tấn công này. Preprocessor trong

Snort có thể phân mảnh gói, giải mã HTTP URI, tái hợp luồng TCP, v.v.. Những

chức năng này rất là quan trọng trong thành phần IDS.

2.4 Detection Engine:

Detection engine là thành phần quan trọng nhất trong Snort. Nó

chịu trách nhiệm phát hiện nếu có hành vi xâm nhập trong một gói.

Detection engine tận dụng những rule Snort để làm việc này. Những rule

được đọc trong cấu trúc dữ liệu bên trong hay buộc chặt chúng vào nơi mà

chúng sẽ so khớp với tất cả các gói. Nếu một gói nào đó khớp với rule,

hành động thích hợp sẽ sinh ra, chẳng hạn gói đó sẽ bị hủy. Những hành

động đó có thể là ghi gói hay sinh cảnh báo.

Detection engine là một phần tiêu chuẩn thời gian (time-critical) của

Snort. Phụ thuộc vào sức khỏe của hệ thống và có bao nhiêu rule được định

nghĩa, nó có thể tiêu tốn bao nhiêu thời gian cho công việc đáp ứng các gói

này. Nếu lưu lượng trên hệ thống mạng của là khá cao khi Snort làm việc

trong chế độ NIDS, có thể hủy những gói. Sự vận hành của Detection

engine phụ thuộc vào các yêu tố sau:

Số rule trên đó.

Sức khỏe của hệ thống trên đó có Snort đang chạy.

Thông lượng bên trong đó.

Sức vận hành trên mạng

Khi thiết kế một NIDS, phải giữ tất cả hồ sơ kỹ thuật trong đó.

Nên nhớ rằng hệ thống phát hiện có thể khảo sát tỉ mỉ và áp dụng rule

trên nhiều phần của gói dữ liệu. Những phần này có thể là:

IP header của gói.

Page 11: Báo Cáo Thực Tập Tốt Nghiệp

11

Header lớp transport. Header gồm: TCP, UDP, và những header lớp

transport khác. Nó cũng có thể làm việc trên ICMP header.

Header lớp application. Nó gồm có: DNS header, FTP header,

SNMP header, SMTP header. có thể phải sử dụng nhiều phương

pháp trực tiếp tại header lớp application, chẳng hạn như tìm kiếm

offset của dữ liệu.

Payload của dữ liệu. Điều này giúp tạo ra một rule dùng cho

detection engine để tìm một chuỗi bên trong dữ liệu.

Detection engine làm việc khác nhau trong mỗi phiên bản Snort khác

nhau. Trong tất cả phiên bản Snort 1.x, detection engine ngừng xử lý trên

gói đó khi một rule được so khớp trên gói đó. Phụ thuộc vào rule, detection

engine thực hiện những hành động thích hợp như ghi log file hay sinh một

cảnh báo. Điều này có nghĩa là nếu một gói khớp với tiêu chuần được định

nghĩa trong nhiều rule, chỉ rule đầu tiên được áp dụng vào gói đó mà không

tìm kiếm sự so khớp khác. Đây là một vấn đề. Một rule thiếu trọn vẹn sẽ

sinh ra một cảnh báo không trọn vẹn, thâm chí nếu một rule khá đầy đủ

(tương ứng với một cảnh báo tốt) có thể nằm sau rule trước nó. Vấn đề này

đã được sửa trong Snort phiên bản 2, tất cả các rule đều được so khớp vào

một gói trước khi sinh một cảnh báo. Sau khi so khớp tất cả các rule, rule nào

trọn vẹn nhất sẽ được chọn để sinh cảnh báo.

Detection engine trong Snort 2.0 đã được làm lại một cách hoàn

chỉnh để nó so sánh tốt hơn, phát hiện sớm hơn so với các phiên bản trước.

2.5 Logging và Alerting System:

Phụ thuộc vào detection engine tìm trong gói, gói có thể được

dùng để ghi hành động hay sinh cảnh báo. Việc ghi lưu trong những text file

đơn giản, loại file tcpdump hay những hình thức ghi khác. Mặc định tất cả

những log file được lưu trong /var/log/snort. có thể sử dụng dòng lệnh

“–l” để thay đổi vị trí sinh log file hay cảnh báo. Có nhiều lựa chọn dòng lệnh

sẽ được thảo luận trong phần sau và chi tiết thông tin về cách ghi log file

hay cảnh báo.

2.6 Output Modules:

Page 12: Báo Cáo Thực Tập Tốt Nghiệp

12

Output modules hay plug-in thực hiện những hoạt động khác nhau

phụ thuộc muốn lưu kết quả sinh ra bởi logging và cảnh báo thế nào. Về cơ

bản, những modules này điều khiển loại kết quả sinh ra bởi hệ thống

logging và cảnh báo. Phụ thuộc vào sự cấu hình, Output modules có thể làm

những việc sau:

Đơn giản chỉ ghi vào file /var/log/snort/alerts hay những file khác

Gửi SNMP traps

Gửi thông điệp đến syslog.

Ghi vào cơ sở dữ liệu như MySQL hay Oracle.

Sinh ra dẫn xuất eXtensible Markup Language (XML)

Bổ sung cấu hình trên router và firewall.

Gửi thông điệp Server Message Block (SMP) đến hệ thống Microsoft

Window. Những công cụ khác cũng có thể gửi cảnh báo trong những

định dạng khác như e-mail hay qua giao diện web. Bảng sau đây cho

ta thấy những thành phần khác nhau của một IDS:

Page 13: Báo Cáo Thực Tập Tốt Nghiệp

13

3. Tập luật (rulesets) trong Snort:

Giống như virus, hầu hết hành động xâm nhập có vài loại signature.

Thông tin về những signature này dùng để tạo Snort rules. Trong chương 1,

đã phân tích một số kỹ thuật tấn công DoS/DDoS để tìm ra những cơ chế hoạt

động và thông tin về những công cụ và công nghệ của họ. Hơn nữa, có những

lổi cơ sở dữ liệu khiến cho những intruder muốn khai thác. Có nhiều cuộc tấn

công được biết đến cũng sử dụng signature để tìm một ai đó cố gắng khai thác

chúng. Những signature này có thể hiển thị trong phần header (tiêu đề) của

gói dữ liệu hoặc trong payload. Hệ thống phát hiện Snort dựa trên rules.

Những rule này lấy cơ sở từ dấu hiệu kẻ xâm nhập (signature). Snort rules có

thể được sử dụng để kiểm tra những phần khác nhau của gói dữ liệu. Snort 1.x

có thể phân tích ở những header ở lớp 3 và 4 nhưng không thể phân tích ở giao

thức lớp ứng dụng. Snort phiên bản 2.x có hỗ trợ phần header lớp ứng dụng.

Những rule được áp dụng trong một kiểu nào đó đến tất cả các gói phụ thuộc

vào loại đó.

Một rule có thể sử dụng để phát ra một thông điệp cảnh báo, ghi một

thông điệp, hay, trong những thuật ngữ của Snort, pass gói dữ liệu (không làm

gì cả). Snort rules được viết theo cú pháp dễ hiểu nhất. Hầu hết những rules

được viết trên một dòng đơn. Tuy nhiên cũng có thể mở rộng trên nhiều dòng

bằng cách dùng một ký tự “\” vào cuối dòng. Rules thường đặt trong một file

cấu hình, chẳng hạn như là snort.conf. cũng có thể sử dụng nhiều file bằng

cách gôm chúng trong một file cấu hình chính.

Trong chương này cung cấp thông tin về những loại rule khác nhau cũng

như cấu trúc cơ bản của rule. sẽ tìm thấy nhiều ví dụ của những rule chung

cho hành vi phát hiện xâm nhập trong phần sau.

3.1. Cấu trúc của một rule:

Tất cả các rule đều có 2 phần logic: rule header và rule options.

Hình 3.2: Cấu trúc Rule

Page 14: Báo Cáo Thực Tập Tốt Nghiệp

14

Rule header chứa thông tin về hoạt động mà rule để lấy. Nó cũng

chứa tiêu chuẩn cho việc so sánh một luật dựa vào gói dữ liệu. Rule option

thường chứa một thông điệp cảnh báo và thông tin về thông điệp sẽ được

sử dụng để phát sinh cảnh báo. Rule option cũng chứa tiêu chuẩn cho việc

so sánh một luật dựa vào gói dữ liệu. Một rule có thể phát hiện một loại

hay nhiều loại hành vi xâm nhập. Rule “thông minh” là rule có thể áp dụng

lên nhiều dấu hiệu xâm nhập.

Cấu trúc chung của rule header như sau:

Action dùng để xác định loại hành động mà nó lấy về khi tiêu chuẩn

gặp được và một rule được so sánh chính xác một gói dữ liệu. Những hoạt

động điển hình là sinh ra một cảnh báo hoặc ghi thông điệp hoặc diện chứng

cho rule khác.

Protocol dùng để áp dụng rule lên gói chỉ với một giao thức riêng.

Đây là tiêu chuẩn đầu tiên giám sát trong rule. cũng có thể sử dụng những

thành phần khác để ngăn chặn những địa chỉ từ một mạng đầy đủ. 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. Cho một ví dụ, nếu trường direction là “ ”,

địa chỉ phía bên trái là nguồn, địa chỉ bên phải là đích.

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. Cho ví dụ, rule sau đây sẽ

sinh ra cảnh báo khi nó phát hiện gói ping ICMP (ICMP ECHO REQUEST) với

TTL bằng 100:

alert icmp any any -> any any (msg: "Ping with TTL=100"; \

ttl: 100;)

Phần nằm trước dấu ngoặc đơn gọi là rule header. Phần trong dấu ngoặc

đơn là rule option. Header chứa những phần sau:

Một rule action (hành động của luật). Trong rule trên, action là “alert”,

Page 15: Báo Cáo Thực Tập Tốt Nghiệp

15

có nghĩa là một cảnh báo sẽ sinh ra khi điều kiện bắt gặp. Nhớ rằng

những gói được ghi bằng mặc định khi cảnh báo phát ra. Phụ thuộc vào

trường action, rule option có thể chứa tiêu chuẩn cho rule.

Protocol (giao thức). Ở đây là ICMP, nghĩa là rule chỉ áp dụng lên tất cả

gói ICMP. Trong Snort detection engine, nếu giao thức của gói không

phải ICMP, rule sẽ không làm gì trên gói đó để tiết kiệm thời gian xử lý

của CPU. Thành phần protocol là rất quan trọng khi muốn áp dụng

Snort rule chỉ trên những gói của một loại riêng biệt.

Địa chỉ nguồn và cổng nguồn. Trong ví dụ này cả hai đều là “any”, có

nghĩa là rule sẽ áp dụng lên tất cả các gói đến từ nhiều nguồn. Dĩ nhiên

port number sẽ không áp dụng lên gói ICMP. Port number chỉ thích

hợp trong trường hợp protocol là TCP hay UDP.

Direction. Trong trường hợp này, nó là ký hiệu -> từ trái sang phải. Nói

lên địa chỉ và port number bên trái dấu -> là nguồn còn bên phải là

đích. Điều đó cũng có nghĩa rằng rule sẽ áp dụng lên gói đi từ nguồn

đến đích. cũng có thể dùng dấu để định nghĩa địa chỉ nguồn/đích cho

gói. Ký tự <> cũng có thể sử dụng để áp dụng rule lên gói đi từ 2 bên.

Địa chỉ đích là cổng đích. Trong ví dụ này cả hai đều là “any”, có nghĩa

là rule sẽ áp dụng lên tất cả các gói không quan tâm đến địa chỉ đích.

Direction trong rule không đóng vai trò gí cả bởi vì rule được áp dụng

lên tất cả các gói ICMP di chuyển cả hai bên, do đã sử dụng từ khóa

“any” trong cả hai thành phần địa chỉ nguồn và đích.

Page 16: Báo Cáo Thực Tập Tốt Nghiệp

16

3.2. Rule Option:

Rule option theo sau rule header và được đặt trong cặp dấu ngoặc đơn.

Có thể một lựa chọn hay nhiều lựa chọn truyền vào cùng dấu . Nếu sử

dụng nhiều lựa chọn, dạng lựa chọn này là AND. Hành động trong rule

header chỉ được gọi khi tất cả những tiêu chuẩn trong lựa chọn là đúng.

đã sử dụng option như msg và ttl trong ví dụ trước rồi đó. Tất cả những lựa

chọn được định nghĩa bởi từ khóa. Những Rule option chứa các đối số.

Thường thì những lựa chọn có 2 phần: một từ khóa và một đối số. Những

đối số truyền vào từ lựa chọn từ khóa bằng một dấu “:”. Chẳng hạn như:

msg: "Detected confidential";

Lựa chọn msg là từ khóa và “Detected confidential” là đối số cho từ khóa

này.

Sau đây là những từ khóa thông dụng . Nó hoạt động trên những giao

thức riêng, cho nên có ý nghĩa khác nhau đi theo giao thức.

3.2.1. Về nội dung (lớp application):

Từ khóa content:

Một chức năng quan trọng của Snort, nó có khả năng tìm mẫu dữ liệu

bên trong gói. Mẫu này có thể hiển thị ở dạng chuỗi ASCII hay nhị phân

trong hình thức mã hexa.

Rule sau đây phát hiện một mẫu “GET” trong phần dữ liệu của gói

TCP xuất phát từ địa chỉ 192.168.1.0. từ khóa GET thường được sử

dụng cho nhiều loại tấn công HTTP; tuy nhiên ở đây rule chỉ giúp cho

hiểu như thế nào từ khóa này làm việc mà thôi:

alert tcp 192.168.1.0/24 any -> ![192.168.1.0/24] any \

(content: "GET"; msg: "GET matched";)

Rule dưới đây cũng tương tự nhưng nó liệt kê ở dạng hexa:

alert tcp 192.168.1.0/24 any -> ![192.168.1.0/24] any \

(content: "|47 45 54|"; msg: "GET matched";)

Page 17: Báo Cáo Thực Tập Tốt Nghiệp

17

Số 47 tương đương mã ASCII là G, 45 = E, 54 = T. cũng có thể kết hợp

dạng

ASCII và nhị phân trong hexa vào một rule. Ký tự hexa nằm trong cặp dấu “||”.

Có 3 từ khóa khác nhau dùng chung với content. Những từ khóa này là

tiêu chuẩn trong khi tìm một mẫu bên trong gói. Đó là:

Offset

Depth

Nocase

Từ khóa offset:

Từ khóa offset sử dụng để bắt đầu tìm trong khoảng nào đó từ

điểm bắt đầu của phần dữ liệu của gói. Dùng một con số làm đối số cho

từ khóa này. Ví dụ sau sẽ bắt đầu tìm từ “HTTP” sau 4 byte kể từ byte đầu

tiên trong gói.

alert tcp 192.168.1.0/24 any -> any any \

(content: "HTTP"; offset: 4; msg: "HTTP matched";)

Từ khóa depth định nghĩa điểm để Snort ngừng tìm kiếm mẫu.

Từ khóa depth:

Chỉ định một giới hạn dưới cho việc lấy mẫu. Dùng depth cho phép

chỉ định một khoảng bắt đầu từ byte đầu tiên của gói. Dữ liệu sau

khoảng này không lấy mẫu nữa. Nếu kết hợp offset và depth cùng với

content, có thể chỉ ra vùng dữ liệu mà muốn lấy mẫu. Ví dụ muốn tìm

từ “HTTP”, lấy mẫu 4 byte và chỉ xét trong

40 byte đầu tiên:

alert tcp 192.168.1.0/24 any -> any any (content: \

"HTTP"; offset: 4; depth: 40; msg: "HTTP matched";)

Nó rất quan trọng khi muốn giới hạn công việc tìm kiếm trong gói.

Cho ví dụ, thông tin về yêu cầu HTTP GET được tìm thấy từ đầu gói.

Không cần phải tìm toàn bộ gói. Nhiều gói được capture với kích thước

Page 18: Báo Cáo Thực Tập Tốt Nghiệp

18

rất lớn, nó sẽ tốn nhiều thời gian để tìm kiếm.

Từ khóa nocase:

Nocase thường kết hợp với content. Nó không có đối số. Nó chỉ giúp tìm

mẫu trong

dữ liệu không phân biệt chữ hoa hay thường.

Từ khóa flow:

Flow được sử dụng để áp dụng một rule trên những phiên TCP đến

những gói trong phương hướng riêng. Từ khóa này dùng xác định

phương hướng. Những lựa chọn có thể sử dụng cho từ khóa này xác định

phương hướng:

to_client

to_server

from_client

from_server

Những lựa chọn này lần đầu có thể gây cho khó hiểu. Từ “to” mang ý

nghĩa là đáp ứng (response) và “from” mang nghĩa là yêu cầu (request).

Những lựa chọn khác dưới đây cũng có thể sử dụng để áp dụng rule

vào các trạng thái khác nhau của kết nối TCP.

Lựa chọn stateless, áp dụng rule mà không cần xem trạng thái của

phiên TCP

Lựa chọn established, áp dụng rule mà để xác lập chỉ những phiên

TCP

Lựa chọn no_stream, bật những rule để áp dụng vào gói mà không

cần xây dựng từ một luồng

Lựa chọn stream_only, áp dụng rule chỉ trên những gói đã xây dựng

từ một luồng.

Luồng TCP (TCP Stream)được xử lý bởi bộ tiền xử lý stream4 (thảo

luận trong phần sau). Lựa chọn stateless và established liên kết đến

trạng thái TCP.

Page 19: Báo Cáo Thực Tập Tốt Nghiệp

19

3.2.2. Lựa chọn về IP:

Từ khóa fragbits:

Tiêu đề IP (IP header) chứa 3 cờ bit, dùng để phân mảnh và

tái hợp gói IP. Chức năng các cờ như sau:

Bit dành riêng (RB – Reserved Bit), dùng cho tương lai.

Bit không phân mảnh (DF – Don’t Fragment Bit). Nếu bit

này bật, nó cho

biết gói IP sẽ không phân mảnh.

Bit có nhiều phân mảnh (MF – More Fragments Bit).

D tương đương DF. Tương tự, R là RB, M là MF. cũng có

thể dùng dấu “!” trong rule. Ngoài ra, đi chung với

“D,R,M”, ta cũng thường thấy các từ “+,-”. Nó có ý nghĩa,

nếu là “+” tức là gắn thêm bit cờ với những bit khác, nếu là

“-” thì bỏ bớt một số bit.

Từ khóa ipopts:

Trong IPv4, tiêu đề là 20 byte. có thể thêm những lựa chọn cho

tiêu đề IP này. Chiều dài của phần lựa chọn có thể lên đến 20

byte. Lựa chọn IP dùng cho những mục đích khác nhau, đó là:

Record Route (rr)

Time Stamps (ts)

Lose Source Routing (lsrr): định tuyến nguồn nới lỏng

Strict Source Routing (ssrr); định tuyến nguồn siết chặc

Trong Snort rule, hầu hết những lựa chọn thường dùng liệt kê

trong RFC 791 tại http://www.rfc-editor.org/rfc/rfc791.txt. Hacker có thể

dùng những lựa chọn này để tìm thông tin về tổ chức mạng. Ví dụ,

loose và strict source routing có thể giúp hacker khám phá ra đườn dẫn

của một mạng nào đó tồn tại hay không.

Dùng những Snort rule, có thể phát hiện những nổ lực tìm kiếm

của hacker bằng từ khóa ipopts. Rule sau áp dụng cho Losse Source

Routing: alert ip any any -> any any (ipopts: lsrr; \ msg: "Loose source

routing attempt";)

cũng có thể dùng từ khóa logto để ghi thông điệp vào một file. Tuy

Page 20: Báo Cáo Thực Tập Tốt Nghiệp

20

nhiên, không thể chỉ định nhiều từ khóa lựa chọn IP trong một rule.

Từ khóa ip_proto:

Ip_proto sử dụng IP Proto plug-in để xác định con số giao thức trong IP

header. Từ khóa yêu cầu con số giao thức như một đối số. có thể sử

dụng một tên cho giao thức nếu nó đã định nghĩa trong file

/etc/protocols. Xem mẫu file tương tự như sau:

ax.25 93 AX.25 # AX.25 Frames

ipip 94 IPIP # Yet Another IP

encapsulation micp 95 MICP # Mobile

Internetworking Control Pro.

scc-sp 96 SCC-SP # Semaphore Communications

Sec. Pro.

etherip 97 ETHERIP # Ethernet-

within-IP Encapsulation

encap 98 ENCAP # Yet Another IP encapsulation

# 99 # any private

encryption scheme

gmtp 100 GMTP # GMTP

ifmp 101 IFMP # Ipsilon Flow Management

Protocol

pnni 102 PNNI # PNNI over IP

Rule sau kiểm tra nếu giao thức IPIP là đang sử dụng bởi

gói dữ liệu:

alert ip any any -> any any (ip_proto: ipip; \

msg: "IP-IP tunneling detected";)

Tiếp theo, ta dùng một số thay vì tên (hiệu quả hơn)

alert ip any any -> any any (ip_proto: 94; \

msg: "IP-IP tunneling detected";)

Những giao thức mới nhất có thể tìm thấy từ ICANN tại

Page 21: Báo Cáo Thực Tập Tốt Nghiệp

21

http://www.icann.org tại IANA http://iana.org.

Từ khóa id:

Id dùng để so sánh trường ID phân mảnh của tiêu đề IP. Mục đích

của nó là phát hiện ra những tấn công mà có dùng ID cố định trong IP

header. Định dạng của nó là:

id: "id_number"

Nếu giá trị của trường id trong IP header bằng 0, nó cho biết đây là

phân mảnh cuối cùng của một gói IP (nếu gói IP đó bị phân mảnh). Giá trị

0 cũng cho biết rằng nó chỉ phân mảnh nếu gói đó là không phân mảnh.

Id trong Snort rule dùng để xác định phân mảnh cuối cùng trong gói IP.

Từ khóa tos:

Tos dùng để phát hiện ra một giá trị nào đó trong trường TOS (Type of

Service) của IP header. Ví dụ như sau:

tos: 1;

• Từ khóa ttl: Ttl được dùng để phát hiện giá trị Time o Live trong IP

header của gói. Từ khóa có một giá trị cho biết chính xác giá trị TTL.Từ khóa

này có thể sử dụng với tất cả loại giao thức xây dựng trên giao thức IP, bao

gồm ICMP, UDP và TCP. Định dạng chung của nó như sau:

ttl: 100;

Tiện ích traceroute sử dụng TTL để tìm bộ định tuyến kế tiếp trong

đường đi của gói. Traceroute gửi những gói UDP với giá trị TTL tăng dần.

Giá trị TTL được giảm dần tại mỗi hop. Khi nó có giá trị là 0, router sinh ra

một gói ICMP đến nguồn. Sử dụng gói ICMP này, tiện ích traceroute tìm ra

địa chỉ IP của router. Ví dụ, để tìm router thứ 5, traceroute sẽ gửi những

gói UDP với TTL đặt là 5. Khi gói này đến router thứ 5, nó có giá trị là 0 và

một gói ICMP được sinh ra.

Sử dụng ttl, có thể tìm ra nếu một ai đó cố gắng traceroute qua mạng

của .

Từ khóa cần chính xác giá trị TTL để mà so khớp.

Page 22: Báo Cáo Thực Tập Tốt Nghiệp

22

3.2.3. Lựa chọn về TCP:

Từ khóa seq:

Seq trong Snort rule kiểm tra sequence number của gói TCP. Đối số

này là một sequence number. Nó có định dạng:

seq: "sequence_number";

Sequence number là một phần trong tiêu đề TCP.

Từ khóa flags:

Flags dùng để tìm ra cờ bit được bật trong tiêu đề TCP gói. Mỗi cờ có

thể dùng như một đối số cho flags trong Snort rule. có thể tham khảo

thêm cờ flag trong TCP tại RFC 793 tại http://www.rfc-

editor.org/rfc/rfc793.txt. Cờ bit này được sử dụng cho nhiều công cụ

bảo mật nhằm mục đích khác nhau bao gồm công cụ quét cổng như

nmap. Snort hỗ trợ những loại cờ bit trong mục 1:

Cũng có thể dùng dấu “!,+,*” giống như cờ bit trong tiêu đề IP, tương

ứng với phép AND, OR và NOT.

alert tcp any any -> 192.168.1.0/24 any (flags: SF; \

msg: “SYNC-FIN packet detected”;)

Từ khóa ack:

TCP header có một trường Acknowledgemant Number, có chiều dài 32

bit. Trường cho biết là sequence number tiếp theo của gói TCP bên gửi

đang chờ đợi từ bên nhận. Trường này chỉ có ý nghĩa khi cờ ACK trong TCP

header được bật.

Công cụ nmap (http://nmap.org) sử dụng tính năng của gói TCP này

đế ping một máy. Cho ví dụ, nó có thể gửi một gói TCP tới port 80 với

cờ ACK bật và sequence number là 0. Khi gói này không truy cập được

do bên nhận có áp dụng rule đối với TCP, nó sẽ gửi về một gói RST. Khi

nmap nhận được gói RST này, nó chỉ ra rằng host đó vẫn còn hoạt động.

Phương pháp này làm việc trên những host mà không đáp ứng những

gói ICMP ECHO REQUEST.

Page 23: Báo Cáo Thực Tập Tốt Nghiệp

23

Để phát hiện loại ping TCP này, có thể tạo một rule như sau:

alert tcp any any -> 192.168.1.0/24 any (flags: A; \

ack: 0; msg: "TCP ping detected";)

Rule này cho biết là thông điệp cảnh báo sẽ phát ra khi nhận một gói

TCP với cờ A bật và ACK chứa có giá trị 0. Những cờ TCP được liệt kê

trong bảng dưới. Host đích là 192.168.1.0/24. có thể sử dụng giá trị

của ACK trong rule, tuy nhiên nó thêm vào Snort chỉ phát hiện cho loại

tấn công này. Thường thì khi cờ A được bật, giá trị ACK không còn là 0.

3.2.4. Lựa chọn về ICMP:

Từ khóa icmp_id:

Lựa chọn icmp_id phát hiện ra ID của gói ICMP. Cú pháp của nó là:

icmp_id: <ICMP_id_number>

Trường nhận dạng một ICMP tìm thấy trong thông điệp ICMP ECHO

REQUEST và ICMP ECHO REPLY (xem RFC 792). Trường này được sử dụng

để so sánh ECHO REQUEST và ECHO REPLY. Thường thì khi sử dụng lệnh

ping, cả hai loại ICMP đó được trao đổi giữa bên gửi và bên nhận. Bên

gửi gửi gói ECHO REQUEST và bên nhận đáp ứng lại gói ECHO REPLY.

Trường này có ích cho việc nhận ra cái gói đáp ứng cho gói yêu cầu. Luật

sau kiểm tra nếu ICMP IP trong tiêu đề ICMP bằng 100 thì sinh một cảnh

Page 24: Báo Cáo Thực Tập Tốt Nghiệp

24

báo.

alert icmp any any -> any any (icmp_id: 100; \

msg: "ICMP ID=100";)

Từ khóa icmp_seq:

Lựa chọn icmp_seq tương tự như icmp_id. Cú pháp của nó là:

icmp_seq: <ICMP_id_number>

sequence number cũng là một trường trong tiêu đề ICMP và cũng có

ích trong việc so sánh ECHO REQUEST và ICMP ECHO REPLY (xem RFC

792). Từ khóa này cho phép tìm một sequence number đặc trưng. Tuy

nhiên, ít ai mà dùng từ khóa này. Xem rule sau, nếu sequence number

là 100 thì sinh cảnh báo:

alert icmp any any -> any any (icmp_seq: 100; \

msg: "ICMP Sequence=100";)

Từ khóa itype:

Tiêu đề ICMP đến sau tiêu đề IP và chứa một trường type.Từ khóa

itype nhằm phát hiện những tấn công sử dụng trường type trong tiêu đề

ICMP. Đối số cho nó là một số và có định dạng sau:

itype: "ICMP_type_number"

Trường type trong ICMP header của gói dữ liệu được sử dụng để xác

định loại gói ICMP. Danh sách các loại ICMP khác nhau và giá trị của

trường type tương ứng:

Page 25: Báo Cáo Thực Tập Tốt Nghiệp

25

Ví dụ, nếu muồn sinh một cảnh báo cho loại thông điệp source quench,

sử dụng rule sau:

alert icmp any any -> any any (itype: 4; \

msg: "ICMP Source Quench Message received";)

Từ khóa icode:

Trong những gói ICMP, ICMP header đến sau IP header. Nó chứa một

trường code. Từ khóa icode dùng để phát hiện trường code trong tiêu

đề gói ICMP. Đối số cho trường này là một số và có định dạng sau:

icode: "ICMP_codee_number"

Trường type trong tiêu đề ICMP cho biết loại thông điệp ICMP. Trường

code cho biết chi tiết loại đó. Ví dụ, nếu trường type có giá trị là 5

thì loại ICMP là “ICMPredirect”. Có thể có nhiều lý do sinh ra một

ICMP redirect. Trường code cho biết rõ những loại lý do đó:

Nếu trường code bằng 0, gửi gói ICMP đến một mạng.

Nếu trường code bằng 1, gửi gói ICMP đến một host

Nếu trường code bằng 2, gói ICMP là loại của dịch vụ và mạng.

Nếu trường code bằng 3, gói ICMP là loại của dịch vụ và host.

Icode trong Snort rule sử dụng để tìm giá trị trường code trong ICMP

header. Rule sau sinh ra một cảnh báo cho những gói ICMP đến host:

Page 26: Báo Cáo Thực Tập Tốt Nghiệp

26

alert icmp any any -> any any (itype: 5; \ icode: 1; msg: "ICMP ID=100";)

Hai từ khóa itype và icode thường dùng chung với nhau. Nếu icode

dùng một mình thường không đạt được công việc tốt bởi vì những loại

ICMP khác cũng có thể có cùng giá trị code giống nhau.

Page 27: Báo Cáo Thực Tập Tốt Nghiệp

27

4. Cấu hình Snort:

Snort sử dụng một file cấu hình cho mỗi lần chạy. Thường tên file cấu hình

của nó có tên snort.conf. Tuy nhiên cũng có thể sử dụng tên khác, nhưng khi

chạy dòng lệnh phải chỉ đúng tên file cấu hình yêu cầu.

Tập tin cấu hình chứa 6 phần cơ bản:

Định nghĩa tham biến. Những tham biến này sẽ dùng cho rule Snort.

Cấu hình các tham số. Các tham số này định rõ những lựa chọn cấu hình

Snort khác nhau. Chúng cũng có thể dùng trên dòng lệnh.

Cấu hình preprocessor.

Cấu hình Ouput plug_in (Output module).

Định nghĩa kiểu hành động mới.

Cấu hình đường dẫn đến tập luật (rules file).

4.1 Định nghĩa các tham biến sử dụng trong rule:

Định nghĩa tham biến giúp thuận tiện hơn khi viết rule. Ví dụ, có thể

định nghĩa tham biến HOME_NET trong file cấu hình như sau:

Var HOME_NET 192.168.1.0/24

Sau này có thể thấy trong rule:

alert ip any any -> $HOME_NET any (ipopts: lsrr; \

msg: “Loose source routing attempt”; sid: 1000001;)

Ngoài ra có thể định nghĩa cho danh sách các mạng trong

tham biến: var HOME_NET [192.168.1.0/24,192.168.10.0/24]

Định nghĩa tên giao diện trong tham biến:

var HOME_NET $eth0_ADDRESS

var EXTERNAL_NET $eth1_ADDRESS

Sử dụng từ khóa any nếu muốn kiểm tra bất kỳ nguồn gốc nào đến.

var EXTERNAL_NET any

4.2 Cấu hình các tham số chỉ dẫn (directive):

Page 28: Báo Cáo Thực Tập Tốt Nghiệp

28

Cấu hình directive giúp người dùng cấu hình nhiều hình thức thiết

lập chung cho Snort. Chẳng hạn như chỉ định nơi chứa log file, chỉ định rule

ứng dụng. Ta có thể dùng directive để thay thế các lựa chọn bằng dòng lệnh.

Cú pháp của nó:

config directive_name[: value]

Danh sách các directive được liệt kê trong bảng sau:

Page 29: Báo Cáo Thực Tập Tốt Nghiệp

29

Page 30: Báo Cáo Thực Tập Tốt Nghiệp

30

4.3 Cấu hình preprocessor:

Preprocessor hay còn gọi là input plug_in nhận gói và xử lý nó trước khi

rule áp dụng lên gói. Cấu hình preprocessor rất quan trọng. Cú pháp:

Preprocessor<preprocessor_name>[:

<configuration_options>]

Tên của preprcessor sau từ khóa preprocessor. Các tham số theo sau

nằm sau dấu “:”. Ví dụ, preprocessor frag2 áp dụng lên gói IP phân mảnh,

stream4 với đối số theo sau để phát hiện quá trình quét cổng (scan port):

preprocessor frag2

preprocessor stream4: detect_scans

Frag2 và Stream4 là một trong những preprocessor đã được định nghĩa

sẵn của Snort. cũng có thể viết những preprocessor cho riêng mình. Xem

hướng dẫn trực tiếp trong tập tin snort.conf.

4.4 Cấu hình Output Plug_in:

Nếu muốn ghi thông tin vào cơ sở dữ liệu hay gửi SNMP trap, phải cấu

hình ouput plug_in. Cú pháp:

output <output_module_name>[: <configuration_options>]

ví du, muốn ghi vào MySQL, phải cấu hình tên cơ sở dữ liệu, tên máy

chứa cơ sở dữ

liệu, tên tài khoản, mật khẩu như sau:

output database: alert, mysql, user=rr password=boota \

dbname=snort host=localhost

4.5 Định nghĩa những hành động mới:

Snort có sẵn những loại hành động như: alert, log,.. Tuy nhiên ta có

thể định nghĩa những hành động riêng cho mình. Một hành động có thể sử

dụng nhiều ouput plug_in. Ví dụ dưới đây định nghĩa một hành động tạo ra

Page 31: Báo Cáo Thực Tập Tốt Nghiệp

31

thông điệp cảnh báo đồng thời ghi vào trong cơ sở dữ liệu và ghi một file nhị

phân.

ruletype dump_database

{

type alert

output database: alert, mysql, user=rr dbname=snort \

host=localhost

output log_tcpdump: tcpdump_log_file

}

có thể dùng hành động trên trong rule của mình:

dump_database icmp any any -> 192.168.1.0/24 any \

(fragbits: D; msg: "Don’t Fragment bit set";)

4.6 Cấu hình đường dẫn đến rule:

Cú pháp:

include <rule_name.rules>

Mặc định các file rule nằm trong thư mục rules trong thư mục cài đặt

Snort. Từ khóa include dùng để tham chiếu đến những rule đã xây dựng áp

dụng lên gói tin.

4.7 Minh hoạt một mẫu file cấu hình cho Snort:

# Variable Definitions

var HOME_NET 192.168.1.0/24

var EXTERNAL_NET any

var HTTP_SERVERS

$HOME_NET var

DNS_SERVERS $HOME_NET

var RULE_PATH ./

Page 32: Báo Cáo Thực Tập Tốt Nghiệp

32

#

preprocessors

preprocessor

frag2

preprocessor stream4:

detect_scans preprocessor

stream4_reassemble

preprocessor http_decode: 80 -unicode

-cginull preprocessor unidecode: 80 -

unicode -cginull preprocessor bo: -

nobrute

preprocessor telnet_decode

preprocessor portscan: $HOME_NET 4 3

portscan.log preprocessor arpspoof

# output modules

output alert_syslog: LOG_AUTH LOG_ALERT

output log_tcpdump: snort.log

output database: log, mysql, user=rr password=boota \

dbname=snort host=localhost

output xml: log, file=/var/log/snortxml

# Rules and include files

include $RULE_PATH/bad-

traffic.rules include

$RULE_PATH/exploit.rules

include $RULE_PATH/scan.rules

include

$RULE_PATH/finger.rules

include

Page 33: Báo Cáo Thực Tập Tốt Nghiệp

33

$RULE_PATH/ftp.rules

include

$RULE_PATH/telnet.rules

Page 34: Báo Cáo Thực Tập Tốt Nghiệp

34

Phần 2. Snort và các sản phẩm kết hợp:

IDS đem lại cho chúng ta nhiều lợi ích trong quá trình tiềm kiếm,phát hiện

những hành vi cũng như tiến trình tấn công mạng. Kết quả đó là tập những dữ

liệu quan trọng. Ngày nay với sự kết hợp các sản phẩm đi kèm với IDS mang lại

rất nhiều hiệu quả trong quá trình phân tích. Nó cũng chính là những công cụ,

tiện ích cho ta cái nhìn trực quan hơn. Mặc dù những công cụ phân tích dữ liệu

thuộc về thương mại sẵn có nhưng không thể nói những công cụ “miễn phí”

hoàn toàn kém hiệu quả. Những công cụ miễn phí đó thực sự rất mạnh. Dưới

đây là một số những công cụ đi kèm với IDS giúp ta quản lý, phân tích dòng lưu

lượng nguy hại rất tốt.

2.1. Sử dụng Snort với MySQL:

MySQL là một trong những cơ sở dữ liệu (CSDL) phổ biến ngày nay.

Snort có thể làm việc cùng với MySQL, Oracle hay những cơ sở dữ liệu

khác tương thích ODBC (Open Database Connectivity). Trong chương trước,

chúng ta cũng đã biết những output pluggin có thể kết xuất thông tin lưu

những log và alert vào một cơ sở dữ liệu. Việc ghi vào CSDL giúp ta giám sát

dữ liệu mang tính lịch sử để có thể xem lại sau này, xuất báo cáo và phân

tích thông tin. Bằng cách sử dụng những công cụ khác như ACID (sẽ được

phân tích trong phần sau), có thể lấy rất nhiều thông tin hữu ích từ CSDL.

Chẳng hạn như ta có thể lấy một bản báo cáo về 15 loại tấn công sau cùng,

thông tin về những máy tấn công vào mạng, những loại tấn công phân tán

bằng những giao thức khác nhau, v.v..

MySQL là CSDL hoàn toàn miễn phí và có thể làm việc tốt trên hệ

thống Linux và trên những hệ thống khác nhau. Ta có thể cài đặt và chạy

MySQL trên cùng một máy chạy Snort hoặc trên hai máy khác nhau

Sau đây là những bước cơ bản giúp Snort làm việc với MySQL:

Biên dịch Snort có hỗ trợ MySQL và cài đặt nó. Phải đảm bảo rằng Snort

Page 35: Báo Cáo Thực Tập Tốt Nghiệp

35

làm việc bằng cách thử tạo ra một vài cảnh báo. Để Snort làm việc được

với MySQL, yêu cầu cần phải thêm vào dòng --with-mysql trong đoạn script

cấu hình Snort

Cài đặt MySQL và sử dụng MySQL client để kiểm tra CSDL đã có.

Tạo một cơ sở dữ liệu trên MySQL server cho Snort. Tôi đã đặt tên CSDL

này là

“snort”. Tuy nhiên có thể đặt tên khác tùy ý thích.

Tạo một tài khoản và mật khẩu (Username và Password) trong CSDL. Tài

khoản

này sẽ được sử dụng dùng khi Snort ghi liệu vào.

Cấu hình file snort.conf để cho phép ghi dữ liệu vào CSDL. Dùng

username và password ở trên để thực hiện ghi dữ liệu..

Khởi động lại Snort. Nếu mọi việc thực hiện tốt, Snort sẽ bắt đầu ghi

vào trong

CSDL.

Xuất một vài cảnh báo và sử dụng chương trình mysql client xem

những gì mà Snort ghi được.

Giả định rằng sau khi cấu hình CSDL và tạo những bảng và tài khoản, ta

cần soạn thảo file snort.conf. Những dòng sau đây sẽ cho phép ghi những

thông điệp log vào CSDL MySQL:

output database: log, mysql, user=huuly password=huuly \

dbname=snort host=localhost

Ý nghĩa của dòng trên là: tên CSDL là snort và MySQL server đang chạy

ở localhost. Tài khoản sử dụng CSDL là huuly, mật khẩu là huuly. Nếu tài

khoản không có mật khẩu, thì ta bỏ dòng: password=huuly.

Theo như trên, CSDL sẽ chạy trên cùng một máy với Snort. Nếu như có

một máy chủ CSDL riêng, có thể chỉ định tên của máy chủ trong tập tin

snort.conf. Ví dụ, nếu máy chủ CSDL không nằm trên một máy có Snort

đang chạy, sử dụng dòng lệnh sau:

output database: log, mysql, user=huuly password=huuly \

Page 36: Báo Cáo Thực Tập Tốt Nghiệp

36

dbname=snort host=192.168.1.222

Máy chủ CSDL MySQL đang chạy trên máy 192.168.1.222. Tuy nhiên

Snort sensor và MySQL phải được cài đặt và nằm trên cùng một mạng con

với nhau. Máy chủ CSDL phải chạy trước khi khởi động Snort sensor.

Sau khi khởi động Snort sensor, sẽ thấy những thông tin sau, điều đó

chứng tỏ Snort đang làm việc với MySQL

Hình 2.1: khởi động Snort làm việc với MySQL

2.2. Sử dụng Snort với ACID

Analysis Console for Intrusion Databases (ACID) là trong những công cụ

phân tích và kiểm duyệt dữ liệu. ACID dựa trên những đoạn mã viết bằng

ngôn ngữ PHP, cung cấp giao diện giữa một trình suyệt Web (Web Browser)

và cơ sở dữ liệu Snort (như MySQL). ACID có thể xem là công cụ rất mạnh

(một tính năng tương tự như ACID còn được biết đến là BASE – Basic

Analysis and Security Engine)

ACID cung cấp những tính năng sau:

Một giao diện (interface) dùng tìm kiếm cơ sở dữ liệu và xây dựng bảng

Page 37: Báo Cáo Thực Tập Tốt Nghiệp

37

truy vấn.

Việc tìm kiếm có thể được thực hiện bởi những tham số chẳng hạn

như địa chỉ IP của attacker hay những sự kiện như thời gian, ngày

tháng hay những luật “bẫy” được.

Một trình duyệt gói tin, gói tin bắt được và được giải mã thông tin ở lớp

3 và 4 sẽ được hiển thị cụ thể.

Khả năng quản lý dữ liệu, bao gồm “nhóm” những cảnh báo (nhóm

những sự kiện liên quan đến xâm nhập), xóa cảnh báo hay kết xuất thông

điệp đến hộp thư điện tử (e-mail).

Minh họa bằng đồ thị và trạng thái.

ACID hoàn toàn free và download ACID tại website www.cert.org/kb/acid

Để sử dụng được ACID, cần phải có một số thành phần kết hợp đi kèm. Sau

đây là những thủ tục cần thiết để đảm bảo ACID làm việc tốt:

Cài đặt và kiểm tra Snort làm việc tốt

Cà đặt và kiểm tra MySQL. Các thủ tục về MySQL đã giới thiệu ở trên.

Cài đặt Apache.web server Có thể download Apache tại

http://www.apache.org

Download ACID, giải nén vào thư mục /var/www/html. Trong tiến

trình này tạo thư mục có tên acid nằm trong /var/www.html. Tùy

thuộc vào mỗi ấn bản của Linux, thư mục lưu giữ có thể khác nhau,

nhưng phải đảm bảo sao cho nơi mà Apache có thể tìm thấy những

tập tin HTML.

Cài đặt PHP. Có thể download PHP tai http://www.php.net .

Download PHPLOT tại http://www.phplot.com và giải nén vào thư

mục /var/www/html. Ứng dụng của PHPLOT là tạo ra giao diện đồ họa

cho trang web

Download ADODB từ http://php.weblogs.con/adodb và cài đặt nó

vào thư mục /var/www/html. ADODB là thư viện hướng đối tượng

viết bằng PHP và được sử dụng để kết nối vào CSDL. Chi tiết về

ADODB xem tại http://php.weblogs.com/adodb_fag

Page 38: Báo Cáo Thực Tập Tốt Nghiệp

38

Sau khi cài đặt các thủ tục cần thiết, ta cấu hình ACID cho phù hợp

với Snort và MySQL. Tập tin acid_conf.php phải cấu hình như sau:

Thiết lập đường dẫn đến ADODB:

$DBlib_path = "./adodb";

Thiết lập loại CSDL:

$DBtype = "mysql";

Thiết lập những thông tin chính của CSDL “snort”, noi mà Snort ghi dữ

liệu của nó vào:

$alert_dbname = "snort";

$alert_host = "localhost";

$alert_port = "";

$alert_user = "huuly";

$alert_password = "huuly";

Page 39: Báo Cáo Thực Tập Tốt Nghiệp

39

Sử dụng ACID:

ACID rất đơn giản, dưới đây là giao diện chính của nó:

Hình 2.2: Giao diện chính của ACID sử dụng Web Browser

Hình trên hiển thị các trạng thái của ACID: tên, số cảnh báo (phân chia theo

giao thức), các cổng nguồn và đích, v.v.. Bằng cách click vào đường liên kết

tương ứng sẽ cho biết chi tiết về từng loại. Dưới đây là danh sách của những

cảnh báo (chúng đã được nhóm theo mỗi rule bẫy được)

Page 40: Báo Cáo Thực Tập Tốt Nghiệp

40

Hình2.3: Hiển thị các cảnh báo được lấy từ MySQL

Page 41: Báo Cáo Thực Tập Tốt Nghiệp

41

Mỗi một cảnh báo có những liên kết chi tiết thể hiện qua những fields

(trường). Ví dụ, muốn xem chi tiết gói tin tấn công, nhấp vào một liên kết

trong field ID. Như sau đây:

Hình 2.4: chi tiết của một cảnh báo

2.3. Sử dụng Snort với Swatch:

Swatch là một công cụ tự động giám sát những tập tin log. Nó giúp ích

trong việc gửi một E-mail trong tình trang khẩn cấp.

Sử dụng Swatch sau khi ta tạo một tập tin cấu hình đơn giản có tên là

./swatchrc:

Page 42: Báo Cáo Thực Tập Tốt Nghiệp

42

Giả sử tập tin ./swatchrc nằm trong thư mục /root và swatch được cài đặt

trong thư mục /usr/local/bin. Thực hiện dòng lệnh sau để khởi động swatch:

/usr/local/bin/swatch –c /root/.swatchrc –t

/var/log/snort/canhbao.txt

Lựa chọn –c chỉ định vị trí của tập tin cấu hình Swatch và –t nói lên Swatch sẽ

“nhìn” vào tập tin log mà nó giám sát.

Khi có một sự kiện bắt được từ Snort, các thông tin ghi vào tập tin

canhbao.txt. Swatch sẽ gửi một thông điệp e-mail tương ứng trong tập tin cấu

hình của nó.

Page 43: Báo Cáo Thực Tập Tốt Nghiệp

43

Phần 3. Thử nghiệm khả năng phản ứng của

Snort IDS

Truy cập vào base http://127.0.0.1/base

Lúc này chưa có cảnh báo nào vì ta chưa khởi chạy snort. giả sử ta tạo một

rules với dấu hiệu như sau:

Sau đó include nó vào file /etc/snort_inline/snort_inline.conf và khởi chạy

snort: # snort_inline -c /etc/snort_inline/snort_inline.conf -Q rồi từ một máy

khác ping đến với địa chỉcủa máy ping là 192.168.1.121 và địa chỉ của máy IDS

là 192.168.1.111 ta có kết quả sau

Page 44: Báo Cáo Thực Tập Tốt Nghiệp

44

Page 45: Báo Cáo Thực Tập Tốt Nghiệp

45

Như vậy snort IDS đã hoạt động tốt, ta thử rules sau cho trường hợp phát

hiện nmap scan cổng.

sau đó include scan.rules vào file /etc/snort_inline/snort_inline.conf

khởi động lại snort_inline. Từ máy tấn công bật nmap và scan cổng ta nhận

được kết quả. nhưvậy snort đã thểhiên là một IPS

Page 46: Báo Cáo Thực Tập Tốt Nghiệp

46

Vào máy Snort xem kết quả:

Page 47: Báo Cáo Thực Tập Tốt Nghiệp

47

Phần 4. Kết luận

Hệ thống phát hiện xâm nhập (IDS) tuy chỉ mới xuất hiện sau này nhưng

hiện đóng vai trò không kém phần quan trọng. IDS giúp con người khám phá, phân

tích một nguy cơ tấn công mới. Từ nó người ta vạch ra phương án phòng chống. Ở

một góc độ nào đó, có thể lần tìm được thủ phạm gây ra một cuộc tấn công. Một

tổ chức lớn không thể nào thiếu IDS.

Những vấn đề đạt được:

Nắm được cơ chế hoạt động Snort IDS

Có cái nhìn trực quan khi thực hiện thử nghiệm một số loại tấn công

Nắm bắt được cơ chế hoạt động của hệ thống phát hiện xâm nhập Snort – IDS cùng các tập luật.

Cài đặt và cấu hình một hệ thống phát hiện xâm nhập mã nguồn mở Snort.

Vận dụng những hiểu biết nghiên cứu để viết luật cho Snort.

Sử dụng được các sản phẩm phân tích cảnh báo trong Snort như: MySQL, ACID, Swatch, Snortsam.

Những vấn đề chưa đạt được:

Vấn đề về Snort IDS rất rộng lớn, hiện những cách thức tấn công mới ngày nay đã có những thay đổi lớn. Do đó chưa thực sự hiểu rõ cách hoạt động của nó.

Đối với Snort, hiện có rất nhiều sản phẩm đi kèm hoạt động rất hay như: Barnyard, Snort center, Snort_inline, SnortSnarf,… không được áp dụng triệt để.

Tập luật bổ sung đang trong giai đoạn tối ưu và bổ sung nên không trình bày trong báo cáo.