Communitygithub.com

análise-de-grupo-apt-com-mitre-navigator

Consulta dados do ATT&CK com attackcti, mitreattack-python e stix2, depois constrói camadas do MITRE ATT&CK Navigator e mapas de calor com múltiplas camadas sobrepostas para mapear um ou mais grupos APT.

O que é análise-de-grupo-apt-com-mitre-navigator?

Esta skill capacita analistas de segurança a consultar programaticamente o framework MITRE ATT&CK usando as bibliotecas Python attackcti, mitreattack-python e stix2, e a construir camadas interativas do ATT&CK Navigator. Ela automatiza a coleta de técnicas de grupos APT (como APT29, APT28 e Lazarus), gera arquivos JSON de camadas do Navigator que podem ser carregados na ferramenta web, e cria sobreposições de múltiplas camadas para análise de lacunas de detecção. A skill suporta a comparação de múltiplos grupos APT para identificar TTPs comuns e exclusivos, análise detalhada por tática, e geração de relatórios acionáveis para equipes de engenharia de detecção. É útil para SOCs que precisam validar cobertura de monitoramento, priorizar regras de detecção baseadas em ameaças reais e melhorar a postura de defesa orientada por inteligência de ameaças. Funciona em qualquer plataforma que suporte Python 3.9+ e é compatível com as bibliotecas mencionadas, integrando-se diretamente com os servidores TAXII do MITRE ATT&CK e com a ferramenta web ATT&CK Navigator (versão de camada 4.5+).

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mukul975/Anthropic-Cybersecurity-Skills/tree/main/skills/analyzing-apt-group-with-mitre-navigator

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Analisando Grupo APT com MITRE ATT&CK Navigator

Visão Geral

O MITRE ATT&CK Navigator é uma ferramenta baseada na web para anotar e explorar matrizes ATT&CK, permitindo que analistas visualizem a cobertura de técnicas de atores de ameaças, comparem múltiplos grupos APT, identifiquem lacunas de detecção e construam estratégias de defesa orientadas por ameaças. Esta skill cobre a consulta programática de dados do ATT&CK, o mapeamento de TTPs de grupos APT para camadas do Navigator, a criação de sobreposições de múltiplas camadas para análise de lacunas e a geração de relatórios de inteligência acionáveis para equipes de engenharia de detecção.

Quando Usar

  • Ao investigar incidentes de segurança que exigem analisar grupo APT com MITRE Navigator
  • Ao construir regras de detecção ou consultas de caça a ameaças para este domínio
  • Quando analistas de SOC precisam de procedimentos estruturados para este tipo de análise
  • Ao validar a cobertura de monitoramento de segurança para técnicas de ataque relacionadas

Pré-requisitos

  • Python 3.9+ com as bibliotecas attackcti, mitreattack-python, stix2, requests
  • ATT&CK Navigator (https://mitre-attack.github.io/attack-navigator/) ou implantação local
  • Compreensão da matriz Enterprise do ATT&CK: 14 Táticas, 200+ Técnicas, Sub-técnicas
  • Acesso a relatórios de inteligência de ameaças ou MISP/OpenCTI para dados de atores de ameaças
  • Familiaridade com os objetos STIX 2.1 Intrusion Set e Attack Pattern

Conceitos Chave

Camadas do ATT&CK Navigator

As camadas do Navigator são arquivos JSON que anotam técnicas do ATT&CK com pontuações, cores, comentários e metadados. Cada camada pode representar o uso de técnicas de um único grupo APT, um mapa de capacidade de detecção ou uma sobreposição combinada. A versão 4.5 da camada suporta os domínios enterprise-attack, mobile-attack e ics-attack com filtragem por plataforma (Windows, Linux, macOS, Cloud, Azure AD, Office 365, SaaS).

Perfis de Grupos APT no ATT&CK

O ATT&CK cataloga mais de 140 grupos de ameaças com uso documentado de técnicas. Cada perfil de grupo inclui alias, setores-alvo, campanhas associadas, software utilizado e mapeamentos de técnicas com detalhes de procedimentos. Os grupos são identificados por códigos G (ex: G0016 para APT29, G0007 para APT28, G0032 para Grupo Lazarus).

Análise de Múltiplas Camadas

O Navigator suporta o carregamento simultâneo de várias camadas, permitindo que analistas sobreponham TTPs de atores de ameaças contra a cobertura de detecção para identificar lacunas, comparem múltiplos grupos APT para encontrar técnicas comuns que valem a pena priorizar e acompanhem mudanças na cobertura de técnicas ao longo do tempo.

Fluxo de Trabalho

Passo 1: Consultar Dados do ATT&CK para Grupo APT

from attackcti import attack_client
import json

lift = attack_client()

# Obter todos os grupos de ameaças
groups = lift.get_groups()
print(f"Total de grupos ATT&CK: {len(groups)}")

# Encontrar APT29 (Cozy Bear / Midnight Blizzard)
apt29 = next((g for g in groups if g.get('name') == 'APT29'), None)
if apt29:
    print(f"Grupo: {apt29['name']}")
    print(f"Alias: {apt29.get('aliases', [])}")
    print(f"Descrição: {apt29.get('description', '')[:300]}")

# Obter técnicas usadas por APT29 (G0016)
techniques = lift.get_techniques_used_by_group("G0016")
print(f"APT29 usa {len(techniques)} técnicas")

technique_map = {}
for tech in techniques:
    tech_id = ""
    for ref in tech.get("external_references", []):
        if ref.get("source_name") == "mitre-attack":
            tech_id = ref.get("external_id", "")
            break
    if tech_id:
        tactics = [p.get("phase_name", "") for p in tech.get("kill_chain_phases", [])]
        technique_map[tech_id] = {
            "name": tech.get("name", ""),
            "tactics": tactics,
            "description": tech.get("description", "")[:500],
            "platforms": tech.get("x_mitre_platforms", []),
            "data_sources": tech.get("x_mitre_data_sources", []),
        }

Passo 2: Gerar JSON da Camada do Navigator

def create_navigator_layer(group_name, technique_map, color="#ff6666"):
    techniques_list = []
    for tech_id, info in technique_map.items():
        for tactic in info["tactics"]:
            techniques_list.append({
                "techniqueID": tech_id,
                "tactic": tactic,
                "color": color,
                "comment": info["name"],
                "enabled": True,
                "score": 100,
                "metadata": [
                    {"name": "group", "value": group_name},
                    {"name": "platforms", "value": ", ".join(info["platforms"])},
                ],
            })

    layer = {
        "name": f"{group_name} Cobertura TTP",
        "versions": {"attack": "16.1", "navigator": "5.1.0", "layer": "4.5"},
        "domain": "enterprise-attack",
        "description": f"Técnicas atribuídas a {group_name}",
        "filters": {
            "platforms": ["Linux", "macOS", "Windows", "Cloud",
                          "Azure AD", "Office 365", "SaaS", "Google Workspace"]
        },
        "sorting": 0,
        "layout": {
            "layout": "side", "aggregateFunction": "average",
            "showID": True, "showName": True,
            "showAggregateScores": False, "countUnscored": False,
        },
        "hideDisabled": False,
        "techniques": techniques_list,
        "gradient": {"colors": ["#ffffff", color], "minValue": 0, "maxValue": 100},
        "legendItems": [
            {"label": f"Usado por {group_name}", "color": color},
            {"label": "Não observado", "color": "#ffffff"},
        ],
        "showTacticRowBackground": True,
        "tacticRowBackground": "#dddddd",
        "selectTechniquesAcrossTactics": True,
        "selectSubtechniquesWithParent": False,
        "selectVisibleTechniques": False,
    }
    return layer

layer = create_navigator_layer("APT29", technique_map)
with open("apt29_layer.json", "w") as f:
    json.dump(layer, f, indent=2)
print("[+] Camada salva: apt29_layer.json")

Passo 3: Comparar Múltiplos Grupos APT

groups_to_compare = {"G0016": "APT29", "G0007": "APT28", "G0032": "Grupo Lazarus"}
group_techniques = {}

for gid, gname in groups_to_compare.items():
    techs = lift.get_techniques_used_by_group(gid)
    tech_ids = set()
    for t in techs:
        for ref in t.get("external_references", []):
            if ref.get("source_name") == "mitre-attack":
                tech_ids.add(ref.get("external_id", ""))
    group_techniques[gname] = tech_ids

common_to_all = set.intersection(*group_techniques.values())
print(f"Técnicas comuns a todos os grupos: {len(common_to_all)}")
for tid in sorted(common_to_all):
    print(f"  {tid}")

for gname, techs in group_techniques.items():
    others = set.union(*[t for n, t in group_techniques.items() if n != gname])
    unique = techs - others
    print(f"\nExclusivas de {gname}: {len(unique)} técnicas")

Passo 4: Análise de Lacunas de Detecção com Sobreposição de Camadas

# Definir suas capacidades atuais de detecção
detected_techniques = {
    "T1059", "T1059.001", "T1071", "T1071.001", "T1566", "T1566.001",
    "T1547", "T1547.001", "T1053", "T1053.005", "T1078", "T1027",
}

actor_techniques = set(technique_map.keys())
covered = actor_techniques.intersection(detected_techniques)
gaps = actor_techniques - detected_techniques

print(f"=== Análise de Lacunas de Detecção para APT29 ===")
print(f"Técnicas do ator: {len(actor_techniques)}")
print(f"Detectadas: {len(covered)} ({len(covered)/len(actor_techniques)*100:.0f}%)")
print(f"Lacunas: {len(gaps)} ({len(gaps)/len(actor_techniques)*100:.0f}%)")

# Criar camada de lacunas (vermelho = não detectado, verde = detectado)
gap_techniques = []
for tech_id in actor_techniques:
    info = technique_map.get(tech_id, {})
    for tactic in info.get("tactics", [""]):
        color = "#66ff66" if tech_id in detected_techniques else "#ff3333"
        gap_techniques.append({
            "techniqueID": tech_id,
            "tactic": tactic,
            "color": color,
            "comment": f"{'DETECTADO' if tech_id in detected_techniques else 'LACUNA'}: {info.get('name', '')}",
            "enabled": True,
            "score": 100 if tech_id in detected_techniques else 0,
        })

gap_layer = {
    "name": "Análise de Lacunas de Detecção APT29",
    "versions": {"attack": "16.1", "navigator": "5.1.0", "layer": "4.5"},
    "domain": "enterprise-attack",
    "description": "Verde = detectado, Vermelho = lacuna",
    "techniques": gap_techniques,
    "gradient": {"colors": ["#ff3333", "#66ff66"], "minValue": 0, "maxValue": 100},
    "legendItems": [
        {"label": "Detectado", "color": "#66ff66"},
        {"label": "Lacuna de Detecção", "color": "#ff3333"},
    ],
}
with open("apt29_gap_layer.json", "w") as f:
    json.dump(gap_layer, f, indent=2)

Passo 5: Análise Detalhada por Tática

from collections import defaultdict

tactic_breakdown = defaultdict(list)
for tech_id, info in technique_map.items():
    for tactic in info["tactics"]:
        tactic_breakdown[tactic].append({"id": tech_id, "name": info["name"]})

tactic_order = [
    "reconnaissance", "resource-development", "initial-access",
    "execution", "persistence", "privilege-escalation",
    "defense-evasion", "credential-access", "discovery",
    "lateral-movement", "collection", "command-and-control",
    "exfiltration", "impact",
]

print("\n=== Detalhamento por Tática do APT29 ===")
for tactic in tactic_order:
    techs = tactic_breakdown.get(tactic, [])
    if techs:
        print(f"\n{tactic.upper()} ({len(techs)} técnicas):")
        for t in techs:
            print(f"  {t['id']}: {t['name']}")

Critérios de Validação

  • Dados do ATT&CK consultados com sucesso via servidor TAXII
  • Grupo APT mapeado para todas as técnicas documentadas com exemplos de procedimentos
  • JSON da camada do Navigator valida e renderiza corretamente no ATT&CK Navigator
  • Sobreposição de múltiplas camadas mostra cobertura do ator vs. detecção
  • Análise de lacunas de detecção identifica técnicas não monitoradas com recomendações de fontes de dados
  • Comparação entre grupos revela TTPs compartilhados e exclusivos
  • Resultado é acionável para priorização de engenharia de detecção

Referências

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

abusing-dpapi-for-credential-access

Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys) online or offline using SharpDPAPI, SharpChrome, Mimikatz, or Impacket

abusing-shadow-credentials-for-privesc

Take over Active Directory accounts by writing attacker-controlled public keys to msDS-KeyCredentialLink (Shadow Credentials) with pyWhisker, Whisker, or Certipy, then authenticate via PKINIT to recover the target

achieving-cmmc-level-2-compliance

>-

acquiring-disk-image-with-dd-and-dcfldd

Create forensically sound bit-for-bit disk images with dd or dcfldd on a Linux forensic workstation, preserving evidence integrity through hash verification (MD5/SHA) during acquisition. Use when imaging a suspect drive, USB device, or memory card for investigation, preserving volatile disk evidence during incident response, or producing a verified copy for legal or law-enforcement proceedings before any destructive analysis.

analyzing-active-directory-acl-abuse

Detect dangerous ACL misconfigurations in Active Directory using ldap3

analyzing-android-malware-with-apktool

Perform static analysis of Android APK malware using apktool for resource decompilation, jadx for Java source recovery, and androguard for manifest inspection, dangerous permission-combination detection, and identification of obfuscated code, dynamic code loading, and reflection-based API calls. Use to statically triage a suspicious APK without executing it or to build mobile malware detection rules.

analyzing-api-gateway-access-logs

Parses API Gateway access logs (AWS API Gateway, Kong, Nginx) to detect

analyzing-azure-activity-logs-for-threats

Queries Azure Monitor activity logs and sign-in logs via azure-monitor-query

analyzing-bootkit-and-rootkit-samples

Analyzes bootkit and advanced rootkit malware infecting the Master

analyzing-browser-forensics-with-hindsight

Parse Chromium-based browser databases with Hindsight to extract and correlate browsing history, downloads, cookies, cached content, autofill data, saved passwords, and extensions from Chrome, Edge, Brave, Opera, and Vivaldi into a unified timeline (XLSX, JSON, or SQLite output). Use during incident response, insider-threat investigations, or criminal cases when you need to reconstruct a user

analyzing-campaign-attribution-evidence

Systematically evaluate cyber-campaign evidence to attribute an operation to a threat actor, using the Diamond Model and Analysis of Competing Hypotheses (ACH) to weigh infrastructure overlaps, TTP consistency, malware code similarity, and timing/language artifacts into confidence-weighted attribution assessments. Use when an incident investigation needs a defensible attribution confidence level.

analyzing-certificate-transparency-for-phishing

Monitor Certificate Transparency logs using crt.sh and Certstream to

analyzing-cloud-storage-access-patterns

Detect abnormal access in AWS S3, GCS, and Azure Blob Storage by analyzing CloudTrail Data Events, GCS audit logs, and Azure Storage Analytics for after-hours bulk downloads, new-IP access, and API-call spikes (e.g. GetObject) via statistical baselines and time-series anomaly detection. Use when investigating suspected cloud data exfiltration or building related detection rules.

analyzing-cobalt-strike-beacon-configuration

Extract and analyze Cobalt Strike beacon configuration from PE files

analyzing-cobaltstrike-malleable-c2-profiles

Parse and analyze Cobalt Strike Malleable C2 profiles with dissect.cobaltstrike (profiles and beacon-payload configs) and pyMalleableC2 (AST parsing) to extract HTTP/DNS transforms, URIs, headers, sleep/jitter, and injection behavior, then generate network detection signatures. Use when reverse-engineering a captured malleable profile or building detections against Cobalt Strike Beacon traffic.

analyzing-command-and-control-communication

Analyzes malware C2 communication over HTTP, HTTPS, DNS, and custom

analyzing-cyber-kill-chain

Analyzes intrusion activity against the Lockheed Martin Cyber Kill Chain

analyzing-disk-image-with-autopsy

Perform comprehensive forensic analysis of raw (dd), E01, or AFF disk images with Autopsy and The Sleuth Kit, recovering deleted files, examining metadata and embedded artifacts, keyword searching, and building investigation timelines with visual reports. Use for structured analysis of a forensic disk image or when stakeholders need visual reports from evidence.

analyzing-dns-logs-for-exfiltration

Analyzes DNS query logs to detect data exfiltration via DNS tunneling,

analyzing-docker-container-forensics

Investigate compromised Docker containers by analyzing images, layers,

Habilidades Relacionadas