If you are reading this blog post via a 3rd party source it is very likely that many parts of it will not render correctly (usually, the interactive graphs). Please view the post on dogesec.com for the full interactive viewing experience.

tl;dr

Software, Data Sources, Data Components, Campaigns, and more, make MITRE ATT&CK even more powerful than you might first realise. In this post I uncover the parts of ATT&CK you might not be aware of.

ATT&CK STIX objects

The ATT&CK data is built on STIX objects and structured like so;

Lets break this down by looking at each ATT&CK object type individually to show how I built this diagram;

Follow along

In this post I am going to provide queries you can use to analyse and filter MITRE ATT&CK data.

If you would like to follow along, and keep a searchable copy of ATT&CK locally, you can import the data using stix2arango.

Once you’ve installed stix2arango, you can run the following command to import v15.1 of the MITRE ATT&CK Enterprise, ICS, and Mobile data;

python3 utilities/arango_cti_processor/insert_archive_attack_enterprise.py \
    --database blog_mitre_attack_data_structure \
    --versions 15_1 && \
python3 utilities/arango_cti_processor/insert_archive_attack_ics.py \
    --database blog_mitre_attack_data_structure \
    --versions 15_1 && \
python3 utilities/arango_cti_processor/insert_archive_attack_mobile.py \
    --database blog_mitre_attack_data_structure \
    --versions 15_1

You can then use the query interface in the ArangoDB UI to run the AQL queries in this post.

Understanding the STIX objects

Properties: revoked and x_mitre_deprecated

When I started in this analysis these properties left me confused for a while (I should have read this!), so I’ll start here as you’ll see all my queries use the filter;

  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true

Lets start with x_mitre_deprecated.

Later in this post I will talk about how STIX course-of-action objects represent ATT&CK Mitigations.

This was not always the case. course-of-action once represented techniques. These still exist in the latest bundles, as the following search uncovers, however, note the x_mitre_deprecated property = true for all these objects.

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "course-of-action"
  AND doc.external_references != null 
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "T")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Which returns results including the following objects;

    {
      "created": "2018-10-17T00:14:20.652Z",
      "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
      "description": "Ensure only valid password filters are registered. Filter DLLs must be present in Windows installation directory (<code>C:\\Windows\\System32\\</code> by default) of a domain controller and/or local computer with a corresponding entry in <code>HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Lsa\\Notification Packages</code>. (Citation: Microsoft Install Password Filter n.d)",
      "external_references": [
        {
          "source_name": "mitre-attack",
          "url": "https://attack.mitre.org/mitigations/T1174",
          "external_id": "T1174"
        },
        {
          "url": "https://msdn.microsoft.com/library/windows/desktop/ms721766.aspx",
          "description": "Microsoft. (n.d.). Installing and Registering a Password Filter DLL. Retrieved November 21, 2017.",
          "source_name": "Microsoft Install Password Filter n.d"
        }
      ],
      "id": "course-of-action--00d7d21b-69d6-4797-88a2-c86f3fc97651",
      "modified": "2019-07-25T11:22:19.139Z",
      "name": "Password Filter DLL Mitigation",
      "object_marking_refs": [
        "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
      ],
      "spec_version": "2.1",
      "type": "course-of-action",
      "x_mitre_attack_spec_version": "2.1.0",
      "x_mitre_deprecated": true,
      "x_mitre_domains": [
        "enterprise-attack"
      ],
      "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
      "x_mitre_version": "1.0"
    }

If the x_mitre_deprecated property is found is an object, it will always be true

Searching for any relationships for this x_mitre_deprecated object;

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER doc._is_latest == true
  AND (doc.source_ref == "course-of-action--00d7d21b-69d6-4797-88a2-c86f3fc97651" 
  OR doc.target_ref == "course-of-action--00d7d21b-69d6-4797-88a2-c86f3fc97651")
  SORT doc.relationship_type
  RETURN {
    id: doc.id,
    type: doc.relationship_type,
    source: doc.source_ref,
    target: doc.target_ref
  }
[
  {
    "id": "relationship--af088283-7416-466d-86f3-8b55e6d698d4",
    "type": "mitigates",
    "source": "course-of-action--00d7d21b-69d6-4797-88a2-c86f3fc97651",
    "target": "attack-pattern--b8c5c9dd-a662-479d-9428-ae745872537c"
  }
]

This relationship search is not important yet, it’ll become clearer in a minute.

As I understand it, the custom x_mitre_deprecated property is used for objects that should no longer exist as an entity.

Now lets consider the revoked property.

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "attack-pattern"
  AND doc.revoked == true
  AND doc.external_references != null 
  AND IS_ARRAY(doc.external_references)
  
  // Filter for external references where external_id starts with "T"
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "T")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
    {
      "created": "2017-05-31T21:30:54.176Z",
      "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
      "description": "If a malicious tool is detected and quarantined or otherwise curtailed, an adversary may be able to determine why the malicious tool was detected (the indicator), modify the tool by removing the indicator, and use the updated version that is no longer detected by the target's defensive systems or subsequent targets that may use similar systems.\n\nA good example of this is when malware is detected with a file signature and quarantined by anti-virus software. An adversary who can determine that the malware was quarantined because of its file signature may use [Software Packing](https://attack.mitre.org/techniques/T1045) or otherwise modify the file so it has a different signature, and then re-use the malware.",
      "external_references": [
        {
          "source_name": "mitre-attack",
          "url": "https://attack.mitre.org/techniques/T1066",
          "external_id": "T1066"
        }
      ],
      "id": "attack-pattern--00d0b012-8a03-410e-95de-5826bf542de6",
      "kill_chain_phases": [
        {
          "kill_chain_name": "mitre-attack",
          "phase_name": "defense-evasion"
        }
      ],
      "modified": "2022-04-25T14:00:00.188Z",
      "name": "Indicator Removal from Tools",
      "object_marking_refs": [
        "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
      ],
      "revoked": true,
      "spec_version": "2.1",
      "type": "attack-pattern",
      "x_mitre_attack_spec_version": "2.1.0",
      "x_mitre_defense_bypassed": [
        "Log analysis",
        "Host intrusion prevention systems",
        "Anti-virus"
      ],
      "x_mitre_detection": "The first detection of a malicious tool may trigger an anti-virus or other security tool alert. Similar events may also occur at the boundary through network IDS, email scanning appliance, etc. The initial detection should be treated as an indication of a potentially more invasive intrusion. The alerting system should be thoroughly investigated beyond that initial alert for activity that was not detected. Adversaries may continue with an operation, assuming that individual events like an anti-virus detect will not be investigated or that an analyst will not be able to conclusively link that event to other activity occurring on the network.",
      "x_mitre_domains": [
        "enterprise-attack"
      ],
      "x_mitre_is_subtechnique": false,
      "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
      "x_mitre_platforms": [
        "Linux",
        "macOS",
        "Windows"
      ],
      "x_mitre_version": "1.0"
    }

Note the revoked property exists but not x_mitre_deprecated. If the revoked property exists it will always be true.

Searching for any relationships for this revoked object;

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER doc._is_latest == true
  AND (doc.source_ref == "attack-pattern--00d0b012-8a03-410e-95de-5826bf542de6" 
  OR doc.target_ref == "attack-pattern--00d0b012-8a03-410e-95de-5826bf542de6")
  SORT doc.relationship_type
  RETURN {
    id: doc.id,
    type: doc.relationship_type,
    source: doc.source_ref,
    target: doc.target_ref
  }
[
  {
    "id": "relationship--5978c8e0-8b60-4ad5-8fc9-9fa1ee4d7387",
    "type": "mitigates",
    "source": "course-of-action--4b998a71-7b8f-4dcc-8f3f-277f2e740271",
    "target": "attack-pattern--00d0b012-8a03-410e-95de-5826bf542de6"
  },
  {
    "id": "relationship--cb4015bf-e7a4-4b26-8816-1f7a996adf4f",
    "type": "revoked-by",
    "source": "attack-pattern--00d0b012-8a03-410e-95de-5826bf542de6",
    "target": "attack-pattern--b0533c6e-8fea-4788-874f-b799cacc4b92"
  }
]

Here you can see a revoked-by relationship to attack-pattern--b0533c6e-8fea-4788-874f-b799cacc4b92 which is T1027.005. You can see this in the logic of the ATT&CK site hitting the URL for T1066 (attack-pattern--00d0b012-8a03-410e-95de-5826bf542de6) it redirects to T1027.005 (try it: ` https://attack.mitre.org/techniques/T1066`).

So what’s the difference between revoked and x_mitre_deprecated? I’m not entierly sure. My guess is that x_mitre_deprecated has no direct replacement, unlike revoked objects that do, as evidenced by the relationship search.

For most use-case when working with ATT&CK, it’s best to filter objects with these properties out (which I do in this post). The one exception I can think of is migrating between updates. If you’re using objects revoked in an updated, you should replace it with the object it was revoked-by.

ATT&CK object Collection = STIX object x-mitre-collection

Found in:

  • Enterprise
  • ICS
  • Mobile

These objects include a list of all objects in the domain under the x_mitre_contents property.

To search for this object in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "x-mitre-collection"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Note: You can replace mitre_attack_enterprise_vertex_collection with either mitre_attack_mobile_vertex_collection or mitre_attack_ics_vertex_collection to change the ATT&CK matrix. This applies for all of the following searches too.

        {
            "type": "x-mitre-collection",
            "id": "x-mitre-collection--1f5f1533-f617-4ca8-9ab4-6a02367fa019",
            "spec_version": "2.1",
            "x_mitre_attack_spec_version": "2.1.0",
            "name": "Enterprise ATT&CK",
            "x_mitre_version": "15.1",
            "description": "ATT&CK for Enterprise provides a knowledge base of real-world adversary behavior targeting traditional enterprise networks. ATT&CK for Enterprise covers the following platforms: Windows, macOS, Linux, PRE, Office 365, Google Workspace, IaaS, Network, and Containers.",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "created": "2018-01-17T12:56:55.080Z",
            "modified": "2024-05-02T14:00:00.188Z",
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "x_mitre_contents": [
                {
                    "object_ref": "attack-pattern--0042a9f5-f053-4769-b3ef-9ad018dfa298",
                    "object_modified": "2022-04-25T14:00:00.188Z"
                },
                {
                    "OTHER ITEMS IN LIST CUT FOR BREVITY"
                }
            ],
            "x_mitre_version": "15.1"
        }
    ]
]

Returns 1 Object in v15.1.

The x_mitre_contents for Enterprise ATT&CK has 1000’s of objects that I’ve cut from the object printed above (OTHER ITEMS IN LIST CUT FOR BREVITY).

To see what x-mitre-collection objects are linked to/from;

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER CONTAINS(doc.source_ref, "x-mitre-collection") 
  OR CONTAINS(doc.target_ref, "x-mitre-collection")
  AND doc._stix2arango_note == "v15.1"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
created-by x-mitre-collection identity true
object-marking x-mitre-collection marking-definition true
x_mitre_contents-object x-mitre-collection attack-pattern true
x_mitre_contents-object x-mitre-collection campaign true
x_mitre_contents-object x-mitre-collection course-of-action true
x_mitre_contents-object x-mitre-collection identity true
x_mitre_contents-object x-mitre-collection intrusion-set true
x_mitre_contents-object x-mitre-collection malware true
x_mitre_contents-object x-mitre-collection relationship true
x_mitre_contents-object x-mitre-collection tool true
x_mitre_contents-object x-mitre-collection x-mitre-data-component true
x_mitre_contents-object x-mitre-collection x-mitre-data-source true
x_mitre_contents-object x-mitre-collection x-mitre-matrix true
x_mitre_contents-object x-mitre-collection x-mitre-tactic true

ATT&CK object Matrix = STIX object x-mitre-matrix

Found in:

  • Enterprise
  • ICS
  • Mobile

The Matrix (x-mitre-matrix) object captures specific information about the Matrix for the Domain being covered either Enterprise, ICS, or Mobile.

The main purpose of this object is to group the Tactic objects (x-mitre-tactic) associated with the domain.

These are similar to x-mitre-collection objects (1 per domain), but only include x-mitre-matrix references.

To search for this object in the Enterprise domain;

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "x-mitre-matrix"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "tactic_refs": [
                "x-mitre-tactic--daa4cbb1-b4f4-4723-a824-7f1efd6e0592",
                "x-mitre-tactic--d679bca2-e57d-4935-8650-8031c87a4400",
                "x-mitre-tactic--ffd5bcee-6e16-4dd2-8eca-7b3beedf33ca",
                "x-mitre-tactic--4ca45d45-df4d-4613-8980-bac22d278fa5",
                "x-mitre-tactic--5bc1d813-693e-4823-9961-abf9af4b0e92",
                "x-mitre-tactic--5e29b093-294e-49e9-a803-dab3d73b77dd",
                "x-mitre-tactic--78b23412-0651-46d7-a540-170a1ce8bd5a",
                "x-mitre-tactic--2558fd61-8c75-4730-94c4-11926db2a263",
                "x-mitre-tactic--c17c5845-175e-4421-9713-829d0573dbc9",
                "x-mitre-tactic--7141578b-e50b-4dcc-bfa4-08a8dd689e9e",
                "x-mitre-tactic--d108ce10-2419-4cf9-a774-46161d6c6cfe",
                "x-mitre-tactic--f72804c5-f15a-449e-a5da-2eecd181f813",
                "x-mitre-tactic--9a4e74ab-5008-408c-84bf-a10dfbc53462",
                "x-mitre-tactic--5569339b-94c2-49ee-afb3-2222936582c8"
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "id": "x-mitre-matrix--eafc1b4c-5e56-4965-bd4e-66a6a89c88cc",
            "type": "x-mitre-matrix",
            "created": "2018-10-17T00:14:20.652Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "external_references": [
                {
                    "external_id": "enterprise-attack",
                    "source_name": "mitre-attack",
                    "url": "https://attack.mitre.org/matrices/enterprise"
                }
            ],
            "modified": "2022-04-01T20:43:55.937Z",
            "name": "Enterprise ATT&CK",
            "description": "Below are the tactics and technique representing the MITRE ATT&CK Matrix for Enterprise. The Matrix contains information for the following platforms: Windows, macOS, Linux, AWS, GCP, Azure, Azure AD, Office 365, SaaS.",
            "x_mitre_version": "1.0",
            "x_mitre_attack_spec_version": "2.1.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "spec_version": "2.1",
            "x_mitre_domains": [
                "enterprise-attack"
            ]
        }

Returns 1 Object in v15.1.

To see what relationships the x-mitre-matrix object has to/from it, you can run the search;

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER CONTAINS(doc.source_ref, "x-mitre-matrix") 
  OR CONTAINS(doc.target_ref, "x-mitre-matrix")
  AND doc._stix2arango_note == "v15.1"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
x_mitre_contents-object x-mitre-collection x-mitre-matrix true
tactic x-mitre-matrix x-mitre-tactic true
object-marking x-mitre-matrix marking-definition true
created-by x-mitre-matrix identity true
x-mitre-modified-by x-mitre-matrix identity true

ATT&CK object Tactic = STIX object x-mitre-tactic

Found in:

  • Enterprise
  • ICS
  • Mobile

Tactics (x-mitre-tactic--) represent the “why” of an ATT&CK technique or sub-technique. It is the adversary’s tactical goal: the reason for performing an action. For example, an adversary may want to achieve credential access.

Tactics have IDs in the format: TANNNN.

For example, Tactic TA0043 Reconnaissance, which can be retrieved from the database as follows;

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "x-mitre-tactic"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND extRef.external_id == "TA0006"
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "x_mitre_domains": [
                "enterprise-attack"
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "id": "x-mitre-tactic--2558fd61-8c75-4730-94c4-11926db2a263",
            "type": "x-mitre-tactic",
            "created": "2018-10-17T00:14:20.652Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "external_references": [
                {
                    "external_id": "TA0006",
                    "url": "https://attack.mitre.org/tactics/TA0006",
                    "source_name": "mitre-attack"
                }
            ],
            "modified": "2022-04-25T14:00:00.188Z",
            "name": "Credential Access",
            "description": "The adversary is trying to steal account names and passwords.\n\nCredential Access consists of techniques for stealing credentials like account names and passwords. Techniques used to get credentials include keylogging or credential dumping. Using legitimate credentials can give adversaries access to systems, make them harder to detect, and provide the opportunity to create more accounts to help achieve their goals.",
            "x_mitre_version": "1.0",
            "x_mitre_attack_spec_version": "2.1.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "x_mitre_shortname": "credential-access",
            "spec_version": "2.1"
        }

To search for all Tactic objects in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "x-mitre-tactic"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "TA")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 14 Objects in v15.1.

To see what x-mitre-tactic objects are linked to/from;

LET tactic_ids = (
    FOR doc IN mitre_attack_enterprise_vertex_collection
      FILTER doc._stix2arango_note != "automatically imported on collection creation"
      AND doc._stix2arango_note == "v15.1"
      AND doc.type == "x-mitre-tactic"
      AND doc.x_mitre_deprecated != true
      AND doc.revoked != true
      AND IS_ARRAY(doc.external_references)
      LET matching_extRefs = (
        FOR extRef IN doc.external_references
          FILTER extRef.source_name == "mitre-attack"
          AND STARTS_WITH(extRef.external_id, "TA")
          RETURN extRef
      )
      FILTER LENGTH(matching_extRefs) > 0
      LET keys = ATTRIBUTES(doc)
      LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
      RETURN doc.id
)

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER (CONTAINS(doc.source_ref, "x-mitre-tactic") OR CONTAINS(doc.target_ref, "x-mitre-tactic"))
  AND (doc.source_ref IN tactic_ids OR doc.target_ref IN tactic_ids)
  AND doc._stix2arango_note == "v15.1"
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
created-by x-mitre-tactic identity true
x-mitre-modified-by x-mitre-tactic identity true
object-marking x-mitre-tactic marking-definition true
x_mitre_contents-object x-mitre-collection x-mitre-tactic true
tactic x-mitre-matrix x-mitre-tactic true

If you want to find out what is linked to a specific Tactic, you can use the following search (here I use TA0006);

LET vertexDocs = (
  FOR doc IN mitre_attack_enterprise_vertex_collection
    FILTER doc._stix2arango_note == "v15.1"
    AND doc.type == "x-mitre-tactic"
    AND doc.x_mitre_deprecated != true
    AND doc.revoked != true
    AND IS_ARRAY(doc.external_references)
    LET matching_extRefs = (
      FOR extRef IN doc.external_references
        FILTER extRef.source_name == "mitre-attack"
        AND extRef.external_id == "TA0006"
        RETURN extRef
    )
    FILTER LENGTH(matching_extRefs) > 0
    LET keys = ATTRIBUTES(doc)
    LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
    RETURN KEEP(doc, filteredKeys)
)

FOR vertexDoc IN vertexDocs
  FOR edgeDoc IN mitre_attack_enterprise_edge_collection
    FILTER edgeDoc.target_ref == vertexDoc.id OR edgeDoc.source_ref == vertexDoc.id
    LET keys = ATTRIBUTES(edgeDoc)
    LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
    RETURN KEEP(edgeDoc, filteredKeys)

Returns 5 objects in v15.1.

ATT&CK object Technique = STIX object attack-pattern

Found in:

  • Enterprise
  • ICS
  • Mobile

Techniques (attack-pattern with Custom Property "x_mitre_is_subtechnique": false) represent ‘how’ an adversary achieves a tactical goal by performing an action. For example, an adversary may dump credentials to achieve credential access.

Techniques have IDs in the format: TNNNN.

For example, Technique T1595 Active Scanning, which can be retrieved from the database as follows;

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "attack-pattern"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND extRef.external_id == "T1595"
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "x_mitre_platforms": [
                "PRE"
            ],
            "x_mitre_domains": [
                "enterprise-attack"
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "id": "attack-pattern--67073dde-d720-45ae-83da-b12d5e73ca3b",
            "type": "attack-pattern",
            "created": "2020-10-02T16:53:16.526Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "external_references": [
                {
                    "source_name": "mitre-attack",
                    "external_id": "T1595",
                    "url": "https://attack.mitre.org/techniques/T1595"
                },
                {
                    "source_name": "Botnet Scan",
                    "url": "https://www.caida.org/publications/papers/2012/analysis_slash_zero/analysis_slash_zero.pdf",
                    "description": "Dainotti, A. et al. (2012). Analysis of a \u201c/0\u201d Stealth Scan from a Botnet. Retrieved October 20, 2020."
                },
                {
                    "source_name": "OWASP Fingerprinting",
                    "url": "https://wiki.owasp.org/index.php/OAT-004_Fingerprinting",
                    "description": "OWASP Wiki. (2018, February 16). OAT-004 Fingerprinting. Retrieved October 20, 2020."
                }
            ],
            "modified": "2022-05-11T14:00:00.188Z",
            "name": "Active Scanning",
            "description": "Adversaries may execute active reconnaissance scans to gather information that can be used during targeting. Active scans are those where the adversary probes victim infrastructure via network traffic, as opposed to other forms of reconnaissance that do not involve direct interaction.\n\nAdversaries may perform different forms of active scanning depending on what information they seek to gather. These scans can also be performed in various ways, including using native features of network protocols such as ICMP.(Citation: Botnet Scan)(Citation: OWASP Fingerprinting) Information from these scans may reveal opportunities for other forms of reconnaissance (ex: [Search Open Websites/Domains](https://attack.mitre.org/techniques/T1593) or [Search Open Technical Databases](https://attack.mitre.org/techniques/T1596)), establishing operational resources (ex: [Develop Capabilities](https://attack.mitre.org/techniques/T1587) or [Obtain Capabilities](https://attack.mitre.org/techniques/T1588)), and/or initial access (ex: [External Remote Services](https://attack.mitre.org/techniques/T1133) or [Exploit Public-Facing Application](https://attack.mitre.org/techniques/T1190)).",
            "kill_chain_phases": [
                {
                    "kill_chain_name": "mitre-attack",
                    "phase_name": "reconnaissance"
                }
            ],
            "x_mitre_detection": "Monitor for suspicious network traffic that could be indicative of scanning, such as large quantities originating from a single source (especially if the source is known to be associated with an adversary/botnet). Analyzing web metadata may also reveal artifacts that can be attributed to potentially malicious activity, such as referer or user-agent string HTTP/S fields.\n\nMuch of this activity may have a very high occurrence and associated false positive rate, as well as potentially taking place outside the visibility of the target organization, making detection difficult for defenders.\n\nDetection efforts may be focused on related stages of the adversary lifecycle, such as during Initial Access.",
            "x_mitre_version": "1.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "x_mitre_data_sources": [
                "Network Traffic: Network Traffic Flow",
                "Network Traffic: Network Traffic Content"
            ],
            "x_mitre_is_subtechnique": false,
            "spec_version": "2.1",
            "x_mitre_attack_spec_version": "2.1.0"
        }

Note, how x_mitre_is_subtechnique = false (indicating this is not a sub-technique, which are also represented using attack-pattern objects).

To search for all Technique objects in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "attack-pattern"
  AND doc.x_mitre_is_subtechnique == false
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "T")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 202 Objects in v15.1.

To see what Techniques objects are linked to/from ATT&CK…

LET attack_pattern_ids = (
  FOR doc IN mitre_attack_enterprise_vertex_collection
    FILTER doc._stix2arango_note != "automatically imported on collection creation"
    AND doc._stix2arango_note == "v15.1"
    AND doc.type == "attack-pattern"
    AND doc.x_mitre_is_subtechnique == false
    AND doc.x_mitre_deprecated != true
    AND doc.revoked != true
    AND IS_ARRAY(doc.external_references)
      LET matching_extRefs = (
        FOR extRef IN doc.external_references
          FILTER extRef.source_name == "mitre-attack"
          AND STARTS_WITH(extRef.external_id, "T")
          RETURN extRef
      )
      FILTER LENGTH(matching_extRefs) > 0
      LET keys = ATTRIBUTES(doc)
      LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
      RETURN doc.id
)

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER (CONTAINS(doc.source_ref, "attack-pattern") OR CONTAINS(doc.target_ref, "attack-pattern"))
  AND (doc.source_ref IN attack_pattern_ids OR doc.target_ref IN attack_pattern_ids)
  AND doc._stix2arango_note == "v15.1"
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
created-by attack-pattern identity true
x-mitre-modified-by attack-pattern identity true
object-marking attack-pattern marking-definition true
uses campaign attack-pattern false
mitigates course-of-action attack-pattern false
uses intrusion-set attack-pattern false
uses malware attack-pattern false
uses tool attack-pattern false
x_mitre_contents-object x-mitre-collection attack-pattern true
detects x-mitre-data-component attack-pattern false
subtechnique-of attack-pattern attack-pattern false
revoked-by attack-pattern attack-pattern false

If you want to find out what is linked to a specific Technique, you can use the following search (here I use T1595);

LET vertexDocs = (
  FOR doc IN mitre_attack_enterprise_vertex_collection
    FILTER doc._stix2arango_note == "v15.1"
    AND doc.type == "attack-pattern"
    AND doc.x_mitre_is_subtechnique == false
    AND doc.x_mitre_deprecated != true
    AND doc.revoked != true
    AND IS_ARRAY(doc.external_references)
    LET matching_extRefs = (
      FOR extRef IN doc.external_references
        FILTER extRef.source_name == "mitre-attack"
        AND extRef.external_id == "T1595"
        RETURN extRef
    )
    FILTER LENGTH(matching_extRefs) > 0
    LET keys = ATTRIBUTES(doc)
    LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
    RETURN KEEP(doc, filteredKeys)
)

FOR vertexDoc IN vertexDocs
  FOR edgeDoc IN mitre_attack_enterprise_edge_collection
    FILTER edgeDoc.target_ref == vertexDoc.id OR edgeDoc.source_ref == vertexDoc.id
    LET keys = ATTRIBUTES(edgeDoc)
    LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
    RETURN KEEP(edgeDoc, filteredKeys)

Returns 11 objects in v15.1.

ATT&CK object Sub-Technique = STIX object attack-pattern

Found in:

  • Enterprise
  • Mobile

Sub-Techniques (attack-pattern with Custom Property "x_mitre_is_subtechnique": true) are a more specific implementation of a Technique (they are children to a parent).

For example, T1595.001 Scanning IP Blocks is a Sub-Technique of Technique T1595 Active Scanning.

Sub-techniques have IDs in the format: TNNNN.NNN.

For example, Sub-Technique T1595.001 Scanning IP Blocks can be retrieved from the database as follows;

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "attack-pattern"
  AND doc.x_mitre_is_subtechnique == true
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND extRef.external_id == "T1595.001"
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "x_mitre_platforms": [
                "PRE"
            ],
            "x_mitre_domains": [
                "enterprise-attack"
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "id": "attack-pattern--db8f5003-3b20-48f0-9b76-123e44208120",
            "type": "attack-pattern",
            "created": "2020-10-02T16:54:23.193Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "external_references": [
                {
                    "source_name": "mitre-attack",
                    "external_id": "T1595.001",
                    "url": "https://attack.mitre.org/techniques/T1595/001"
                },
                {
                    "source_name": "Botnet Scan",
                    "url": "https://www.caida.org/publications/papers/2012/analysis_slash_zero/analysis_slash_zero.pdf",
                    "description": "Dainotti, A. et al. (2012). Analysis of a \u201c/0\u201d Stealth Scan from a Botnet. Retrieved October 20, 2020."
                }
            ],
            "modified": "2022-04-25T14:00:00.188Z",
            "name": "Scanning IP Blocks",
            "description": "Adversaries may scan victim IP blocks to gather information that can be used during targeting. Public IP addresses may be allocated to organizations by block, or a range of sequential addresses.\n\nAdversaries may scan IP blocks in order to [Gather Victim Network Information](https://attack.mitre.org/techniques/T1590), such as which IP addresses are actively in use as well as more detailed information about hosts assigned these addresses. Scans may range from simple pings (ICMP requests and responses) to more nuanced scans that may reveal host software/versions via server banners or other network artifacts.(Citation: Botnet Scan) Information from these scans may reveal opportunities for other forms of reconnaissance (ex: [Search Open Websites/Domains](https://attack.mitre.org/techniques/T1593) or [Search Open Technical Databases](https://attack.mitre.org/techniques/T1596)), establishing operational resources (ex: [Develop Capabilities](https://attack.mitre.org/techniques/T1587) or [Obtain Capabilities](https://attack.mitre.org/techniques/T1588)), and/or initial access (ex: [External Remote Services](https://attack.mitre.org/techniques/T1133)).",
            "kill_chain_phases": [
                {
                    "kill_chain_name": "mitre-attack",
                    "phase_name": "reconnaissance"
                }
            ],
            "x_mitre_detection": "Monitor for suspicious network traffic that could be indicative of scanning, such as large quantities originating from a single source (especially if the source is known to be associated with an adversary/botnet).\n\nMuch of this activity may have a very high occurrence and associated false positive rate, as well as potentially taking place outside the visibility of the target organization, making detection difficult for defenders.\n\nDetection efforts may be focused on related stages of the adversary lifecycle, such as during Initial Access.",
            "x_mitre_is_subtechnique": true,
            "x_mitre_version": "1.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "x_mitre_data_sources": [
                "Network Traffic: Network Traffic Flow"
            ],
            "spec_version": "2.1",
            "x_mitre_attack_spec_version": "2.1.0"
        }

This time note how x_mitre_is_subtechnique = true. This is how Techniques and Sub-Techniques can be differentiated.

To search for all sub-technique objects in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "attack-pattern"
  AND doc.x_mitre_is_subtechnique == true
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "T")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 435 Objects in v15.1.

To see what sub-techniques have relationships to/from;

LET attack_pattern_ids = (
  FOR doc IN mitre_attack_enterprise_vertex_collection
    FILTER doc._stix2arango_note != "automatically imported on collection creation"
    AND doc._stix2arango_note == "v15.1"
    AND doc.type == "attack-pattern"
    AND doc.x_mitre_is_subtechnique == true
    AND doc.x_mitre_deprecated != true
    AND doc.revoked != true
    AND IS_ARRAY(doc.external_references)
      LET matching_extRefs = (
        FOR extRef IN doc.external_references
          FILTER extRef.source_name == "mitre-attack"
          AND STARTS_WITH(extRef.external_id, "T")
          RETURN extRef
      )
      FILTER LENGTH(matching_extRefs) > 0
      LET keys = ATTRIBUTES(doc)
      LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
      RETURN doc.id
)

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER (CONTAINS(doc.source_ref, "attack-pattern") OR CONTAINS(doc.target_ref, "attack-pattern"))
  AND (doc.source_ref IN attack_pattern_ids OR doc.target_ref IN attack_pattern_ids)
  AND doc._stix2arango_note == "v15.1"
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
subtechnique-of attack-pattern attack-pattern false
created-by attack-pattern identity true
x-mitre-modified-by attack-pattern identity true
object-marking attack-pattern marking-definition true
revoked-by attack-pattern attack-pattern false
mitigates course-of-action attack-pattern false
uses malware attack-pattern false
x_mitre_contents-object x-mitre-collection attack-pattern true
detects x-mitre-data-component attack-pattern false
uses campaign attack-pattern false
uses intrusion-set attack-pattern false
uses tool attack-pattern false

If you want to find out what is linked to a specific Sub-Technique, you can use the following search (here I use T1595.001);

LET vertexDocs = (
  FOR doc IN mitre_attack_enterprise_vertex_collection
    FILTER doc._stix2arango_note == "v15.1"
    AND doc.type == "attack-pattern"
    AND doc.x_mitre_is_subtechnique == true
    AND doc.x_mitre_deprecated != true
    AND doc.revoked != true
    AND IS_ARRAY(doc.external_references)
    LET matching_extRefs = (
      FOR extRef IN doc.external_references
        FILTER extRef.source_name == "mitre-attack"
        AND extRef.external_id == "T1595.001"
        RETURN extRef
    )
    FILTER LENGTH(matching_extRefs) > 0
    LET keys = ATTRIBUTES(doc)
    LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
    RETURN KEEP(doc, filteredKeys)
)

FOR vertexDoc IN vertexDocs
  FOR edgeDoc IN mitre_attack_enterprise_edge_collection
    FILTER edgeDoc.target_ref == vertexDoc.id OR edgeDoc.source_ref == vertexDoc.id
    LET keys = ATTRIBUTES(edgeDoc)
    LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
    RETURN KEEP(edgeDoc, filteredKeys)

Returns 8 objects in v15.1.

ATT&CK object Mitigation = STIX object course-of-action

Found in:

  • Enterprise
  • ICS
  • Mobile

Mitigations represent security concepts and classes of technologies that can be used to prevent a technique or sub-technique from being successfully executed.

Mitigations have IDs in the format: MNNNN.

For example, Mitigation M1049 - Antivirus/Antimalware which can be retrieved from the database as follows:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "course-of-action"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND extRef.external_id == "M1049"
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "x_mitre_domains": [
                "enterprise-attack"
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "id": "course-of-action--a6a47a06-08fc-4ec4-bdc3-20373375ebb9",
            "type": "course-of-action",
            "created": "2019-06-11T17:08:33.055Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "external_references": [
                {
                    "source_name": "mitre-attack",
                    "external_id": "M1049",
                    "url": "https://attack.mitre.org/mitigations/M1049"
                }
            ],
            "modified": "2020-03-31T13:07:15.684Z",
            "name": "Antivirus/Antimalware",
            "description": "Use signatures or heuristics to detect malicious software.",
            "x_mitre_version": "1.1",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "spec_version": "2.1",
            "x_mitre_attack_spec_version": "2.1.0"
        }

To search for all Mitigation objects in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "course-of-action"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND doc.external_references != null
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "M")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 43 Objects in v15.1.

To see what Mitigation objects are linked to/from;

LET coa_ids = (
    FOR doc IN mitre_attack_enterprise_vertex_collection
      FILTER doc._stix2arango_note != "automatically imported on collection creation"
      AND doc._stix2arango_note == "v15.1"
      AND doc.type == "course-of-action"
      AND doc.x_mitre_deprecated != true
      AND doc.revoked != true
      AND doc.external_references != null 
      AND IS_ARRAY(doc.external_references)
      // Filter for external references where external_id starts with "M"
      LET matching_extRefs = (
        FOR extRef IN doc.external_references
          FILTER extRef.source_name == "mitre-attack"
          AND STARTS_WITH(extRef.external_id, "M")
          RETURN extRef
      )
      FILTER LENGTH(matching_extRefs) > 0
      LET keys = ATTRIBUTES(doc)
      LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
      RETURN doc.id
)

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER (CONTAINS(doc.source_ref, "course-of-action") OR CONTAINS(doc.target_ref, "course-of-action"))
  AND (doc.source_ref IN coa_ids OR doc.target_ref IN coa_ids)
  AND doc._stix2arango_note == "v15.1"
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
mitigates course-of-action attack-pattern false
created-by course-of-action identity true
x-mitre-modified-by course-of-action identity true
object-marking course-of-action marking-definition true
x_mitre_contents-object x-mitre-collection course-of-action true

ATT&CK object Groups = STIX object intrusion-set

Found in:

  • Enterprise
  • ICS
  • Mobile

Groups are sets of related intrusion activity that are tracked by a common name in the security community.

Groups have IDs in the format: GNNNN.

For example, Group G0016 - APT29 which can be retrieved from the DB as follows;

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "intrusion-set"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND extRef.external_id == "G0016"
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "modified": "2024-04-12T21:15:41.833Z",
            "name": "APT29",
            "description": "[APT29](https://attack.mitre.org/groups/G0016) is threat group that has been attributed to Russia's Foreign Intelligence Service (SVR).(Citation: White House Imposing Costs RU Gov April 2021)(Citation: UK Gov Malign RIS Activity April 2021) They have operated since at least 2008, often targeting government networks in Europe and NATO member countries, research institutes, and think tanks. [APT29](https://attack.mitre.org/groups/G0016) reportedly compromised the Democratic National Committee starting in the summer of 2015.(Citation: F-Secure The Dukes)(Citation: GRIZZLY STEPPE JAR)(Citation: Crowdstrike DNC June 2016)(Citation: UK Gov UK Exposes Russia SolarWinds April 2021)\n\nIn April 2021, the US and UK governments attributed the [SolarWinds Compromise](https://attack.mitre.org/campaigns/C0024) to the SVR; public statements included citations to [APT29](https://attack.mitre.org/groups/G0016), Cozy Bear, and The Dukes.(Citation: NSA Joint Advisory SVR SolarWinds April 2021)(Citation: UK NSCS Russia SolarWinds April 2021) Industry reporting also referred to the actors involved in this campaign as UNC2452, NOBELIUM, StellarParticle, Dark Halo, and SolarStorm.(Citation: FireEye SUNBURST Backdoor December 2020)(Citation: MSTIC NOBELIUM Mar 2021)(Citation: CrowdStrike SUNSPOT Implant January 2021)(Citation: Volexity SolarWinds)(Citation: Cybersecurity Advisory SVR TTP May 2021)(Citation: Unit 42 SolarStorm December 2020)",
            "aliases": [
                "APT29",
                "IRON RITUAL",
                "IRON HEMLOCK",
                "NobleBaron",
                "Dark Halo",
                "StellarParticle",
                "NOBELIUM",
                "UNC2452",
                "YTTRIUM",
                "The Dukes",
                "Cozy Bear",
                "CozyDuke",
                "SolarStorm",
                "Blue Kitsune",
                "UNC3524",
                "Midnight Blizzard"
            ],
            "x_mitre_deprecated": false,
            "x_mitre_version": "6.0",
            "x_mitre_contributors": [
                "Daniyal Naeem, BT Security",
                "Matt Brenton, Zurich Insurance Group",
                "Katie Nickels, Red Canary",
                "Joe Gumke, U.S. Bank",
                "Liran Ravich, CardinalOps"
            ],
            "type": "intrusion-set",
            "id": "intrusion-set--899ce53f-13a0-479b-a0e4-67d46e241542",
            "created": "2017-05-31T21:31:52.748Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "revoked": false,
            "external_references": [
                {
                    "source_name": "mitre-attack",
                    "url": "https://attack.mitre.org/groups/G0016",
                    "external_id": "G0016"
                }
                ...
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "x_mitre_domains": [
                "enterprise-attack"
            ],
            "x_mitre_attack_spec_version": "3.2.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "spec_version": "2.1"
        }

Note, the full list of external_references has been cut from the object above for brevity.

To search for all Groups in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "intrusion-set"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "G")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 149 Objects in v15.1.

To see what Groups objects are linked to/from;

LET intrusion_set_ids = (
    FOR doc IN mitre_attack_enterprise_vertex_collection
      FILTER doc._stix2arango_note != "automatically imported on collection creation"
      AND doc._stix2arango_note == "v15.1"
      AND doc.type == "intrusion-set"
      AND doc.x_mitre_deprecated != true
      AND doc.revoked != true
      AND IS_ARRAY(doc.external_references)
      LET matching_extRefs = (
        FOR extRef IN doc.external_references
          FILTER extRef.source_name == "mitre-attack"
          AND STARTS_WITH(extRef.external_id, "G")
          RETURN extRef
      )
      FILTER LENGTH(matching_extRefs) > 0
      LET keys = ATTRIBUTES(doc)
      LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
      RETURN doc.id
)

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER (CONTAINS(doc.source_ref, "intrusion-set") OR CONTAINS(doc.target_ref, "intrusion-set"))
  AND (doc.source_ref IN intrusion_set_ids OR doc.target_ref IN intrusion_set_ids)
  AND doc._stix2arango_note == "v15.1"
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
uses intrusion-set attack-pattern false
created-by intrusion-set identity true
x-mitre-modified-by intrusion-set identity true
uses intrusion-set malware false
object-marking intrusion-set marking-definition true
uses intrusion-set tool false
x_mitre_contents-object x-mitre-collection intrusion-set true
revoked-by intrusion-set intrusion-set false
attributed-to campaign intrusion-set false

ATT&CK object Software = STIX object malware

Found in:

  • Enterprise
  • ICS
  • Mobile

Software is a generic term for custom or commercial code, operating system utilities, open-source software, or other tools used to conduct behavior modeled in ATT&CK.

Software represented in ATT&CK using malware, is Software built to perform malicious intentions (versus software which has benign intentions, but used maliciously).

Software (Malware) has IDs in the format: SNNNN.

For example, Software S0331 - Agent Tesla,

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "malware"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND extRef.external_id == "S0331"
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "modified": "2023-09-11T20:13:18.738Z",
            "name": "Agent Tesla",
            "description": "[Agent Tesla](https://attack.mitre.org/software/S0331) is a spyware Trojan written for the .NET framework that has been observed since at least 2014.(Citation: Fortinet Agent Tesla April 2018)(Citation: Bitdefender Agent Tesla April 2020)(Citation: Malwarebytes Agent Tesla April 2020)",
            "x_mitre_platforms": [
                "Windows"
            ],
            "x_mitre_deprecated": false,
            "x_mitre_domains": [
                "enterprise-attack"
            ],
            "x_mitre_version": "1.3",
            "x_mitre_aliases": [
                "Agent Tesla"
            ],
            "type": "malware",
            "id": "malware--e7a5229f-05eb-440e-b982-9a6d2b2b87c8",
            "created": "2019-01-29T18:44:04.748Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "revoked": false,
            "external_references": [
                {
                    "source_name": "mitre-attack",
                    "url": "https://attack.mitre.org/software/S0331",
                    "external_id": "S0331"
                },
                {
                    "source_name": "Agent Tesla",
                    "description": "(Citation: Fortinet Agent Tesla April 2018)(Citation: Talos Agent Tesla Oct 2018)(Citation: DigiTrust Agent Tesla Jan 2017)"
                },
                {
                    "source_name": "Bitdefender Agent Tesla April 2020",
                    "description": "Arsene, L. (2020, April 21). Oil & Gas Spearphishing Campaigns Drop Agent Tesla Spyware in Advance of Historic OPEC+ Deal. Retrieved May 19, 2020.",
                    "url": "https://labs.bitdefender.com/2020/04/oil-gas-spearphishing-campaigns-drop-agent-tesla-spyware-in-advance-of-historic-opec-deal/"
                },
                {
                    "source_name": "Talos Agent Tesla Oct 2018",
                    "description": "Brumaghin, E., et al. (2018, October 15). Old dog, new tricks - Analysing new RTF-based campaign distributing Agent Tesla, Loki with PyREbox. Retrieved November 5, 2018.",
                    "url": "https://blog.talosintelligence.com/2018/10/old-dog-new-tricks-analysing-new-rtf_15.html"
                },
                {
                    "source_name": "Malwarebytes Agent Tesla April 2020",
                    "description": "Jazi, H. (2020, April 16). New AgentTesla variant steals WiFi credentials. Retrieved May 19, 2020.",
                    "url": "https://blog.malwarebytes.com/threat-analysis/2020/04/new-agenttesla-variant-steals-wifi-credentials/"
                },
                {
                    "source_name": "DigiTrust Agent Tesla Jan 2017",
                    "description": "The DigiTrust Group. (2017, January 12). The Rise of Agent Tesla. Retrieved November 5, 2018.",
                    "url": "https://www.digitrustgroup.com/agent-tesla-keylogger/"
                },
                {
                    "source_name": "Fortinet Agent Tesla April 2018",
                    "description": "Zhang, X. (2018, April 05). Analysis of New Agent Tesla Spyware Variant. Retrieved November 5, 2018.",
                    "url": "https://www.fortinet.com/blog/threat-research/analysis-of-new-agent-tesla-spyware-variant.html"
                }
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "x_mitre_attack_spec_version": "3.1.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "spec_version": "2.1",
            "is_family": true
        }

To search for all Malware objects in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "malware"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "S")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 593 Objects in v15.1.

To see what Malware objects are linked to/from;

LET malware_ids = (
    FOR doc IN mitre_attack_enterprise_vertex_collection
      FILTER doc._stix2arango_note != "automatically imported on collection creation"
      AND doc._stix2arango_note == "v15.1"
      AND doc.type == "malware"
      AND doc.x_mitre_deprecated != true
      AND doc.revoked != true
      AND IS_ARRAY(doc.external_references)
      LET matching_extRefs = (
        FOR extRef IN doc.external_references
          FILTER extRef.source_name == "mitre-attack"
          AND STARTS_WITH(extRef.external_id, "S")
          RETURN extRef
      )
      FILTER LENGTH(matching_extRefs) > 0
      LET keys = ATTRIBUTES(doc)
      LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
      RETURN doc.id
)

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER (CONTAINS(doc.source_ref, "malware") OR CONTAINS(doc.target_ref, "malware"))
  AND (doc.source_ref IN malware_ids OR doc.target_ref IN malware_ids)
  AND doc._stix2arango_note == "v15.1"
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
uses malware attack-pattern false
created-by malware identity true
x-mitre-modified-by malware identity true
object-marking malware marking-definition true
uses intrusion-set malware false
x_mitre_contents-object x-mitre-collection malware true
uses campaign malware false
revoked-by malware malware false

ATT&CK object Software = STIX object tool

Found in:

  • Enterprise
  • Mobile

Software represented as tool STIX Objects represents software built for an original use that was not malicious;

Software (Tools) also have IDs in the format: SNNNN.

For example, Software S0104 - netstat,

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "tool"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND extRef.external_id == "S0104"
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "modified": "2024-01-23T19:57:39.135Z",
            "name": "netstat",
            "description": "[netstat](https://attack.mitre.org/software/S0104) is an operating system utility that displays active TCP connections, listening ports, and network statistics. (Citation: TechNet Netstat)",
            "x_mitre_deprecated": false,
            "x_mitre_domains": [
                "enterprise-attack"
            ],
            "x_mitre_version": "1.3",
            "x_mitre_aliases": [
                "netstat"
            ],
            "type": "tool",
            "id": "tool--4664b683-f578-434f-919b-1c1aad2a1111",
            "created": "2017-05-31T21:33:04.545Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "revoked": false,
            "external_references": [
                {
                    "source_name": "mitre-attack",
                    "url": "https://attack.mitre.org/software/S0104",
                    "external_id": "S0104"
                },
                {
                    "source_name": "TechNet Netstat",
                    "description": "Microsoft. (n.d.). Netstat. Retrieved April 17, 2016.",
                    "url": "https://technet.microsoft.com/en-us/library/bb490947.aspx"
                }
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "x_mitre_attack_spec_version": "3.2.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "spec_version": "2.1"
        }

To search all Tool objects in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "tool"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "S")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 85 Objects in v15.1.

To see what Tool objects are linked to/from;

LET tool_ids = (
    FOR doc IN mitre_attack_enterprise_vertex_collection
      FILTER doc._stix2arango_note != "automatically imported on collection creation"
      AND doc._stix2arango_note == "v15.1"
      AND doc.type == "tool"
      AND doc.x_mitre_deprecated != true
      AND doc.revoked != true
      AND IS_ARRAY(doc.external_references)
      LET matching_extRefs = (
        FOR extRef IN doc.external_references
          FILTER extRef.source_name == "mitre-attack"
          AND STARTS_WITH(extRef.external_id, "S")
          RETURN extRef
      )
      FILTER LENGTH(matching_extRefs) > 0
      LET keys = ATTRIBUTES(doc)
      LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
      RETURN doc.id
)

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER (CONTAINS(doc.source_ref, "tool") OR CONTAINS(doc.target_ref, "tool"))
  AND (doc.source_ref IN tool_ids OR doc.target_ref IN tool_ids)
  AND doc._stix2arango_note == "v15.1"
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
uses tool attack-pattern false
created-by tool identity true
x-mitre-modified-by tool identity true
object-marking tool marking-definition true
uses campaign tool false
uses intrusion-set tool false
x_mitre_contents-object x-mitre-collection tool true
revoked-by malware tool false

ATT&CK object Campaign = STIX object campaign

Found in:

  • Enterprise
  • ICS
  • Mobile

Campaigns represents activities to achieve an objective.

Campaigns have IDs in the format: CNNNN.

For example, Campaign C0022 - Operation Dream Job;

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "campaign"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND extRef.external_id == "C0022"
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "modified": "2024-04-11T00:31:21.576Z",
            "name": "Operation Dream Job",
            "description": "[Operation Dream Job](https://attack.mitre.org/campaigns/C0022) was a cyber espionage operation likely conducted by [Lazarus Group](https://attack.mitre.org/groups/G0032) that targeted the defense, aerospace, government, and other sectors in the United States, Israel, Australia, Russia, and India. In at least one case, the cyber actors tried to monetize their network access to conduct a business email compromise (BEC) operation. In 2020, security researchers noted overlapping TTPs, to include fake job lures and code similarities, between [Operation Dream Job](https://attack.mitre.org/campaigns/C0022), Operation North Star, and Operation Interception; by 2022 security researchers described [Operation Dream Job](https://attack.mitre.org/campaigns/C0022) as an umbrella term covering both Operation Interception and Operation North Star.(Citation: ClearSky Lazarus Aug 2020)(Citation: McAfee Lazarus Jul 2020)(Citation: ESET Lazarus Jun 2020)(Citation: The Hacker News Lazarus Aug 2022)",
            "aliases": [
                "Operation Dream Job",
                "Operation North Star",
                "Operation Interception"
            ],
            "first_seen": "2019-09-01T04:00:00.000Z",
            "last_seen": "2020-08-01T04:00:00.000Z",
            "x_mitre_first_seen_citation": "(Citation: ESET Lazarus Jun 2020)",
            "x_mitre_last_seen_citation": "(Citation: ClearSky Lazarus Aug 2020)",
            "x_mitre_deprecated": false,
            "x_mitre_version": "1.2",
            "type": "campaign",
            "id": "campaign--0257b35b-93ef-4a70-80dd-ad5258e6045b",
            "created": "2023-03-17T13:37:42.596Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "revoked": false,
            "external_references": [
                {
                    "source_name": "mitre-attack",
                    "url": "https://attack.mitre.org/campaigns/C0022",
                    "external_id": "C0022"
                },
                {
                    "source_name": "Operation Interception",
                    "description": "(Citation: ESET Lazarus Jun 2020)"
                },
                {
                    "source_name": "Operation North Star",
                    "description": "(Citation: McAfee Lazarus Jul 2020)(Citation: McAfee Lazarus Nov 2020)"
                },
                {
                    "source_name": "McAfee Lazarus Nov 2020",
                    "description": "Beek, C. (2020, November 5). Operation North Star: Behind The Scenes. Retrieved December 20, 2021.",
                    "url": "https://www.mcafee.com/blogs/other-blogs/mcafee-labs/operation-north-star-behind-the-scenes/"
                },
                {
                    "source_name": "ESET Lazarus Jun 2020",
                    "description": "Breitenbacher, D and Osis, K. (2020, June 17). OPERATION IN(TER)CEPTION: Targeted Attacks Against European Aerospace and Military Companies. Retrieved December 20, 2021.",
                    "url": "https://www.welivesecurity.com/wp-content/uploads/2020/06/ESET_Operation_Interception.pdf"
                },
                {
                    "source_name": "McAfee Lazarus Jul 2020",
                    "description": "Cashman, M. (2020, July 29). Operation North Star Campaign. Retrieved December 20, 2021.",
                    "url": "https://www.mcafee.com/blogs/other-blogs/mcafee-labs/operation-north-star-a-job-offer-thats-too-good-to-be-true/?hilite=%27Operation%27%2C%27North%27%2C%27Star%27"
                },
                {
                    "source_name": "ClearSky Lazarus Aug 2020",
                    "description": "ClearSky Research Team. (2020, August 13). Operation 'Dream Job' Widespread North Korean Espionage Campaign. Retrieved December 20, 2021.",
                    "url": "https://www.clearskysec.com/wp-content/uploads/2020/08/Dream-Job-Campaign.pdf"
                },
                {
                    "source_name": "The Hacker News Lazarus Aug 2022",
                    "description": "Lakshmanan, R. (2022, August 17). North Korea Hackers Spotted Targeting Job Seekers with macOS Malware. Retrieved April 10, 2023.",
                    "url": "https://thehackernews.com/2022/08/north-korea-hackers-spotted-targeting.html"
                }
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "x_mitre_attack_spec_version": "3.2.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "x_mitre_domains": [
                "enterprise-attack"
            ],
            "spec_version": "2.1"
        }

To search for all Campaign in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "campaign"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "C")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 28 Objects in v15.1.

To see what Campaign objects are linked to/from;

LET campaign_ids = (
    FOR doc IN mitre_attack_enterprise_vertex_collection
      FILTER doc._stix2arango_note != "automatically imported on collection creation"
      AND doc._stix2arango_note == "v15.1"
      AND doc.type == "campaign"
      AND doc.x_mitre_deprecated != true
      AND doc.revoked != true
      AND IS_ARRAY(doc.external_references)
      LET matching_extRefs = (
        FOR extRef IN doc.external_references
          FILTER extRef.source_name == "mitre-attack"
          AND STARTS_WITH(extRef.external_id, "C")
          RETURN extRef
      )
      FILTER LENGTH(matching_extRefs) > 0
      LET keys = ATTRIBUTES(doc)
      LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
      RETURN doc.id
)

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER (CONTAINS(doc.source_ref, "campaign") OR CONTAINS(doc.target_ref, "campaign"))
  AND (doc.source_ref IN campaign_ids OR doc.target_ref IN campaign_ids)
  AND doc._stix2arango_note == "v15.1"
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
uses campaign attack-pattern false
created-by campaign identity true
x-mitre-modified-by campaign identity true
attributed-to campaign intrusion-set false
uses campaign malware false
object-marking campaign marking-definition true
uses campaign tool false
x_mitre_contents-object x-mitre-collection campaign true

ATT&CK object Data Source = STIX object x-mitre-data-source

Found in:

  • Enterprise
  • ICS
  • Mobile

Data Sources represent the various subjects/topics of information that can be collected by sensors/logs.

Data Sources have IDs in the format: DSNNNN.

For example, Data Source DS0029 - Network Traffic;

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "x-mitre-data-source"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND extRef.external_id == "DS0029"
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "modified": "2023-04-20T18:38:13.356Z",
            "name": "Network Traffic",
            "description": "Data transmitted across a network (ex: Web, DNS, Mail, File, etc.), that is either summarized (ex: Netflow) and/or captured as raw data in an analyzable format (ex: PCAP)",
            "x_mitre_platforms": [
                "IaaS",
                "Linux",
                "Windows",
                "macOS",
                "Android",
                "iOS"
            ],
            "x_mitre_deprecated": false,
            "x_mitre_domains": [
                "enterprise-attack",
                "mobile-attack"
            ],
            "x_mitre_version": "1.1",
            "x_mitre_contributors": [
                "Center for Threat-Informed Defense (CTID)",
                "ExtraHop"
            ],
            "x_mitre_collection_layers": [
                "Cloud Control Plane",
                "Host",
                "Network"
            ],
            "type": "x-mitre-data-source",
            "id": "x-mitre-data-source--c000cd5c-bbb3-4606-af6f-6c6d9de0bbe3",
            "created": "2021-10-20T15:05:19.274Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "revoked": false,
            "external_references": [
                {
                    "source_name": "mitre-attack",
                    "url": "https://attack.mitre.org/datasources/DS0029",
                    "external_id": "DS0029"
                }
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "x_mitre_attack_spec_version": "3.1.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "spec_version": "2.1"
        }

To search for Data Source objects in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "x-mitre-data-source"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "DS")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 37 Objects in v15.1.

To see what Data Source objects are linked to/from;

LET data_source_ids = (
    FOR doc IN mitre_attack_enterprise_vertex_collection
      FILTER doc._stix2arango_note != "automatically imported on collection creation"
      AND doc._stix2arango_note == "v15.1"
      AND doc.type == "x-mitre-data-source"
      AND doc.x_mitre_deprecated != true
      AND doc.revoked != true
      AND IS_ARRAY(doc.external_references)
      LET matching_extRefs = (
        FOR extRef IN doc.external_references
          FILTER extRef.source_name == "mitre-attack"
          AND STARTS_WITH(extRef.external_id, "DS")
          RETURN extRef
      )
      FILTER LENGTH(matching_extRefs) > 0
      LET keys = ATTRIBUTES(doc)
      LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
      RETURN doc.id
)

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER (CONTAINS(doc.source_ref, "x-mitre-data-source") OR CONTAINS(doc.target_ref, "x-mitre-data-source"))
  AND (doc.source_ref IN data_source_ids OR doc.target_ref IN data_source_ids)
  AND doc._stix2arango_note == "v15.1"
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
created-by x-mitre-data-source identity true
x-mitre-modified-by x-mitre-data-source identity true
object-marking x-mitre-data-source marking-definition true
x_mitre_contents-object x-mitre-collection x-mitre-data-source true
x-mitre-data-source x-mitre-data-component x-mitre-data-source true

ATT&CK object Data Component = STIX object x-mitre-data-component

Found in:

  • Enterprise
  • ICS
  • Mobile

Data components are children of Data Sources.

Data Components identify specific properties/values of a data source relevant to detecting a given ATT&CK technique or sub-technique. For example, Network Traffic is the Data Source and Network Traffic Flow is one of the Data Components linked to it.

Data Components don’t have any ATT&CK specific ID’s, but they do have a link to a Data Source using the x_mitre_data_source_ref property.

        {
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "id": "x-mitre-data-component--a7f22107-02e5-4982-9067-6625d4a1765a",
            "type": "x-mitre-data-component",
            "created": "2021-10-20T15:05:19.274Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "modified": "2022-04-25T14:00:00.188Z",
            "name": "Network Traffic Flow",
            "description": "Summarized network packet data, with metrics, such as protocol headers and volume (ex: Netflow or Zeek http.log)",
            "x_mitre_data_source_ref": "x-mitre-data-source--c000cd5c-bbb3-4606-af6f-6c6d9de0bbe3",
            "x_mitre_version": "1.0",
            "x_mitre_attack_spec_version": "2.1.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "spec_version": "2.1",
            "x_mitre_domains": [
                "enterprise-attack"
            ]
        }

You can see the relationship to the Data Source in the x_mitre_data_source_ref property (in this case x-mitre-data-source--c000cd5c-bbb3-4606-af6f-6c6d9de0bbe3, DS0029 - Network Traffic).

To search for Data Component objects in the Enterprise domain:

FOR doc IN mitre_attack_enterprise_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "x-mitre-data-component"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 106 Objects in v15.1.

To see what x-mitre-data-component objects are linked to/from;

FOR doc IN mitre_attack_enterprise_edge_collection
  FILTER CONTAINS(doc.source_ref, "x-mitre-data-component") 
  OR CONTAINS(doc.target_ref, "x-mitre-data-component")
  AND doc._stix2arango_note == "v15.1"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
detects x-mitre-data-component attack-pattern false
x_mitre_contents-object x-mitre-collection x-mitre-data-component true
object-marking x-mitre-data-component marking-definition true
created-by x-mitre-data-component identity true
x-mitre-data-source x-mitre-data-component x-mitre-data-source true
x-mitre-modified-by x-mitre-data-component identity true

ATT&CK object Asset = STIX object x-mitre-asset

Found in:

  • ICS

Assets represent the devices and systems commonly found within Industrial Control System environments. Each asset object includes a mapping of technique relationships that represent the adversary actions that may target the device based on its capability and function.

Assets have IDs in the format: ANNNN.

For example, Asset A0011 - Virtual Private Network (VPN) Server:

FOR doc IN mitre_attack_ics_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "x-mitre-asset"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND extRef.external_id == "A0011"
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)
        {
            "modified": "2023-10-04T18:07:59.333Z",
            "name": "Virtual Private Network (VPN) Server",
            "description": "A VPN server is a device that is used to establish a secure network tunnel between itself and other remote VPN devices, including field VPNs. VPN servers can be used to establish a secure connection with a single remote device, or to securely bridge all traffic between two separate networks together by encapsulating all data between those networks. VPN servers typically support remote network services that are used by field VPNs to initiate the establishment of the secure VPN tunnel between the field device and server.",
            "x_mitre_sectors": [
                "General"
            ],
            "x_mitre_related_assets": [
                {
                    "name": "Virtual Private Network (VPN) terminator",
                    "related_asset_sectors": [
                        "General"
                    ],
                    "description": "A VPN terminator is a device performs the role of either a VPN client or server to support the establishment of VPN connection. (Citation: IEC February 2019)"
                },
                {
                    "name": "Field VPN",
                    "related_asset_sectors": [
                        "General"
                    ],
                    "description": "Field VPN are typically deployed at remote outstations and are used to create secure connections to VPN servers within data/control center environments.  "
                }
            ],
            "x_mitre_platforms": [
                "Windows",
                "Linux",
                "Embedded"
            ],
            "x_mitre_deprecated": false,
            "x_mitre_domains": [
                "ics-attack"
            ],
            "x_mitre_version": "1.0",
            "type": "x-mitre-asset",
            "id": "x-mitre-asset--0804f037-a3b9-4715-98e1-9f73d19d6945",
            "created": "2023-09-28T15:13:07.950Z",
            "created_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "revoked": false,
            "external_references": [
                {
                    "source_name": "mitre-attack",
                    "url": "https://attack.mitre.org/assets/A0011",
                    "external_id": "A0011"
                },
                {
                    "source_name": "IEC February 2019",
                    "description": "IEC 2019, February Security for industrial automation and control systems - Part 4-2: Technical security requirements for IACS components Retrieved. 2020/09/25 ",
                    "url": "https://webstore.iec.ch/publication/34421"
                }
            ],
            "object_marking_refs": [
                "marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168"
            ],
            "x_mitre_attack_spec_version": "3.2.0",
            "x_mitre_modified_by_ref": "identity--c78cb6e5-0c4b-4611-8297-d1b8b55e40b5",
            "spec_version": "2.1"
        }

To search for Asset objects in the ICS domain:

FOR doc IN mitre_attack_ics_vertex_collection
  FILTER doc._stix2arango_note == "v15.1"
  AND doc.type == "x-mitre-asset"
  AND doc.x_mitre_deprecated != true
  AND doc.revoked != true
  AND IS_ARRAY(doc.external_references)
  LET matching_extRefs = (
    FOR extRef IN doc.external_references
      FILTER extRef.source_name == "mitre-attack"
      AND STARTS_WITH(extRef.external_id, "A")
      RETURN extRef
  )
  FILTER LENGTH(matching_extRefs) > 0
  LET keys = ATTRIBUTES(doc)
  LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
  RETURN KEEP(doc, filteredKeys)

Returns 14 Objects in v15.1.

To see what Asset objects are linked to/from;

LET asset_ids = (
    FOR doc IN mitre_attack_ics_vertex_collection
      FILTER doc._stix2arango_note != "automatically imported on collection creation"
      AND doc._stix2arango_note == "v15.1"
      AND doc.type == "x-mitre-asset"
      AND doc.x_mitre_deprecated != true
      AND doc.revoked != true
      AND IS_ARRAY(doc.external_references)
      LET matching_extRefs = (
        FOR extRef IN doc.external_references
          FILTER extRef.source_name == "mitre-attack"
          AND STARTS_WITH(extRef.external_id, "A")
          RETURN extRef
      )
      FILTER LENGTH(matching_extRefs) > 0
      LET keys = ATTRIBUTES(doc)
      LET filteredKeys = keys[* FILTER !STARTS_WITH(CURRENT, "_")]
      RETURN doc.id
)

FOR doc IN mitre_attack_ics_edge_collection
  FILTER (CONTAINS(doc.source_ref, "x-mitre-asset") OR CONTAINS(doc.target_ref, "x-mitre-asset"))
  AND (doc.source_ref IN asset_ids OR doc.target_ref IN asset_ids)
  AND doc._stix2arango_note == "v15.1"
  LET source_ref_prefix = SPLIT(doc.source_ref, "--")[0]
  LET target_ref_prefix = SPLIT(doc.target_ref, "--")[0]
  RETURN DISTINCT {
    "relationship_type": doc.relationship_type,
    "source_ref_object_type": source_ref_prefix,
    "target_ref_object_type": target_ref_prefix,
    "is_property_ref": doc._is_ref
  }
relationship_type source_ref_object_type target_ref_object_type is_property_ref
created-by x-mitre-asset identity true
x-mitre-modified-by x-mitre-asset identity true
object-marking x-mitre-asset marking-definition true
targets attack-pattern x-mitre-asset false
x_mitre_contents-object x-mitre-collection x-mitre-asset true

CTI Butler

One API. Much CTI. CTI Butler is the API used by the world's leading cyber-security companies.

CTI Butler

Discuss this post

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

dogesec community

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.