itprofes
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Tìm hiểu hệ thống phát hiện xâm nhập mạng Snort

Go down

Tìm hiểu hệ thống phát hiện xâm nhập mạng Snort Empty Tìm hiểu hệ thống phát hiện xâm nhập mạng Snort

Bài gửi  admin 30/3/2010, 2:59 pm

Snort là một hệ thống phát hiện xâm nhập mạng (HIDS) mã nguồn mở miễn
phí. HIDS là một kiểu của hệ thống phát hiện xâm nhập (IDS), được sử
dụng để quét dữ liệu di chuyển trên mạng. Cũng có các hệ thống phát hiện
xâm nhập host-based, được cài đặt trên một host cụ thể và chỉ để phát
hiện các sự tấn công nhắm đến host đó. Mặc dù tất cả các phương pháp
phát hiện xâm nhập vẫn còn mới nhưng Snort được đánh giá là hệ thống tốt
nhất hiện nay.


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.
Các thành phần của Snort

Snort được chia thành
nhiều thành phần. 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à tạo ra output theo một định dạng được đòi
hỏi. Một IDS dựa trên Snort bao gồm các thành phần chính sau đây:


Packet Decoder
• Preprocessor
• Dectection Engine
• Logging
và Alerting System
• Output Modules

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.

Preprocessor (Bộ phận xử lí trước)
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 URI, ráp lại các dòng TCP, v.v...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.

Dectection
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ì lậut 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ộ máy của bạ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
• Sức mạnh của
bộ máy mà Snort đang chạy
• Tốc độ của bus được sử dụng
• Lưu
lượng trên mạng

Bộ phận phát hiện hoạt động theo những cách khác
nhau ở các phiên bản khác nhau của Snort. Trong tất cả phiên bản 1.x
của Snort, bộ phận phát hiện dừng việc xử lí gói tin khi phù hợp với một
luật. Dựa vào luật, bộ phận phát hiện sẽ có các hành động tương ứng.
Điều này có nghĩa là nếu một gói tin phù hợp với nhiều luật, chỉ có luật
đầu tiên được áp dụng mà không xem xét đến các luật còn lại. Điều này
làm nảy sinh một vấn đề. Một luật có độ ưu tiên thấp sẽ tạo ra một cảnh
báo có độ ưu tiên thấp, nếu một luật có độ ưu tiên cao bị xếp sau trong
chuỗi luật. Vấn đề này được giải quyết trong Snort phiên bản 2, khi mà
tất cả các luật được so sánh trên một gói tin trước khi tạo ra một cảnh
báo. Sau khi so sánh tất cả các luật, luật có độ ưu tiên cao nhất sẽ
được chọn để tạo cảnh báo. Vì bộ phận phát hiện trong phiên bản 2 đã
được viết lại hoàn toàn nên nó nhanh hơn rất nhiều so với các phiên bản
trước đây.

Logging và Alerting System(Hệ thống ghi và cảnh báo) :


Phụ thuộc vào cái mà bộ phận 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
bạn 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.
Các chế độ hoạt động của Snort
Snort có 3 chế độ
hoạt động cơ bản :

• Sniffer (snort -v)
• Packet logger
(snort -l)
• Network Intrusion Detection System (snort -A hoặc snort
-c )

Snort là một 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, tuy nhiên, có lúc bạn cần
xem lưu lượng mạng trên bộ cảm biến Snort. Trong trường hợp này, sử dụng
Snort như là một sniffer là khả thi. Kết quả xuất của chế độ Snort
sniffer hơi khác so với các sniffer dòng lệnh. Nó rất dễ để đọc và bạn
có thể thấy thích khả năng bắt giữ gói tin nhanh của nó. 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. Thỉnh thoảng, nó có thể là một công cụ gỡ rối hữu dụng cho
nhà quản trị.
Bật chế độ sniffer cho Snort bằng cờ -v :

#
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. Để
thoát chế độ sniffer, sử dụng Ctrl-C. Snort thoát bằng cách tạo ra một
bản tóm tắt các gói tin được bắt giữ, bao gồm cácgiao thức, thống kê
phân mảnh và tái hợp gói tin. Để 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:

# snort -vd

Dữ
liệu ứng dụng có thể thấy được và bạn có thể nhìn thấy 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:

#
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 snort
-dve > temp.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.

Snort là một Packet Logger

Bước
tiếp theo sau khi sniffing các gói tin là ghi log chúng. 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 mà bạn
muốn lưu trữ các log. Thư mục mặc định trong Snort là /var/log/snort.
Nếu bạn xác định một thư mục không tồn tại thì Snort sẽ báo một thông
điệp lỗi. Bạn 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:

# snort -l /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. Nói cách khác, một thư mục mới
được tạo ra cho mỗi địa chỉ được bắt giữ và dữ liệu liên quan đến địa
chỉ này được lưu trong thư mục đó.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). Hãy nhớ xác định biến mạng của bạn (trong file cấu hình hoặc
sử dụng -h ) để xác định chỉ ghi log cho mạng của bạn.

Cách tổ
chức phân cấp này hữu dụng khi một số giới hạn các host được quan tâm
hoặc bạn muốn xem thoáng qua các địa chỉ IP của các hostđược bắt giữ.
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 bạn ghi log tất cả lưu lượng trên một mạng lớn thì có thể
sẽ bị tràn inodes ( 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
của bạn và ánh xạ tất cả 65536 cổng TCp cũng như 65536 cổng UDP, bạn 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. Hầu hết các hệ thống có thể bắt giữ và
ghi log với tốc độ 100 Mbps mà không có vấn đề gì. Để ghi log các gói
tin theo kiểu nhị phân, sử dụng –b switch. Ví dụ :

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

Khi bạn đã thực hiện việc bắt giữ
gói tin, bạn 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.
#
snort -r /usr/local/log/snort/temp.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.

Snort là NIDS

Snort là một công cụ phát hiện
xâm nhập tuyệt vời. 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. Chúng ta sẽ xem rất
nhiều cách mà Snort có thể được sử dụng như là một NIDS và tất cả các
tùy chọn cấu hình có thể. 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
bạn muốn đặt ở một vị trí khác, bạn 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). Snort sẽ thoát ra với với một lỗi nếu file cấu
hình hoặc thư mục log không tồn tại.

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 bạn lọc các cảnh báo có độ ưu tiên thấp.
Trước khi chúng ta tìm
hiểu các cơ chế hoạt động của Snort, đầu tiên hãy xem xét các tùy chọn
của dòng lệnh. Một vài tùy chọn có thể được xác định trong file cấu hình
thay vì ở dòng lệnh. Nếu bạn chỉ muốn thử một vài thứ, xác định các cài
đặt trong dòng lệnh. Nếu bạn dự định sẽ giữ các cài đặt này trong một
khoảng thời gian, thiết lập chúng trong file cấu hình.
Các luật của
Snort Giống như virut, hấu hết các hành vi xâm nhập đều có một vài dấu
hiệu. Thông tin về các dấu hiệu này được sử dụng để tạo ra các luật của
Snort. Bạn có thể sử dụng honey post để biết kẻ xâm nhập đang làm gì và
thông tin về các công cụ và kĩ thuật của chúng.
Ngoài ra, có các sơ
sở dữ liệu về các điểm yếu mà kẻ xâm nhập muốn khai thác. Những cách
tấn công đã biết này cũng có thể được sử dụng như là các dấu hiệu để
phát hiện một người nào đó muốn tấn công hệ thống của bạn.Các dấu hiệu
có thể tồn tại trong header của các gói tin. Hệ thống phát hiện xâm nhập
dựa trên Snort thì dựa trên các luật. Các luật của Snort có thể được sử
dụng để kiểm tra nhiều phần khác nhau của gói tin.

Một luật có
thể được sử dụng để tạo ra một thông điệp cảnh báo, ghi lại một thông
điệp...,hoặc trong Snort là “pass” gói tin. Hầu hết các luật của Snort
được viết theo từng dòng đơn. Tuy nhiên, bạn cũng có thể mở rộng các
luật thành nhiều dòng bằng cách sử dụng kí tự gạch chéo ngược tại cuối
dòng. Các luật thường được đặt trong file cấu hình, thường là
snort.conf. Bạn cũng có thể sử dụng nhiều file bằng cách gom chúng lại
trong một file cấu hình chính.

Luật dở đầu tiên

Thật ra,
đây có thể là luật tệ nhất đã từng được viết, nhưng nó kiểm tra rất tốt
nếu Snort đang hoạt động tốt và có thể tạo ra các cảnh báo.
Alert
ip any any à any any (msg : IP Packet detected)

Bạn có thể dùng
luật này vào cuối mỗi file snort.conf khi bạn cài đặt Snort lần đầu
tiên. Luật này sẽ tạo ra cảnh báo cho mỗi gói tin Ip bắt được. Nó sẽ làm
đầy không gian đĩa một cách nhanh chóng nếu như bạn vẫn để nó ở đó.
Luật này dở vì nó không truyền đạt bất kì thông tin gì.Tại sao ta sử
dụng luật này? Đó có thể là lần đầu tiên bạn kiểm tra để đảm bảo Snort
đã được cài đặt đúng. Trong các lần tiếp theo, bạn sẽ thấy thông tin về
các phần khác nhau của luật Snort.
Luật kế tiếp tạo ra cảnh báo cho
tất cả các gói tin ICMP.
Alert icmp any any à any any (msg : “ICMP
Packet found”)

Cấu trúc của một luật

Tất cả các luật
Snort đều có hai phần chính : header và options

Phần header
chứa các thông tin về hành động mà luật sẽ thực hiện. Nó cũng chứa các
tiêu chuẩn về việc so sánh một luật trên một gói tin. Phần option thường
chứa một thông điệp cảnh báo và thông tin về phần nào của gói tin được
sử dụng để tạo ra cảnh báo. Một luật có thể phát hiện một hoặc nhiều
kiểu xâm nhập.

Header của luật Snort
Cấu trúc tổng quát của
phần header như sau

Trong đó :
·Action : xác định kiểu hành
động được thực hiện khi một tiêu chuẩn được so trùng và một luật giống
với gói tin dữ liệu. Hành động điển hình là việc tạo ra các cảnh báo
hoặc ghi lại các thông điệp log
·Protocol : được sử dụng để áp dụng
luật trên gói tin cho một giao thức cụ thể. Phần protocol được sử dụng
để áp dụng luật trên các gói tin chỉ đối với một giao thức cụ thể. Đây
là tiêu chuẩn đầu tiên được đề cập trong luật. Một vài giao thức được sử
dụng như là IP, ICMP, UDP...
·Address : xác định đại chỉ nguồn và
địa chỉ đích. Địa chỉ có thể là của một host, nhiều host hoặc là địa chỉ
mạng. Lưu ý rằng trong một luật sẽ có 2 địa chỉ : địa chỉ nguồn và địa
chỉ đích.
·Port : được áp dụng trong trường hợp TCP hay UDP, xác
định cổng nguồn và đích của một gói tin mà luật được áp dụng. Trong
trường hợp giao thức lớp mạng là IP và ICMP, số port là không có ý
nghĩa.
·Direction : của luật xác định địa chỉ và cổng nào được sử
dụng như là nguồn hay là đích.

Ví dụ, xét một luật sau đây. Luật
này sẽ tạo ra một thông điệp cảnh báo bất cứ khi nào nó phát hiện một
gói tin ping ICMP (ICMP ECHO REQUEST) với TTL là 100, như sau :

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

Phần
trước dấu ngoặc đơn là header của luật, phần trong dầu ngoặc đơn là
phần option. Phần header chứa các thông tin như sau:
Rule action
(Phần thực thi của luật): trong luật này, kiểu thực thi của luật là
“alert”, nghĩa là một cảnh báo sẽ được tạo ra khi trùng với một dấu hiệu
xn. Nhớ rằng gói tin sẽ được ghi log một cách mặc định khi cảnh báo
được tạo ra. Phụ thuộc vào phần action, phần option của luật có thể chứa
các tiêu chuẩn thêm vào trong luật.
Protocol (Giao thức) : trong
luật này, giao thức là ICMP, nghĩa là luật này chỉ được áp dụng trên các
gói tin ICMP. Trong bộ phận phát hiện của Snort, nếu giao thức của một
gói tin không phải là ICMP, phần còn lại của gói tin sẽ không được quan
tâm để tiết kiệm thời gian CPU. Phần protocol đóng một vai trò qian
trọng khi bạn muốn áp dụng luật Snort chỉ trên những gói tin với những
kiểu cụ thể.
Địa chỉ nguồn và cổng nguồn : trong ví dụ này, cả hai
phần này đều là “any”, nghĩa là luật được áp dụng cho tất cả các gói tin
đến từ một nguồn bất kì. Dĩ nhiên số cổng không liên quan gì đến gói
tin ICMP. Số cổng chỉ liên quan khi giao thức được sử dụng là TCP hoặc
UDP.
Direction : Trong trường hợp này direction được thiết lập là từ
trái qua phải sử dụng kí hiệu ->. Điều này chỉ ra rằng số địa chỉ và
cổng ở phía bên trái là nguồn và ở phía bên phải là của đích. Nó cũng
có nghĩa là luật này sẽ được áp dụng trên các gói tin di chuyển từ nguồn
tới đích. Bạn cũng có thể sử dụng kí hiệu <- để đảo lại ý nghĩa của
nguồn và đích. Lưu ý rằng kí hiệu <> cũng có thể được sử dụng để
áp dụng luật trên cả hai hướng.
Địa chỉ đích và cổng đích : trong ví
dụ này, cả hai phần này đều là “any”, nghĩa là luật được áp dụng cho
tất cả các gói tin đến từ một đích bất kì. Phần direction trong luật này
không đóng một vai trò gì cả vì luật được áp dụng trên tất cả các gói
tin ICMP di chuyển theo bất kì hướng nào, vì từ khóa “any” ở cả phần
nguồn và đích.

Rule Options

Rule option theo sau rule
header và được đóng gói trong dấu ngoặc đơn. Có thể có một hoặc nhiều
option, được cách nhau bởi dấu phẩy. Nếu bạn sử dụng nhiều option, những
option hình thành phép logic AND. Một action trong rule header chỉ được
thực hiện khi tất cả các option đều đúng. Tất cả các option được định
nghĩa bằng các từ khóa. Một vài option cũng chứa các tham số. Thông
thường, một option có thể có 2 phần : từ khóa và đối số. Các đối số được
phân biệt với từ khóa bằng dấu hai chấm. Ví dụ:

msg: "Detected
confidential";

Trong option này thì msg là từ khóa và "Detected
confidential" là đối số của từ khóa

Phần tiếp theo là các từ
khóa được sử dụng trong phần option của luật Snort.

ack

ack:
< number>;
TCP header chứa một trường Acknowledgement Number
dài 32 bit. Trường này chỉ ra rằng sequence number kế tiếp của người gửi
được mong đợi. Trường này chỉ có ý nghĩa khi cờ flag trong trường TCP
được thiết lập.

classtype

config classification:
name,description,priority
name : tên được sử dụng cho việc phân
loại. Tên được sử dụng với từ khóa classtype trong luật Snort.
Description
: mô tả ngắn về kiểu phân loại
Priority : thứ tự ưu tiên mặc định
cho sự phân loại, có thể được chỉnh sửa bằng từ khóa priority. Priority
càng thấp thì độ ưu tiên càng cao.

Các luật có thể được phân
loại và xếp thứ tự ưu tiên vào trong một nhóm. Để có thể hiểu hơn về từ
khóa classtype, hãy xem file classification.config trong snort.conf Mỗi
dòng trong đó sẽ có cú pháp như sau :

content

content: ; content: ;
Một đặc tính quan trọng của Snort
là khả năng tìm thấy một mẫu dữ liệu trong một gói tin. Mẫu đó có thể
tồn tại dưới dạng một chuỗi ASCII hoặc là các kí tự thập lục phân. Giống
như virut, những kẻ xâm nhập cũng có các dấu hiệu và từ khóa content để
có thể tìm ra các dấu hiệu trong các gói tin. Vì Snort phiên bản 1.x
không hỗ trợ các giao thức ở lớp ứng dụng nên từ khóa này, cùng với từ
khóa offset, cũng có thể được sử dụng để xem xét header của lớp ứng
dụng.

offset

offset: < value>;
Từ khóa offset
được sử dụng kết hợp với từ khóa content. Sử dụng từ khóa này, bạn có
thể bắt đầu tìm kiếm từ một vị trí xác định so với vị trí bắt đầu của
gói tin. Sử dụng một con số như là đối số của từ khóa này.
depth

depth:
< value>;
Từ khóa depth cũng được sử dụng kết hợp với từ khóa
content để xác định giới hạn trên của việc so sánh mẫu. Sử dụng từ khóa
này, bạn có thể xác định một vị trí so với vị trí bắt đầu. Dữ liệu sau
vị trí này sẽ không được tìm kiếm để so mẫu. Nếu bạn dùng cả hai từ khóa
offset và depth thì bạn có thể xác định một khoảng dữ liệu thực hiện
việc so sánh mẫu.
nocase

nocase;
Từ khóa nocase được sử
dụng kết hợp với từ khóa content. Nó không có đối số. Mục đích của nó là
thực hiện việc tìm kiếm trong trường hợp vô tình.

content-list

content_list:
< filename>;
Từ khóa content-list được sử dụng với tên của
một file như là đối số của từ khóa này. File này sẽ chứa một danh sách
các chuỗi sẽ được tìm kiếm trong một gói tin. Mỗi chuỗi được đặt trên
các dòng khác nhau của file.
dsize

dsize: [<|>] <
number>;

Từ khóa dsize được sử dụng để tìm chiều dài một phần
dữ liệu của gói tin. Nhiều cách tấn công sử dụng lổ hổng tràn bộ đệm
bằng cách gửi các gói tin có kích thước lớn. Sử dụng từ khóa này, bạn có
thể tìm thấy các gói tin có chiều dài dữ liệu lớn hoặc nhỏ hơn một số
xác định.
flags

flags: < flags>;
Từ khóa flags
được sử dụng để tìm ra bit flag nào được thiết lập trong header TCP của
gói tin. Mỗi flag có thể được sử dụng như một đối số của từ khóa flags
trong luật Snort. Những bit flag này được sử dụng bởi nhiều các công cụ
bảo mật với nhiều mục đích trong đó có việc quét các cổng như nmap
(http://www.nmap.org).
fragbits

fragbits: <
flag_settings>;
Sử dụng từ khóa này, bạn có thể tìm ra những bit
RB (Reserved Bit), DF(Don''t Fragment Bit), MF(More Fragments Bit) trong
header IP có được bật lên hay không.
icmp_id

icmp_id: <
number>;
Option icmp_id được sử dụng để phát hiện một ID cụ thể
được sử dụng với một gói tin ICMP.
icmp_seq

icmp_seq: <
hex_value>;
Option icmp_seq giống như từ khóa icmp_id.
itype

itype:
< number>;
Header ICMP nằm sau header IP và chứa trường type.
Từ khóa itype được sử dụng để phát hiện các cách tấn công sử dụng
trường type trong header ICMP của gói tin.
icode

icode: <
number>;
Trong gói tin ICMP, header ICMP đi sau header IP. Nó
chứa một trường code. Từ khóa icode được sử dụng để phát hiện trường
code trong header gói tin ICMP.
id

id: < number>;
Từ
khóa id được sử dụng để đối chiếu trường fragment ID của header gói tin
IP. Mục đích của nó là phát hiện các cách tấn công sử dụng một số ID cố
định.
ipopts

ipopts: < ip_option>;
Header IPv4cơ
bản dài 20 byte. Bạn có thể thêm các tùy chọn vào header này ở cuối.
Chiều dài của phần tùy chọn này có thể lên đến 40 byte. Các tùy chọn
được sử dụng cho các mục đích khác nhau, bao gồm:
• Record Route
(rr)
• Time Stamps (ts)
• Loose Source Routing (lsrr)

Strict Source Routing (ssrr)
ip_proto

ip_proto: [!] <
name or number>;
Từ khóa ip_proto sử dụng plug-in IP Proto để xác
định số giao thức trong header IP. Từ khóa này cần một con số giao thức
là đối số. Bạn cũng có thể sử dụng tên giao thức nếu nó có thể phân
giải bằng file /etc/protocols.
logto
logto: < file_name>;
Từ
khóa logto được sử dụng để ghi log các gói tin vào một file đặc biệt.
msg


msg: < sample message>;
Từ khóa msg được sử dụng để
thêm một chuỗi kí tự vào việc ghi log và cảnh báo. Bạn có thể thêm một
thông điệp trong hai dấu ngoặc kép sau từ khóa này.
priority

priority:
< priority integer>;
Từ khóa priority gán độ ưu tiên cho một
luật.
react

react: ;
Từ khóa react được sử dụng với
một luật để kết thúc một phiên, khóa một vài vị trí hoặc dịch vụ. Không
phải tất cả các option với từ khóa này hoạt động. Để sử dụng từ khóa
react, bạn nên biên dịch Snort với lệnh --enable-flexresp trong script
cấu hình.

reference

reference : ,;
Từ
khóa reference có thể thêm một sự tham khảo đến thông tin tồn tại trên
các hệ thống khác trên mạng. Nó không đóng một vai trò nào trong cơ chế
phát hiện. Có nhiều hệ thống để tham khảo như CVE và Bugtraq. Những hệ
thống này giữ các thông tin thêm về các kiểu tấn công đã được biết. Bằng
việc sử dụng từ khóa này, bạn có thể kết nối đến các thông tin thêm
trong thông điệp cảnh báo.
resp

Từ khóa resp là một từ khóa
cực kì quan trọng. Nó có thể được sử dụng để đánh bại các hành vi của
hacker bằng cách gửi các gói tin trả lời cho một hostmà tạo ra một gói
tin thỏa luật. Từ khóa này cũng được biết như là Flexible Response
(FlexResp) và được dựa trên FlexResp plug-in. Plug-in nên được biên dịch
vào Snort, sử dụng lệnh (--with-flexresp)trong script cấu hình.
rev


rev: < revision integer>;

Từ khóa rev được thêm
vào option của luật Snort để chỉ ra số revision của luật. Nếu bạn cập
nhật luật, bạn có thể sử dụng từ khóa này để phân biệt giữa các phiên
bản. Các module output cũng có thể sử dụng con số này để nhận dạng số
revision.
rpc

rpc: < Số ứng dụng
, Số thủ tục
,
Số phiên bản
>
Từ khóa rpc được sử dụng để phát hiện các yêu
cầu RPC cơ bản. Từ khóa này chấp nhận 3 số như là đối số :

sameip


sameip;
Từ khóa sameip được sử dụng để kiểm tra địa chỉ
nguồn và đích có giống nhau hay không. Nó không có đối số.
seq

seq:
;
Từ khóa seq trong luật Snort có thể được sử dụng để
kiểm tra số thứ tự sequence của gói tin TCP.

flow

Từ
khóa flow được sử dụng để áp dụng một luật lên các gói tin di chuyển
theo một hướng cụ thể. Bạn có thể sử dụng các option với từ khóa để xác
định hướng. Các option sau đây có thể được sử dụng với từ khóa này :

to_client
• to_server
• from_client
• from_server

session


session: [printable|all];
Từ khóa có thể được sử dụng để
gạt bỏ tất cả dữ liệu từ một phiên TCP.
sid

sid: < snort
rules id>;
Sử dụng SID, các công cụ như ACID có thể biểu diễn
luật thật sự tạo ra một cảnh báo cụ thể.

tag

tag: ,
, [, direction]

Từ khóa tag là một từ khóa rất quan trọng khác
có thể được sử dụng để ghi log các dữ liệu thêm vào từ ( hoặc đến) một
host xâm nhập khi một luật được kích hoạt. Dữ liệu thêm vào có thể được
phân tích sau này một cách chi tiết hơn.
tos

tos: <
number>;
Từ khóa tos được sử dụng để phát hiện một giá trị cụ thể
trong trường TOS (Type of Service) của header IP.
ttl

ttl:
< number>;
Từ khóa ttl được sử dụng để phát hiện giá trị Time
to Live trong header IP của gói tin. Từ khóa này có thể được sử dụng với
tất cả các kiểu giao thức được xây dựng trên IP như ICMP, UCP và TCP.
Sử dụng từ khóa ttl, bạn có thể tìm ra nếu có một người cố gắng
traceroute mạng của bạn. Vấn đề duy nhất là từ khóa cần một giá trị TTL
chính xác.

uricontent

uricontent: [!] "content string";
Từ
khóa uricontent giống với từ khóa content ngoại trừ việc nó được sử
dụng để tìm một chuỗi chỉ trong phần URI của gói tin.
Triển khai
Snort
Những điều cần lưu ý

Một thử thách khi sử dụng một
ứng dụng mã nguồn mở như Snort là thường xuyên có nhiều phiên bản mới.
Những phiên bản mới này có thể có thêm các chức năng mà bạn muốn sử
dụng. Vấn đề duy nhất là thỉnh thoảng các chức năng này làm cho cách
thực hiện các việc cũ bị thay đổi hoặc bị thay thế (ví dụ như tiền xử lí
portscan2 và conversation bị thay thế bằng flow-portscan). Hãy kiểm tra
các phiên bản và chức năng mới này trước khi nâng cấp. Thỉnh thoảng,
các chức năng mới cũng có một số lỗi. Tuy nhiên, việc kiểm tra mã nguồn
mở phiên bản beta cùng với các công ty và nhà phát triển được thực hiện
bởi Sourcefire (một công ty bán phiên bản thương mại của Snort) đã loại
trừ hầu hết các lỗi trước khi chúng được phát hành.

Làm thế nào
để bạn biết được mình bị tấn công hay bị hack.Theo khái niệm về phòng
thủ theo chiều sâu (defense-in-depth), mỗi thiết bị trên mạng đóng một
vai trò về bảo mật và các cách khác nhau có thể được triển khai để phát
hiện hoặc ngăn chặn các cuộc tấn công. Việc triển khai NIDS không phải
là tất cả những gì cần để có thể bảo mật cho hệ thống của bạn. Không có
một thiết bị đơn nào có thể làm việc đó.

NIDS là một lớp phòng
thủ khác. Bạn vẫn cần cài đặt các bản vá bảo mật cho phần mềm hệ thống
của bạn. Bạn vẫn cần cách li các hệ thống đối mặt với Internet thành các
mạng riêng biệt (thường được gọi là DMZ). Bạn vẫn cần kiểm tra các log
hệ thống. Một NIDS cung cấp sớm một cảnh báo rằng một người nào đó đang
thăm dò bạn hoặc một sự tấn công đang được thực hiện vào hệ thống.

Nếu
bạn chỉ có hệ thống Windows trong mạng , việc sử dụng các luật mà theo
dõi những sự tấn công vào hệ thống Unix sẽ chỉ là gây ra các cảnh báo
nhầm. Nếu bạn đang chạy server web Apache, loại trừ các luật cảnh báo về
Microsoft IIS mà có thể không ảnh hưởng đến server web của bạn

Vị
trí của bộ cảm biến


Vì bộ cảm biến Snort chỉ có thể cảnh
báo trên những gì nó thấy nên vị trí của bộ cảm biến là rất quan trọng.
Trong nhiều mạng, việc đặt bộ cảm biến ở một vị trí sai có thể làm cho
bạn bỏ qua toàn bộ lưu lượng mạng. Hình 1 mô tả một ví dụ đơn giản. Nếu
bạn muốn đặt bộ cảm biến Snort ở điểm A, bạn có thể thấy toàn bộ lưu
lượng giữa mạng bên trong và Internet. Bạn sẽ không thể thấy được lưu
lượng giữa các DMZ và Internet. Trong trường hợp này, một sự tấn công
vào web server sẽ không bị phát hiện.

Nếu bạn đặt bộ cảm biến
tại điểm B, bạn sẽ thấy tất cả lưu lượng giữa các hệ thống DMZ và
Internet. Trong trường hợp này, bạn sẽ không thấy lưu lượng giữa mạng
bên trong và Internet. Có lẽ bạn nên có một bộ cảm biến chỉ được sử dụng
cho DMZ với các tập hợp luật và tiền xử lí được điều chỉnh đặc biệt cho
phù hợp cho những server này. Bạn cũng có thể có một bộ cảm biến khác
được đặt tại A để kiểm tra lưu lượng có phù hợp hay không.

Việc
đặt bộ cảm biến tại C sẽ cho phép bạn thấy tất cả lưu lượng di chuyển
giữa cả hai mạng( bên trong và DMZ) với Internet. Tuy nhiên, lưu lượng
giữa DMZ và mạng bên trong không thể thấy được.

Như bạn thấy,
việc đặt bộ cảm biến lên mạng không phải là một quyết định tầm thường.
Hãy xem xét một vài khía cạnh của quyết định này.

Các hệ thống
và mạng phải giám sát

Thật là không thực tế khi mong đợi xem
được tất cả lưu lượng giữa tất cả các hệ thống trên mạng một cách hiệu
quả với NIDS. Sự ưu tiên của các hệ thống và các mạng là cần thiết.

Các
hệ thống cung cấp các dịch vụ cho Internet là lựa chọn đầu tiên. Những
hệ thống này nguy hiểm hơn so với các mạng bên trong. Chúng cũng có thể
cung cấp các dịch vụ cho khách hàng hoặc đối tác của bạn, điều cực kì
quan trọng đối với mục đích của tổ chức của bạn. Quy tắc đầu tiên là
cách li bất kì hệ thống nào cung cấp các dịch vụ cho cộng đồng Internet
thành các mạng độc lập mà giới hạn truy cập đến các mạng bên trong. Cách
sắp xếp này làm cho lưu lượng mạng dễ kiểm soát hơn.

Cũng có
một nhóm các server cung cấp các dịch vụ cho những người làm việc :
print server, file server, mail server và cơ sở dữ liệu... Tác động của
các cảnh báo nhầm gia tăng khi theo dõi lưu lượng mạng LAN bên trong.
Việc trao đổi bình thường giữa các hệ thống Window này có thể tạo ra một
khối lượng lớn các cảnh báo này. Hệ thống có giá trị nhất chính là cơ
sở dữ liệu. Bạn có thể bổ sung cho cái thiếu của NIDS bằng các nhà quản
trị mạng, bao gồm việc thực hiện tốt khi xây dựng hệ thống, sử dụng các
phần mềm chống virus, và kiểm tra các log hệ thống. Điều này không có
nghĩa là chúng ta sẽ bỏ qua các máy trạm, laptop, và các thành phần khác
của mạng bên trong. Người ta đề nghị rằng lưu lượng giữa những hệ thống
này và Internet nên được kiểm soát bằng NIDS. Nếu bạn có một kết nối
WAN đến các đối tác, chi nhánh, một bộ cảm biến trên các kết nối này là
cần thiết.

Vị trí chính xác của bộ cảm biến được xác định dễ hơn
bằng cách tìm kiếm những chỗ nghẽn cổ chai – kết nối giữa các mạng này
là điểm rất tốt. Điểm giữa mạng của bạn và Internet là một sự lựa chọn
dễ dàng. Như đã đề cập ở trên, các kết nối WAN là các điểm quan trọng.
Hãy nhớ đặt các server bên trong vào các mạng riêng biệt để lưu lượng
giữa các mạng chứa người sử dụng và các server có thể được kiểm soát.

Còn
một vấn đề : bạn muốn đặt bộ cảm biến bên phía Internet của firewall
(bên ngoài) hay là phía bên trong. Nếu bạn đặt bên ngoài, bộ cảm biến
thấy tất cả các tấn công vào mạng. Nếu là bên trong, ta có thể sử dụng
bộ cảm biến cho nhiều mục đích hơn, vì chỉ có những lưu lượng nào được
firewall cho phép mới được giám sát.

Tạo các điểm kết nối

Những
thiết bị switch tốc độ cao chỉ chuyển lưu lượng đến những cổng trong
cuộc trao đổi – làm cho việc nghe trộm cuộc trao đổi đó với bộ cảm biến
NIDS là không thể. Một vài nhà quản trị cắm một hub nhỏ vào đường truyền
lưu lượng mà họ muốn xem. Tuy cách này vẫn hoạt động nhưng nó không tin
cậy bằng các switch dành cho doanh nghiệp.
Có rất nhiều thiết bị
phần cứng có thể tạo một bản sao của lưu lượng di chuyển trên mạng. Một
vài là sản phẩm thương mại và những cái khác có thể được xây dựng theo
các hướng dẫn trên Internet. Giải pháp thương mại thường được sử dụng,
nhưng có một điểm lỗi tiềm tàng đối với các cáp được nghe trộm.
Một
giải pháp tốt hơn là sử dụng các switch của Cisco. Nó có thể tạo ra các
sao chép của lưu lượng từ một hoặc nhiều cổng và gửi nó ra một cổng được
chỉ định mà bạn sẽ cắm bộ cảm biến vào. Đây được gọi là SPAN port
(Switched Port Analyzer) của Cisco. Bạn có thể thu thập được lưu lượng
từ một cổng đơn, tập hợp lưu lượng từ nhiều cổng, thậm chí là các cổng
trên các switch ở xa.

Lưu lượng mã hóa

Bạn có thể muốn
sử dụng Snort để giám sát các giao dịch thương mại điện tử quan trọng.
Lưu lượng này được mã hóa bằng SSL - làm cho giao dịch được bảo mật hơn.
Khi đó, Snort không thể đối chiếu nội dung của một gói tin được mã hóa
với các dấu hiệu trong file luật. Mục đích của việc mã hóa lưu lượng là
làm cho nó không thể bị can thiệp hoặc giám sát.

Một giải pháp
cho phép lưu lượng web vẫn được mã hóa nhưng cho phép Snort đối chiếu
với các dấu hiệu xâm nhập là sử dụng một proxy SSL. Proxy SSL có nhiều
tên như Content Switch, SSL Accelerator, và SSL Proxy. Thiết bị này nằm
giữa client và server và giải quyết nhiệm vụ mã hóa lưu lượng. Lưu lượng
từ web server đến proxy SSL không được mã hóa còn lưu lượng từ proxy và
web client thì được mã hóa. Đặt bộ cảm biến Snort giữa web server và
proxy sẽ cho phép lưu lượng được giám sát.Một ưu điểm khác của cách thực
thi này là khả năng chuyển trách nhiệm mã hóa của CPU cho một thiết bị
ủy quyền, cho phép web server hoạt động hiệu quả hơn. Các proxy SSL cũng
thường thực hiện các nhiệm vụ khác như cân bằng tải hoặc xác thực.

Bảo
mật bộ cảm biến Snort

Một điều hiển nhiên rằng bảo vệ hệ thống
chịu trách nhiệm giám sát và duy trì sự bảo mật cho các mạng là một việc
cực kì quan trọng. Bạn không chỉ cần bảo vệ hệ thống NIDS mà còn phải
bảo vệ các server syslog, server xác thực, các công cụ giám sát và quản
trị. Một kiểu triển khai là mạng quản trị. Mạng này có một firewall
riêng và các sự truy cập đến nó chịu sự điều khiển chặt chẽ. Firewall
chỉ mở những cái cần cho việc giám sát lưu lượng.
Việc quản lý chặt
chẽ hệ thống Snort là rất quan trọng. Các hệ điều hành nên được cấu hình
theo chuẩn công nghiệp và thường xuyên cập nhật các bản vá lỗi, cập
nhật. Xét cho cùng, một bộ cảm biến IDS có thể truy cập đến hầu hết các
hệ thống nhạy cảm của bạn – một tình huống nguy hiểm.

Chọn một
hệ điều hành

Có nhiều việc để suy nghĩ và đưa ra quyết định như
sau:

Khả năng hỗ trợ
Rất thông thường, hãy quyết định chọn
hệ điều hành nào được sử dụng dựa trên những gì mà bạn biết. Chọn một hệ
điều hành mà bạn biết cấu hình và bảo quản hiệu quả. Nếu bạn biết rõ về
Windows nhưng không biết gì về Linux, hãy sử dụng Windows. Hầu như
những tài nguyên web được sử dụng để chạy Snort thiên về cài đặt nền
tảng Linux.


Sự hoạt động
Mọi người thừa nhận rằng mạng
trên Linux và BSD thì nhanh hơn mạng Windows. Theo kinh nghiệm của các
chuyên gia bảo mật, dường như bộ cảm biến Linux có thể giám sát mức độ
băng thông cao hơn Windows với một cấu hình định sẵn. Điều đó làm cho
bạn cảm thấy Snort được viết cho hệ điều hành Unix.

Sự ổn định
Người
ta đã từng cho rằng Linux và BSD thì ổn định hơn Windows nhiều. Điều đó
thật sự không thật đúng đối với các hệ thống Windows được cấu hình và
vá lỗi tốt.

Bảo mật
Có nhiều việc làm để bảo mật cho hệ
thống Windows. Số lượng các bản vá lỗi cho các dịch vụ Windows là rất
nhiều. Cũng có các bản vá lỗi cho những hệ điều hành khác và các dịch vụ
Unix nhưng thường là ít hơn. Và vì hệ điều hành Unix có khuynh hướng
chạy ít dịch vụ hơn nên bạn sẽ có ít lỗ hổng hơn. Về nhiệm vụ có liên
quan đến bảo mật, nhiều chuyên gia sử dụng Linux hay BSD hơn là Windows.


Cấu hình các giao diện

Cùng với việc tạo ra một mạng
quản lý, có nhiều bước phải thực hiện để bảo mật cho hệ thống của bạn.
Các bộ cảm biến Snort nên được cấu hình với ít nhất 2 giao diện. Một
giao diện trên mạng quản trị, tất cả các lưu lượng cảnh báo và quản trị
dùng giao diện này, tránh cho nó khỏi những con mắt tò mò. Snort sẽ sử
dụng giao diện kia để giám sát.Giao diện này sẽ không được cấu hình với
một địa chỉ IP, vì vậy nó sẽ không thể bị thấy bởi các host

trên
mạng. Việc giữ các giao diện lắng nghe “vô hình” với các hệ thống khác
trên mạng làm cho việc bảo mật bộ cảm biến dễ dàng hơn.Tắt các dịch vụ
không cần thiết

Nếu một dịch vụ không cần thiết cho chức năng
của một server, ta không nên cài đặt hoặc bật nó lên. Càng ít dịch vụ
chạy trên một hệ thống, càng ít các vấn đề cần phải bảo mật.

Cập
nhật các bản vá lỗi

Ngày càng xuất hiện nhiều các tấn công mới,
vì vậy bạn phải thường xuyên cập nhật và vá lỗi hệ thống. Điều này đúng
với bất kì hệ điều hành nào mà bạn sử dụng.

Sử dụng các cách
xác thực mạnh

Khi có thể, hãy sử dụng các phương pháp xác thực
mạnh hơn việc chỉ đơn giản là username và password. Hãy bắt người dùng
thay đổi password định kì, hủy tài khoản sau một số lần đăng nhập không
thành công...

Giám sát hệ thống tạo log

Hệ thống được
cấu hình để tạo ra các log là rất quan trọng và các log đó được xem lại
thường xuyên để biết được các vấn đề về hệ thống, phần cứng, cấu
hình...(bao gồm cả các dấu hiệu xâm nhập ). Nếu có thể, gửi các log đến
một server syslog tập trung (nên được đặt trong mạng quản lý). Điều này
làm cho việc xem các log và thiết lập một vài sự liên quan của các sự
kiện trên nhiều mạng dễ dàng hơn.
admin
admin
Thiếu Úy III
Thiếu Úy III

Tổng số bài gửi : 627
Diem : 6548
Thank : 4
Join date : 24/03/2010
Đến từ : Bỉm Sơn - Thanh hóa

https://itprofes.forumvi.com

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết