Source overview
splunk/security_content
Splunk's official ESCU — SPL searches with YAML metadata, mapped to ATT&CK and Cyber Kill Chain.
splunk-security-content
· SPL
· upstream repo ↗
· Apache 2.0
How detections work here
Splunk's Security Research team publishes SPL searches as YAML, run on a schedule by Enterprise Security. Query against a store, on an interval — the familiar model.
The organizing idea that is not familiar is the analytic story: detections are grouped into named narratives (a campaign, a malware family, a technique cluster) rather than standing alone, and adopting a story means adopting its searches together.
How rules are written
YAML with the SPL in a search field:
name: Cisco Secure Firewall - Binary File Type Download
type: Anomaly
status: production
data_source:
- Cisco Secure Firewall Threat Defense File Event
search: |
`cisco_secure_firewall` EventType=FileEvent FileDirection="Download"
| stats count ... by FileDirection FileType src dest
| `cisco_secure_firewall___binary_file_type_download_filter`
how_to_implement: |
This search requires ... Replace the macro definition with
configurations for your Splunk environment.
known_false_positives: IT admins or developers may legitimately download ...
Two conventions matter more than the SPL itself:
- Macros in backticks. A leading macro like
`cisco_secure_firewall`stands in for your index/sourcetype configuration, and every search ends with a..._filtermacro that exists so you can suppress known false positives without editing the search. Neither is defined in the rule — you define them. typedistinguishesTTP(behavior with a known technique),Anomaly(statistically unusual, expect tuning),Hunting(not meant to alert as-is) andCorrelation. Treating aHuntingsearch as a production detection is the most common misuse.
Reading a rule on this site
how_to_implement becomes the implementation guide on a rule's page and
known_false_positives becomes tuning notes. Both are load-bearing here — a
Splunk search without its macros configured does not run at all.
data_source names the specific log source and add-on required.
Gotchas
- No search here works out of the box. The macros are placeholders by
design.
how_to_implementis not optional reading. type: Huntingsearches are exploratory and will return volume. Check the content type before scheduling one as an alert.
Rungs
Reaches TTPs — 1075 rules, 49.7% of the ruleset. A rung is claimed at 20 rules and 1.0% of the source, so that one rule cannot speak for a small ruleset and a rounding error cannot speak for a large one.
- Atomic IOCs 0
- Network & Host Artifacts 0
- Tools 0
- TTPs 1075
- Not a detection 0
- Pending classification 1087
Shares are of all 2162 live rules in this source, including the atomic-IOC and non-detection content the count above hides by default. The pending band is drawn to scale for the same reason: it is the width of what no classifier has read, and a bar without it would look more complete than the index is. What the rungs mean.
Severity
Status
- Stable 2051
- Experimental 111
Platforms
Splunk Cloud 2162 Splunk Enterprise 2162 Splunk Enterprise Security 2162
Content types
Recently modified
all →| Jscript Execution Using Cscript App | 2026-10-09 |
| Ping Sleep Batch Command | 2026-10-09 |
| Possible Lateral Movement PowerShell Spawn | 2026-10-09 |
| Svchost LOLBAS Execution Process Spawn | 2026-10-09 |
| Vbscript Execution Using Wscript App | 2026-10-09 |