К основному содержанию
скилл CX Codex

analyzing-campaign-attribution-evidence — скилл для Claude Code

Скилл для разбора киберкампаний: раскладывает улики по гипотезам и выдаёт уровень уверенности в атрибуции. Нужен, когда по инциденту надо защитить вывод о заказчике.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill analyzing-campaign-attribution-evidence -a claude-code
Открыть на GitHub

Что делает analyzing-campaign-attribution-evidence

Скилл ведёт аналитика по структурированному процессу. Сначала собираются улики по категориям: пересечения инфраструктуры, совпадения TTP, схожесть кода малвари, операционные паттерны, языковые артефакты и виктимология. Каждая улика получает вес уверенности.

Дальше работает метод ACH — анализ конкурирующих гипотез. Улика оценивается как согласующаяся, противоречащая или нейтральная по отношению к каждому подозреваемому актору. Согласующаяся добавляет баллы, противоречащая отнимает вдвое больше. Побеждает гипотеза с наименьшим числом противоречий, а не с наибольшим числом совпадений. Итоговый балл переводится в уровень HIGH, MODERATE или LOW.

Внутри есть готовые Python-функции: класс AttributionAnalyzer для учёта улик и ранжирования гипотез, сравнение инфраструктуры двух кампаний по IP, доменам, ASN и регистраторам, сопоставление техник через attackcti. Для работы нужен Python 3.9+ с библиотеками attackcti, stix2 и networkx, а также доступ к MISP или OpenCTI. Без подключённой ти-платформы половина шагов провисает, потому что сравнивать не с чем.

Какие задачи решает

  • свести разрозненные улики по инциденту в одну картину
  • оценить, насколько уверенно можно назвать актора
  • сравнить инфраструктуру двух кампаний на пересечения
  • проверить гипотезу об акторе на противоречащие факты
  • обосновать уровень уверенности в отчёте для заказчика

Примеры запросов агенту

  • разбери улики по этой кампании и оцени уверенность атрибуции
  • сравни инфраструктуру двух кампаний: IP, домены, ASN
  • прогони ACH по трём гипотезам об акторе и покажи, где противоречия

Как установить analyzing-campaign-attribution-evidence

1Через Skills CLI (Vercel)

npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill analyzing-campaign-attribution-evidence -a claude-code

2Вручную: положить файлы

~/.claude/skills/analyzing-campaign-attribution-evidence/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/analyzing-campaign-attribution-evidence/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о analyzing-campaign-attribution-evidence

Как установить analyzing-campaign-attribution-evidence в Claude?

Выполните npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill analyzing-campaign-attribution-evidence -a claude-code. Скилл появится в ~/.claude/skills/analyzing-campaign-attribution-evidence/SKILL.md.

Что делает analyzing-campaign-attribution-evidence?

Оценивает улики киберкампании по методу ACH и модели Diamond, взвешивает пересечения инфраструктуры, совпадения TTP и схожесть кода малвари, после чего выдаёт уровень уверенности в атрибуции.

Что нужно для работы скилла?

Python 3.9+ с библиотеками attackcti, stix2 и networkx, а также доступ к MISP или OpenCTI. Ещё понадобится понимание модели Diamond и профилей групп MITRE ATT&CK.

Исходный текст

SKILL.md · Apache-2.0
---
name: analyzing-campaign-attribution-evidence
description: 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.
domain: cybersecurity
subdomain: threat-intelligence
tags:
- threat-intelligence
- cti
- ioc
- mitre-attack
- stix
- attribution
- campaign-analysis
version: '1.0'
author: mahipal
license: Apache-2.0
nist_csf:
- ID.RA-01
- ID.RA-05
- DE.CM-01
- DE.AE-02
mitre_attack:
- T1587.001
- T1583.001
- T1588.002
- T1071.001
---
# Analyzing Campaign Attribution Evidence

## Overview

Campaign attribution analysis involves systematically evaluating evidence to determine which threat actor or group is responsible for a cyber operation. This skill covers collecting and weighting attribution indicators using the Diamond Model and ACH (Analysis of Competing Hypotheses), analyzing infrastructure overlaps, TTP consistency, malware code similarities, operational timing patterns, and language artifacts to build confidence-weighted attribution assessments.


## When to Use

- When investigating security incidents that require analyzing campaign attribution evidence
- When building detection rules or threat hunting queries for this domain
- When SOC analysts need structured procedures for this analysis type
- When validating security monitoring coverage for related attack techniques

## Prerequisites

- Python 3.9+ with `attackcti`, `stix2`, `networkx` libraries
- Access to threat intelligence platforms (MISP, OpenCTI)
- Understanding of Diamond Model of Intrusion Analysis
- Familiarity with MITRE ATT&CK threat group profiles
- Knowledge of malware analysis and infrastructure tracking techniques

## Key Concepts

### Attribution Evidence Categories
1. **Infrastructure Overlap**: Shared C2 servers, domains, IP ranges, hosting providers
2. **TTP Consistency**: Matching ATT&CK techniques and sub-techniques across campaigns
3. **Malware Code Similarity**: Shared code bases, compilers, PDB paths, encryption routines
4. **Operational Patterns**: Timing (working hours, time zones), targeting patterns, operational tempo
5. **Language Artifacts**: Embedded strings, variable names, error messages in specific languages
6. **Victimology**: Target sector, geography, and organizational profile consistency

### Confidence Levels
- **High Confidence**: Multiple independent evidence categories converge on same actor
- **Moderate Confidence**: Several evidence categories match, some ambiguity remains
- **Low Confidence**: Limited evidence, possible false flags or shared tooling

### Analysis of Competing Hypotheses (ACH)
Structured analytical method that evaluates evidence against multiple competing hypotheses. Each piece of evidence is scored as consistent, inconsistent, or neutral with respect to each hypothesis. The hypothesis with the least inconsistent evidence is favored.

## Workflow

### Step 1: Collect Attribution Evidence

```python
from stix2 import MemoryStore, Filter
from collections import defaultdict

class AttributionAnalyzer:
    def __init__(self):
        self.evidence = []
        self.hypotheses = {}

    def add_evidence(self, category, description, value, confidence):
        self.evidence.append({
            "category": category,
            "description": description,
            "value": value,
            "confidence": confidence,
            "timestamp": None,
        })

    def add_hypothesis(self, actor_name, actor_id=""):
        self.hypotheses[actor_name] = {
            "actor_id": actor_id,
            "consistent_evidence": [],
            "inconsistent_evidence": [],
            "neutral_evidence": [],
            "score": 0,
        }

    def evaluate_evidence(self, evidence_idx, actor_name, assessment):
        """Assess evidence against a hypothesis: consistent/inconsistent/neutral."""
        if assessment == "consistent":
            self.hypotheses[actor_name]["consistent_evidence"].append(evidence_idx)
            self.hypotheses[actor_name]["score"] += self.evidence[evidence_idx]["confidence"]
        elif assessment == "inconsistent":
            self.hypotheses[actor_name]["inconsistent_evidence"].append(evidence_idx)
            self.hypotheses[actor_name]["score"] -= self.evidence[evidence_idx]["confidence"] * 2
        else:
            self.hypotheses[actor_name]["neutral_evidence"].append(evidence_idx)

    def rank_hypotheses(self):
        """Rank hypotheses by attribution score."""
        ranked = sorted(
            self.hypotheses.items(),
            key=lambda x: x[1]["score"],
            reverse=True,
        )
        return [
            {
                "actor": name,
                "score": data["score"],
                "consistent": len(data["consistent_evidence"]),
                "inconsistent": len(data["inconsistent_evidence"]),
                "confidence": self._score_to_confidence(data["score"]),
            }
            for name, data in ranked
        ]

    def _score_to_confidence(self, score):
        if score >= 80:
            return "HIGH"
        elif score >= 40:
            return "MODERATE"
        else:
            return "LOW"
```

### Step 2: Infrastructure Overlap Analysis

```python
def analyze_infrastructure_overlap(campaign_a_infra, campaign_b_infra):
    """Compare infrastructure between two campaigns for attribution."""
    overlap = {
        "shared_ips": set(campaign_a_infra.get("ips", [])).intersection(
            campaign_b_infra.get("ips", [])
        ),
        "shared_domains": set(campaign_a_infra.get("domains", [])).intersection(
            campaign_b_infra.get("domains", [])
        ),
        "shared_asns": set(campaign_a_infra.get("asns", [])).intersection(
            campaign_b_infra.get("asns", [])
        ),
        "shared_registrars": set(campaign_a_infra.get("registrars", [])).intersection(
            campaign_b_infra.get("registrars", [])
        ),
    }

    overlap_score = 0
    if overlap["shared_ips"]:
        overlap_score += 30
    if overlap["shared_domains"]:
        overlap_score += 25
    if overlap["shared_asns"]:
        overlap_score += 15
    if overlap["shared_registrars"]:
        overlap_score += 10

    return {
        "overlap": {k: list(v) for k, v in overlap.items()},
        "overlap_score": overlap_score,
        "assessment": "STRONG" if overlap_score >= 40 else "MODERATE" if overlap_score >= 20 else "WEAK",
    }
```

### Step 3: TTP Comparison Across Campaigns

```python
from attackcti import attack_client

def compare_campaign_ttps(campaign_techniques, known_actor_techniques):
    """Compare campaign TTPs against known threat actor profiles."""
    campaign_set = set(campaign_techniques)
    actor_set = set(known_actor_techniques)

    common = campaign_set.intersection(actor_set)
    unique_campaign = campaign_set - actor_set
    unique_actor = actor_set - campaign_set

    jaccard = len(common) / len(campaign_set.union(actor_set)) if campaign_set.union(actor_set) else 0

    return {
        "common_techniques": sorted(common),
        "common_count": len(common),
        "unique_to_campaign": sorted(unique_campaign),
        "unique_to_actor": sorted(unique_actor),
        "jaccard_similarity": round(jaccard, 3),
        "overlap_percentage": round(len(common) / len(campaign_set) * 100, 1) if campaign_set else 0,
    }
```

### Step 4: Generate Attribution Report

```python
def generate_attribution_report(analyzer):
    """Generate structured attribution assessment report."""
    rankings = analyzer.rank_hypotheses()

    report = {
        "assessment_date": "2026-02-23",
        "total_evidence_items": len(analyzer.evidence),
        "hypotheses_evaluated": len(analyzer.hypotheses),
        "rankings": rankings,
        "primary_attribution": rankings[0] if rankings else None,
        "evidence_summary": [
            {
                "index": i,
                "category": e["category"],
                "description": e["description"],
                "confidence": e["confidence"],
            }
            for i, e in enumerate(analyzer.evidence)
        ],
    }

    return report
```

## Validation Criteria

- Evidence collection covers all six attribution categories
- ACH matrix properly evaluates evidence against competing hypotheses
- Infrastructure overlap analysis identifies shared indicators
- TTP comparison uses ATT&CK technique IDs for precision
- Attribution confidence levels are properly justified
- Report includes alternative hypotheses and false flag considerations

## References

- [Diamond Model of Intrusion Analysis](https://www.activeresponse.org/wp-content/uploads/2013/07/diamond.pdf)
- [MITRE ATT&CK Groups](https://attack.mitre.org/groups/)
- [Analysis of Competing Hypotheses](https://www.cia.gov/static/9a5f1162fd0932c29e985f0159f56c07/Tradecraft-Primer-apr09.pdf)
- [Threat Attribution Framework](https://www.mandiant.com/resources/reports)

© mahipal · Apache-2.0 · mukul975/Anthropic-Cybersecurity-Skills

Похожие скиллы

Всё по теме «Безопасность» →
threat-detection Alireza Rezvani Помогает искать скрытую активность через гипотезы, IOC и аномалии в телеметрии. Нужен для проактивной охоты до срабатывания автоматических алертов. 637установок attribution-setup appeeky Скилл помогает настроить и отладить измерение установок приложений: SKAdNetwork, AdAttributionKit, Install Referrer и MMP. CX Codex +1 1 800установок attribution coreyhaines31 Помогает понять, какой канал реально приносит конверсии и выручку, выбрать модель атрибуции и свести расхождения между дашбордами. CX Codex +1 38 500установок ad-attribution-gap Maya-Beth Finotti Скилл раскладывает разницу между отчётами рекламных платформ, аналитики и CRM на причины: тайминг, различия в определениях и остаток. CX Codex +1 20 500установок ads-attribution AgriciDaniel Проверяет атрибуцию рекламы между платформами и не даёт складывать несопоставимые конверсии. Нужен при расхождениях в отчётах, GA4 и MMP. CX Codex +1 3 400установок attribution-reconciler aaron-he-zhu Сверяет конверсии рекламных платформ с заказами из GA4 или ecommerce, убирает двойной учёт и приводит окна атрибуции к общей базе. CX Codex +1 1 000установок

Из того же набора89

reverse-engineering-android-malware-with-jadx Скилл ведёт агента по разбору подозрительного Android APK: декомпиляция через JADX, разбор манифеста, поиск кражи данных и C2. CX Codex +1 486установок testing-api-authentication-weaknesses Скилл проверяет аутентификацию API на уязвимости обхода, ошибки в JWT и открытые эндпоинты. Помогает протестировать REST API перед релизом. CX Codex +1 484установок analyzing-azure-activity-logs-for-threats Гоняет KQL-запросы по журналам Azure Monitor и sign-in logs, чтобы найти подозрительные админские операции и аномальные входы. CX Codex +1 471установок analyzing-indicators-of-compromise Разбирает IP, домены, хеши, URL и почтовые артефакты: считает уверенность во вредоносности и решает, блокировать или наблюдать. CX Codex +1 466установок testing-cors-misconfiguration Скилл помогает проверять настройки CORS в API и веб-приложениях во время авторизованных тестов на проникновение. Он выявляет некорректную валидацию заголовка Origin и утечки данных между доменами. CX Codex +1 463установок analyzing-linux-system-artifacts Разбирает артефакты Linux-системы после взлома: логи аутентификации, cron, systemd, историю shell, SSH-ключи. Нужен при реагировании на инцидент. CX Codex +1 461установок analyzing-linux-elf-malware Скилл для разбора подозрительных Linux-бинарников: статика, трассировка, дизассемблирование. Пригодится при разборе взломанного сервера или контейнера. CX Codex +1 457установок analyzing-disk-image-with-autopsy Помогает исследовать дампы дисков в форматах raw, E01 или AFF через Autopsy и The Sleuth Kit. Пригодится для восстановления удалённых файлов и подготовки таймлайна инцидента. CX Codex +1 454установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой