mcpField
P
performing-threat-landscape-assessment-for-sector

performing-threat-landscape-assessment-for-sector

github.com/mukul975安全35.2k52 次安装8 周前更新
代码仓库

关于 performing-threat-landscape-assessment-for-sector

用于评估特定行业网络威胁的安全技能,分析目标攻击者、攻击途径、技术、漏洞、事件和新兴风险,为安全规划与报告提供依据。

主要功能

  1. 01分析针对行业的威胁行为者
  2. 02分析攻击途径与技术
  3. 03梳理常被利用的漏洞
  4. 04审视事件趋势与新兴威胁
  5. 05生成行业威胁报告

适用场景

  1. 01依据行业风险确定安全投资优先级
  2. 02准备董事会威胁报告
  3. 03审查行业特定攻击模式
  4. 04识别新兴供应链风险

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-threat-landscape-assessment-for-sector

安装后在 Claude Code 中输入/performing-threat-landscape-assessment-for-sector确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
agent.py

详细介绍

针对行业开展威胁态势评估

概述

行业特定威胁态势评估通过考察哪些威胁行为者针对该行业、其偏好的攻击向量和 TTP、常被利用的常见漏洞、历史事件数据以及新兴威胁,分析特定行业垂直领域(医疗、金融服务、能源、政府、制造业)面临的网络威胁环境。这会为风险管理、安全投资优先级排序和董事会级报告产出可操作的情报。

使用时机

  • 在开展涉及针对行业执行威胁态势评估的安全评估时
  • 在遵循相关安全事件的事件响应流程时
  • 在执行计划性安全测试或审计活动时
  • 在通过动手测试验证安全控制措施时

前提条件

  • Python 3.9+ 以及 attackcti、requests、pandas、matplotlib 库
  • 可访问威胁情报源(AlienVault OTX、MISP、供应商报告)
  • 用于 TTP 映射的 MITRE ATT&CK 知识库
  • 行业特定的 ISAC 成员资格(FS-ISAC、H-ISAC、E-ISAC 等)
  • 了解行业特定的监管要求

关键概念

行业目标分析

不同行业面临不同的威胁画像。金融服务面临复杂的国家行为体(Lazarus Group)以及专注于金融欺诈的网络犯罪团伙。医疗面临利用紧迫性和遗留系统的勒索软件团伙。能源和关键基础设施面临具有破坏能力的国家行为体团伙(TEMP.Veles、Sandworm)。政府面临以间谍活动为重点的 APT(APT29、APT28、Turla)。

威胁态势组成部分

全面评估包括:威胁行为者画像(针对该行业的团伙)、攻击向量分析(观察到的初始访问方法)、TTP 映射(常用于针对该行业的技术)、漏洞态势(常被利用的 CVE)、事件趋势分析(泄露频率、影响、恢复时间)以及新兴威胁(新团伙、不断演进的技术、供应链风险)。

情报来源

行业特定情报来自 ISAC(信息共享与分析中心)、政府公告(CISA、FBI、NSA)、供应商威胁报告(CrowdStrike 年度威胁报告、Mandiant M-Trends、Verizon DBIR)以及关于行业特定攻击的学术研究。

工作流

步骤 1:识别针对该行业的威胁行为者
from attackcti import attack_client
import json

class SectorThreatAssessment:
    SECTOR_GROUPS = {
        "financial": ["FIN7", "FIN8", "FIN11", "Carbanak", "Lazarus Group",
                       "Cobalt Group", "TA505", "GOLD SOUTHFIELD"],
        "healthcare": ["FIN12", "Ryuk", "Conti", "Wizard Spider",
                        "GOLD ULRICK", "Vice Society"],
        "energy": ["TEMP.Veles", "Sandworm Team", "Dragonfly",
                    "XENOTIME", "ERYTHRITE", "Berserk Bear"],
        "government": ["APT29", "APT28", "Turla", "Gamaredon Group",
                        "Mustang Panda", "APT41", "Lazarus Group"],
        "manufacturing": ["APT41", "TEMP.Veles", "Dragonfly",
                           "HEXANE", "MAGNALLIUM"],
        "technology": ["APT41", "Lazarus Group", "APT10",
                        "HAFNIUM", "Winnti Group"],
    }

    def __init__(self, sector):
        self.sector = sector.lower()
        self.lift = attack_client()
        self.groups = self.lift.get_groups()
        self.assessment = {
            "sector": sector,
            "threat_actors": [],
            "common_techniques": {},
            "attack_vectors": {},
            "risk_summary": {},
        }

    def analyze_sector_actors(self):
        """Analyze threat actors known to target this sector."""
        target_groups = self.SECTOR_GROUPS.get(self.sector, [])
        actor_profiles = []

        for group_name in target_groups:
            group = next(
                (g for g in self.groups
                 if g.get("name", "").lower() == group_name.lower()
                 or group_name.lower() in [a.lower() for a in g.get("aliases", [])]),
                None
            )
            if group:
                group_id = ""
                for ref in group.get("external_references", []):
                    if ref.get("source_name") == "mitre-attack":
                        group_id = ref.get("external_id", "")
                        break

                techniques = []
                if group_id:
                    techs = self.lift.get_techniques_used_by_group(group_id)
                    for t in techs:
                        for ref in t.get("external_references", []):
                            if ref.get("source_name") == "mitre-attack":
                                techniques.append({
                                    "id": ref.get("external_id", ""),
                                    "name": t.get("name", ""),
                                })
                                break

                profile = {
                    "name": group.get("name", ""),
                    "aliases": group.get("aliases", []),
                    "description": group.get("description", "")[:300],
                    "attack_id": group_id,
                    "technique_count": len(techniques),
                    "techniques": techniques[:20],
                }
                actor_profiles.append(profile)
                print(f"  [+] {group.get('name')}: {len(techniques)} techniques")

        self.assessment["threat_actors"] = actor_profiles
        print(f"[+] Profiled {len(actor_profiles)} threat actors for {self.sector}")
        return actor_profiles

    def identify_common_techniques(self):
        """Find the most commonly used techniques across sector actors."""
        from collections import Counter
        technique_counter = Counter()

        for actor in self.assessment["threat_actors"]:
            for tech in actor.get("techniques", []):
                technique_counter[f"{tech['id']}:{tech['name']}"] += 1

        common = technique_counter.most_common(20)
        self.assessment["common_techniques"] = [
            {
                "technique": tech.split(":")[0],
                "name": tech.split(":")[1] if ":" in tech else "",
                "actor_count": count,
                "actors_using": [
                    a["name"] for a in self.assessment["threat_actors"]
                    if any(t["id"] == tech.split(":")[0] for t in a.get("techniques", []))
                ],
            }
            for tech, count in common
        ]

        print(f"\n=== Top Techniques for {self.sector.upper()} ===")
        for entry in self.assessment["common_techniques"][:10]:
            print(f"  {entry['technique']} {entry['name']}: "
                  f"used by {entry['actor_count']} groups")

        return self.assessment["common_techniques"]

assessment = SectorThreatAssessment("financial")
assessment.analyze_sector_actors()
assessment.identify_common_techniques()
步骤 2:分析攻击向量和初始访问
def analyze_attack_vectors(assessment):
    """Analyze initial access vectors common for the sector."""
    initial_access_techniques = [
        t for t in assessment.assessment["common_techniques"]
        if t["technique"].startswith("T1566") or t["technique"].startswith("T1190")
        or t["technique"].startswith("T1133") or t["technique"].startswith("T1078")
        or t["technique"].startswith("T1195")
    ]

    # Supplement with known sector-specific vectors
    sector_vectors = {
        "financial": {
            "primary": ["Spearphishing (T1566)", "Exploit Public-Facing App (T1190)",
                        "Valid Accounts (T1078)", "Supply Chain Compromise (T1195)"],
            "emerging": ["MFA Fatigue/Push Bombing", "QR Code Phishing (Quishing)",
                         "Business Email Compromise", "API Key Theft"],
        },
        "healthcare": {
            "primary": ["Spearphishing (T1566)", "Exploit Public-Facing App (T1190)",
                        "External Remote Services (T1133)", "Valid Accounts (T1078)"],
            "emerging": ["IoMT Device Exploitation", "Telehealth Platform Attacks",
                         "Medical Device Firmware Attacks", "Supply Chain via EHR Vendors"],
        },
        "energy": {
            "primary": ["Spearphishing (T1566)", "Exploit Public-Facing App (T1190)",
                        "External Remote Services (T1133)", "Supply Chain Compromise (T1195)"],
            "emerging": ["OT/ICS Protocol Exploitation", "Remote Access to SCADA",
                         "Engineering Workstation Compromise", "Vendor VPN Exploitation"],
        },
    }

    vectors = sector_vectors.get(assessment.sector, {})
    assessment.assessment["attack_vectors"] = vectors
    return vectors
步骤 3:生成行业威胁报告
def generate_sector_report(assessment):
    data = assessment.assessment
    report = f"""# {data['sector'].title()} Sector Threat Landscape Assessment
Generated: {datetime.datetime.now().isoformat()}

## Executive Summary
This assessment analyzes the cyber threat landscape for the {data['sector']} sector,
identifying {len(data['threat_actors'])} active threat groups, their preferred techniques,
and recommended defensive priorities.

## Threat Actor Summary
| Actor | ATT&CK ID | Techniques | Key Focus |
|-------|-----------|------------|-----------|
"""
    for actor in data["threat_actors"]:
        report += (f"| {actor['name']} | {actor['attack_id']} "
                   f"| {actor['technique_count']} | {actor['description'][:60]}... |\n")

    report += f"""
## Most Common Techniques
| Rank | Technique | Name | Groups Using |
|------|-----------|------|-------------|
"""
    for i, tech in enumerate(data.get("common_techniques", [])[:15], 1):
        actors = ", ".join(tech["actors_using"][:3])
        report += f"| {i} | {tech['technique']} | {tech['name']} | {actors} |\n"

    vectors = data.get("attack_vectors", {})
    report += f"""
## Attack Vectors
### Primary Vectors
"""
    for v in vectors.get("primary", []):
        report += f"- {v}\n"
    report += "\n### Emerging Vectors\n"
    for v in vectors.get("emerging", []):
        report += f"- {v}\n"

    report += """
## Recommendations
1. Prioritize detections for the top 10 techniques used by sector-targeting groups
2. Conduct threat-informed red team exercises mimicking identified actors
3. Join sector ISAC for real-time threat sharing
4. Implement controls for identified initial access vectors
5. Review supply chain security posture for sector-specific risks
"""
    with open(f"threat_landscape_{data['sector']}.md", "w") as f:
        f.write(report)
    print(f"[+] Sector report saved: threat_landscape_{data['sector']}.md")

generate_sector_report(assessment)

验证标准

  • 识别并刻画行业特定的威胁行为者
  • 分析并排序各行为者之间的常见技术
  • 为目标行业映射攻击向量
  • 基于近期情报识别新兴威胁
  • 生成全面的行业威胁报告
  • 建议可操作,可用于安全投资决策

参考资料

评论

支持 Markdown