[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71DZY4BJRH3W2A9620VKBME":3,"skill-same:01M71DZY4BJRH3W2A9620VKBME":93},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":66,"commitSha":67,"skillDirectory":68,"forksCount":14,"repositoryHtmlUrl":69,"repositoryHomepageUrl":6,"ownerHtmlUrl":70,"ownerBlogUrl":6,"ownerDescription":71,"updatedAt":72,"install":73,"resources":86},"01M71DZY4BJRH3W2A9620VKBME","mitre-apt-detect",null,"Analyze advanced persistent threat (APT) group techniques using MITRE ATT&CK Navigator to create layered heatmaps of adversary TTPs for detection gap analysis and threat-informed defense.","DCx7C5\u002Fai-marketplace","DCx7C5","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F42419559?v=4","01M71C01G2AZV3NTNGWAWSHJPP","DC","01M71C01GQW6G50S2BYMS7PP3E",0,"MIT","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fintel\u002Fmitre\u002Fapt\u002Fdetect\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"detect","mitre apt detect","apt","de","threat-intelligence","detection-gap","ttp-analysis","threat-actor","create","navigator","mitre-attack","analyze","conversion","analysis","Bash","cybersecurity","content analysis","TTP","cm","advanced","2026-11-10 10:12:30",false,"---\nname: mitre-apt-detect\ndescription: Analyze advanced persistent threat (APT) group techniques using MITRE ATT&CK Navigator to create layered heatmaps of adversary TTPs for detection gap analysis and threat-informed defense.\ndomain: cybersecurity\nsubdomain: threat-intelligence\ntags:\n- mitre-attack\n- navigator\n- apt\n- threat-actor\n- ttp-analysis\n- heatmap\n- detection-gap\n- threat-intelligence\nd3fend_techniques:\n- Executable Denylisting\n- Execution Isolation\n- File Metadata Consistency Validation\n- Content Format Conversion\n- File Content Analysis\nnist_csf:\n- ID.RA-01\n- ID.RA-05\n- DE.CM-01\n- DE.AE-02\nmodel: sonnet\nmaxTurns: 20\ntools: [Read, Bash, Glob, Grep]\nmitre_attack:\n- T1059\ncapec: []\n---\n\n# Analyzing APT Group with MITRE ATT&CK Navigator\n\n## Overview\n\nMITRE ATT&CK Navigator is a web-based tool for annotating and exploring ATT&CK matrices, enabling analysts to visualize threat actor technique coverage, compare multiple APT groups, identify detection gaps, and build threat-informed defense strategies. This skill covers querying ATT&CK data programmatically, mapping APT group TTPs to Navigator layers, creating multi-layer overlays for gap analysis, and generating actionable intelligence reports for detection engineering teams.\n\n\n## When to Use\n\n- When investigating security incidents that require analyzing apt group with mitre navigator\n- When building detection rules or threat hunting queries for this domain\n- When SOC analysts need structured procedures for this analysis type\n- When validating security monitoring coverage for related attack techniques\n\n## Prerequisites\n\n- Python 3.9+ with `attackcti`, `mitreattack-python`, `stix2`, `requests` libraries\n- ATT&CK Navigator (https:\u002F\u002Fmitre-attack.github.io\u002Fattack-navigator\u002F) or local deployment\n- Understanding of ATT&CK Enterprise matrix: 14 Tactics, 200+ Techniques, Sub-techniques\n- Access to threat intelligence reports or MISP\u002FOpenCTI for threat actor data\n- Familiarity with STIX 2.1 Intrusion Set and Attack Pattern objects\n\n## Key Concepts\n\n### ATT&CK Navigator Layers\n\nNavigator layers are JSON files that annotate ATT&CK techniques with scores, colors, comments, and metadata. Each layer can represent a single APT group's technique usage, a detection capability map, or a combined overlay. Layer version 4.5 supports enterprise-attack, mobile-attack, and ics-attack domains with filtering by platform (Windows, Linux, macOS, Cloud, Azure AD, Office 365, SaaS).\n\n### APT Group Profiles in ATT&CK\n\nATT&CK catalogs over 140 threat groups with documented technique usage. Each group profile includes aliases, targeted sectors, associated campaigns, software used, and technique mappings with procedure-level detail. Groups are identified by G-codes (e.g., G0016 for APT29, G0007 for APT28, G0032 for Lazarus Group).\n\n### Multi-Layer Analysis\n\nThe Navigator supports loading multiple layers simultaneously, allowing analysts to overlay threat actor TTPs against detection coverage to identify gaps, compare multiple APT groups to find common techniques worth prioritizing, and track technique coverage changes over time.\n\n## Workflow\n\n### Step 1: Query ATT&CK Data for APT Group\n\n```python\nfrom attackcti import attack_client\nimport json\n\nlift = attack_client()\n\n# Get all threat groups\ngroups = lift.get_groups()\nprint(f\"Total ATT&CK groups: {len(groups)}\")\n\n# Find APT29 (Cozy Bear \u002F Midnight Blizzard)\napt29 = next((g for g in groups if g.get('name') == 'APT29'), None)\nif apt29:\n    print(f\"Group: {apt29['name']}\")\n    print(f\"Aliases: {apt29.get('aliases', [])}\")\n    print(f\"Description: {apt29.get('description', '')[:300]}\")\n\n# Get techniques used by APT29 (G0016)\ntechniques = lift.get_techniques_used_by_group(\"G0016\")\nprint(f\"APT29 uses {len(techniques)} techniques\")\n\ntechnique_map = {}\nfor tech in techniques:\n    tech_id = \"\"\n    for ref in tech.get(\"external_references\", []):\n        if ref.get(\"source_name\") == \"mitre-attack\":\n            tech_id = ref.get(\"external_id\", \"\")\n            break\n    if tech_id:\n        tactics = [p.get(\"phase_name\", \"\") for p in tech.get(\"kill_chain_phases\", [])]\n        technique_map[tech_id] = {\n            \"name\": tech.get(\"name\", \"\"),\n            \"tactics\": tactics,\n            \"description\": tech.get(\"description\", \"\")[:500],\n            \"platforms\": tech.get(\"x_mitre_platforms\", []),\n            \"data_sources\": tech.get(\"x_mitre_data_sources\", []),\n        }\n```\n\n### Step 2: Generate Navigator Layer JSON\n\n```python\ndef create_navigator_layer(group_name, technique_map, color=\"#ff6666\"):\n    techniques_list = []\n    for tech_id, info in technique_map.items():\n        for tactic in info[\"tactics\"]:\n            techniques_list.append({\n                \"techniqueID\": tech_id,\n                \"tactic\": tactic,\n                \"color\": color,\n                \"comment\": info[\"name\"],\n                \"enabled\": True,\n                \"score\": 100,\n                \"metadata\": [\n                    {\"name\": \"group\", \"value\": group_name},\n                    {\"name\": \"platforms\", \"value\": \", \".join(info[\"platforms\"])},\n                ],\n            })\n\n    layer = {\n        \"name\": f\"{group_name} TTP Coverage\",\n        \"versions\": {\"attack\": \"16.1\", \"navigator\": \"5.1.0\", \"layer\": \"4.5\"},\n        \"domain\": \"enterprise-attack\",\n        \"description\": f\"Techniques attributed to {group_name}\",\n        \"filters\": {\n            \"platforms\": [\"Linux\", \"macOS\", \"Windows\", \"Cloud\",\n                          \"Azure AD\", \"Office 365\", \"SaaS\", \"Google Workspace\"]\n        },\n        \"sorting\": 0,\n        \"layout\": {\n            \"layout\": \"side\", \"aggregateFunction\": \"average\",\n            \"showID\": True, \"showName\": True,\n            \"showAggregateScores\": False, \"countUnscored\": False,\n        },\n        \"hideDisabled\": False,\n        \"techniques\": techniques_list,\n        \"gradient\": {\"colors\": [\"#ffffff\", color], \"minValue\": 0, \"maxValue\": 100},\n        \"legendItems\": [\n            {\"label\": f\"Used by {group_name}\", \"color\": color},\n            {\"label\": \"Not observed\", \"color\": \"#ffffff\"},\n        ],\n        \"showTacticRowBackground\": True,\n        \"tacticRowBackground\": \"#dddddd\",\n        \"selectTechniquesAcrossTactics\": True,\n        \"selectSubtechniquesWithParent\": False,\n        \"selectVisibleTechniques\": False,\n    }\n    return layer\n\nlayer = create_navigator_layer(\"APT29\", technique_map)\nwith open(\"apt29_layer.json\", \"w\") as f:\n    json.dump(layer, f, indent=2)\nprint(\"[+] Layer saved: apt29_layer.json\")\n```\n\n### Step 3: Compare Multiple APT Groups\n\n```python\ngroups_to_compare = {\"G0016\": \"APT29\", \"G0007\": \"APT28\", \"G0032\": \"Lazarus Group\"}\ngroup_techniques = {}\n\nfor gid, gname in groups_to_compare.items():\n    techs = lift.get_techniques_used_by_group(gid)\n    tech_ids = set()\n    for t in techs:\n        for ref in t.get(\"external_references\", []):\n            if ref.get(\"source_name\") == \"mitre-attack\":\n                tech_ids.add(ref.get(\"external_id\", \"\"))\n    group_techniques[gname] = tech_ids\n\ncommon_to_all = set.intersection(*group_techniques.values())\nprint(f\"Techniques common to all groups: {len(common_to_all)}\")\nfor tid in sorted(common_to_all):\n    print(f\"  {tid}\")\n\nfor gname, techs in group_techniques.items():\n    others = set.union(*[t for n, t in group_techniques.items() if n != gname])\n    unique = techs - others\n    print(f\"\\nUnique to {gname}: {len(unique)} techniques\")\n```\n\n### Step 4: Detection Gap Analysis with Layer Overlay\n\n```python\n# Define your current detection capabilities\ndetected_techniques = {\n    \"T1059\", \"T1059.001\", \"T1071\", \"T1071.001\", \"T1566\", \"T1566.001\",\n    \"T1547\", \"T1547.001\", \"T1053\", \"T1053.005\", \"T1078\", \"T1027\",\n}\n\nactor_techniques = set(technique_map.keys())\ncovered = actor_techniques.intersection(detected_techniques)\ngaps = actor_techniques - detected_techniques\n\nprint(f\"=== Detection Gap Analysis for APT29 ===\")\nprint(f\"Actor techniques: {len(actor_techniques)}\")\nprint(f\"Detected: {len(covered)} ({len(covered)\u002Flen(actor_techniques)*100:.0f}%)\")\nprint(f\"Gaps: {len(gaps)} ({len(gaps)\u002Flen(actor_techniques)*100:.0f}%)\")\n\n# Create gap layer (red = undetected, green = detected)\ngap_techniques = []\nfor tech_id in actor_techniques:\n    info = technique_map.get(tech_id, {})\n    for tactic in info.get(\"tactics\", [\"\"]):\n        color = \"#66ff66\" if tech_id in detected_techniques else \"#ff3333\"\n        gap_techniques.append({\n            \"techniqueID\": tech_id,\n            \"tactic\": tactic,\n            \"color\": color,\n            \"comment\": f\"{'DETECTED' if tech_id in detected_techniques else 'GAP'}: {info.get('name', '')}\",\n            \"enabled\": True,\n            \"score\": 100 if tech_id in detected_techniques else 0,\n        })\n\ngap_layer = {\n    \"name\": \"APT29 Detection Gap Analysis\",\n    \"versions\": {\"attack\": \"16.1\", \"navigator\": \"5.1.0\", \"layer\": \"4.5\"},\n    \"domain\": \"enterprise-attack\",\n    \"description\": \"Green = detected, Red = gap\",\n    \"techniques\": gap_techniques,\n    \"gradient\": {\"colors\": [\"#ff3333\", \"#66ff66\"], \"minValue\": 0, \"maxValue\": 100},\n    \"legendItems\": [\n        {\"label\": \"Detected\", \"color\": \"#66ff66\"},\n        {\"label\": \"Detection Gap\", \"color\": \"#ff3333\"},\n    ],\n}\nwith open(\"apt29_gap_layer.json\", \"w\") as f:\n    json.dump(gap_layer, f, indent=2)\n```\n\n### Step 5: Tactic Breakdown Analysis\n\n```python\nfrom collections import defaultdict\n\ntactic_breakdown = defaultdict(list)\nfor tech_id, info in technique_map.items():\n    for tactic in info[\"tactics\"]:\n        tactic_breakdown[tactic].append({\"id\": tech_id, \"name\": info[\"name\"]})\n\ntactic_order = [\n    \"reconnaissance\", \"resource-development\", \"initial-access\",\n    \"execution\", \"persistence\", \"privilege-escalation\",\n    \"defense-evasion\", \"credential-access\", \"discovery\",\n    \"lateral-movement\", \"collection\", \"command-and-control\",\n    \"exfiltration\", \"impact\",\n]\n\nprint(\"\\n=== APT29 Tactic Breakdown ===\")\nfor tactic in tactic_order:\n    techs = tactic_breakdown.get(tactic, [])\n    if techs:\n        print(f\"\\n{tactic.upper()} ({len(techs)} techniques):\")\n        for t in techs:\n            print(f\"  {t['id']}: {t['name']}\")\n```\n\n## Validation Criteria\n\n- ATT&CK data queried successfully via TAXII server\n- APT group mapped to all documented techniques with procedure examples\n- Navigator layer JSON validates and renders correctly in ATT&CK Navigator\n- Multi-layer overlay shows threat actor vs. detection coverage\n- Detection gap analysis identifies unmonitored techniques with data source recommendations\n- Cross-group comparison reveals shared and unique TTPs\n- Output is actionable for detection engineering prioritization\n\n## References\n\n- [MITRE ATT&CK Navigator](https:\u002F\u002Fmitre-attack.github.io\u002Fattack-navigator\u002F)\n- [ATT&CK Groups](https:\u002F\u002Fattack.mitre.org\u002Fgroups\u002F)\n- [attackcti Python Library](https:\u002F\u002Fgithub.com\u002FOTRF\u002FATTACK-Python-Client)\n- [Navigator Layer Format v4.5](https:\u002F\u002Fgithub.com\u002Fmitre-attack\u002Fattack-navigator\u002Fblob\u002Fmaster\u002Flayers\u002FLAYERFORMATv4_5.md)\n- [CISA Best Practices for MITRE ATT&CK Mapping](https:\u002F\u002Fwww.cisa.gov\u002Fsites\u002Fdefault\u002Ffiles\u002F2023-01\u002FBest%20Practices%20for%20MITRE%20ATTCK%20Mapping.pdf)\n- [Picus: Leverage MITRE ATT&CK for Threat Intelligence](https:\u002F\u002Fwww.picussecurity.com\u002Fhow-to-leverage-the-mitre-attack-framework-for-threat-intelligence)\n","# Analyzing APT Group with MITRE ATT&CK Navigator\n\n## Overview\n\nMITRE ATT&CK Navigator is a web-based tool for annotating and exploring ATT&CK matrices, enabling analysts to visualize threat actor technique coverage, compare multiple APT groups, identify detection gaps, and build threat-informed defense strategies. This skill covers querying ATT&CK data programmatically, mapping APT group TTPs to Navigator layers, creating multi-layer overlays for gap analysis, and generating actionable intelligence reports for detection engineering teams.\n\n\n## When to Use\n\n- When investigating security incidents that require analyzing apt group with mitre navigator\n- When building detection rules or threat hunting queries for this domain\n- When SOC analysts need structured procedures for this analysis type\n- When validating security monitoring coverage for related attack techniques\n\n## Prerequisites\n\n- Python 3.9+ with `attackcti`, `mitreattack-python`, `stix2`, `requests` libraries\n- ATT&CK Navigator (https:\u002F\u002Fmitre-attack.github.io\u002Fattack-navigator\u002F) or local deployment\n- Understanding of ATT&CK Enterprise matrix: 14 Tactics, 200+ Techniques, Sub-techniques\n- Access to threat intelligence reports or MISP\u002FOpenCTI for threat actor data\n- Familiarity with STIX 2.1 Intrusion Set and Attack Pattern objects\n\n## Key Concepts\n\n### ATT&CK Navigator Layers\n\nNavigator layers are JSON files that annotate ATT&CK techniques with scores, colors, comments, and metadata. Each layer can represent a single APT group's technique usage, a detection capability map, or a combined overlay. Layer version 4.5 supports enterprise-attack, mobile-attack, and ics-attack domains with filtering by platform (Windows, Linux, macOS, Cloud, Azure AD, Office 365, SaaS).\n\n### APT Group Profiles in ATT&CK\n\nATT&CK catalogs over 140 threat groups with documented technique usage. Each group profile includes aliases, targeted sectors, associated campaigns, software used, and technique mappings with procedure-level detail. Groups are identified by G-codes (e.g., G0016 for APT29, G0007 for APT28, G0032 for Lazarus Group).\n\n### Multi-Layer Analysis\n\nThe Navigator supports loading multiple layers simultaneously, allowing analysts to overlay threat actor TTPs against detection coverage to identify gaps, compare multiple APT groups to find common techniques worth prioritizing, and track technique coverage changes over time.\n\n## Workflow\n\n### Step 1: Query ATT&CK Data for APT Group\n\n```python\nfrom attackcti import attack_client\nimport json\n\nlift = attack_client()\n\n# Get all threat groups\ngroups = lift.get_groups()\nprint(f\"Total ATT&CK groups: {len(groups)}\")\n\n# Find APT29 (Cozy Bear \u002F Midnight Blizzard)\napt29 = next((g for g in groups if g.get('name') == 'APT29'), None)\nif apt29:\n    print(f\"Group: {apt29['name']}\")\n    print(f\"Aliases: {apt29.get('aliases', [])}\")\n    print(f\"Description: {apt29.get('description', '')[:300]}\")\n\n# Get techniques used by APT29 (G0016)\ntechniques = lift.get_techniques_used_by_group(\"G0016\")\nprint(f\"APT29 uses {len(techniques)} techniques\")\n\ntechnique_map = {}\nfor tech in techniques:\n    tech_id = \"\"\n    for ref in tech.get(\"external_references\", []):\n        if ref.get(\"source_name\") == \"mitre-attack\":\n            tech_id = ref.get(\"external_id\", \"\")\n            break\n    if tech_id:\n        tactics = [p.get(\"phase_name\", \"\") for p in tech.get(\"kill_chain_phases\", [])]\n        technique_map[tech_id] = {\n            \"name\": tech.get(\"name\", \"\"),\n            \"tactics\": tactics,\n            \"description\": tech.get(\"description\", \"\")[:500],\n            \"platforms\": tech.get(\"x_mitre_platforms\", []),\n            \"data_sources\": tech.get(\"x_mitre_data_sources\", []),\n        }\n```\n\n### Step 2: Generate Navigator Layer JSON\n\n```python\ndef create_navigator_layer(group_name, technique_map, color=\"#ff6666\"):\n    techniques_list = []\n    for tech_id, info in technique_map.items():\n        for tactic in info[\"tactics\"]:\n            techniques_list.append({\n                \"techniqueID\": tech_id,\n                \"tactic\": tactic,\n                \"color\": color,\n                \"comment\": info[\"name\"],\n                \"enabled\": True,\n                \"score\": 100,\n                \"metadata\": [\n                    {\"name\": \"group\", \"value\": group_name},\n                    {\"name\": \"platforms\", \"value\": \", \".join(info[\"platforms\"])},\n                ],\n            })\n\n    layer = {\n        \"name\": f\"{group_name} TTP Coverage\",\n        \"versions\": {\"attack\": \"16.1\", \"navigator\": \"5.1.0\", \"layer\": \"4.5\"},\n        \"domain\": \"enterprise-attack\",\n        \"description\": f\"Techniques attributed to {group_name}\",\n        \"filters\": {\n            \"platforms\": [\"Linux\", \"macOS\", \"Windows\", \"Cloud\",\n                          \"Azure AD\", \"Office 365\", \"SaaS\", \"Google Workspace\"]\n        },\n        \"sorting\": 0,\n        \"layout\": {\n            \"layout\": \"side\", \"aggregateFunction\": \"average\",\n            \"showID\": True, \"showName\": True,\n            \"showAggregateScores\": False, \"countUnscored\": False,\n        },\n        \"hideDisabled\": False,\n        \"techniques\": techniques_list,\n        \"gradient\": {\"colors\": [\"#ffffff\", color], \"minValue\": 0, \"maxValue\": 100},\n        \"legendItems\": [\n            {\"label\": f\"Used by {group_name}\", \"color\": color},\n            {\"label\": \"Not observed\", \"color\": \"#ffffff\"},\n        ],\n        \"showTacticRowBackground\": True,\n        \"tacticRowBackground\": \"#dddddd\",\n        \"selectTechniquesAcrossTactics\": True,\n        \"selectSubtechniquesWithParent\": False,\n        \"selectVisibleTechniques\": False,\n    }\n    return layer\n\nlayer = create_navigator_layer(\"APT29\", technique_map)\nwith open(\"apt29_layer.json\", \"w\") as f:\n    json.dump(layer, f, indent=2)\nprint(\"[+] Layer saved: apt29_layer.json\")\n```\n\n### Step 3: Compare Multiple APT Groups\n\n```python\ngroups_to_compare = {\"G0016\": \"APT29\", \"G0007\": \"APT28\", \"G0032\": \"Lazarus Group\"}\ngroup_techniques = {}\n\nfor gid, gname in groups_to_compare.items():\n    techs = lift.get_techniques_used_by_group(gid)\n    tech_ids = set()\n    for t in techs:\n        for ref in t.get(\"external_references\", []):\n            if ref.get(\"source_name\") == \"mitre-attack\":\n                tech_ids.add(ref.get(\"external_id\", \"\"))\n    group_techniques[gname] = tech_ids\n\ncommon_to_all = set.intersection(*group_techniques.values())\nprint(f\"Techniques common to all groups: {len(common_to_all)}\")\nfor tid in sorted(common_to_all):\n    print(f\"  {tid}\")\n\nfor gname, techs in group_techniques.items():\n    others = set.union(*[t for n, t in group_techniques.items() if n != gname])\n    unique = techs - others\n    print(f\"\\nUnique to {gname}: {len(unique)} techniques\")\n```\n\n### Step 4: Detection Gap Analysis with Layer Overlay\n\n```python\n# Define your current detection capabilities\ndetected_techniques = {\n    \"T1059\", \"T1059.001\", \"T1071\", \"T1071.001\", \"T1566\", \"T1566.001\",\n    \"T1547\", \"T1547.001\", \"T1053\", \"T1053.005\", \"T1078\", \"T1027\",\n}\n\nactor_techniques = set(technique_map.keys())\ncovered = actor_techniques.intersection(detected_techniques)\ngaps = actor_techniques - detected_techniques\n\nprint(f\"=== Detection Gap Analysis for APT29 ===\")\nprint(f\"Actor techniques: {len(actor_techniques)}\")\nprint(f\"Detected: {len(covered)} ({len(covered)\u002Flen(actor_techniques)*100:.0f}%)\")\nprint(f\"Gaps: {len(gaps)} ({len(gaps)\u002Flen(actor_techniques)*100:.0f}%)\")\n\n# Create gap layer (red = undetected, green = detected)\ngap_techniques = []\nfor tech_id in actor_techniques:\n    info = technique_map.get(tech_id, {})\n    for tactic in info.get(\"tactics\", [\"\"]):\n        color = \"#66ff66\" if tech_id in detected_techniques else \"#ff3333\"\n        gap_techniques.append({\n            \"techniqueID\": tech_id,\n            \"tactic\": tactic,\n            \"color\": color,\n            \"comment\": f\"{'DETECTED' if tech_id in detected_techniques else 'GAP'}: {info.get('name', '')}\",\n            \"enabled\": True,\n            \"score\": 100 if tech_id in detected_techniques else 0,\n        })\n\ngap_layer = {\n    \"name\": \"APT29 Detection Gap Analysis\",\n    \"versions\": {\"attack\": \"16.1\", \"navigator\": \"5.1.0\", \"layer\": \"4.5\"},\n    \"domain\": \"enterprise-attack\",\n    \"description\": \"Green = detected, Red = gap\",\n    \"techniques\": gap_techniques,\n    \"gradient\": {\"colors\": [\"#ff3333\", \"#66ff66\"], \"minValue\": 0, \"maxValue\": 100},\n    \"legendItems\": [\n        {\"label\": \"Detected\", \"color\": \"#66ff66\"},\n        {\"label\": \"Detection Gap\", \"color\": \"#ff3333\"},\n    ],\n}\nwith open(\"apt29_gap_layer.json\", \"w\") as f:\n    json.dump(gap_layer, f, indent=2)\n```\n\n### Step 5: Tactic Breakdown Analysis\n\n```python\nfrom collections import defaultdict\n\ntactic_breakdown = defaultdict(list)\nfor tech_id, info in technique_map.items():\n    for tactic in info[\"tactics\"]:\n        tactic_breakdown[tactic].append({\"id\": tech_id, \"name\": info[\"name\"]})\n\ntactic_order = [\n    \"reconnaissance\", \"resource-development\", \"initial-access\",\n    \"execution\", \"persistence\", \"privilege-escalation\",\n    \"defense-evasion\", \"credential-access\", \"discovery\",\n    \"lateral-movement\", \"collection\", \"command-and-control\",\n    \"exfiltration\", \"impact\",\n]\n\nprint(\"\\n=== APT29 Tactic Breakdown ===\")\nfor tactic in tactic_order:\n    techs = tactic_breakdown.get(tactic, [])\n    if techs:\n        print(f\"\\n{tactic.upper()} ({len(techs)} techniques):\")\n        for t in techs:\n            print(f\"  {t['id']}: {t['name']}\")\n```\n\n## Validation Criteria\n\n- ATT&CK data queried successfully via TAXII server\n- APT group mapped to all documented techniques with procedure examples\n- Navigator layer JSON validates and renders correctly in ATT&CK Navigator\n- Multi-layer overlay shows threat actor vs. detection coverage\n- Detection gap analysis identifies unmonitored techniques with data source recommendations\n- Cross-group comparison reveals shared and unique TTPs\n- Output is actionable for detection engineering prioritization\n\n## References\n\n- [MITRE ATT&CK Navigator](https:\u002F\u002Fmitre-attack.github.io\u002Fattack-navigator\u002F)\n- [ATT&CK Groups](https:\u002F\u002Fattack.mitre.org\u002Fgroups\u002F)\n- [attackcti Python Library](https:\u002F\u002Fgithub.com\u002FOTRF\u002FATTACK-Python-Client)\n- [Navigator Layer Format v4.5](https:\u002F\u002Fgithub.com\u002Fmitre-attack\u002Fattack-navigator\u002Fblob\u002Fmaster\u002Flayers\u002FLAYERFORMATv4_5.md)\n- [CISA Best Practices for MITRE ATT&CK Mapping](https:\u002F\u002Fwww.cisa.gov\u002Fsites\u002Fdefault\u002Ffiles\u002F2023-01\u002FBest%20Practices%20for%20MITRE%20ATTCK%20Mapping.pdf)\n- [Picus: Leverage MITRE ATT&CK for Threat Intelligence](https:\u002F\u002Fwww.picussecurity.com\u002Fhow-to-leverage-the-mitre-attack-framework-for-threat-intelligence)\n",{"name":5,"tags":44,"capec":46,"model":47,"tools":48,"domain":34,"maxTurns":52,"nist_csf":53,"subdomain":23,"description":7,"mitre_attack":58,"d3fend_techniques":60},[29,28,21,26,25,45,24,23],"heatmap",[],"sonnet",[49,33,50,51],"Read","Glob","Grep",20,[54,55,56,57],"ID.RA-01","ID.RA-05","DE.CM-01","DE.AE-02",[59],"T1059",[61,62,63,64,65],"Executable Denylisting","Execution Isolation","File Metadata Consistency Validation","Content Format Conversion","File Content Analysis","main","a91f1293287ffa9f4f1b8f486cd6e835a1568c84","skills\u002Fintel\u002Fmitre\u002Fapt\u002Fdetect","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace","https:\u002F\u002Fgithub.com\u002FDCx7C5","#Python","2026-09-01 11:21:00",{"source":8,"skillName":5,"commands":74,"prompt":84,"zipAvailable":85},[75,78,81],{"tool":76,"command":77},"npx","npx skills add DCx7C5\u002Fai-marketplace --skill mitre-apt-detect",{"tool":79,"command":80},"bunx","bunx skills add DCx7C5\u002Fai-marketplace --skill mitre-apt-detect",{"tool":82,"command":83},"pnpm","pnpm dlx skills add DCx7C5\u002Fai-marketplace --skill mitre-apt-detect","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fintel\u002Fmitre\u002Fapt\u002Fdetect\u002FSKILL.md",true,[87],{"path":88,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":91,"sourceHtmlUrl":92},"index.json","REFERENCE","参考文档",646,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fintel\u002Fmitre\u002Fapt\u002Fdetect\u002Findex.json",[94,116,137,157,179,195],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":39},"01M71HAPZ01KQ30RKTB0FFSQ05","services-wmi-persistence-detect","Detect WMI event subscription persistence by enumerating ActiveScriptEventConsumer, CommandLineEventConsumer, and permanent subscriptions in the WMI repository.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fservices\u002Fwmi\u002Fpersistence\u002Fdetect\u002FSKILL.md",[],[101,19,102,103,104,22,37,105,106,107,108,109,110,111,112,113,114,34,115],"services","services wmi persistence detect","wmi","persistence","process","activescript","event","subscriptions","commandline-consumer","repository","subscription","event-subscription","t1546.003","forensics","process-forensics",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":39},"01M71HAK6JTTTS229T17WJMMCG","services-wmi-exec-exploit","Perform lateral movement across Windows networks using WMI-based remote execution techniques including Impacket wmiexec.py, CrackMapExec, and native WMI commands for stealthy post-exploitation during red team engagements.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fservices\u002Fwmi\u002Fexec\u002Fexploit\u002FSKILL.md",[],[123,101,124,103,125,126,127,34,33,32,128,129,130,131,22,132,133,134,135,136],"exploit","services wmi exec exploit","exec","remote","traffic","team","across","crackmapexec","native","command","lateral movement","read","lateral-movement","Impacket",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":39},"01M71HAG6MHKNQV8KDZKMT4886","registry-artifact-extract","Extract and analyze Windows Registry hives to uncover user activity, installed software, autostart entries, and evidence of system compromise.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fregistry\u002Fartifact\u002Fextract\u002FSKILL.md",[],[144,145,146,147,148,149,34,33,150,32,30,151,22,134,152,153,154,155,156,47],"artifact","registry","registry artifact extract","extract","evidence-collection","artifact-analysis","collection","uncover","software","activity","digital-forensics","windows-registry","regripper",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":163,"publishedAt":39},"01M71HACR4A8XTWTTSXK4124AA","processes-token-impersonate-detect","Detect Windows token impersonation and privilege abuse including SeImpersonatePrivilege exploitation via Potato attacks and token stealing techniques.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Ftoken\u002Fimpersonate\u002Fdetect\u002FSKILL.md",[],[19,164,165,166,167,168,169,37,170,34,115,171,172,173,174,175,176,177,178,22],"processes token impersonate detect","token","processes","attacks","windows","escalation","techniques","privilege-escalation","seimpersonate","token-impersonation","printspoofer","exploitation","potato","impersonation","via",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":185,"publishedAt":39},"01M71HAABSB4Z6QFSXEG00R4RK","processes-thread-injection-detect","Detect Windows thread injection techniques including CreateRemoteThread, QueueUserAPC, NtCreateThreadEx, and thread hijacking via process memory analysis.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Fthread\u002Finjection\u002Fdetect\u002FSKILL.md",[],[186,187,19,188,166,168,189,37,190,170,34,115,32,191,192,193,194,178,22,105],"thread","processes thread injection detect","injection","memory","process-injection","api","apc-injection","thread-injection","nt-api",{"skillNo":196,"name":197,"nameZh":6,"description":198,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":199,"categories":200,"keywords":201,"publishedAt":39},"01M71HA7H311V5G14WMX58HQSS","processes-hollow-technique-detect","Detect process hollowing (RunPE) by identifying processes with mismatched image paths between PEB and VAD tree, or unmapped PE headers in memory.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Fhollow\u002Ftechnique\u002Fdetect\u002FSKILL.md",[],[202,19,166,203,189,37,204,205,34,115,206,207,208,209,210,211,22,105,212,213],"processes hollow technique detect","tree","memory-forensics","process-hollow","peb","runpe","image","pe-header","in memory","with","mismatched","headers"]