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 <path_to_conf_file>)
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.
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.
Các tùy chọn câu lệnh, file cấu hình và các luật của Snort sẽ được trình bày trong các phần tiếp theo.
• Sniffer (snort -v)
• Packet logger (snort -l)
• Network Intrusion Detection System (snort -A hoặc snort -c <path_to_conf_file>)
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.
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.
Các tùy chọn câu lệnh, file cấu hình và các luật của Snort sẽ được trình bày trong các phần tiếp theo.