In this post

In a previous post, we made D3FEND work inside a STIX-native ecosystem.

That solved an important problem: defensive knowledge could now exist as structured CTI data, not just documentation.

But it still lived in isolation from the rest of the CTI ecosystem.

To make D3FEND operationally useful, it needs to connect to the rest of the security knowledge landscape, especially ATT&CK and CWE.

This post focuses on those connections.


D3FEND is strong at describing defensive techniques.

ATT&CK is strong at describing adversary behaviour.

CWE is strong at describing structural weaknesses.

Individually, each is valuable. Together, they answer a more useful question:

Not: “Can we detect this technique?”

But: “What defensive actions actually reduce the risk?”

Detection coverage is not the same as defensive coverage.

ATT&CK alone helps you understand what an adversary might do.

D3FEND helps you understand what you can do in response.

Linking them turns those perspectives into a graph so offensive and defensive teams can freely move between the two.


The D3FEND ontology already contains external knowledge

D3FEND is not an isolated model.

Its ontology already includes references to:

  • ATT&CK Tactic, Techniques, Sub-Techniques and Mitigations
  • CWE Weaknesses
  • DISA CCI
  • NIST 800-53

These are not simple text references.

They exist as structured OWL entities embedded in the graph.

For example:

ATT&CK Techniques/Sub-Techniques

    {
      "@id": "d3f:T1098.001",
      "@type": [
        "owl:Class",
        "owl:NamedIndividual"
      ],
      "d3f:attack-id": "T1098.001",
      "d3f:creates": {
        "@id": "d3f:Credential"
      },
      "d3f:definition": "Adversaries may add adversary-controlled credentials to a cloud account to maintain persistent access to victim accounts and instances within the environment.",
      "d3f:produces": {
        "@id": "d3f:IntranetAdministrativeNetworkTraffic"
      },
      "rdfs:label": "Additional Cloud Credentials",
      "rdfs:subClassOf": [
        {
          "@id": "d3f:T1098"
        },
        {
          "@id": "_:N5061ec09a28745f09bb467a05979d442"
        },
        {
          "@id": "_:Ncb7d77eae1ce46d7a3c75089c1f0b1c4"
        }
      ]
    }

ATT&CK Mitigations

    {
      "@id": "d3f:M1056",
      "@type": [
        "owl:NamedIndividual",
        "d3f:ATTACKEnterpriseMitigation"
      ],
      "d3f:related": [
        {
          "@id": "d3f:DecoyEnvironment"
        },
        {
          "@id": "d3f:DecoyObject"
        }
      ],
      "rdfs:label": "Pre-compromise"
    }

Weaknesses

    {
      "@id": "d3f:CWE-825",
      "@type": [
        "owl:Class",
        "owl:NamedIndividual"
      ],
      "d3f:cwe-id": "CWE-825",
      "d3f:definition": "The product dereferences a pointer that contains a location for memory that was previously valid, but is no longer valid.",
      "d3f:synonym": "Dangling pointer",
      "d3f:weakness-of": {
        "@id": "d3f:UserInputFunction"
      },
      "rdfs:label": "Expired Pointer Dereference",
      "rdfs:subClassOf": [
        {
          "@id": "d3f:CWE-119"
        },
        {
          "@id": "d3f:CWE-672"
        },
        {
          "@id": "_:N858266ab414241afac30220321e84635"
        }
      ]
    }

These objects are already part of the ontology.

The work is not inventing links.

The work is resolving and operationalising them in the same way we did in the last post.


Artefacts are the join points

The key structural insight is simple.

D3FEND artefacts act as the bridge between frameworks.

  • ATT&CK techniques produce or interact with artefacts
  • weaknesses affect artefacts
  • D3FEND mitigations operate on artefacts

That makes artefacts the natural “join node” in the graph. They are the shared surface where offensive behaviour, structural weakness, and defensive action all intersect.

Graphically:

  • ATT&CK → artefact
  • CWE → artefact
  • D3FEND mitigation → artefact

From there, traversal becomes possible in any direction.


OWL restrictions: where the real relationships live

As with the previous post, the important relationships are not always explicit fields.

They often appear through OWL restrictions.

For example:

    {
      "@id": "_:N858266ab414241afac30220321e84635",
      "@type": "owl:Restriction",
      "owl:onProperty": {
        "@id": "d3f:weakness-of"
      },
      "owl:someValuesFrom": {
        "@id": "d3f:UserInputFunction"
      }
    },

This expresses:

CWE-825 is a weakness of the D3FEND artefact UserInputFunction.

Not as a flat property.

But as a graph constraint.

Resolving these restrictions allows us to generate explicit STIX relationships linking:

  • ATT&CK ↔ artefacts
  • CWE ↔ artefacts
  • mitigations ↔ artefacts

D3FEND external mappings

Once expressed in STIX, these relationships become explicit, queryable, and usable across CTI tooling.


Traversing the graph in practice

This is where the model stops being theoretical and starts being operational. The value of this model is traversal.

You can start from an offensive technique, a mitigation, or a weakness and move through the graph to defensive actions.

ATT&CK technique → defensive mitigations

T1098.001: Additional Cloud Credentials

This technique produces the artefact Credential, which becomes the pivot into defensive modelling.

From there, we can identify D3FEND mitigations that operate on that artefact:

  • Decoy User Credential (D3-DUC)
  • Multi-factor Authentication (D3-MFA)
  • Authentication Cache Invalidation (D3-ANCI)
  • Credential Transmission Scoping (D3-CTS)
  • Credential Compromise Scope Analysis (D3-CCSA)
  • Credential Rotation (D3-CRO)
  • Credential Hardening (D3-CH)
  • Credential Revocation (D3-CR)
  • Reissue Credential (D3-RIC)

The path is:

ATT&CK technique → artefact → D3FEND mitigation

ATT&CK mitigation → D3FEND mitigation → ATT&CK techniques

M1056 Pre-compromise

This maps to D3FEND mitigations such as:

  • Decoy Environment (D3-DE)
  • Decoy Object (D3-DO)

From those nodes, the graph can be traversed back to:

  • related artefacts
  • related ATT&CK techniques

This creates a two-way bridge:

ATT&CK ↔ D3FEND

CWE weakness → defensive mitigations

CWE-825 Expired Pointer Dereference

Weaknesses connect the model at a different level. They shift the perspective from adversary behaviour to structural exposure.

CWE-825 is linked to the artefact User Input Function.

From there, you can traverse to:

  • defensive techniques
  • mitigations targeting that artefact class
  • other weaknesses linked to the artefact

This answers a different operational question:

Not “How do attackers use this?”

But: “What defensive controls reduce exposure to this class of weakness?”


This is not enrichment. It is structural integration.

It is tempting to describe this as enrichment. It is not.

We are not attaching labels.

We are integrating graphs.

The distinction matters.

Enrichment:

  • adds metadata

Integration:

  • enables traversal
  • enables reasoning
  • enables coverage analysis across frameworks

The goal is not to decorate ATT&CK or CWE.

The goal is to make defensive knowledge first-class in the same graph.


What this enables operationally

Once D3FEND sits alongside ATT&CK and CWE in STIX:

You can:

  • move from adversary behaviour to defensive technique
  • move from weakness to mitigation strategy
  • identify artefact-centric defensive gaps
  • evaluate defence posture beyond detection coverage

This shifts the model from: “What attacks exist?”

To: “What defensive actions reduce exposure?”


D3FEND in CTI Butler

The examples above were generated directly from CTI Butler.

The platform now allows you to:

  • explore D3FEND artefacts as graph nodes
  • traverse to ATT&CK techniques and mitigations
  • traverse to CWE weaknesses
  • identify defensive mitigations in context

This is how we use D3FEND internally for our research. Not as documentation. But as a navigable defensive knowledge graph embedded in CTI workflows.

Defensive knowledge should not sit beside ATT&CK.

It should connect through it.


CTI Butler

The most important cyber threat intelligence knowledgebases.

Discuss this post

Head on over to the dogesec community to discuss this post.

dogesec community

Open-Source Projects

All dogesec commercial products are built in-part from code-bases we have made available under permissive licenses.

dogesec Github

Posted by:

David Greenwood

David Greenwood, Do Only Good Everyday



Never miss an update


Sign up to receive new articles in your inbox as they published.

Your subscription could not be saved. Please try again.
Your subscription has been successful.