Snort is a free and open source network intrusion prevention system (NIPS) and network intrusion detection system (NIDS) created by Martin Roesch in 1998. Snort is now developed by Sourcefire, of which Roesch is the founder and CTO, and which has been owned by Cisco since 2013.

In 2009, Snort entered InfoWorld’s Open Source Hall of Fame as one of the “greatest [pieces of] open source software of all time”.

Snort’s open source network-based intrusion detection system (NIDS) has the ability to perform real-time traffic analysis and packet logging on Internet Protocol (IP) networks. Snort performs protocol analysis, content searching and matching. These basic services have many purposes including application-aware triggered quality of service, to de-prioritize bulk traffic when latency-sensitive applications are in use.

The program can also be used to detect probes or attacks, including, but not limited to, operating system fingerprinting attempts, common gateway interface, buffer overflows, server message block probes, and stealth port scans.

Snort can be configured in three main modes: sniffer, packet logger, and network intrusion detection. In sniffer mode, the program will read network packets and display them on the console. In packet logger mode, the program will log packets to the disk. In intrusion detection mode, the program will monitor network traffic and analyze it against a rule set defined by the user. The program will then perform a specific action based on what has been identified.

(Theo Wikipedia)

Bài viết này sẽ hướng dẫn các bạn cài đặt Snort dưới dạng Network IDS dựa trên nền tảng Ubuntu 14.04

Các bạn lưu ý là ở thời điểm hiện tại khi cài Snort trên máy ảo sẽ có một vấn đề là không chạy được các rules dành cho Registered Users trên trang chủ của nó. Tuy nhiên các bạn vẫn có thể tự viết rule và nó vẫn chạy tốt.

Trước tiên, bạn nên tắt tất cả các firewall trên hệ thống IDS để Snort có thể nhận được tất cả các luồng dữ liệu đi đến.

Sau đó, bạn disable GRO (Generic Receive Offload) và LRO (Large Receive Offload) để gói tin không bị can thiệp trước khi được chuyển đến kernel.

 root@Server:~$ apt-get install -y ethtool
 root@Server:~$ ethtool -K eth0 gro off
 root@Server:~$ ethtool -K eth0 lro off

Cài các gói phần mềm phụ trợ:

 root@Server:~$ apt-get install -y build-essential libpcap-dev libpcre3-dev \
 libdumbnet-dev bison flex zlib1g-dev liblzma-dev openssl libssl-dev

Lưu ý: Trong quá trình cài đặt có thể bạn sẽ bị thiếu libdnet. Tải về tại đây. Trong khi chạy file ./configure hãy thêm tham số -fPIC nếu bạn biên dịch nó cho Ubuntu 64bit.

Tạo thư mục chứa mã nguồn Snort, DAQ và tải về các rules.

 root@Server:~$ mkdir -p /sources/snort
 root@Server:~$ cd /sources/snort

Tải mã nguồn Snort: (Lưu ý: các liên kết bên dưới đều là các phiên bản mới nhất ở thời điểm viết bài. Nếu không tải được, bạn hãy lên trang chủ của Snort để lấy các liên kết mới nhất.)

 root@Server:/sources/snort# wget https://snort.org/downloads/snort/daq-2.0.6.tar.gz
 root@Server:/sources/snort# wget https://snort.org/downloads/snort/snort-2.9.8.0.tar.gz

** Cài đặt Snort DAQ (Data AcQuisition library)

 root@Server:~$ cd /sources/snort
 root@Server:/sources/snort# tar -xvzf daq-2.0.6.tar.gz
 root@Server:/sources/snort# cd daq-2.0.6
 root@pc:/sources/snort/daq-2.0.6# ./configure
 root@pc:/sources/snort/daq-2.0.6# make
 root@pc:/sources/snort/daq-2.0.6# make install

** Cài đặt Snort

 root@Server:~$ cd /sources/snort
 root@Server:/sources/snort# tar -xvzf snort-2.9.8.0.tar.gz
 root@Server:/sources/snort# cd snort-2.9.8.0
 root@pc:/sources/snort/snort-2.9.8.0# ./configure --enable-sourcefire
 root@pc:/sources/snort/snort-2.9.8.0# make
 root@pc:/sources/snort/snort-2.9.8.0# make install

Tham số –enable-sourcefire cho phép chúng ta enable tính năng Packet Performance Monitoring (PPM) cho phép chúng ta giám sát các rules và các pre-processors.

Cập nhật lại các shared libraries

 root@Server:~$ ldconfig

Sau này bạn sẽ chạy snort bằng lệnh:

 root@Server:~$ /usr/local/bin/snort
 root@Server:~$ mkdir -p /etc/snort/{rules,preproc_rules}
 root@Server:~$ touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules /etc/snort/rules/local.rules
 root@Server:~$ mkdir /var/log/snort
 root@Server:~$ mkdir /usr/local/lib/snort_dynamicrules
 root@Server:~$ chmod -R 5775 /etc/snort /var/log/snort /usr/local/lib/snort_dynamicrules

Chép các file cấu hình và file map vào thư mục /etc/snort

 root@Server:~$ cp /sources/snort/snort-2.9.8.0/etc/*.conf* /etc/snort
 root@Server:~$ cp /sources/snort/snort-2.9.8.0/etc/*.map /etc/snort

** Cấu hình cơ bản và thêm rules

 root@Server:~$ nano /etc/snort/snort.conf

Khoảng dòng thứ 45, ta khai báo Internal network và các network được xem là External, các HTTP servers, DNS servers, danh sách các port, …

 ipvar HOME_NET 192.168.0.0/24
 ipvar EXTERNAL_NET !$HOME_NET

Lưu ý: HOME_NETEXTERNAL_NET có thể là một địa chỉ IP chính xác hoặc một địa chỉ network. Để khai báo nhiều địa chỉ IP hoặc network, bạn cần khai báo tất cả các network trong cặp dấu ngoặc vuông và cách nhau bởi dấu phẩy.

Ví dụ: để giám sát máy chủ DMZ có địa chỉ IP 10.0.0.1, dải địa chỉ Honeypot 172.16.0.0/16 và vùng mạng Internal 192.168.0.0/16, ta khai báo như sau: [10.0.0.1,172.16.0.0/16,192.168.0.0/16]. Nếu bạn muốn giám sát tất cả, đặt địa chỉ network là “any”.

Khoảng dòng thứ 104, cấu hình đường dẫn của các file như sau:

 var RULE_PATH /etc/snort/rules
 var SO_RULE_PATH /etc/snort/so_rules
 var PREPROC_RULE_PATH /etc/snort/preproc_rules
 var WHITE_LIST_PATH /etc/snort/rules
 var BLACK_LIST_PATH /etc/snort/rules

Trong đó đặc biệt chú ý hai file: WhitelistBlacklist.
Blacklist là tập hợp của các dấu hiệu bất thường đã biết. Ví dụ như phát hiện quét cổng, phát hiện các công cụ xâm nhập, malware và các kiểu tấn công đã biết, …
Tuy nhiên nếu như một dạng tấn công mới được phát sinh và nó chưa có trong bộ rule Blacklist, Snort sẽ không thể phát hiện được sự bất thường của kiểu tấn công này. Do đó, Whitelist sẽ là bộ rule bù đắp cho những thiếu sót này. Bản thân Whitelist là tập các rules bao gồm các dấu hiệu bình thường của hệ thống và đưa ra cảnh báo nếu có một luồng dữ liệu không nằm trong bộ rule này.

Khoảng dòng 546, bạn sẽ thấy một tập hợp khai báo các file rules. Tuy nhiên, hiện tại trên server của bạn không có các file rule này, bạn có thể lên trang chủ của Snort và đăng ký một tài khoản miễn phí để tải về bộ rule dành cho Registered user. Hoặc mua bộ rule bản quyền với giá 30$/sensor đối với người dùng cá nhân hoặc 400$/sensor dành cho doanh nghiệp. Trong bài test này, bạn hãy đánh dấu comment hết tất cả (gồm các dòng include $RULE_PATH và cả $PREPROC_RULE_PATH) và chỉ để lại dòng  “include $RULE_PATH/icmp.rules”. Ta sẽ đặt rule test ICMP trong file này.

Cấu hình Snort
Cấu hình Snort

Kiểm tra file cấu hình, có thể trong một bước nào đó bạn đã cấu hình sai:

 root@Server:~$ snort -T -c /etc/snort/snort.conf
Kết quả cho thấy file cấu hình không bị lỗi
Kết quả cho thấy file cấu hình không bị lỗi

Bây giờ ta sẽ tạo một rule thử nghiệm. Rule này sẽ báo cho bạn nếu có ai đó đang thực hiện ping từ External network vào Internal network.

 root@Server:~$ nano /etc/snort/rules/icmp.rules
 alert icmp any any -> $HOME_NET any (msg:"Co ai do dang ping"; sid:10000001; rev:001;)

Save lại và ta chạy Snort để thử nghiệm.

 root@Server:~$ /usr/local/bin/snort -A console -c /etc/snort/snort.conf -i eth0

Các tham số:
-A console: cho Snort biết ta sẽ chạy Snort và mọi kết quả sẽ hiện lên màn hình Terminal hiện tại.
-c : đường dẫn file cấu hình sẽ sử dụng.
-i eth0: lắng nghe trên interface eth0.
-u snort và -g snort: chạy snort dưới quyền của user và group nào, ở đây để đơn giản ta chạy bằng quyền root.

Snort chaỵ thành công, không báo lỗi
Snort chaỵ thành công, không báo lỗi

Nếu bộ rule của bạn lớn, Snort sẽ cần một chút thời gian để import các rules này. Khi bạn thấy dòng “Commencing packet processing” hiện ra, tức là Snort đã sẵn sàng xử lý.

Kết quả:

Kết quả chạy Snort
Kết quả chạy Snort

(Bài viết dựa trên tài liệu hướng dẫn cài đặt trên trang chủ của Snort)

Đào Xuân Hưng – AdminVietnam.org