| name | performing-threat-landscape-assessment-for-sector |
| description | 通过分析威胁行为者定向攻击模式、常见攻击向量和行业特定漏洞,开展行业特定威胁态势评估,为组织风险管理提供决策依据 |
| domain | cybersecurity |
| subdomain | threat-intelligence |
| tags | ["threat-landscape","sector-analysis","risk-assessment","threat-intelligence","industry-targeting","cti","strategic-intelligence"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
执行行业威胁态势评估
概述
行业特定威胁态势评估(Threat Landscape Assessment)通过研究哪些威胁行为者针对特定行业、其惯用攻击向量和 TTP(战术、技术和程序,Tactics, Techniques, and Procedures)、常被利用的漏洞、历史事件数据及新兴威胁,分析特定行业垂直领域(医疗、金融服务、能源、政府、制造业)所面临的网络威胁环境。该评估为风险管理、安全投入优先级排序和董事会级汇报提供可落地的情报支持。
前置条件
- Python 3.9+,安装
attackcti、requests、pandas、matplotlib 库
- 可访问威胁情报源(AlienVault OTX、MISP、厂商报告)
- MITRE ATT&CK 知识库用于 TTP 映射
- 行业 ISAC(信息共享与分析中心,Information Sharing and Analysis Center)会员资格(FS-ISAC、H-ISAC、E-ISAC 等)
- 了解行业特定监管要求
核心概念
行业定向攻击分析
不同行业面临不同的威胁画像。金融服务面临高级国家级威胁行为者(Lazarus Group)和专注于金融欺诈的网络犯罪组织。医疗行业面临利用紧迫性和遗留系统的勒索软件(Ransomware)组织。能源和关键基础设施面临具有破坏能力的国家级组织(TEMP.Veles、Sandworm)。政府部门面临以间谍活动为目的的 APT(高级持续性威胁,Advanced Persistent Threat)组织(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 ():
.sector = sector.lower()
.lift = attack_client()
.groups = .lift.get_groups()
.assessment = {
: sector,
: [],
: {},
: {},
: {},
}
():
target_groups = .SECTOR_GROUPS.get(.sector, [])
actor_profiles = []
group_name target_groups:
group = (
(g g .groups
g.get(, ).lower() == group_name.lower()
group_name.lower() [a.lower() a g.get(, [])]),
)
group:
group_id =
ref group.get(, []):
ref.get() == :
group_id = ref.get(, )
techniques = []
group_id:
techs = .lift.get_techniques_used_by_group(group_id)
t techs:
ref t.get(, []):
ref.get() == :
techniques.append({
: ref.get(, ),
: t.get(, ),
})
profile = {
: group.get(, ),
: group.get(, []),
: group.get(, )[:],
: group_id,
: (techniques),
: techniques[:],
}
actor_profiles.append(profile)
()
.assessment[] = actor_profiles
()
actor_profiles
():
collections Counter
technique_counter = Counter()
actor .assessment[]:
tech actor.get(, []):
technique_counter[] +=
common = technique_counter.most_common()
.assessment[] = [
{
: tech.split()[],
: tech.split()[] tech ,
: count,
: [
a[] a .assessment[]
(t[] == tech.split()[] t a.get(, []))
],
}
tech, count common
]
()
entry .assessment[][:]:
(
)
.assessment[]
assessment = SectorThreatAssessment()
assessment.analyze_sector_actors()
assessment.identify_common_techniques()
步骤 2:分析攻击向量和初始访问
def analyze_attack_vectors(assessment):
"""分析该行业常见的初始访问向量。"""
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")
]
sector_vectors = {
"financial": {
"primary": ["鱼叉式钓鱼 Spearphishing (T1566)", "利用公网应用 Exploit Public-Facing App (T1190)",
"有效账户 Valid Accounts (T1078)", "供应链攻击 Supply Chain Compromise (T1195)"],
"emerging": ["MFA 疲劳/推送轰炸", "二维码钓鱼(Quishing)",
"商业邮件攻击 BEC", "API 密钥窃取"],
},
"healthcare": {
"primary": ["鱼叉式钓鱼 Spearphishing (T1566)", "利用公网应用 Exploit Public-Facing App (T1190)",
"外部远程服务 External Remote Services (T1133)", "有效账户 Valid Accounts (T1078)"],
"emerging": ["IoMT 设备利用", "远程医疗平台攻击",
"医疗设备固件攻击", ],
},
: {
: [, ,
, ],
: [, ,
, ],
},
}
vectors = sector_vectors.get(assessment.sector, {})
assessment.assessment[] = vectors
vectors
步骤 3:生成行业威胁报告
def generate_sector_report(assessment):
data = assessment.assessment
report = f"""# {data['sector'].title()} 行业威胁态势评估
生成时间: {__import__('datetime').datetime.now().isoformat()}
## 执行摘要
本评估分析了 {data['sector']} 行业的网络威胁态势,
识别出 {len(data['threat_actors'])} 个活跃威胁组织、其惯用技术
及推荐的防御优先级。
## 威胁行为者摘要
| 行为者 | ATT&CK ID | 技术数量 | 主要关注点 |
|-------|-----------|------------|-----------|
"""
for actor in data["threat_actors"]:
report += (f"| {actor['name']} | {actor['attack_id']} "
f"| {actor['technique_count']} | {actor['description'][:60]}... |\n")
report += f"""
## 最常用技术
| 排名 | 技术 | 名称 | 使用的组织 |
|------|-----------|------|-------------|
"""
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"""
## 攻击向量
### 主要向量
"""
for v vectors.get(, []):
report +=
report +=
v vectors.get(, []):
report +=
report +=
(, ) f:
f.write(report)
()
generate_sector_report(assessment)
验证标准
- 行业特定威胁行为者已识别并完成画像
- 跨行为者的共同技术已分析排序
- 目标行业的攻击向量已完成映射
- 基于近期情报识别出新兴威胁
- 已生成全面的行业威胁报告
- 建议对安全投入决策具有可操作性
参考资料