Sigma检测规则开发与转换
用于根据恶意程序行为和日志特征编写Sigma检测规则,包含规则结构、字段选择、误报控制、测试和向不同SIEM查询语言转换的流程。适合把进程创建、命令行、注册表、文件和网络等分析结论转化为可部署的日志检测能力,便于SOC与取证团队持续发现同类行为。
在 AI 中使用此 Skill将本页链接复制给 AI,即可让 AI 获取完整 Skill 内容并按此执行
安全提示: 本站 Skill 均经 ChatGPT 最新模型扫描,未发现恶意脚本及危险指令、未检出已知恶意行为特征,但不保证绝对安全,使用即表示接受此风险
Skill 文件
版本 20260301 · cf0ec90f350dcf2a926d88930b3284a8
SKILL.md
---
name: sigma-rule-development
description: Write, test, and share Sigma detection rules from observed malware behaviors. Convert rules to SIEM-specific formats with sigmac/pySigma and apply false positive reduction techniques.
---
# Sigma Rule Development
Write Sigma detection rules from observed malware behaviors, convert them to SIEM-specific query languages, and validate rule quality for sharing via SigmaHQ.
## Prerequisites
- **Python 3.10+** for running the rule writer and validation scripts
- **pySigma**: Sigma rule conversion framework (`pip install pySigma`)
- **pySigma backend plugins**: SIEM-specific converters (e.g., `pySigma-backend-splunk`, `pySigma-backend-elasticsearch`, `pySigma-backend-microsoft365defender`, `pySigma-backend-qradar`)
- **pySigma pipeline plugins**: Log source mappings (e.g., `pySigma-pipeline-sysmon`, `pySigma-pipeline-windows`)
- **sigma CLI**: For rule validation and conversion (`sigma check`, `sigma convert`)
## Steps
### 1. Understand Sigma Rule Structure
A Sigma rule is a YAML document with these required fields:
```yaml
title: Suspicious PowerShell Download Cradle
id: 3b6ab547-1298-4a74-b260-4c1e9f7b7a01 # UUIDv4
status: experimental # test | experimental | stable | deprecated | unsupported
level: high # informational | low | medium | high | critical
description: Detects PowerShell download cradles commonly used by malware droppers
author: Analyst Name
date: 2026/03/21
modified: 2026/03/21
references:
- https://attack.mitre.org/techniques/T1059/001/
tags:
- attack.execution
- attack.t1059.001
logsource:
category: process_creation
product: windows
detection:
selection:
CommandLine|contains|all:
- 'powershell'
- 'downloadstring'
condition: selection
falsepositives:
- Legitimate admin scripts using download cradles
fields:
- CommandLine
- ParentCommandLine
- User
```
### 2. Identify Log Sources for Detection
Match behaviors to the appropriate log source:
| Behavior | Log Source | Category |
|----------|-----------|----------|
| Process execution | `product: windows` | `process_creation` |
| Sysmon events | `product: windows, service: sysmon` | varies by EventID |
| File creation | `product: windows, service: sysmon` | `file_event` |
| Registry modification | `product: windows, service: sysmon` | `registry_event` |
| Network connections | `product: windows, service: sysmon` | `network_connection` |
| DNS queries | `product: windows, service: sysmon` | `dns_query` |
| Windows Security log | `product: windows, service: security` | varies |
| Linux audit | `product: linux, service: auditd` | `process_creation` |
| Web proxy logs | `category: proxy` | — |
| Firewall logs | `category: firewall` | — |
### 3. Write Detection Logic
Use Sigma detection fields with modifiers:
```yaml
detection:
# Selection: what to match
selection_process:
Image|endswith:
- '\rundll32.exe'
- '\regsvr32.exe'
selection_cmdline:
CommandLine|contains:
- 'javascript:'
- 'vbscript:'
# Filter: what to exclude (false positives)
filter_legitimate:
ParentImage|endswith: '\msiexec.exe'
CommandLine|contains: 'legitimate_dll.dll'
# Condition: combine selections and filters
condition: (selection_process and selection_cmdline) and not filter_legitimate
```
**Key modifiers:**
- `contains` — substring match
- `endswith` / `startswith` — suffix/prefix match
- `re` — regular expression match
- `all` — all values must appear (AND logic within a field)
- `base64` / `base64offset` — match base64-encoded strings
- `cidr` — match IP ranges
- `windash` — match both `-` and `/` in command-line switches
### 4. Generate Rules from Behavioral Observations
Use the rule writer script to generate Sigma YAML from observed behaviors:
```bash
# Generate from a behavioral description
python3 scripts/sigma_rule_writer.py \
--title "Malware X Registry Persistence" \
--description "Detects Malware X setting Run key persistence" \
--logsource-product windows --logsource-service sysmon \
--logsource-category registry_event \
--detection-field TargetObject \
--detection-modifier contains \
--detection-values 'Software\Microsoft\Windows\CurrentVersion\Run,MalwareX_Persist' \
--level high \
--attack-tags attack.persistence,attack.t1547.001 \
--output rules/malwarex_persistence.yml
```
For process-creation rules:
```bash
python3 scripts/sigma_rule_writer.py \
--title "Suspicious certutil Download" \
--logsource-product windows \
--logsource-category process_creation \
--detection-field CommandLine \
--detection-modifier 'contains|all' \
--detection-values 'certutil,-urlcache,-split' \
--level high \
--attack-tags attack.command_and_control,attack.t1105 \
--falsepositives "Legitimate certificate operations" \
--output rules/certutil_download.yml
```
### 5. Test and Convert Rules with pySigma
Convert Sigma rules to SIEM-specific query languages:
```bash
# Install pySigma and backend plugins
pip install pySigma pySigma-backend-splunk pySigma-backend-elasticsearch \
pySigma-backend-microsoft365defender pySigma-backend-qradar \
pySigma-pipeline-sysmon pySigma-pipeline-windows
# Convert to Splunk SPL
sigma convert -t splunk -p sysmon rules/malwarex_persistence.yml
# Convert to Elastic Query DSL
sigma convert -t elasticsearch -p ecs_windows rules/malwarex_persistence.yml
# Convert to Microsoft Sentinel KQL
sigma convert -t microsoft365defender rules/malwarex_persistence.yml
# Convert to QRadar AQL
sigma convert -t qradar rules/malwarex_persistence.yml
# Batch convert all rules in a directory
sigma convert -t splunk -p sysmon rules/ --output splunk_queries/
```
Legacy sigmac conversion (deprecated but still in use):
```bash
sigmac -t splunk -c sysmon rules/malwarex_persistence.yml
sigmac -t es-qs -c winlogbeat rules/malwarex_persistence.yml
```
### 6. Validate Rule Quality
Check rules against SigmaHQ quality standards:
```bash
# Validate YAML syntax and required fields
sigma check rules/malwarex_persistence.yml
# Validate all rules in a directory
sigma check rules/
# Run the rule writer in validation mode
python3 scripts/sigma_rule_writer.py --validate rules/malwarex_persistence.yml
```
Quality checklist:
- Unique UUIDv4 `id` field
- Descriptive `title` (max 100 characters)
- Accurate `level` assignment matching the detection specificity
- At least one `tag` with ATT&CK mapping
- `falsepositives` section documenting known FPs
- `fields` listing useful context fields for analysts
- `status` set to `experimental` for new rules
### 7. Reduce False Positives
Techniques for FP reduction:
```yaml
detection:
selection:
CommandLine|contains|all:
- 'powershell'
- '-encodedcommand'
# Stack multiple filters for known legitimate use
filter_sccm:
ParentImage|endswith: '\ccmexec.exe'
filter_azure:
CommandLine|contains: 'AzureConnectedMachineAgent'
filter_admin_scripts:
User|endswith: '$' # Machine accounts
condition: selection and not 1 of filter_*
```
Best practices:
- Test rules against baseline logs before deploying to production
- Use `near` temporal correlation for multi-event detections
- Combine multiple weak indicators with `and` logic for stronger signals
- Maintain a filter library for your environment's known-good patterns
- Start with `status: experimental` and promote to `stable` after tuning
### 8. Share via SigmaHQ
To contribute rules to the SigmaHQ repository:
```bash
# Fork and clone the SigmaHQ repository
git clone https://github.com/SigmaHQ/sigma.git
cd sigma
# Place rule in the correct directory structure
# rules/windows/process_creation/proc_creation_win_malwarex.yml
# Run the test suite
python3 -m pytest tests/
# Submit a pull request with the rule
```
Follow the SigmaHQ naming convention: `<category>_<product>_<short_description>.yml`
## Output Format
```json
{
"rule_file": "rules/malwarex_persistence.yml",
"title": "Malware X Registry Persistence",
"id": "3b6ab547-1298-4a74-b260-4c1e9f7b7a01",
"status": "experimental",
"level": "high",
"logsource": {
"product": "windows",
"service": "sysmon",
"category": "registry_event"
},
"attack_tags": ["attack.persistence", "attack.t1547.001"],
"detection_fields": ["TargetObject"],
"conversions": {
"splunk": "index=sysmon EventCode=13 TargetObject=\"*\\\\Run*\" TargetObject=\"*MalwareX_Persist*\"",
"elasticsearch": "{\"query\":{\"bool\":{\"must\":[{\"wildcard\":{\"registry.path\":\"*\\\\Run*\"}}]}}}",
"sentinel": "SysmonEvent | where EventID == 13 | where RegistryKey contains \"Run\""
},
"validation": {
"valid_yaml": true,
"has_required_fields": true,
"has_uuid": true,
"has_attack_tags": true,
"quality_score": "high"
}
}
```
## Tips
- Start with high-fidelity rules targeting specific malware family behaviors before writing broader behavioral rules
- Use the `1 of selection_*` syntax to match any of several alternative detection patterns
- The `all of selection_*` syntax requires all named selections to match, useful for reducing FPs
- Test rules against at least one week of baseline logs to estimate FP volume before production deployment
- Use Sigma's `timeframe` field in `detection` for time-windowed correlations (e.g., brute force detection)
- Keep rule descriptions specific and actionable so SOC analysts know what to investigate when the rule fires
- Sigma rules detect log events, not raw malware — always map behaviors to the log source that captures them
- When in doubt about `level`, use `medium` for behavioral detections and `high` only when the detection is specific to malicious activity
- Maintain a local `sigmac` conversion test for each SIEM backend you support to catch conversion regressions
此文件不提供内嵌文本预览
请使用左侧文件行末尾的外链图标打开原始文件。
