Giới thiệu
Các hướng dẫn trước đã giới thiệu cách cài đặt và cấu hình Suricata. Tuy nhiên, các quy tắc mà chúng ta đã tải xuống trong hướng dẫn đó rất nhiều và bao gồm nhiều giao thức, ứng dụng và rule tấn công khác nhau có thể không liên quan đến mạng và máy chủ của chúng ta.
Trong hướng dẫn này, sẽ tiến hành tìm hiểu cách cấu trúc signatures Suricata và một số tùy chọn quan trọng thường được sử dụng trong hầu hết các quy tắc. Khi đã quen với cách hiểu cấu trúc và các trường trong signatures, thì có thể viết signatures của riêng kết hợp với tường lửa để cảnh báo về những lưu lượng đáng ngờ nhất đến máy chủ mà không cần sử dụng bộ quy tắc.
Khi có bộ quy tắc mô tả phần lớn lưu lượng truy cập hợp pháp và đáng ngờ gặp phải trong mạng, chúng ta có thể bắt đầu loại bỏ có chọn lọc lưu lượng truy cập không hợp lệ bằng cách sử dụng Suricata trong chế độ Ngăn chặn xâm nhập (IPS) đang hoạt động.
Điều kiện cần
Nếu như chúng ta đang theo dõi bài hướng dẫn cách cài đặt và thiết lập 1 số cấu hình với Suricata thì chúng ta đã có Suricata đang chạy trên máy chủ Ubuntu 20.04.
Nếu như chúng ta vẫn chưa cài đặt Suricata thì chúng ta có thể theo dõi bài hướng dẫn cách cài đặt và thiết lập 1 số cấu hình với Suricata
Hiểu cấu trúc của Suricata Signatures
Ban đầu, Suricata Signatures có thể phức tạp, nhưng khi tìm hiểu về cấu trúc của chúng và cách Suricata xử lý chúng, thì chúng ta sẽ có thể tạo các quy tắc của riêng mình để phù hợp với yêu cầu của mội hệ thống.
Suricata Signatures bao gồm ba phần:
Action
: Thực hiện khi lưu lượng truy cập phù hợp với quy tắc.Header
: Mô tả máy chủ, địa chỉ IP, cổng, giao thức và hướng lưu lượng (đến hoặc đi).Options
: Chỉ định những thứ như ID chữ ký ( sid), thông báo nhật ký, biểu thức chính quy khớp với nội dung của gói, kiểu phân loại và các công cụ sửa đổi khác có thể giúp thu hẹp xác định lưu lượng truy cập hợp pháp và đáng ngờ.
Cấu trúc chung của một Suricata Signatures như sau:
Phần Header
và phần Options
của Signatures có nhiều phần.
Ví dụ: Trong hướng dẫn trước, chúng ta đã thử nghiệm Suricata bằng cách sử dụng quy tắc với sid 2100498
. Đây là quy tắc đầy đủ để tham khảo:
Trong đó:
- Phần
alert
: là Action ip any any -> any any
: là Header- Và phần còn lại của chữ ký bắt đầu bằng (msg:GPL ATTACK_RESPONSE... ) chứa các Options của quy tắc .
Trong các phần sau, chúng ta sẽ xem xét chi tiết từng phần của quy tắc Suricata.
Actions
Phần Actions của Suricata chỉ định hành động cần thực hiện khi một gói phù hợp với quy tắc. Một hành động có thể là một trong những hành động sau tùy thuộc vào việc Suricata đang hoạt động ở chế độ IDS hay IPS:
Pass
: Suricata sẽ ngừng quét và cho phép gói mà không tạo ra cảnh báo.Drop
: Khi làm việc ở chế độ IPS, Suricata sẽ ngay lập tức ngừng xử lý gói tin và tạo ra một cảnh báo. Nếu kết nối tạo ra gói tin sử dụng TCP, nó sẽ hết thời gian chờ.Reject
: Khi Suricata đang chạy chế độ IPS, một gói đặt lại TCP sẽ được gửi và Suricata sẽ bỏ gói phù hợp.Alert
: Suricata sẽ tạo một cảnh báo và ghi lại nó để phân tích thêm.
Headers
Mỗi Suricata Signatures Signatures có một phần Headers mô tả giao thức mạng, địa chỉ IP nguồn và đích, cổng và hướng lưu lượng. Ví dụ sid:2100498
phần tiêu đề của quy tắc là ip any any -> any any
phần được đánh dấu:
Định dạng chung của phần Headers của quy tắc là:
Giao thức có thể là một trong nhưng giao thức sau:
- TCP
- UDP
- ICMP
- IP
Các trường Source và Destination có thể là địa chỉ IP hoặc dải mạng hoặc giá trị đặc biệt any, sẽ khớp với tất cả các địa chỉ IP và mạng. Mũi ->tên chỉ hướng lưu thông.
Nếu chúng ta muốn cảnh báo về lưu lượng rời khỏi mạng của chúng ta thì trường Source sẽ là địa chỉ IP hoặc dải mạng của hệ thống của chúng ta. Destination có thể là IP hoặc mạng của hệ thống từ xa hoặc giá trị đặc biệt any.
Ngược lại, nếu chúng ta muốn tạo cảnh báo về lưu lượng đến, trường Source có thể được đặt thành any và Destination thành địa chỉ IP hoặc dải mạng của hệ thống của chúng ta.
Options
Các đối số bên trong dấu ngoặc đơn (. . .) trong Suricata Signatures chứa các Options và công cụ sửa đổi từ khóa khác nhau mà chúng ta có thể so sánh trên các phần của gói, phân loại quy tắc hoặc ghi nhật ký các thông báo tùy chỉnh. Trong khi các đối số Headers của quy tắc hoạt động trên tiêu đề gói ở cấp IP, cổng và giao thức, các Options khớp với dữ liệu chứa bên trong gói.
Các Options trong quy tắc Suricata phải được phân tách bằng dấu chấm phẩy và thường sử dụng định dạng khóa: giá trị. Một số tùy chọn không có bất kỳ cài đặt nào và chỉ tên cần được chỉ định trong một quy tắc.
Để thêm Options với giá trị SSH traffic detected on non-SSH port
giải thích nội dung của cảnh báo:
Tuy nhiên, có một số tùy chọn cốt lõi như content keyword
và các từ khóa Meta khác nhau được sử dụng trong hầu hết các chữ ký, chúng ta sẽ tìm hiểu trong các phần sau.
Content Keyword
Một trong những tùy chọn quan trọng nhất cho bất kỳ quy tắc nào là Content Keyword
Ví dụ quy tắc SID: 2100498:
Chúng ta có thể thấy nội dung content:"uid=0|28|root|29|"
phần chứa từ khóa nội dung và giá trị mà Suricata sẽ tìm kiếm bên trong một gói.
Trong trường hợp này, tất cả các gói từ bất kỳ địa chỉ IP nào trên bất kỳ cổng nào sẽ được kiểm tra để đảm bảo chúng không chứa giá trị chuỗi content:"uid=0|28|root|29|"
. Content Keyword có thể được sử dụng với hầu hết các từ khóa khác trong Suricata. Chúng ta có thể tạo quy tắc cụ thể bằng cách sử dụng các kết hợp của Headers và các Options nhắm mục tiêu các giao thức ứng dụng cụ thể, sau đó kiểm tra nội dung gói cho các byte, chuỗi hoặc khớp riêng lẻ bằng cách sử dụng các biểu thức thông thường.
Ví dụ: Quy tắc kiểm tra lưu lượng DNS đang tìm kiếm bất kỳ gói nào với nội dung danglab.xyz (thay sang domain thích hợp của bạn) và tạo cảnh báo:
Tuy nhiên, quy tắc này sẽ không khớp nếu truy vấn DNS sử dụng miền DANGLAB.XYZ, vì Suricata mặc định so sánh nội dung phân biệt chữ hoa chữ thường. Để làm cho nội dung so sánh không phân biệt chữ hoa chữ thường, hãy thêm từ khóa nocase
vào quy tắc:
Ví dụ: Quy tắc kiểm tra lưu lượng DNS đang tìm kiếm bất kỳ gói nào với nội dung danglab.xyz (thay sang domain thích hợp của bạn) và tạo cảnh báo không phân biệt chữ hoa chữ thường
Bây giờ bất kỳ sự kết hợp nào của chữ thường hoặc chữ hoa sẽ vẫn phù hợp với content keyword.
msg Keyword
Trong các quy tắc chúng ta đều chứa các từ khóa msg
với thông tin về quy tắc. Tùy chọn này không bắt buộc, nhưng việc để trống sẽ khiến chúng ta khó hiểu tại sao lại xảy ra hành động cảnh báo hoặc bỏ qua khi kiểm tra nhật ký của Suricata.
Tuỳ chọn msg
được thiết kế để trở thành một mô tả văn bản mà con người có thể đọc được về một cảnh báo. Nó phải mang tính mô tả và thêm ngữ cảnh vào cảnh báo để chúng ta hoặc người khác đang phân tích nhật ký hiểu tại sao cảnh báo được kích hoạt.
sid và rev Keywords
Mỗi Quy tắc Suricata cần một ID (SID). Nếu hai quy tắc có cùng SID (trong ví dụ sau đầu ra, nó là SID: 10000000), Suricata sẽ không bắt đầu và thay vào đó sẽ tạo ra lỗi như sau:
Khi chúng ta tạo chữ ký của riêng, phạm vi 1000000-1999999 được dành riêng cho các quy tắc tùy chỉnh. Các quy tắc tích hợp của Suricata nằm trong khoảng từ 2200000-2299999.
Tùy chọn sid
thường là phần cuối cùng của quy tắc Suricata. Tuy nhiên, nếu có nhiều phiên bản của quy tắc với những thay đổi theo thời gian, thì có tùy chọn rev
được sử dụng để chỉ định phiên bản của quy tắc.
Ví dụ: Cảnh báo SSH trước đó trong hướng dẫn này có thể được thay đổi thành chỉ quét lưu lượng SSH trên cổng 2022:
Quy tắc cập nhật hiện bao gồm rev:2
, cho biết nó đã được cập nhật từ phiên bản trước.
reference Keyword
reference Keyword được sử dụng trong quy tắc để mô tả nơi tìm thêm thông tin về cuộc tấn công hoặc vấn đề mà một quy tắc được dùng để phát hiện.
Ví dụ: Nếu quy tắc được thiết kế để phát hiện một loại phương pháp khai thác hoặc tấn công mới, trường tham chiếu có thể được sử dụng để liên kết đến nhà nghiên cứu bảo mật hoặc trang web của công ty có tài liệu về vấn đề.
Lỗ hổng Heartbleed trong OpenSSL là một ví dụ về một lỗi được nghiên cứu và công bố rộng rãi. Suricata đi kèm với chữ ký được thiết kế để kiểm tra các gói TLS không chính xác và bao gồm tham chiếu đến mục CVE Heartbleed chính :
Lưu ý:
reference:cve,2014-0160;
được đánh dấu của quy tắc. Tùy chọn tham chiếu này cho chúng ta hoặc nhà phân tích đang kiểm tra các cảnh báo từ Suricata nơi tìm thêm thông tin về vấn đề cụ thể.
classtype Keyword
Suricata có thể phân loại lưu lượng truy cập theo nhóm danh mục được định cấu hình trước được bao gồm khi chúng ta cài đặt gói Suricata với trình quản lý gói của bản phân phối Linux. File phân loại mặc định thường được tìm thấy trong /etc/suricata/classification.config
như sau:
Từ kết quả trên chúng ta có thể thấy mỗi mục phân loại có ba trường:
- Tên ngắn gọn, có thể đọc được bằng máy, trong các ví dụ trên
not-suspicious
,unknown
vàbad-unknown
tương ứng. - Ví dụ, mô tả cho một phân loại được sử dụng với các cảnh báo
Not Suspicious Traffic
. - Trường ưu tiên, xác định thứ tự mà chữ ký sẽ được Suricata xử lý. Mức độ ưu tiên cao nhất là giá trị 1. Các chữ ký sử dụng bộ phân loại có mức độ ưu tiên cao hơn sẽ được kiểm tra đầu tiên khi Suricata xử lý một gói tin.
Trong ví dụ sid:2100498
, classtype
là classtype:bad-unknown;
như sau:
Ưu tiên ngầm định cho chữ ký là 2, vì đó là giá trị được gán cho bad-unknownclasstype
trong file /etc/suricata/classification.config
. Nếu chúng ta muốn ghi đè mức độ ưu tiên mặc định cho một quy tắc, có thể thêm một tuỳ chọn priority:n
trong đó n
giá trị từ 1 đến 255.
target Keyword
Một tùy chọn hữu ích khác trong quy tắc Suricata là tuỳ chọn target
. Nó có thể được đặt thành một trong hai giá trị: src_ip
và dest_ip
. Mục đích của tùy chọn này là xác định chính xác source
và target
lưu trữ trong nhật ký cảnh báo của Suricata.
Ví dụ: Quy tắc SSH từ trước đó trong hướng dẫn này có thể được nâng cao với target:dest_ip;
:
Ví dụ này sử dụng dest_ip
được thiết kế để kiểm tra lưu lượng SSH đi vào mạng của chúng ta. Việc thêm tuỳ chọn target
vào quy tắc sẽ dẫn đến các trường bổ sung sau trong alert
phần của file eve.json
Với các mục nhập này trong nhật ký của Suricata, chúng có thể được gửi đến công cụ Quản lý sự kiện và thông tin bảo mật (SIEM) để giúp tìm kiếm các cảnh báo có thể bắt nguồn từ một máy chủ chung hoặc các cuộc tấn công hướng đến một mục tiêu cụ thể dễ dàng hơn. mạng.
Tổng Kết.
Qua bài viết hướng dẫn trên chúng ta hoàn tất việc tìm hiểu cách tự viết rule cho Suricata, cấu trúc quy tắc của Suricata. Hy vọng các bạn thành công trong việc áp dụng được Suricata vào trong thực tế, công việc.
Tính năng đang được phát triển