opentide

Detection rule (MDR)

A detection rule (MDR — Managed Detection Rule) is the deployable unit of detection content: metadata, severity, ATT&CK techniques, platform-specific query configurations, optional response playbook, and lifecycle status. Schema identifier: `rule::1.0`.

This document is the exemplar spec — all object specs follow the same section order and level of detail.

Requirements

  • The document MUST declare metadata.schema: rule::1.0.
  • name, metadata, and description MUST be present.
  • status MUST be a valid deployment status from deployment.md (default: STAGING).
  • severity MUST be a valid rule severity vocabulary value (default: Informational).
  • techniques MUST be a list of ATT&CK technique IDs (MAY be empty).
  • platforms or configurations MUST contain at least one enabled platform block for deployable rules.
  • detection_model when present MUST reference a valid objective UUID.
  • Platform blocks MUST validate against the platform schema identifier declared in each block's schema field.
  • references MAY be omitted.
  • Registry-backed methods (deploy, validate, document) require a bound opentide registry at runtime — not part of static YAML validation.

Definition

Top level (DetectionRule)

FieldTypeRequiredDefaultDescription
namestringyesRule display name
metadataObjectMetadatayesSee metadata.md
descriptionstringyesRule narrative (multiline YAML encouraged)
statusstringnoSTAGINGDeployment lifecycle status
severitystringnoInformationalRule severity vocabulary
techniqueslist[string]no[]MITRE ATT&CK technique IDs
platformsmap[string, object]no{}Legacy flat platform dict (prefer configurations)
configurationsRuleConfigurationsnonullTyped per-platform configuration blocks
referencesObjectReferencesnonullExternal and internal references
detection_modelstringnonullObjective UUID this rule implements
responseRuleResponsenonullAlert and response configuration

response (RuleResponse)

FieldTypeRequiredDefaultDescription
alert_severitystringnoInformationalAlert severity vocabulary
playbookstringnonullPlaybook identifier or URL
respondersstringnonullResponder team vocabulary
procedureResponseProcedurenonullAnalysis and containment procedure

procedure (ResponseProcedure)

FieldTypeRequiredDescription
analysisstringyesAnalysis steps narrative
searcheslist[ResponseSearch]noSupplemental hunt searches
containmentstringnoContainment guidance

searches[] (ResponseSearch)

FieldTypeRequiredDescription
purposestringyesWhy this search is run
systemstringyesTarget platform or system
querystringyesQuery text

Platform block (PlatformConfigBase)

Shared fields on every platform configuration:

FieldTypeRequiredDefaultDescription
enabledbooleannofalseWhether this platform block is active
namestringno""Platform-specific rule name
schemastringnonullPlatform schema ID, e.g. platform::sentinel::1.0
statusstringnonullPlatform-specific deployment status
flagslist[string]nonullPlatform flags
tenantslist[string]nonullTarget tenant identifiers
contributorslist[string]nonullPlatform contributors

configurations (RuleConfigurations)

Typed optional blocks keyed by platform identifier:

KeyModelSchema ID
sentinelSentinelConfigplatform::sentinel::1.0
defender_for_endpointDefenderConfigplatform::defender_for_endpoint::1.0
splunkSplunkConfigplatform::splunk::1.0
sentinel_oneSentinelOneConfigplatform::sentinel_one::1.0
crowdstrikeCrowdstrikeConfigplatform::crowdstrike::1.0
harfanglabHarfangLabConfigplatform::harfanglab::1.0
carbon_black_cloudCarbonBlackConfigplatform::carbon_black_cloud::1.0

See platforms.md for per-platform required fields and capabilities.

Relationships

  • metadata.md — identity and schema routing
  • objective-1.0.md — linked via detection_model
  • deployment.mdstatus lifecycle and promotion
  • platforms.md — platform blocks and deploy/validate capabilities
  • validation.md — schema, vocabulary, and query validation
  • Vocabularies: severity, alert_severity, att&ck, responders, deployment statuses

Defaults & overrides

SettingSourceOverride
Default statusSTAGINGPer-rule YAML
Status enumdeployment.toml.opentide/configurations/deployment.toml
Platform defaultsbundled platforms/*.toml.opentide/configurations/platforms/
Template description defaultschema.toml.opentide/configurations/schema.toml

Vocabulary files are canonical in vocabularies/ — not overridable. See configuration.md.

Examples

name: Sentinel KQL Rule
metadata:
  uuid: 00000000-0000-4000-8003-000000000001
  schema: rule::1.0
  version: 1
  tlp: clear
description: Detects credential access via suspicious process creation
status: STAGING
severity: High
techniques: [T1059]
detection_model: 00000000-0000-4000-8002-000000000001   # → objective UUID
response:
  alert_severity: High
configurations:
  sentinel:                          # typed, preferred form
    enabled: true
    name: Sentinel KQL Rule
    status: STAGING
    query: |
      SecurityEvent
      | where EventID == 4688
      | take 1
    scheduling:
      frequency: PT1H
      lookback: PT2H
    alert:
      title: Sentinel KQL Rule
      suppression: false

Valid fixtures

FixtureDemonstrates
fixtures/valid/rule-1.0.yamlMinimal valid rule with Sentinel configuration
fixtures/cross-object/rule-references-objective.yamldetection_model → objective UUID

Invalid fixtures

FixtureViolation
fixtures/invalid/rule-missing-metadata.yamlMissing required metadata
fixtures/invalid/rule-unknown-schema.yamlUnregistered metadata.schema
fixtures/invalid/rule-bad-uuid.yamlNon-UUIDv4 metadata.uuid

History

VersionDateNotes
1.02026-06-25Initial exemplar spec from opentide models/rule.py

On this page