✨ Welcome to ODEF - the Open Detection Engineering Framework. A toolkit designed to elevate the craft of detection engineering ✨
About ODEF
✨ ODEF is an open-source framework dedicated to enhancing and standardizing detection engineering processes. Explore the framework on GitHub ✨
License
✨ ODEF is made available under the MIT License. Copyright (c) 2023 by Atanas Viyachki ✨
Subsections of Home
The Framework
Chapter 1
Open Detection Engineering Framework
A detection engineering story
Subsections of The Framework
Introduction
Purpose
ODEF enables organizations to establish and apply fundamental principles and best practices in detection engineering.
Adopting ODEF accelerates service enhancement, refines processes, and advances cybersecurity maturity.
The framework strategically aligns cybersecurity efforts with business objectives (e.g., risk reduction and operational resilience). It enables the creation of robust detection systems, provides assurance, reduces reliance on vendors, and, most importantly, strengthens an organization’s overall security stance. ODEF defines core principles for effective detection engineering and introduces a three-tiered maturity model to evaluate organizational performance.
Each phase within the framework’s core is meticulously crafted to map out the detection lifecycle, guiding detection engineers with focused functions and outcomes expectations that steer them through the entire process. The maturity levels act as strategic benchmarks, providing organizations with a high-level perspective on their detection engineering strategy and highlighting areas for potential improvement.
High-Level Goals
The overarching ambitions of the framework are to:
Establish a methodical, replicable, and predictable approach for developing hunts and detections.
Achieve extensive organizational visibility.
Transform insights into sustainable, actionable knowledge while fostering a culture of information sharing.
Promote persistent vigilance in detection practices.
Validate detections rigorously through systematic testing.
Cultivate an environment where knowledge and knowledge sharing is the main driver of security initiatives.
Framework Mindmap
Framework Core
Framework Core
The Framework Core is a suite of activities aimed at achieving specific cybersecurity objectives, supplemented by illustrative examples to guide their implementation. The Core is structured around three lifecycle phases: Sunrise, Midday, and Sunset which holistically cover the detection lifecycle from inception to completion, with dedicated functions, guidelines, and goals for each phase. Together, these components provide detection engineers with a “north star” focus, enabling them to deliver high-quality detections with precision.
Functions, Goals, Guidelines
Each phase of the detection lifecycle is defined by specific functions, goals, and guidelines. These elements work together to guide detection engineers in producing robust, reliable detections
Functions
Inspired by the single-responsibility principle from software engineering, each function in ODEF represents a discrete step with a singular focus and outcome within the detection lifecycle. These single-goal activities are designed to drive a specific activity, ensuring clarity and precision at every stage.
Goals
Each function is crafted to achieve a specific, well-defined result that aligns with the overarching objectives of the detection lifecycle. While goals may sometimes be high-level or abstract, it is strongly recommended to maintain a direct correlation between functions and goals. This alignment ensures that each function contributes meaningfully toward the end goal, enhancing both focus and quality in detection engineering.
Guideline
Guidelines act as reference materials that support the achievement of goals within each function. They provide detection engineers with context-specific insights and best practices, helping to standardize processes while allowing adaptability. For example, a document detailing a company’s unique Change Management process would serve as a valuable guideline
Phases in detail
The Core encompasses three primary lifecycle phases:
These phases collectively chronicle the lifespan of a detection mechanism, from its conception to its eventual retirement/decommissioning.
Phases
Intro
In the rhythm of each day lies the strength of progress; every sunrise brings new potential, midday illuminates our purpose, and sunset reminds us to refine and renew.
Phases
ODEF pioneers the concept of a detection lifecycle, comprehensively encapsulating the journey of a detection mechanism from creation to retirement. It's structured into three distinct phases: Sunrise, Midday and Sunset.
This tri-phase approach ensures thorough coverage for each stage of a detection's active life. Corresponding to each phase are specific functions, goals, and guidelines that lay the groundwork for effective and efficient detection engineering.
Subsections of Phases
Sunrise
Phase 1️⃣ Sunrise 🌅
Sunrise is the first phase of the detection lifecycle. It marks the inception, development and deployment of the detection. During that phase there are 6 core functions that should be addressed:
Research
Prepare (Logging)
Build (Detection Content)
Validate
Automate
Share (Knowledge)
High level goals for the Sunrise phase
Build high fidelity detection
Ensure detection validation
Create documentation
Integrate and automate in the environment
Socialize the detection with the security organization
Functions
Goal
Description
Guidelines
Research
Opportunity Identification
It can be triggered from analyzing threat intelligence reports, or OSINT, or internal knowledge for a particular security gap. Document the use case and the goals of the detection as part of the opportunity identification process.
Document the use case that you’re building and set goals.
Is the TTP already covered by an existing alert or detection?
Is there sufficient knowledge to start building or additional research would be required?
What are sources of information that will assist the research?
Prioritize
Detection engineering work has to be prioritized and tracked. Work prioritization can be based on urgency and priority. Backlog of detections and security posture activities is desirable and recommended.
Prioritization criteria:
Criticality of the system
Highest level of threat to the organization
Ease of Exploitation
Past incidents
Develop Research Questions
Write your research questions that while answering you will gain understanding of the topic.
Examples:
Write down what you already know or don’t know about the topic.
Use that information to develop questions. Use probing questions. (why? what if?).
Avoid “yes” and “no” questions
Information Gathering
Research and collect sufficient information in order to start understanding the detection
Provides a good overview of the topic if you are unfamiliar with it.
Identify important facts, dates, events, history, organizations, etc. (in case the detection is a response to a past incident.)
Find bibliographies which provide additional sources of information (include in the Appendix section detection document)
Technical Context
Create and understand technical context around the detection
Start putting technical writeup by summarizing the most important information from technical aspect
Research the technology associated with the technique to help understand the use cases, related data sources, and detection opportunities
Note: Defenders often create superficial detections because they lack an understanding of the technology involved. In case of uncertainties it is best to engage the team or engineer responsible for the management of the technology
Prepare
Identify Dataset
Identify the log source that will be used for the detection
Know your environment
Understand the data source and document it by creating a data dictionary.
The data dictionary should grow and contain sources of data and their corresponding schemas. It can later be used to quickly refer to.
Visibility Check
Ensure there is sufficient logging, retention and visibility in order to successfully build the detection and satisfy the use case
Use the accumulated technical knowledge to identify source and identify the events required to build detection
Use any historical events in order to validate that there is sufficient visibility
Improve (optional)
Once the data is explored we can identify opportunities for improvements such as:
Collecting additional logs or change logging levels
Create additional attributes (parsing of raw logs)
Consolidation of distinct logs
Improvement initiatives and requests should be communicated to the responsible for the dataset in question team. For that purpose it makes sense to maintain a contact list that provides quick reference to technology, support/engineering teams and contact details.
Build & Enrich
Detection Creation
Create a detection query against the identified dataset
Having a good understanding of the technical context and the data source begin building queries to narrow down the data to actionable insight.
Manual Testing
Perform a manual testing and ensure the query works syntax and logical perspective
Ensure the query does not have any syntax errors
In case the detection is built in response to past incident ensure that the query is indeed catching true positive events
Baseline development
Develop a baseline (if needed) that will improve the detection fidelity
Baselines are sets of known and verified good behaviors and events present in the organization. Those events are normally excluded from the detection logic.
Baselines decisions and considerations should be documented and clearly stated in the ADS (Alerting and Detection Strategy)
Baselines are included in the hunt.yml/tf/hcl or alert.yml/tf/hcl files
Unittest Development
The unittest development is dependent on the type of devops pipeline. Simple goals are provided.
Goals for the unittesting:
Changes or missing data
Syntax errors
To confirm detection logic by performing true positive detection
Enrich
Enrich with additional data source if required
Each hunt could have different enrichment requirements. In some cases HR database could be used in order to understand if a person is on vacation, other trivial cases could be lookup of a hash, ip or domain in an threat intelligence repository etc.
Document
Create KB Document
Complete the ADS
MITRE ATT&CK coverage map update
Central knowledge base repository is required in order to mature the detection engineering program. This can be a github repository with controlled access that provides on a need to know basis the security teams members with access.
Each hunt should have a corresponding README.MD file that provides sufficient information and context. Consider an SOC analyst or Incident Responder responding to an event from your detection. By looking at the documentation they should be easily briefed on the premise and technicalities of the detection.
Validate
Confirm unittests
Confirm unittest are working
Confirmation of the unittests can be done by inspecting the implemented devops pipeline and ensuring that the actions (in the case of github) for unittests are running
True Positive validation
Validate true positive event against real dataset using the query developed earlier.
True positive validation can be achieved by:
Using historical event that exists in the central data repository
Emulation of the TTP by executing it in a controlled environment
False Positive Validation
Ensure no FP are produced by the query when ran against the prod dataset.
False positive events are good known events which are produced as output results by the detection/hunt query.
If baseline is used it should be validated that the baseline is catching those good known events.
Splunk example:
Splunk you can use makeresult command to create fake results and test your baseline and how you handle false positives.
Automate
Automation & deployment
This step is entirely dependent on the environment and should follow the standard ci/cd or automation practices of the organization.
Integrate with devops pipeline and enable continuous deployment
Share
Socialize the new detection
A notification process is required and it should be created. The process can be in the form of newsletter or slack channel notification, preferably automated one.
Follow a process to communicate the newly created detection with the Security Teams and inform them about it
Update Sec Dependency Tree
This document is actually part of the repository and can be shared with data engineering and security teams. The goal of sharing it is to promote care mentality where teams would check before they change. Meaning, if data engineer is about to rename an index they should first check if the index is being used. Having dependency document as part of the repository makes it easy and seamless for them to check.
Update organization wide document showing dependencies for the detections
The “Midday” phase is normally the longest phase from the detection lifecycle, during which the detection has been engineered and commissioned to production. The phase monitors the detection during its operation and aims to improve it if needed.
High level goals for the Midday phase:
Operate and monitor the detection for FP or TP
Improve the detection logic in case of influx of FP
Perform systematic reviews to ensure relevancy
Functions
Goal
Description
Guidelines
Monitor
Run as per defined schedule
Detection is configured to run on pre-defined schedule or real time if applicable
Detections will run based on the schedule set during the sunrise phase.
Confirm unittest passing
Monitoring is configured to notify the responsible team in case the automation for the detection is not running properly
Suggested approach: github actions - before deployment ensuring proper syntax
Work detections
Once detection is running it should be monitored for any TP or potential influx of FP
TP events should be triaged, investigated and responded on by following an agreed IR process. FP events should be investigated, proved as FP and documented as part of the baseline. Once the baseline is changed in the documentation the query can be updated and improved.
Measure
Measure detection efficacy
Enable metrics for the detection based on which areas for improvement can be identified. Mitre Attack weakness Success/failure of automating detections Services covered
Each detection that covers particular TTP can be marked in the Mitre ATT&CK Navigator. Looking at percentage of covered tactics and techniques can be a metric. Success or Failure in detection automation or influx of FP metric can be used to identify detections that require improvement. Detection runtime length is a metric which can identify poorly written queries. For example, query too open that collects way too many events and chunks too much data only to spend even more time to filter by using custom logic.
Improve (optional)
Improve detection fidelity
Once improvement opportunities have been identified during the operations or periodic review an improvement is triggered
The goal of this function is to improve any detections which are with poor health (slow runtime, causing errors) and improve them by revisiting the detection logic.
Review
Perform periodic review
Review detections to identify improvement opportunities or decommission requirements
Detection can become irrelevant and thus decommissioned when: The risk that it is compensating is far smaller than the cost of running the detection The technology used for the detection is no longer present in the company
During the “Sunset” phase the detection is taken out of commission. The phase wants to ensure that resources are not spent for outdated detections that are no longer applicable and at the same time leave sufficient trace of the existence of the detection.
High level goals for the Sunset phase:
Decommission the detection and leave it in a state that it can be resumed anytime
Preserve knowledge
Functions
Goal
Description
Guidelines
Decommission
Decommission the detection
The goal is to decommission the detection by following process that provides visibility
In order to decommission a detection simply change the status field to "Sunset" in the .yml file. Assuming your devops pipeline is configured correctly, this should effectively disable the detections and prevent it from running. Note: Do not remove anything from the repository as detections can be reused in future.
Knowledge base update
Create an adequate indication in the KB document that the detection is no longer active and socialize the change with your security teams.
Update Mitre coverage map by removing the coverage that the detection was providing
Sunset Process Flow
graph TD;
Review1[Review completed] --> Review2;
Review2{detection ready to decom} -->|no| End[end];
Review2{detection ready to decom} -->|yes| Preserve(Preserve knowledge);
Preserve --> Decommission(Decommission the detection);
DEMM
Chapter 2
Detection Engineering Maturity Model
Working with the Detection Engineering Maturity Model
Subsections of DEMM
Maturity Model
Introduction
Maturity is a self-evaluation process conducted by the team. ODEF provides guidance and structure and assures that all the relevant areas are covered. The goal of the review process is to give a baseline that helps achieving a common understanding about the organization security posture.
Organizational threat identification practices rely solely on external vendors to provide security content.
Assurance and context around alerts and detections is not provided or sufficient.
Risk is managed in an ad hoc and often reactive manner by relying on third parties.
Assurance
There is some limited awareness of cybersecurity threat detection capabilities at the organizational level.
The organization implements threat validation and verification on an irregular, case-by-case basis due to varied experience or information gained from outside sources.
Assurance through continuous validation is not present.
Knowledge sharing
The organization may not have processes to enable cybersecurity information sharing.
Documentation is rarely written and shared only on ad-hoc basis and it is scattered across teams.
Level 2 - Adequate
Threat Detection Content
Organizational threat identification practices rely on internal teams and external vendors to provide security content.
Context around alerts and detections is provided. Specialized teams are able to introduce new detections and security content.
Some security teams have a better understanding of security posture than others.
Assurance
There is some awareness of cybersecurity threat detection capabilities as the organization is now building custom detections to compensate for gaps.
The custom detections are use case driven and validated during the detection development process.
Continuous validation is not enabled and the organization still relies on suppliers for most of the detection capabilities.
Knowledge sharing
The organization is starting to enable knowledge sharing and promotes documentation efforts.
There is a central detection information repository.
Level 3 - Enabled (Proactive)
Threat Detection Content
Organization maintains continuous practices that provide excellent internal insights and knowledge. Context around alerts and detections is provided.
Any team is encouraged and capable to introduce new detection components and thus improve the security posture.
The security posture of the environment is well understood across the security teams.
Assurance
The organization possesses a detection coverage map and covers a big percentage with in-house built detections. The organization does not rely on vendors to provide security content.
Automation is provided to continuously validate and run the detection use cases.
Additional assurance is achieved by running red team exercises and automation frameworks.
Knowledge sharing
Organizations possess practices to create and maintain high quality records and appropriately control and manage the access to the information.
Processes for socializing detections are automated and teams are informed of the development of new detections.
Operational Maturity
Maturity Review Process (MRP)
The process of evaluating the maturity:
Collect - Collect information about your processes, people and tools. Identify changes to any. The goal is to gain a holistic understanding of the organization's security teams, tools and processes. Based on that information various posture improvements can be identified.
Analyze - Based on the data that you have collected and find the corresponding maturity level. Finding where in the maturity level the organization is important for understanding the impact and importance of each identified security improvement initiative and thus prioritize accordingly.
Prioritize - Prioritize and decide which is the next low hanging fruit that can be improved. Not all security issues are equally important, prioritization should focus on those initiatives that influence and change the security posture and introduce the most maturity.
Improve - Create an initiative or a project for improving the identified gap.
Security Improvement Initiative
Security improvement initiatives are likely outcomes of the MRP process. The goal of the security improvement initiative is to address identified visibility gaps in the organization's security posture. For example, during the review process or detection engineering we may identify that our application is not providing sufficient logging in order to detect particular behavior or ttp of interest. That is a good candidate for a security improvement initiative. The goal of the initiative would be to deliver the visibility needed and notify back the Detection Engineer so that they can proceed with the detection creation. Depending on the size of the organization and internal processes, this process might be driven by the Detection Engineer or completely separate team.
DEMM Cadence
Evaluating the maturity of the organization and striving to improve it is no one time effort or activity. For that best results can be achieved by:
Set a regular schedule for reevaluating and revisiting the DEMM.
Ensure that the security improvement initiatives are targeted with a timeline and aligned with the overall organizational security strategy.
DAC
Chapter 3
Detection as Code
Working with the Detection as Code
Subsections of DAC
Templates
Template Purpose
ODEF provides two templates for documenting detections — yaml and markdown. Each for different purpose:
Yaml is used due to its data serialization and wide programming language compatibility. It is used for automation and integrations with other systems. It stores components like the queries, baseline, schedule and others. It is a stepping stone for Detection-as-Code capability.
Markdown is used for detection documentation due to its readability and simplicity. Especially helpful for knowledge sharing when used in conjunction with platforms like GitHub. The purpose of the file is to house all details related to the detection. Check the Knowledge Management section for additional information.
The yaml file
Yaml file purpose
status: "{{ status }}"created_date: "{{ created_date }}"last_updated_date:
name: "{{ detection_name }}"query: "{{ query }}"author: "{{ detection_author }}"schedule: "{{ schedule }}"baseline: "{{ baseline }}"visualization: "{{ visualization }}"event_limit: 0data_source: "{{ data_source }}"data_location: "{{ data_location }}"tactic: "{{ tactic }}"mitre_id: "{{ mitre_id }}"mitre_url: "{{ mitre_url }}"incident:
severity: "numeric, 0-unknown, 0.5 - informational, 1-low,2-medium,3-high,4-critical"type: 'Security Incident'name: 'string, name of the incident'description: 'inc descr: This detection is monitoring for changes in any of X'sla: 'integer - number of minutes added to incident create time(incident sla). example sla: 1440this means 24h sla'
Knowledge management
Chapter 4
Knowledge management
The importance of knowledge in an organization
Subsections of Knowledge management
Documentation Template
Template should be used to standardize the detection content and create a knowledge base
Detection Summary
Status
(developing/active/decommissioned)
Goal (Why)
The goal of the detection
TTP (What)
Mitre attack link
Strategy (How)
Query or short explanation about it
Automation (When)
Schedule and automation details
Sources (Where)
Data sources used for the detection
Severity
high/medium/low
Priority
high/medium/low
Research
Goal
The goal section provides the intended purpose of the alert. It is a simple, plaintext description of the type of behavior you’re attempting to detect and why.
Categorization
The categorization is a mapping of the detection to the relevant entry in the MITRE ATT&CK. This is used in reporting with tools such as Mitre Att&CK Navigator to visualize coverage of TTPs and provide assurance. Additionally when a TTP is mapped to MITRE it can be used to perform attacker attribution.
Technical Context
Technical Context provides detailed information and background needed for a responder or an engineer to understand all components of the detection. The goal of the section is to include technical research for the TTP and additionally how it relates to the environment. It can help incident responders to understand better the alert and also security engineers in order to address a technical security gap.
Detection Summary
Is a high-level walkthrough of how the detection/hunt works. This describes what the alert is looking for, what technical data sources are used, any enrichment that occurs, and any false positive minimization steps.
Severity
Severity is a measurement of impact. How much impact does an incident have on the overall security of the business? Some TTPs are clear indicator for attacker present in the environment, those will have higher severity than others. For example detection for dcsynch vs detection for received phishing email(without any confirmation for clicked link).
Priority
Priority should be based on the detection severity. The goal of prioritization is to allow your SOC analyst and Incident Responders to focus on the most pressing issues first.
Prepare
Dataset
Identify the appropriate source of information which will be used in the detection and document it here.
Visibility Check
Ensure there is sufficient logging, retention and visibility. Provide evidence (screenshots, json files etc) that prove that there is sufficient visibility and logging to collect and build detection logic.
Build & Enrich
Detection Creation
Create a detection query against the identified dataset. Document the queries used here and provide details of the logic.
Manual Testing
Perform manual testing against production data and ensure minimal False Positives. Document your test searches.
Baseline development
Based on the results from your manual testing you may or may not need to develop a baseline. Baseline is a set of normal behaviours which are excluded from the detection to minimize noise and increase fidelity
Blind Spots and Assumptions
Think about issues which could prevent your detection from alerting. For example, lack of visibility due to missing endpoint agent, or particular string which, in case is modified, the detection will not work etc.
Unittest Development
Create automated unittest that will cover:
Changes or missing data
Syntax errors
To confirm detection logic by performing true positive detection
Enrich
Utilize or develop enrichment capability to support the detection if needed. There are external and internal sources of enrichment. In your pipeline or SIEM you should be able to interact with these sources and collect data as needed. For example, consider user behavioral analytic use case which requires to know when a user is on vacation - this would require access to an up-to-date HR database.
Validate
Validation are the steps required to generate a representative true positive event which triggers this alert. This can be a walkthrough of steps used to generate an alert, a script to trigger the detection (such as Red Canary’s Atomic Red Team Tests), or a scenario used in an alert testing and orchestration platform.
Each alert / detection strategy must have true positive validation. This is a testing process designed to prove the true positives are detected.
True positive validation
To perform positive validation:
Generate a scenario where a true positive would be generated.
Document the process of your testing scenario.
From a testing device, generate a true positive alert.
Validate the true positive alert was detected by the strategy.
False positive validation
FP validation is yet another confirmation that when ran in production the detection is not producing excessive number of alerts from standard events in the organization - for example software compilation etc.
Automate
The idea of the section is to provide information on how the query is automated and what is the schedule of execution. Document any interaction between the different environments or applications that may be involved. For example, if your detection uses api calls to enrich from an HR database and then utilizes a scoring model from a micro service are interactions that should be documented here.
Share
Socialize the detection
Follow the process for socializing the detection with the receiving team/s (Fraud, SOC&IR, Engineering, Hunting etc). The receiving team should acknowledge and accept the new detection after performing a quality check.
Response
The SOC and Incident Response teams should align the response to any alerts from the detection to their standard response playbooks - for malware, insiders etc. In case of absence of IR playbooks - the response plan can be documented here.
AppendixInclude any external links and references.
Lessons from the Field
Why this page exists
ODEF was written in 2023 as a model of how detection engineering should work. Since then it has run as the backbone of a production detection platform for several years. This page is the honest record of where the model held, where it bent, and where practice quietly replaced it.
Everything here is methodology. No vendor, product, or employer specifics.
Detection ideas come from anywhere
When ODEF was written, Opportunity Identification had a tidy list of inputs: threat intelligence reports, OSINT, internal knowledge of a gap. The implied picture was a detection engineer at a desk, reading, deciding what to build next. That is how we expected the backlog to fill.
It is not how the backlog filled.
The best detection ideas arrived sideways. A platform engineer mentioning, in passing, that a certain admin action should never happen outside a deploy window. Someone noticing the same odd account pattern twice in a week. An incident responder closing a ticket with “we only caught this because someone happened to look.” None of these people thought of themselves as giving us a detection. They were describing their world, and in their world the abnormal thing was obvious because they lived in the normal.
So we stopped waiting for ideas to reach us and built ways to catch them where they already were. Over time that became four intakes running side by side:
A bot that listens. It watches a chat channel for conversations that look like detection opportunities and surfaces them to the team. Most of the signal was already in chat. People were describing suspicious behaviour to each other every day. The bot’s job was simply to make sure the detection team heard it too.
A service desk board. A request type on the company’s service management board where anyone can file a detection idea or a “would you notice if…” question. It gives ideas a ticket, an owner, and a status the submitter can see.
A standing relationship with incident response. Not a channel, a habit. Every incident and every near miss is a question: what would have caught this earlier, and what did we only see because someone was paying attention? Responders are the richest source of detection ideas in the company and they rarely file tickets about it unless asked.
The rest of the company, on purpose. We told people, repeatedly, that noticing something odd and saying so was useful even if it turned out to be nothing. The bar to raise something is near zero and nobody needs to know what a TTP is.
The lesson is that the detection engineer is rarely the person with the best model of what normal looks like in any given system. The people who run the system are. A framework that treats research as something the security team does alone will miss most of the ideas that matter, because those ideas live in other people’s heads and only come out when someone is listening.
What this changes in ODEF. Opportunity Identification is an intake function, not a research step that happens to have inputs. Concretely:
Run more than one intake. Passive listening and active filing catch different people. The bot catches the ones who would never file a ticket; the board catches the ones who want to be sure it was heard.
Treat every submission as a research trigger, not a request. Most will not become detections. All of them tell you something about where visibility is thin.
Close the loop. Tell the person what happened with their idea, especially when it shipped. That is what keeps the next idea coming.
Count where ideas come from. It is a maturity signal. If every detection traces back to a threat intel feed, the organization is still at the “security team alone” level no matter what else it has built.
Indicators of compromise still work
ODEF, like most of the field in 2023, was built around behaviour. Every function in Sunrise assumes you are researching a technique, mapping it to ATT&CK, understanding the technology, and writing logic that catches the behaviour regardless of which tool the attacker used. The Pyramid of Pain had become orthodoxy: hashes, IPs, and domains are the cheap layer at the bottom, trivially changed, barely worth the effort. We believed that. The framework does not even have a function for indicator matching.
Then we ran it for a few years and kept noticing what actually fired.
Plain indicator matching kept catching real things. A known-bad domain in DNS logs. A hash from a vendor report showing up on an endpoint weeks later. An IP from an incident write-up reappearing in a different part of the environment. The behavioural detections were doing the harder, more durable work, but the indicator feed was quietly producing true positives at a cost that rounded to zero per detection.
In hindsight the reason is obvious. The Pyramid of Pain is about the attacker’s cost to change an indicator. It says nothing about whether they bother. Most of what reaches a given organization is not a targeted adversary carefully rotating infrastructure. It is commodity tooling, reused infrastructure, and campaigns that run for weeks on the same handful of domains because changing them has not been necessary yet. For that traffic, an indicator is not weak evidence. It is a confession.
There is also a practical argument the framework missed. An indicator detection is the only kind you can build in minutes, with no research phase, no technical context, and no baseline. When a report lands at four in the afternoon, “are any of these in our logs, now and for the last ninety days” is the question that matters first. Behavioural coverage for the technique can follow. It usually should. But it is a different kind of work on a different timescale, and the framework conflated the two.
What this changes in ODEF. Indicator matching deserves to be a first-class detection type with its own lightweight path through the lifecycle:
Sunrise for an indicator detection is intake, dedupe, and a retroactive search. It should take minutes, not days. Forcing it through the full research and documentation functions is how indicator work silently stops happening.
Keep indicators as data, not as detection logic. One generic matching detection fed by a curated list beats a hundred hand-written rules, and it makes expiry and provenance tractable.
Give indicators a lifespan. Midday for indicators is mostly ageing out stale ones so the list stays fast and the hits stay meaningful. Record where each came from and when.
Measure the two types separately. Indicator hits and behavioural hits tell you different things. Mixing them in one true positive count hides the fact that the cheap layer is carrying more than its share.
Stop treating the Pyramid of Pain as a priority order. It describes attacker cost, not defender value. Low on the pyramid is often where the highest return per hour of engineering sits.