Deloney-code/SOC-Detection-Lab-Financial-Threat-Simulation
GitHub: Deloney-code/SOC-Detection-Lab-Financial-Threat-Simulation
该项目构建了一个模拟金融应用的完整攻防实验室,用于演示实时入侵检测、安全加固、内存取证及应急响应的全流程。
Stars: 0 | Forks: 0
# SOC 检测实验室 金融威胁模拟
### SQL Injection · MITM · Session Hijacking ·
### Suricata IDS · 内存取证 · 应急响应








## 本次测试解决的问题
金融机构是网络安全中
最受攻击针对的行业。金融数据
泄露的平均成本超过 600 万美元。
然而,导致其中大多数
泄露的攻击并不是复杂的 zero-day。
它们是自 1998 年起就有记录的技术——
SQL injection、session hijacking、SSL stripping。
组织不断受挫于
这些攻击的原因并非无知。
而是因为,在知道存在漏洞与
确切理解攻击者如何端到端地
利用它,以及每个防御控制实际阻止了什么之间,存在着差距。
本次测试弥补了这一差距。
不是理论上的。而是借助一个正常运行的银行
应用程序、真实的漏洞利用执行、在攻击期间触发的实时 IDS
警报,以及在
RAM 级别确认攻击者活动的内存取证。
## 测试概览
| | |
|---|---|
| **环境** | VMware 隔离的 host-only 网络 |
| **目标** | SecureBank — 模拟的金融门户 |
| **Red Team** | Sime Delonney Njeba (cypherguy) — Kali Linux |
| **Blue Team** | Mbaku Bertin Tengwei — Ubuntu Server |
| **指导老师** | Engr. Taku Che Otto |
| **机构** | 巴门达大学 — NAHPI |
| **模块** | 高级密码学 / 网络安全 |
| **日期** | 2026 年 6 月 |
## 网络拓扑
```
┌─────────────────────────────────────────────┐
│ ISOLATED HOST-ONLY NETWORK │
│ 192.168.100.0/24 — No internet access │
│ │
│ Kali Linux 192.168.100.10 │
│ Red Team Attacker cypherguy │
│ │
│ Ubuntu Server 192.168.100.20 │
│ Target + Blue Team Flask / Apache │
│ │
│ Windows Host 192.168.100.30 │
│ Victim Workstation Sysmon v15.20 │
└─────────────────────────────────────────────┘
```
## 构建内容
SecureBank 环境从零开始构建,
以模拟真实的金融机构网络:
**银行应用程序:**
一个故意留下漏洞的 Flask Web 应用程序,
带有专业的银行 UI——登录门户、
账户仪表板、交易历史,
以及包含五个账户的 SQLite 客户数据库。
漏洞在于:在 SQL 查询中直接进行字符串拼接——
这正是导致
真实金融数据泄露的相同模式。
**检测栈:**
编写了七条自定义 Suricata IDS 规则,
用于检测 Red Team
攻击的每个特定阶段——从最初的 Nmap 扫描到
SQL injection、MITM 流量
以及明文凭据提交。
**受害者工作站:**
配置了 Sysmon v15.20 的 Windows 主机
(用于内核级取证日志记录),桌面上放有
测试 PII 文件,并使用 Firefox 访问
银行门户。
## 攻击目标
Red Team 执行了三个可用
目标中的两个。选择这两个是因为它们
展示了完整的攻击者 kill chain,
从初始访问、数据窃取
到完全接管账户。
```
Objective 1: SQL Injection — Customer Data Theft
All five customer records exfiltrated
including names, emails, balances,
and plaintext passwords
Objective 2: Session Hijacking — User Impersonation
Mbaku's authenticated session stolen
via ARP poisoning and SSL stripping
Full account access from Kali without
ever knowing his password
Objective 3: SMB Exploitation (Not pursued)
EternalBlue would have been blocked
by iptables and detected by Suricata
Documented in Section 2.5
```
## 关键发现
### 发现 1 — SQL Injection 暴露了价值 91,000 美元的客户账户
银行门户登录表单由于身份验证查询中
未经处理的字符串拼接,容易受到
经典的 SQL injection 攻击。
**手动 payload:**
```
' OR '1'='1' --
```
**结果:** 身份验证被完全绕过。
所有五条客户记录伴随警告
横幅被暴露。账户余额可见,其中包括
Mbaku 的 91,000.00 美元账户。
**使用 sqlmap 进行自动化利用:**
利用基于布尔的盲注和
UNION 查询技术,不到 60 秒
就dump了整个数据库。
**业务影响:** 在真实的金融
环境中,这构成了对 GDPR 和 PCI-DSS 要求的严重违反,
将引发强制通知义务以及
潜在高达数百万美元的监管罚款。
**Blue Team 检测:**
```
Suricata SID 9000004 fired immediately:
"SQL INJECTION ATTEMPT on Banking Portal"
```
### 发现 2 — SSL Stripping 成功是因为缺少了一个 Header
TLS 已正确配置。使用了 4096 位 RSA
证书。加密未被破坏。
攻击者根本不需要破坏它。
Bettercap 使用 ARP 缓存
投毒,将其自身置于 Windows
受害者和 Ubuntu 服务器之间。它在 TLS 建立之前拦截了初始的 HTTP 请求——
向受害者提供普通的 HTTP,同时
与真实服务器维持单独的加密连接。
受害者的浏览器从未收到 HSTS
Header。它没有获得强制执行 HTTPS 的指示。
降级攻击悄无声息地成功了。
Mbaku 的凭据和 session cookie
通过普通的 HTTP 经由 Kali 传输。
被 Bettercap 的嗅探器以明文形式捕获。
**修复方法只需一行 Apache 配置:**
```
Header always set Strict-Transport-Security
"max-age=31536000; includeSubDomains"
```
启用 HSTS 后,浏览器完全拒绝了
任何连接到该门户的 HTTP 连接。
在不改变应用程序
代码单行的情况下,SSL stripping 攻击变得不再可能。
**教训:** TLS 无法保护
一个永远不会成为 TLS 的连接。HSTS
不是可有可无的——正是它使得 TLS
强制执行得以真正生效。
### 发现 3 — 内存取证在 RAM 级别确认了攻击者活动
在攻击窗口期间,使用
winpmem v4.0 获取了 5GB 的 Windows 内存dump。
Volatility3 分析在内存
级别确认了:
```
Process list: Sysmon64 running throughout
PowerShell active
winpmem acquisition visible
Network connections: Active connections to
192.168.100.20 confirmed
Command line args: winpmem acquisition command
irrefutable in process memory
```
**重要性:** 应用程序日志可以被
删除。SIEM 警报可以被抑制。
但是在攻击期间捕获的 RAM 内容
无法被事后篡改。
内存取证提供了最深度的
可用取证证据层——这种证据在法律诉讼和监管
调查中能够站得住脚。
## Blue Team 控制 — 哪些奏效了以及原因
| 控制 | 阻止的攻击 | 机制 |
|---|---|---|
| Suricata 自定义规则 | 检测到所有攻击阶段 | 7 条规则覆盖从侦察到凭据窃取 |
| iptables default-deny | 阻止了 SMB 利用 | 针对端口 445 上的 Kali 设置 DROP 规则 |
| HSTS Header | 使 SSL stripping 变得不可能 | 浏览器无条件强制执行 HTTPS |
| Sysmon v15.20 | 完整的主机取证时间线 | 内核级进程和网络日志记录 |
| 不可变的 rsync 备份 | 抗勒索软件恢复 | chattr +i 防止 root 删除 |
| Volatility3 取证 | RAM 级别的攻击确认 | winpmem + 符号解析 |
## 攻击时间线
| 时间 | 角色 | 行动 | 检测 |
|---|---|---|---|
| 07:12 | Red | 发起 Nmap 扫描 | Suricata SID 9000001 — NMAP SYN Scan |
| 07:20 | Red | 在浏览器中进行 SQL injection | Suricata SID 9000004 — SQL INJECTION ATTEMPT |
| 07:20 | Red | sqlmap 自动化 dump | Suricata SID 9000003, 9000004 |
| 08:25 | Red | Bettercap ARP 欺骗开始 | Suricata SID 9000003 — POSSIBLE MITM |
| 08:29 | Red | 捕获 Mbaku 凭据 | Suricata SID 9000006 — PLAINTEXT CREDENTIALS |
| 08:29 | Red | 重放 session cookie | Sysmon Event ID 1 — 记录到进程活动 |
| 11:25 | Blue | 创建不可变的 rsync 备份 | lsattr 确认 chattr +i 已激活 |
| 13:54 | Blue | 在 Apache 上启用 HSTS | curl -I 确认 Strict-Transport-Security |
| 15:06 | Blue | 应用 iptables default-deny | smbclient 返回 NT_STATUS_IO_TIMEOUT |
## Suricata 自定义规则
为本次测试编写的全部七条自定义检测规则
位于
[environment/suricata-rules/local.rules](environment/suricata-rules/local.rules)
规则涵盖:
```
SID 9000001 Nmap SYN scan detection
SID 9000003 MITM high-volume forwarding traffic
SID 9000004 SQL injection attempt on port 5000
SID 9000005 SMB login attempt on port 445
SID 9000006 Plaintext credential submission
```
## 补救计划
解决根本原因的五项具体修复措施:
**修复 1 — 参数化查询**
在代码层面消除 SQL injection。
将用户输入视为数据,绝不视为 SQL 语法。
**修复 2 — HSTS preload**
将 HSTS 保护扩展到以前
从未收到过该 Header 的首次访问者。
**修复 3 — bcrypt 密码哈希**
使得破解的数据库哈希在计算上
无法被逆向。MD5 在几秒钟内即可破解。
使用 rounds=12 的 bcrypt 则需要数年时间。
**修复 4 — 强化 Session 管理**
15 分钟超时、Secure 标志、HttpOnly 标志、
SameSite=Strict、IP 绑定。被窃取的 cookie
在重放成为可能之前即已过期。
**修复 5 — 网络分段**
为 Web 和文件
服务划分独立的网段。最低要求 SMBv2、强制签名、
仅限 VPN 的文件共享访问。
完整实施细节见
[remediation-plan.md](remediation-plan.md)
## 记录的挑战
遇到的每一个真实世界障碍都
记录了根本原因和解决方案。
```
iptables self-lockout Applied DROP before ACCEPT rules
Recovered via direct console access
Apache config conflict Previous lab SSL config silently
overriding HSTS configuration
Found via sites-enabled/ audit
Volatility symbol error Windows 11 build 22621 not in
standard symbol pack
Resolved via Microsoft symbol server
Memory dump truncation /tmp partition limited to 4.2GB
Retransferred to /home — 5.0GB complete
Bettercap DNS failure nameserver not configured
Set explicitly via resolv.conf
```
## 本实验室涵盖的内容
```
Red Team:
Nmap service version scan and OS fingerprinting
Manual SQL injection (browser-based)
Automated SQL injection (sqlmap)
ARP cache poisoning (Bettercap)
SSL stripping (Bettercap HTTP proxy)
Session cookie capture and replay
MD5 hash cracking (John the Ripper + rockyou.txt)
Blue Team:
Custom Suricata IDS rules (7 rules)
iptables stateful firewall with default-deny
HSTS and TLS certificate (Apache reverse proxy)
Sysmon v15.20 Windows forensic logging
Immutable rsync backup with chattr +i
Volatility3 Windows memory forensics
Database recovery demonstration
Documentation:
Complete attack timeline with Suricata timestamps
Remediation plan with production-ready code
5 documented challenges with root causes
38-page technical report
```
## 这与我的其他工作有何关联
本实验室中的 PKI 方法论——4096 位 RSA
证书、Apache HTTPS、HSTS 强制执行——
应用了在以下项目中从零开始构建的
相同技术:
[Lab 5: PKI Certificate Authority](https://github.com/Deloney-code/enterprise-network-security-labs)
Suricata 检测规则扩展了
以下项目中的自定义规则编写:
[Lab 6: Enterprise Firewall & IDS](https://github.com/Deloney-code/Enterprise-Firewall-Deployment-Security-Architecture-Validation-FortiGate-NGFW)
IAM 补救修复措施——session 管理、
RBAC、安全 cookie 处理——直接映射到
以下项目中的访问控制框架:
[Enterprise Linux IAM Hardening](https://github.com/Deloney-code/enterprise-linux-iam-hardening)
SQL injection 攻击链代表了对以下项目中记录的相同 Web 应用程序漏洞的
攻击视角:
[Simulated Enterprise Penetration Test](https://github.com/Deloney-code/simulated-enterprise-pentest)
## 仓库结构
```
securebank-red-vs-blue-lab/
│
├── README.md
├── remediation-plan.md
├── attack-timeline.md
│
├── environment/
│ ├── network-topology.md
│ ├── banking-app/
│ │ └── app.py
│ └── suricata-rules/
│ └── local.rules
│
├── red-team/
│ ├── 01-reconnaissance.md
│ ├── 02-sql-injection.md
│ ├── 03-session-hijacking.md
│ └── 04-hash-cracking.md
│
├── blue-team/
│ ├── 01-suricata-detection.md
│ ├── 02-iptables-hardening.md
│ ├── 03-hsts-tls.md
│ ├── 04-sysmon-forensics.md
│ ├── 05-backup-recovery.md
│ └── 06-volatility-memory-forensics.md
│
└── screenshots/
└── (33 screenshots from engagement)
```
## 所需截图
```
□ 01 VMware host-only network configuration
□ 02 All three VMs connectivity confirmed
□ 03 Ubuntu services running (Apache, Flask, Samba)
□ 04 Suricata rules loaded — configuration valid
□ 05 SQLite database populated — five records
□ 06 TLS certificate generated — 4096-bit RSA
□ 07 Sysmon v15.20 installed and running
□ 08 SecureBank login portal
□ 09 Normal authenticated login — Alice only
□ 10 SQL injection payload in email field
□ 11 All five records exposed — warning banner
□ 12 sqlmap automated dump — all records
□ 13 Direct SQLite query confirming data
□ 14 Bettercap MITM active — ARP spoof enabled
□ 15 Mbaku credentials captured in plaintext
□ 16 curl session replay — Mbaku impersonated
□ 17 Full visual impersonation — dashboard
□ 18 John the Ripper — three hashes cracked
□ 19 Suricata config validated — all rules loaded
□ 20 Suricata fast.log — Nmap detection
□ 21 Suricata fast.log — MITM detection
□ 22 iptables rule set — default-deny applied
□ 23 smbclient blocked — NT_STATUS_IO_TIMEOUT
□ 24 HSTS header confirmed — curl -I output
□ 25 Sysmon v15.20 service running
□ 26 Sysmon Event ID 1 — process logs
□ 27 Immutable flag — lsattr confirmed
□ 28 Database recovered — all five records
□ 29 winpmem memory acquisition
□ 30 Memory dump — 5GB confirmed
□ 31 Volatility — process list
□ 32 Volatility — network connections
□ 33 Volatility — command line arguments
```
## 关于
**Sime Delonney Njeba (cypherguy)**
CEH v13 — A 成绩 | 网络安全理学硕士(在读)
巴门达大学 — NAHPI
网络安全与数学密码学中心
[GitHub](https://github.com/Deloney-code) ·
[LinkedIn](https://linkedin.com/in/sime-delonney-njeba-10b89a33a)
**Mbaku Bertin Tengwei**
网络安全理学硕士(在读)
巴门达大学 — NAHPI
标签:CISA项目, DOE合作, Flask, HTTP工具, Metaprompt, SOC模拟, 子域名变形, 安全靶场, 库, 应急响应, 数字取证, 网络安全, 自动化脚本, 隐私保护