Cấu hình cho phần mềm Snort

Một phần của tài liệu Xây dựng hệ thống phát hiện xâm nhập mạng áp dụng cho hệ thống mạng Bộ Khoa học và Công nghệ (Trang 59)

2. 9 Phòng ngừa và ngăn chặn spoofing

3.2.3Cấu hình cho phần mềm Snort

Tất cả việc cài đặt và cấu hình cho Snort thực hiện các chức năng IDS đều được thực hiện trên tệp tin snort.conf đặt mặc định trong thư mục /etc/snort

Sử dụng và khai báo các biến

Phần đầu tiên trong tệp tin cấu hình của Snort chính sử dụng và khai báo các biến để quyết định chức năng của một vài hệ thống và vị trí của chúng. Biến ánh xạ đến vị trí trong môi trường mà Snort có thể học cách quyết định sự kiện nào bị cảnh báo. Những biến có thể là địa chỉ IP hoặc các cổng TCP mà các dịch vụ đang lắng nghe.

Mặc định thì các biến được khai báo với giá trị bất kỳ (any). Điều này cho phép địa chỉ IP bất kỳ. Tuy nhiên, nó có thể gây những cảnh báo sai lầm.

Để chỉ định một máy tính đơn, chỉ cần khai báo địa chỉ IP :

var HOME_NET 10.120.25.135

Ta cũng có thể chỉ định nhiều địa chỉ IP :

var HOME_NET [10.10.10.20,192.168.1.23,172.16.30.25]

Ta cũng có thể chỉ định toàn bộ mạng con bằng các sử dụng địa chỉ BroadCast kết hợp Subnet Mask:

Hoặc sử dụng máy trên nhiều mạng con :

Var HOME_NET [192.168.1.12,172.16.0.0/16,10.10.10.10,10.10.20.0/24]

Một chú ý là H ME_NET là tên biến mặc định để chỉ những máy tính ở bên trong mạng cục bộ, còn EXTERNAL_NET để chỉ những máy tính ở bên ngoài internet.

Để nhanh chóng cài đặt biến EXTERNAL_NET ta chỉ việc dùng “!” có nghĩa N T, tức là ngoài những địa chỉ đã xác định của HOME_NET.

var EXTERNAL_NET !$HOME_NET

Một vài biến được gán cho cổng để thay thế địa chỉ IP. Snort không hỗ trợ danh sách nhiều cổng không tuần tự. Chức năng này sẽ được cung cấp trong các phiên bản sau: Gán cho cổng đơn : var ORACLE_PORTS 1521 Và nó hỗ trợ sử dụng cổng tuần tự : 8000:8080 (từ 8000 đến 8080) Hoặc : :8080 (từ 0 đến 8000) Và sử dụng “!” để gán các cổng không phải 80 chẳng hạn: var SHELLCODE_PORTS !80

Các biến mặc định sử dụng trong snort.conf

HOME_NET: Danh sách những địa chỉ IP của hệ thống cần bảo vệ.

EXTERNAL_NET: Địa chỉ bên ngoài hệ thống, thường sử dụng “!” kết hợp với biến HOME_NET.

Việc sử dụng H ME_NET và EXTERNAL_NET là rất quan trọng trong việc thiết kế các luật, ví dụ :

alert tcp $HOME_NET any -> $EXTERNAL_NET any (…);

Có rất nhiều luật được thiết kế để quan sát những dịch vụ đặc biệt trên môi trường. Những biến chỉ cho Snort biết được nơi để tìm các dịch vụ. Cài đặt những địa chỉ đặc biệt cho những Server để giảm thiểu số lượng cảnh báo sai của Snort. Cho ví dụ, ta có thể không có DNS Server bên trong hệ thống mạng. Trong trường

hợp đó, việc khai báo DNS giúp cho hệ thống mạng củ sử dụng DNS trên Internet. Những biến thường được sử dụng để định nghĩa những dịch vụ đặc biệt :

DNS_SERVERS SMTP_SERVERS HTTP_SERVERS SQL_SERVERS TELNET_SERVERS SNMP_SERVERS

Ví dụ về một luật sử dụng các biến trên:

alert tcp $HTTP_SERVERS $HTTP_PORTS -> $EXTERNAL_NET any (…)

Một số giá trị cổng đăc biệt :

HTTP_PORTS : Cổng web (http) mặc định là 80 , có thể sử dụng 433 (SSL)

SHELLCODE_PORTS : !80

ORACLE_PORTS : Cổng lắng nghe của Oracle, mặc định là cổng 1521.

AIM_SERVERS : Cổng này được sử dụng bởi những luật xem ngang hàng (peer-to- peer) và giao thông instant messenger. Nó được cấu hình với danh sách cuối cùng của A L. Đây là địa chỉ của Install Messenger Server.

RULE_PATH : Đây là biến quan trọng nhất, nếu không có nó, Snort sẽ không thể bắt đầu, nó nên chỉ tới vị trí của những luật trên hệ thống: (adsbygoogle = window.adsbygoogle || []).push({});

var RULE_PATH /etc/snort

Cấu hình cho giải mã và phương pháp dò tìm

Một chức năng quan trọng của Snort nói riêng và IDS nói chung đó là việc giải mã gói tin để đưa ra cấu trúc của gói tin. Nếu một gói tin có cỡ bất thường, có tùy chọn bất thường, hoặc các thiết kế không chuẩn, Snort sẽ tạo ra cảnh báo. Nếu không cần quan tâm đến những trường hợp không cần thiết của tùy chọn trong gói tin để tránh những cảnh báo không cần thiết (false positives), ta có thể tắt chức năng giải mã đó đi, hoặc có thể bật lên nếu cần thiết, ví dụ :

# config disable_tcpopt_experimental_alerts # config disable_tcpopt_obsolete_alerts # config disable_tcpopt_ttcp_alerts # config disable_tcpopt_alerts # config disable_ipopt_alerts

Một số các cấu hình cho vấn đề giải mã (decoder) và dò tìm (detection).

Các tùy chọn cấu hình snort.conf

Tùy chọn Miêu tả

config order: [pass, alert, log,

activation, or dynamic] Thay đổi trật tự trong luật config alertfile: alerts Thiết kế tệp tin cảnh báo.

config decode_arp Bật giải mã arp (snort -a).

config dump_chars_only Bật character dumps(snort -C).

config dump_payload Kết xuất thông tin ở tầng ứng dụng (snort - d).

config decode_data_link Giải mã phần đầu của tầng Vật lý config bpf_file: filters.bpf Lọc BPF (snort -F).

config set_gid: 30 Thay đổi GID sang GID cụ thể (snort -g).

Các tùy chọn cấu hình snort.conf

Tùy chọn Miêu tả

config interface: <interface name> Thiết kế giao tiếp mạng (snort -i).

config alert_with_interface_name Nối thêm giao tiếp tới cảnh báo (snort -I). config logdir: /var/log/snort Thiết lập thư mục log (snort -l).

config umask: <umask> Thiết lập umask (snort -m).

config pkt_count: N Kết thúc sau N gói tin (snort -n).

config nolog Tắt log (snort -N).

config obfuscate Obfuscate IP addresses (snort -O).

config no_promisc Tắt chế độ promiscuous mode (snort -p).

config quiet Tắt banner và trạng thái báo cáo (snort -q).

config chroot: /home/snort Đặt thư mục gốc mặc định (snort -t).

config checksum_mode : all Những kiểu gói tin sẽ tính cheksum. Các giá trị: none, noip, notcp, noicmp, noudp, or all. config set_uid: <id> Thiết lập UID <id> (snort -u).

config utc Sử dụng UTC thay thế thời gian địa phương

Các tùy chọn cấu hình snort.conf

Tùy chọn Miêu tả

config verbose Sử dụng Verbose để ghi tới stdout (snort - v.) (adsbygoogle = window.adsbygoogle || []).push({});

config dump_payload_verbose Kết xuất gói tin thô (snort -X ).

config show_year Chỉ ra năm trong timestamps (snort -y).

Bảng 3: Các cấu hình tùy chọn Snort.conf

Cấu hình cho bộ tiền xử lý

Bộ tiền xử lý của Snort đã thay đổi rất nhiều trong các phiên bản gần đây. Tuy nhiên nó vẫn giữ một số tính năng của cũ, ta vẫn có thể sử dụng nếu cần.

Một số tiện ích của bộ tiền xử lý :

 Quan sát kiểm tra gói tin với cơ sở dữ liệu để nhận dạng dấu hiệu tấn công.  Cơ chế tự bảo vệ : Các tin tặc trình độ cao có thể tấn công và làm lụt cảm

biến NIDS vì thế nó không làm việc chính xác nữa. Bộ tiền xử lý có cơ chế chống lại điều này.

 Khả năng mở rộng của Snort là phát hiện những nguy cơ tấn công mới chưa có trong cơ sở dữ liệu.

flow

Chức năng này là trung tâm chứa thông tin trạng thái được lưu trong Snort. Ngay bây giờ, đây chỉ là một module cho việc "tràn". flow-scanport. Flow quan sát tất cả giao thông mạng và theo dõi liên kết giữa các hệ thống, giữa các cổng. Một khi có sự tràn (flow) được phát hiện, thông tin sẽ bị nén lại (IPAddress và Port) để lưu thông tin vào bảng (memory-resident table).

Memcap : Chỉ ra đỉnh của bộ nhớ được cấp phát cho phần flow. Mặc định thì flow được cấp 10 M bộ nhớ, điều này thực tế quá đủ. Nếu ta quan sát thông tin về gói tin bị chặn trong tổng kết khi Snort kết thúc hay gặp vấn đề về thiếu bộ nhớ thì giảm bớt con số này đi.

Rows: Có thể chỉ ra số lượng dòng trong bảng băm (số các flows). Mặc định là 4099 dòng, khá dồi dào.

Stats_interval : Ta có thể kết xuất những thống kê của bộ tiền xử lý flow tới stdout. Giá trị của nó là một số integer được thể hiện thời gian kết xuất. Điều này hữu ích cho việc kiểm tra những mục đích nào đó, những có thể vô hiệu hóa bằng cách gán nó là 0. Thông tin này được kết xuất khi shutdown trong bất kỳ trường hợp nào.

Hash : Phương thức này được sử dụng cho việc nén (băm) thông tin vào bẳng. Có thể thiết lập 1 cho "hash by byte" hoặc 2 cho "hash by integer". Tuy nhiên, nên sử dụng 2 cho nhanh.

Một ví dụ cấu hình bộ tiền xử lý flow: preprocessor flow: stats_interval 0 hash 2

frag2

Khi một gói tin đi từ mạng này đến mạng khác. Nó có thể bị phá vỡ (phân mảnh) thành các mảnh nhỏ hơn do giới hạn size của các mạng là khác nhau. Các mảnh này khi đến đích sẽ được ghép lại đầy đủ. Tuy nhiên các tin tặc đã tận dụng điều này để qua mặt tường lửa và IDS/IPS. Có thể ví dụ là trong dấu hiệu nhận biết của một IDS thì trong dữ liệu có chữ /users.pwd là dữ liệu xấu và đưa ra cảnh báo. Tuy nhiên, do tin tặc đã phân mảnh chúng nên dữ liệu mà cảm biến của IDS nhìn thấy không khớp với luật nên nó bỏ qua. Tuy nhiên frag2 cho phép thực hiện ghép mảnh (reassembling) để quan sát toàn bộ dữ liệu. Vì thế có thể ngăn chặn tốt hơn các dữ liệu bất hợp pháp.

Một cách tấn công khác của kẻ tấn công là chúng sử dụng rất nhiều các mảnh để thực hiện tấn công. Điều này là do một số hệ thống không có cơ chế ráp mảnh tốt dẫn đến đổ vỡ hệ thống. Quá nhiều mảnh vụn làm cho hệ thống đói tài nguyên. Đây là một công cụ tấn công gọi là Fragroute . Frag2 cho phép chống lại kiểu tấn công này.

Vị trí của cảm biến là yếu tố quyết định có nên đặt chế độ frag2 không. Bởi vì có thể một vài thiết bị đặt trước cảm biến đã thực hiện ráp mảnh rồi.Cisco PIX là một thiết bị như thế. Điều này giúp cho việc có thể vô hiệu hóa frag2 để dành tài nguyên cho chức năng khác của bộ tiền xử lý.

Một số lựa chọn của bộ tiền xử lý frag2:

timeout memcap

detect_state_problems min_ttl

ttl_limit

Mặc định cấu hình frag2 của Snort :

preprocessor frag2

stream4

Chức năng này của bộ tiền xử lý là để bảo vệ Snort khỏi một tập hợp các cuộc tấn công vào những cảm biến NIDS bằng cách làm ngập lụt chúng với những gói tin chứa các chuỗi giống như những cảnh báo (trigger alerts). Các cuộc tấn công này đước thực hiện bởi việc sử dụng các công cụ gọi là sticksnot. Stick luôn sử dụng các luật của Snort để tạo ra các gói tin khớp với cấu tạo mà Snort theo dõi, vì thế mà làm ngập nó với những cảnh báo. Từ một giao tiếp mạng (ít nhất là phiên TCP) được bắt đầu với việc bắt tay ba bước, nếu đây là một giao tiếp hợp pháp và được thiết lập đúng thì nó sẽ là hợp lý để loại bỏ những gói tin stick vì chúng không phải là một phần của một giao tiếp đúng.

Stream4 có 2 mục đích : theo dõi toàn bộ trạng thái (stateful inspection) và ghép phiên (session reassembly). Ghép phiên được điều khiển bởi bộ tiền xử lý stream4_reassemble preprocessor.

Ngoài việc chống lại việc tấn công bởi các công cụ như Stick hay Snot thì stream còn quy định các lợi ích khác. Tuy nhiên thì nó đưa cho ta những khả năng để thiết lập những luật để theo dõi những vấn đề cụ thể của một giao tiếp mạng sử dụng khóa flow (flow keyword) .Điều này làm giảm khả năng cảnh báo sai. Để kích hoạt khả năng theo dõi toàn trạng thái (stateful inspection ) thì sử dụng trường -z trong commandline. (adsbygoogle = window.adsbygoogle || []).push({});

Một số tùy chọn của bộ tiền xử lý stream4: detect_scans detect_state_problems disable_evasion_alerts min_ttl ttl_limit

keepstats [machine, binary] noinspect

timeout

log_flushed_streams memcap

Một ví dụ cài đặt bộ tiền xử lý stream4:

preprocessor stream4: detect scans, disable_evasion_alerts, timeout 60, ttl_limit 10

stream4_reassemble

Snort tin tưởng vào khả năng so khớp giữa dữ liệu trong packet với dữ liệu là dấu hiệu trong luật. Tuy nhiên, nếu các kẻ tấn công cắt được những dữ liệu này ra thì việc so khớp này là không thành công và Snort sẽ không đưa ra các cảnh báo- giống như trường hợp phân mảnh gói tin. Stream4_reassemble hành động để tập hợp giao thông mà là một phần của luồng giao tiếp giữa hai hệ thống, điều này làm tăng khả năng so khớp dữ liệu.

Giao tiếp mạng giữa các dịch vụ (như là FTP, SMTP, Telnet,...) có thể tạo ra nội dung mà được trải ra nhiều gói tin theo cùng một cách. Tập hợp giao thông được tạo ra bởi những dịch vụ này thực chất để ngăn chặn những cảnh báo lỗi.

Một số kỹ thuật tấn công mới bằng cách tiêm những gói tin vào giữa một cuộc tấn công để làm cho những gói tin này bị chặn lại tại hệ thống đích, stream_ressemble có thể nhìn thấy nội dung thật của gói tin, và dấu hiệu tấn công trong luồng giao thông.

Các tùy chọn: clientonly serveronly both noalerts ports [ list]

Đề nghị cài đặt cho stream4_reassemble:

preprocessor stream4_reassemble: both

HTTP Inspect Preprocessor

Thông tin về định dạng của HTTP là vô cùng rộng lớn. Vì thế Snort phải đưa ra được những nội dung chứa giao thức HTTP sao cho cơ hội khớp với luật là gần chính xác nhất. Http_inspect là làm nhiệm vụ này (nó thay thế cho http_decode ở những phiên bản trước).

Có hai kiểu http_inspect là glocal và server. Global là cấu hình cho phép thay đổi ứng với tât cả các giao thông HTTP trên hệ thống mạng. Còn server là thay đổi cấu hình ứng với từng máy chủ hay nhóm máy chủ nào đó, điều này hợp lý vì kiểu máy chủ khác nhau (IIS hay Apache) sẽ cần những kiểu cấu hình Snort khác nhau.

Chỉ có một dòng để cấu hình cho http_inspect (global), nhưng có thể có nhiều dòng cho http_inspect (server).

http_inspect (global)

Cấu hình mặc định cho bộ tiền xử lý này:

preprocessor http_inspect_server: server default profile all ports {80 8080}

Cấu hình cho bộ tiền xử lý này với web Server là IIS :

preprocessor http_inspect_server: server 10.10.10.100 profile iis ports {80 8080}

preprocessor http_inspect_server: server 10.10.10.200 profile apache ports {80 8080}

Ngoài ra còn rất nhiều các bộ tiền xử lý khác :

rpc_decode preprocessor rpc_decode:111 32771 1024 bo preprocessor bo telnet_decode preprocessor telnet_decode flow-portscan

preprocessor flow-portscan: server-watchnet [10.10.10.0/24,10.10.20.0/24] arpspoof

preprocessor arpspoof_detect_host: 192.168.40.1 f0:0f:00:f0:0f:00 perfmonitor

preprocessor perfmonitor: time 30 events flow file stats.profile max \ console pktcnt 10000

preprocessor perfmonitor: time 300 file /var/tmp/snortstat pktcnt 10000

Cấu hình Output (adsbygoogle = window.adsbygoogle || []).push({});

Với việc cài đặt và sử dụng Snort tại máy trạm với chức năng HIDS là đơn giản và có thể sử dụng việc đầu ra những cảnh báo mặc định tại thư mục /var/log/snort. Tuy nhiên nếu sử dụng chức năng NIDS của Snort thì việc sử dụng ghi cảnh báo ra tệp tin là không thực tế, vì thế cần thiết hơn là phải kết xuất cảnh báo ra cơ sở dữ liệu, có thể sử dụng chung cho toàn hệ thống mạng. Ví dụ sử dụng MySQL. Khi đó việc cài đặt Snort sẽ phải thêm trường –with-mysql.

Có thể cài đặt nhiều output plug-in cho phép quản lý Snort một cách đa dạng.

alert_syslog

Hệ thống UNIX sử dụng việc ghi syslog để thuận tiện cho tập hợp các thông báo được tạo ra bởi một hoặc nhiều hệ thống tại một vị trí đơn. Có rất nhiều những cách khác nhau để thể hiện thông tin của Snort tới syslog.

Định dạng của plug-in này như sau :

Output alert_syslog: <facility> <Priority>

Tùy chọn của facility :

LOG_AUTH (default) LOG_AUTHPRIV LOG_DAEMON LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_USER Tùy chọn của priority:

LOG_EMERG LOG_ALERT (mặc định) LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG Ví dụ :

output alert_syslog: LOG_AUTH LOG_ALERT

log_tcpdump

Với plug-in này thì cảnh báo sẽ được đưa tới định dạng của tcmpdump. Cài đặt trong file cấu hình của Snort:

output log_tcpdump /var/log/snort/tcpdump.out

Cơ sở dữ liệu

Plug-in cơ sở dữ liệu cho phép bạn ghi một cách đa dạng hơn về cảnh báo, có thể ghi trên cùng máy tính với Snort hoặc tại một máy tính khác trên mạng. Kho ghi dữ liệu tới cơ sở dữ liệu, các thông tin đầy đủ nhất sẽ được lưu lại (cảnh báo, máy tính nguồn, đích gây ra cảnh báo, nội dung của gói tin gây cảnh báo, …).

Cấu hình đầu ra tới cơ sở dữ liệu :

output database: <log|alert>, <database type>, <parameter list> Các tùy chọn:

<log|alert> Gửi tới cơ sở dữ liệu cảnh báo hoặc ghi lại, nếu sử dụng cả hai thì đặt trên hai dòng khác nhau.

< database type> Chỉ định kiểu cơ sở dữ liệu sử dụng như là : mysql, postgresql, oracle, odbc, and mssql (Windows Snort systems only).

Danh sách các tham số khi cấu hình đầu ra tới cơ sở dữ liệu : host : Địa chỉ IP nơi đặt cơ sở dữ liệu.

port : Cổng, nơi cơ sở dữ liệu lắng nghe.

Một phần của tài liệu Xây dựng hệ thống phát hiện xâm nhập mạng áp dụng cho hệ thống mạng Bộ Khoa học và Công nghệ (Trang 59)