Tradecraft: A portable format for context about detections

DecadeSol1 pts0 comments

GitHub - spectrum-sec/delta-tradecraft · GitHub

/" data-turbo-transient="true" />

Skip to content

Type / to search

Sign in<br>Sign upAppearance settings

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

Uh oh!

There was an error while loading. Please reload this page.

spectrum-sec

delta-tradecraft

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>1 Commit<br>1 Commit

.github/workflows

.github/workflows

packs

packs

CODE_OF_CONDUCT.md

CODE_OF_CONDUCT.md

CONTRIBUTING.md

CONTRIBUTING.md

DELTA_TRADECRAFT_TEMPLATE.yaml

DELTA_TRADECRAFT_TEMPLATE.yaml

LICENSE

LICENSE

README.md

README.md

SCHEMA.md

SCHEMA.md

SECURITY.md

SECURITY.md

View all files

Repository files navigation

Delta Tradecraft

An open format for what a detection engineer needs to know before writing a detection.

A Tradecraft object is one vendor-independent YAML file about one adversary behavior: how the<br>behavior manifests in the attacked technology, where evidence of it can exist, what that evidence<br>can prove, and which detection strategies are viable. It sits above rule languages (Sigma, SPL,<br>KQL) and below or alongside ATT&CK. ATT&CK names a technique. A rule is one query for one<br>product in one estate. Everything between those two is the actual work, and this repository is<br>where it goes instead of an engineer's head or a dead wiki page.

Who it is for. Detection engineers deciding whether a behavior is worth a rule and what that<br>rule may honestly claim; agents generating detections that need grounding they cannot invent;<br>anyone who must say "we cover that" and be right.

The shape of an object

An object has thirteen blocks in this order. The first four say what the behavior is, the middle four<br>say how the attacked technology and the threat work, and the last five say what you can do<br>about it.

Block<br>Answers

identity<br>Which object is this, and what has it been called before

classification<br>What kind of behavior, on what attack surface

behavior<br>What the adversary does, in one sentence and then in full

manifestation<br>Is it possible , is it observable , is it detectable , and under what scope

attack_surface_context<br>How the attacked technology works, and where the trust boundary is

threat_research<br>Actor, campaign, victim, capability, framework mappings

visibility<br>Every telemetry source that could witness it, with what each can and cannot prove

detection<br>Strategies, logic, benign twins, blind spots, what an alert may conclude

detector_requirements<br>What a detector must be capable of, independent of product

missing_context<br>What is unverified, what is assumed, and which assumptions would change a verdict

missing_states<br>What to do when a required input is absent

alert_evidence_contract<br>What the alert must carry, and what it must not be titled

evidence<br>What the source establishes, what it does not, and the references

An object is complete when it explains six things: what the threat is doing, how it works, how the<br>behavior is observed, how the attacked technology works, the materially distinct ways it can be<br>detected, and the detector technologies each of those ways needs.

SCHEMA.md defines every field, its legal values, and common authoring mistakes.

What this format is for

A negative is a result. detectable: no is a legitimate, publishable conclusion, and an object<br>that reaches it carries the evidence for the negative rather than quietly omitting itself. Knowing a<br>behavior cannot be seen is worth more than a rule that creates the appearance of coverage.

Each strategy states its minimum evidence and the strongest conclusion that evidence supports.<br>alert_evidence_contract.unsupported_title names the headline the alert must never carry. A blocked<br>request must be described as a blocked attempt. It cannot be reported as a successful fetch.

Attribute each field and each inferred claim in prose. Every telemetry field records the event<br>vocabulary, the tier at which it is emitted, and whether a vendor schema attests it or the author<br>inferred it. That distinction usually decides whether a behavior is detectable at all.

Omitting validation means the strategy was not exercised. Nothing in the format lets an object<br>imply it was tested when it was not, and nothing gates publication on a lab result. An unvalidated<br>strategy is publishable. So is a withdrawn one: validation.status carries validation-withdrawn<br>for exactly that. Both have to say which they are. Expect objects in this repository whose strategies<br>have never been executed anywhere. Every pack states its own validation position at the top of its<br>README. Read that before you quote...

behavior must object evidence tradecraft commit

Related Articles