一、引言:为什么银行证券行业必须用ATT&CK做业务安全测试?
传统安全测试(如渗透测试、漏洞扫描)聚焦“技术漏洞”,而忽视“攻击者行为路径”与“业务影响”。在金融行业,攻击者目标明确:
- 窃取客户资金(TA0040 Impact)
- 篡改交易指令(T1565 Data Manipulation)
- 中断交易服务(T1499 Endpoint DoS)
- 绕过KYC/AML(FIN.T003)
MITRE ATT&CK® 提供标准化攻击行为语言,使安全团队能:
✅ 以攻击者视角设计测试用例
✅ 量化检测覆盖度(Detection Coverage)
✅ 对齐监管要求(如《金融行业网络安全等级保护》《证券期货业网络安全管理办法》)
✅ 构建自动化、持续化的红蓝对抗体系
二、整体实施框架:ATT&CK驱动的7阶段闭环流程

⚙️ 每个阶段均包含:目标、输入、输出、责任人、技术实现、验收标准、配套工具。三、阶段详解(含流程图、脚本、配置)
▶ 阶段1:资产与业务映射 —— 构建“攻击面-ATT&CK”映射矩阵
🎯 目标:
识别所有业务系统、接口、数据流,并标注其对应的ATT&CK初始访问点与影响面。
📥 输入:
- CMDB资产清单
- API文档(Swagger/OpenAPI)
- 数据流图(如客户 → App → API网关 → 订单服务 → 清算系统)
- 用户权限矩阵(RBAC)
📤 输出:
- 《ATT&CK资产映射矩阵.xlsx》
- 《高风险接口清单.csv》
- 《数据敏感级别-ATT&CK Impact映射表》
🔧 技术实现:
1. 自动化API风险标注脚本(Python)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| # api_attack_mapper.py import yaml import requests
HIGH_RISK_KEYWORDS = ['trade', 'transfer', 'login', 'otp', 'account', 'settle']
def scan_api_for_attack_vector(swagger_url, system_name): resp = requests.get(swagger_url) spec = yaml.safe_load(resp.text) mappings = [] for path, methods in spec.get('paths', {}).items(): for method, config in methods.items(): risk_level = "LOW" tactics = [] techniques = [] if any(kw in path for kw in HIGH_RISK_KEYWORDS): risk_level = "HIGH" tactics.append("TA0001 Initial Access") techniques.append("T1190 Exploit Public-Facing Application") if 'otp' in path: tactics.append("TA0006 Credential Access") techniques.append("T1556 Modify Authentication Process") mappings.append({ 'system': system_name, 'endpoint': path, 'method': method.upper(), 'risk_level': risk_level, 'tactics': "; ".join(tactics), 'techniques': "; ".join(techniques), 'description': config.get('summary', '') }) return mappings
# 示例:扫描证券交易API mappings = scan_api_for_attack_vector("https://trade.api.securities.com/v3/swagger.yaml", "Stock Trading System")
|
2. 业务流-ATT&CK映射泳道图

✅ 验收标准:
- 覆盖100%核心业务系统
- 每个高风险接口标注ATT&CK技术编号
- 与CMDB自动同步(通过API)
▶ 阶段2:ATT&CK战术建模 —— 构建金融行业专属攻击知识库
🎯 目标:
在MITRE ATT&CK Enterprise基础上,扩展金融行业专属攻击技术(FIN.T),形成可执行的战术矩阵。
📥 输入:
- 阶段1输出的映射矩阵
- 内部历史攻击事件(如钓鱼、API滥用、交易篡改)
- 行业报告(如FS-ISAC、CNVD金融专项)
📤 输出:
- 《金融行业ATT&CK扩展矩阵.json》
- 《Top 10攻击链战术组合清单》
- ATT&CK Navigator自定义层文件
🔧 技术实现:
1. 金融行业自定义ATT&CK技术(FIN.T)
| FIN.T编号 |
技术名称 |
描述 |
映射战术 |
原生技术参考 |
| FIN.T001 |
交易订单重放攻击 |
截获并重复提交合法交易请求 |
TA0040 Impact |
T1565.001 |
| FIN.T002 |
行情延迟套利 |
利用行情延迟在多个交易所套利 |
TA0040 Impact |
T1499.003 |
| FIN.T003 |
KYC证件伪造绕过 |
利用OCR/人脸识别漏洞上传伪造证件 |
TA0001 Initial Access |
T1204.002 |
| FIN.T004 |
OTP劫持绕过多因子 |
中间人窃取短信/邮件OTP |
TA0006 Credential Access |
T1556.003 |
| FIN.T005 |
清算指令伪造 |
伪造SWIFT/支付报文触发非法转账 |
TA0040 Impact |
T1602 |
| FIN.T006 |
员工权限横向移动 |
利用内部运维工具(如Ansible)横向渗透 |
TA0008 Lateral Movement |
T1021.004 |
2. ATT&CK Navigator 自定义层配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| { "name": "Banking & Securities FIN.T Layer", "version": "2.1", "domain": "enterprise-attack", "techniques": [ { "techniqueID": "T1190", "color": "#ff6384", "comment": "High risk in public banking APIs" }, { "techniqueID": "FIN.T001", "tactic": "impact", "color": "#36a2eb", "enabled": true, "metadata": [ { "name": "POC Script", "value": "scripts/fin_t001_replay_attack.py" } ] } ], "gradient": { "colors": ["#ff6384", "#36a2eb"], "minValue": 0, "maxValue": 100 }, "legendItems": [ { "label": "Financial Custom Technique (FIN.T)", "color": "#36a2eb" } ] }
|
✅ 验收标准:
- 自定义FIN.T技术 ≥ 6个
- 每个FIN.T技术有POC脚本验证
- 可在ATT&CK Navigator中可视化叠加
▶ 阶段3:红队攻击链设计 —— 模拟真实APT攻击路径
🎯 目标:
设计3~5条覆盖“初始访问→执行→持久化→横向→影响”的完整攻击链,每条链标注ATT&CK技术编号。
📥 输入:
- 《金融行业ATT&CK扩展矩阵.json》
- 《高风险接口清单.csv》
- 内部漏洞报告(如弱口令、未授权API)
📤 输出:
- 《红队攻击链设计文档.docx》
- 《攻击链执行脚本包.zip》(含Payload、C2 Profile、清理脚本)
- 《攻击链ATT&CK覆盖图.png》
🔧 技术实现:
1. 攻击链示例:券商“钓鱼→横向→交易中断”
2. Cobalt Strike Profile 示例(规避检测)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| http-config { headers "Accept: application/json"; headers "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0 Safari/537.36"; }
http-get { client { header "X-Trade-Token" "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; metadata "base64"; } server { output "json" "{ \"status\": \"success\", \"data\": \"*OUTPUT*\" }"; } }
http-post { client { id "base64"; output "json" "{ \"action\": \"submit_order\", \"payload\": \"*OUTPUT*\" }"; } server { output "json" "{ \"code\": 200, \"msg\": \"Order received\" }"; } }
|
3. 自动化清理脚本(避免影响生产)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import os import winreg
def clean_traces(): os.system('del /F /Q %TEMP%\\*.tmp') key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Run", 0, winreg.KEY_SET_VALUE) try: winreg.DeleteValue(key, "Updater") except: pass winreg.CloseKey(key) os.system('wevtutil cl Application') os.system('wevtutil cl Security')
if __name__ == "__main__": clean_traces()
|
✅ 验收标准:
- 每条攻击链覆盖≥5个ATT&CK技术
- 攻击链可在测试环境完整执行
- 有清理脚本确保无残留
▶ 阶段4:自动化测试执行 —— 集成Burp/Atomic Red Team/CALDERA
🎯 目标:
将ATT&CK技术编码为自动化测试用例,集成到CI/CD或定期扫描中。
📥 输入:
- 《攻击链设计文档.docx》
- 《高风险接口清单.csv》
📤 输出:
- 《自动化测试用例库.yaml》
- 《CI/CD集成配置指南.md》
- 《测试报告-带ATT&CK编号.html》
🔧 技术实现:
1. Burp Suite + ATT&CK插件(自定义扫描配置)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| scan_config: name: "Banking ATT&CK Scan Profile" included_techniques: - T1190 - T1552.001 - T1566.001 - FIN.T003 checks: - name: "Check for hardcoded credentials in JS" type: "regex" pattern: "(?i)(apikey|password|token|secret).{0,5}[=:]['\"][^'\"]+['\"]" technique: "T1552.001" - name: "Check for missing OTP in trade API" type: "http" request: "POST /api/v1/trade HTTP/1.1\nHost: target\n\n{\"stock\":\"AAPL\",\"qty\":10}" response_code: 200 technique: "FIN.T004"
|
2. Atomic Red Team 测试脚本(T1078合法账户滥用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| --- attack_technique: T1078.003 display_name: "Valid Accounts - Local Accounts (Trading System)"
atomic_tests: - name: Login to trading system with valid account supported_platforms: [windows] executor: command: | $user = "trade_admin" $pass = ConvertTo-SecureString "Winter2025!" -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential($user, $pass) Invoke-Command -ComputerName TRADE-SERVER-01 -Credential $cred -ScriptBlock { Get-Service "TradingEngine" }
|
3. GitLab CI/CD 集成示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| stages: - security-test
att&ck-scan: stage: security-test script: - pip install atomic-red-team - python -m atc.execute --test T1190,T1552.001,FIN.T003 --target $CI_ENVIRONMENT_URL - ./generate_report.py --format html --output report.html artifacts: paths: - report.html only: - main
|
✅ 验收标准:
- 自动化覆盖率 ≥ 70% 高风险技术
- 每次发布前自动执行
- 报告含ATT&CK编号与修复建议
▶ 阶段5:蓝队检测验证 —— 构建ATT&CK驱动的检测规则
🎯 目标:
验证SIEM/SOC/XDR对ATT&CK技术的检测能力,输出检测覆盖热力图。
📥 输入:
📤 输出:
- 《ATT&CK检测覆盖热力图.png》
- 《Sigma检测规则库.yaml》
- 《检测缺口报告.xlsx》
🔧 技术实现:
1. Sigma规则示例(检测T1055进程注入)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| title: Detect Process Injection in Trading Terminal description: Detects suspicious DLL/Shellcode injection into trading_client.exe logsource: product: windows category: process_creation detection: selection: ParentImage|endswith: - '\explorer.exe' - '\svchost.exe' - '\dllhost.exe' Image|endswith: '\trading_client.exe' GrantedAccess: '0x1F1FFF' # PROCESS_ALL_ACCESS condition: selection falsepositives: - Legitimate plugin loading (rare in trading client) level: high tags: - attack.execution - attack.t1055
|
2. ELK检测规则(检测FIN.T001订单重放)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| // Kibana Rule: Detect Order Replay Attack { "rule_id": "fin_t001_order_replay", "type": "query", "query": "event.action: \"trade_order\" AND trade_id: *", "time_window": "5m", "threshold": 100, "group_by": ["user.id", "trade.symbol", "trade.price"], "actions": [ { "name": "alert_security_team", "webhook": "https://soc.webhook/alert" } ] }
|
阶段6:差距分析与加固 —— 从检测缺口到防御加固
🎯 目标:
基于检测缺口报告,制定加固方案,更新策略、规则、架构。
📥 输入:
- 《检测缺口报告.xlsx》
- 《攻击链执行报告.docx》
📤 输出:
- 《安全加固方案.docx》
- 《WAF/SIEM规则更新清单.csv》
- 《架构加固实施计划.xlsx》
🔧 技术实现:
1. WAF规则加固(防FIN.T001重放攻击)
深色版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| map $http_x_trade_id $order_replay_risk { default 0; ~^.*$ 1; }
limit_req_zone $http_x_trade_id zone=trade_replay:10m rate=1r/s;
server { location /api/trade { limit_req zone=trade_replay burst=2 nodelay; if ($order_replay_risk) { set $flag "${flag}A"; } if ($request_method = POST) { set $flag "${flag}B"; } if ($flag = AB) { access_log /var/log/nginx/trade_replay.log; } proxy_pass http://trading_backend; } }
|
2. 权限最小化加固(防T1078横向移动)
1 2 3 4 5 6
| $account = "DOMAIN\trade_admin" $groups = Get-ADPrincipalGroupMembership $account | Where-Object { $_.Name -notin @("TradingOperators", "ReadOnlyUsers") } foreach ($group in $groups) { Remove-ADGroupMember -Identity $group -Members $account -Confirm:$false }
|
✅ 验收标准:
- 所有高风险缺口100%制定加固计划
- 加固后复测通过率 ≥ 95%
- 更新CMDB与权限矩阵
▶ 阶段7:持续度量与迭代 —— 建立KPI与自动化仪表盘
🎯 目标:
量化ATT&CK覆盖度、检测率、修复率,驱动持续改进。
📥 输入:
- 各阶段输出报告
- SIEM告警日志
- 漏洞管理系统数据
📤 输出:
- 《ATT&CK安全成熟度仪表盘.xlsx》
- 《月度安全度量报告.pptx》
- 自动化度量脚本
🔧 技术实现:
1. 度量指标模板
| KPI |
计算公式 |
目标值 |
| ATT&CK技术覆盖率 |
已测试技术数 / 总相关技术数 |
≥90% |
| 检测率(Detection Rate) |
被检测到攻击链数 / 总执行攻击链数 |
≥85% |
| 平均修复时间(MTTR) |
从发现到修复的平均小时数 |
≤72h |
| 自动化测试执行率 |
自动化用例数 / 总用例数 |
≥80% |
2. 自动化度量脚本(Python + Elasticsearch)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # metrics_collector.py from elasticsearch import Elasticsearch import pandas as pd
es = Elasticsearch("https://es.soc.bank:9200")
def calculate_detection_rate(attck_technique): total_executed = es.count(index="redteam_logs", body={"query": {"term": {"technique_id": attck_technique}}})['count'] detected = es.count(index="siem_alerts", body={"query": {"term": {"attack.technique": attck_technique}}})['count'] return detected / total_executed if total_executed > 0 else 0
techniques = ["T1190", "T1055", "T1078", "FIN.T001"] rates = {t: calculate_detection_rate(t) for t in techniques}
df = pd.DataFrame(list(rates.items()), columns=['Technique', 'Detection Rate']) df.to_excel("detection_rates.xlsx", index=False)
|
3. Grafana仪表盘示例(指标可视化)

✅ 验收标准:
四、实战案例:某全国性银行“网银钓鱼→资金转移”攻击链测试
背景:
模拟攻击者通过钓鱼邮件入侵员工电脑,最终窃取客户资金。
攻击链:

检测缺口:
- EDR未告警T1555.003(Chrome密码窃取)
- SIEM未关联T1105与T1199
加固措施:
- 部署Chrome扩展禁止保存网银密码
- 新增Sigma规则检测“powershell + chrome.exe + AppData\Local\Google”
- 启用网银交易二次确认(即使有会话)
效果:
- 检测率从40%提升至92%
- MTTR从120小时降至48小时
五、挑战与应对
| 挑战 |
应对方案 |
| 业务系统不敢真实攻击 |
使用影子系统 + 流量镜像 + 无害Payload |
| 金融专属攻击无原生ATT&CK编号 |
建立FIN.T扩展层,提交MITRE社区共享 |
| 检测规则误报率高 |
使用Sub-technique细化 + 机器学习动态降噪 |
| 跨部门协作难 |
建立ATT&CK编号作为统一语言,纳入KPI考核 |
六、结语与行动建议
MITRE ATT&CK不是理论框架,而是可执行、可度量、可汇报的安全工程方法论。在银行证券行业,我们建议:
- 🚀 立即启动:组建ATT&CK专项小组,6个月内完成首轮闭环;
- 📊 可视化汇报:使用ATT&CK Navigator向管理层展示覆盖热力图;
- 🤖 自动化优先:将ATT&CK测试集成到CI/CD,实现“发布即测试”;
- 🧩 共建生态:与同业、监管机构共享FIN.T技术库,提升行业水位。
🔐 安全是持续的过程,ATT&CK是导航的罗盘。
从今天起,让每一次安全测试,都带着ATT&CK的编号。
附录
附录A:金融行业Top 20 ATT&CK Techniques 清单(含FIN.T)
| 技术编号 |
技术名称 |
适用系统 |
| T1190 |
Exploit Public-Facing App |
网银/证券App |
| T1566.001 |
Phishing |
员工终端 |
| T1552.001 |
Unsecured Credentials in Files |
前端JS/配置文件 |
| T1078.003 |
Valid Accounts - Local |
核心系统 |
| FIN.T001 |
交易订单重放攻击 |
交易引擎 |
| … |
… |
… |
附录B:工具清单
本文所有技术细节、脚本、流程图均可在真实环境中部署执行,非理论推演。欢迎交流指正。