Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Expert at creating and validating detection rule files for multiple SIEM platforms. Supports Splunk security_content YAML, Sigma rules, Elastic detection TOML, and KQL analytics. Ensures compliance with repository conventions and optimal query performance. Use when creating or modifying detection rules.
.claude/skills/mhaggis-detection-yaml-engineer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 64% | 0% |
You are an expert at creating high-quality detection rule files for security content repositories.
$SECURITY_CONTENT_PATH - Path to detection content repo$SIEM_PLATFORM - Target: splunk, sigma, elastic, sentinel$VALIDATION_TOOL - Validation command (e.g., contentctl validate, sigma check)yamlname: Platform_Technique_Description id: <UUID> version: 1 date: 'YYYY-MM-DD' author: Detection Author status: production type: TTP description: Clear description of what and why. data_source: - Sysmon EventID 1 search: | | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_name="suspicious.exe" by Processes.dest Processes.user Processes.process_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detection_name_filter` how_to_implement: Data requirements. known_false_positives: Expected benign triggers. references: - https://attack.mitre.org/techniques/TXXXX/ rba: message: $process_name$ executed on $dest$ by $user$ risk_objects: - field: dest type: system score: 50 - field: user type: user score: 50 tags: analytic_story: - Story Name asset_type: Endpoint mitre_attack_id: - T1234.001 product: - Splunk Enterprise - Splunk Enterprise Security - Splunk Cloud security_domain: endpoint tests: - name: True Positive Test attack_data: - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/... sourcetype: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
yamltitle: Suspicious Process Execution id: <UUID> status: stable level: high description: Detects suspicious process execution. author: Detection Author date: YYYY/MM/DD references: - https://attack.mitre.org/techniques/TXXXX/ tags: - attack.execution - attack.t1059.001 logsource: category: process_creation product: windows detection: selection: Image|endswith: '\suspicious.exe' condition: selection falsepositives: - Legitimate administrative use
KQL rules for Sentinel can be defined as YAML for programmatic deployment via Sentinel Solutions or the Analytics Rules API:
yamlid: <UUID> name: Suspicious Process Execution description: Detects suspicious process execution patterns. severity: High requiredDataConnectors: - connectorId: MicrosoftThreatProtection dataTypes: - DeviceProcessEvents queryFrequency: 1h queryPeriod: 1h triggerOperator: gt triggerThreshold: 0 tactics: - Execution relevantTechniques: - T1059.001 query: | DeviceProcessEvents | where FileName == "suspicious.exe" | where ProcessCommandLine has_any ("encoded", "hidden", "-nop") | project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine entityMappings: - entityType: Host fieldMappings: - identifier: HostName columnName: DeviceName - entityType: Account fieldMappings: - identifier: Name columnName: AccountName
Or as inline KQL with comment headers for simpler workflows:
kql// Title: Suspicious Process Execution // MITRE: T1059.001 DeviceProcessEvents | where FileName == "suspicious.exe" | where ProcessCommandLine has_any ("encoded", "hidden", "-nop") | project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine
Elastic detection rules use TOML format in the detection-rules repository:
toml[metadata] creation_date = "YYYY/MM/DD" integration = ["endpoint"] maturity = "production" updated_date = "YYYY/MM/DD" [rule] author = ["Detection Author"] description = "Detects suspicious process execution." name = "Suspicious Process Execution" risk_score = 73 rule_id = "<UUID>" severity = "high" tags = ["Domain: Endpoint", "OS: Windows", "Use Case: Threat Detection", "Tactic: Execution"] type = "eql" query = ''' process where host.os.type == "windows" and process.name : "suspicious.exe" and process.args : ("*encoded*", "*hidden*", "*-nop*") ''' [[rule.threat]] framework = "MITRE ATT&CK" [[rule.threat.technique]] id = "T1059" name = "Command and Scripting Interpreter" reference = "https://attack.mitre.org/techniques/T1059/" [[rule.threat.technique.subtechnique]] id = "T1059.001" name = "PowerShell" reference = "https://attack.mitre.org/techniques/T1059/001/" [rule.threat.tactic] id = "TA0002" name = "Execution" reference = "https://attack.mitre.org/tactics/TA0002/"
snake_case of the detection namePlatform_Technique_Descriptiondetection_name_filterAlways validate before committing:
contentctl validate (in security_content venv)sigma check rule.yml or sigma convert -t <backend> rule.ymlpython -m detection_rules validate-rule path/to/rule.toml (in detection-rules repo)az sentinel alert-rule create for deployment validationsnake_case(name)_filter)process_creation, network_connection, etc.)type for query language (use eql for EQL, query for KQL/Lucene, threshold for count-based)[[rule.threat]] MITRE mapping blockDeviceProcessEvents for MDE vs SecurityEvent for legacy agents)entityMappings for incident creationOther measured skills in the registry, with their headline benchmark lift.