Content
Xây dựng Content cho Rule
Tài liệu này hướng dẫn Creator tạo content cho Streaming rule để đẩy lên Marketplace. Streaming Rule sử dụng định dạng Sigma-compatible YAML.
Bước 1: Truy cập Streaming rules trong package
- Đặt file .yaml / .yml vào thư mục rules/streaming/.
- Mỗi file là 1 rule.
Bước 2: Xây dựng content
Cấu trúc của 1 rule bao gồm:
| Trường | Kiểu dữ liệu | Bắt buộc | Mô tả |
|---|---|---|---|
| title | string | ✅ | Tên ngắn gọn mô tả rule |
| logsource | map | ✅ | Nguồn log, gồm category và/hoặc product |
| id | string (UUID) | ❌ | Định danh duy nhất, khuyến nghị dùng UUID v4 |
| status | string | ❌ | stable | test | experimental | deprecated | unsupported |
| description | string | ❌ | Mô tả chi tiết hành vi rule phát hiện |
| author | string | ❌ | Tên tác giả |
| date | string | ❌ | Ngày tạo, format YYYY/MM/DD |
| level | string | ❌ | critical | high | medium | low | informational |
| tags | list | ❌ | MITRE ATT&CK mapping (xem bên dưới) |
| fields | list | ❌ | Danh sách field trả về khi rule match |
| falsepositives | list | ❌ | Các trường hợp false positive đã biết |
| tags (MITRE format) | list | ❌ | Định dạng tag theo ATT&CK (tactic/technique/sub-technique), xem ví dụ bên dưới |
| detection (syntax) | map | ✅ | Định nghĩa selection/filter và condition, xem ví dụ bên dưới |
| condition operators | string expression | ✅ | Hỗ trợ: and, or, not, 1 of <pattern>*, all of <pattern>* |
MITRE ATT&CK tag format
tags:
- attack.execution # Tactic
- attack.t1059 # Technique
- attack.t1059.001 # Sub-technique
- attack.defense_evasion # Nhiều tactic được phép
Detection syntax
detection:
# Named selections (có thể có nhiều)
selection_main:
FieldName: "value" # Exact match
FieldName|contains: "partial" # Contains
FieldName|startswith: "prefix" # Starts with
FieldName|endswith: "suffix" # Ends with
FieldName|re: "regex.*pattern" # Regex
FieldName|contains: # Danh sách OR
- "value1"
- "value2"
filter_exclude:
FieldName: "excluded_value"
# Condition kết hợp các selection
condition: selection_main and not filter_exclude
Condition operators
and, or, not, 1 of <pattern>*, all of <pattern>*
Lưu ý Backend chỉ kiểm tra 3 trường bắt buộc: title, logsource, detection. Các trường còn lại là tuỳ chọn nhưng được khuyến nghị để đảm bảo chất lượng và khả năng duy trì rule.
Ví dụ rule hoàn chỉnh
title: Suspicious PowerShell Encoded Command
id: f1b2c3d4-e5f6-7890-abcd-ef1234567890
status: experimental
description:
Detects PowerShell execution with encoded command argument, which is a common
technique used by malware and attackers to obfuscate malicious commands.
author: Security Team
date: 2024/02/20
tags:
- attack.execution
- attack.t1059.001
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\powershell.exe'
CommandLine|contains:
- '-EncodedCommand'
- '-enc '
filter_admin:
ParentImage|endswith:
- '\msiexec.exe'
- '\setup.exe'
condition: selection and not filter_admin
fields:
- CommandLine
- ParentImage
- User
falsepositives:
- Legitimate software installers using encoded commands
- Administrative scripts
level: medium
Bước 3: Validate và Test rule
Cách 1: Dùng Playground (khuyến nghị khi viết mới)
csop-client playground
# Mở http://localhost:8080
# Chọn chế độ "Rule"
# Paste nội dung YAML vào editor
# Nhấn "Validate Rule" — kết quả hiển thị ngay
Cách 2: Dùng validate (kiểm tra cú pháp YAML local)
csop-client validate <package-path>
Cách 3: Dùng test (validate qua API backend)
csop-client test <package-path>
# Chỉ các file trong rules/ mới cần API backend
# Không cần chuẩn bị sample data cho rule
Lưu ý: Mỗi file rule phải có
id duy nhất (UUID v4). Có thể dùng công cụ online uuidgenerator.net hoặc lệnh uuidgen trên Linux/macOS.