Files
nudtns2026spring/Mitnick/main.typ
2026-05-08 21:21:45 +08:00

172 lines
9.1 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#import "labtemplate.typ": *
#show: nudtlabpaper.with(title: "Mitnick 攻击实验:深度分析与复现",
author: "程景愉",
id: "202302723005",
training_type: "无军籍",
grade: "2023",
major: "网络工程",
department: "计算机学院",
advisor: "柳林",
jobtitle: "教授",
lab: "307-208",
date: "2026.05.04",
header_str: "《网络安全》实验报告",
)
#set page(header: [
#set par(spacing: 6pt)
#align(center)[#text(size: 11pt)[《网络安全》实验报告]]
#v(-0.3em)
#line(length: 100%, stroke: (thickness: 1pt))
],)
#show heading: it => box(width: 100%)[
#v(0.50em)
#counter(heading).display()
#it.body
]
#show raw.where(block: true): it => box(
fill: rgb("#f5f5f5"),
inset: (x: 12pt, y: 10pt),
radius: 6pt,
stroke: (thickness: 1pt, paint: rgb("#e0e0e0")),
it
)
#outline(title: "目录", depth: 3, indent: 2em)
#pagebreak()
= 实验目的
Mitnick 攻击(又称 TCP 序列号预测攻击是网络安全史上最具代表性的复合攻击手段之一。1024 年,凯文·米特尼克通过该技术入侵了安全专家下村努的计算机。本次实验旨在通过现代虚拟化环境复现这一过程,达成以下深度目标:
- *底层协议拆解*:深入理解 TCP 三次握手过程中的序列号Sequence Number机制掌握其在建立连接与维护状态中的核心作用。
- *盲目欺骗技术*探索在无法直接观测目标响应包Blind Injection的极端环境下如何通过预测机制和伪造源 IP 完成完整的 TCP 握手。
- *信任边界分析*:剖析早期互联网协议(如 rsh/rlogin基于主机 IP 信任的设计哲学及其在现代网络防御视野下的致命缺陷。
- *组合攻击逻辑*:掌握 SYN Flooding、IP Spoofing 与协议逻辑漏洞利用之间的协同关系,培养体系化的网络攻击思维。
- *工具深度应用*:通过 Scapy 库进行原始套接字编程,实现对网络数据包每一位字段的精细化控制。
= 实验原理
== Mitnick 攻击的体系化分析
Mitnick 攻击并非单一漏洞的利用,而是对多个协议弱点和系统机制的联合绞杀。
=== 1. TCP 序列号预测ISN Prediction
在建立 TCP 连接时双方需交换初始序列号ISN。在 1020 年代的 Berkeley TCP 协议栈实现中ISN 的增长具有高度可预测性(例如每秒增加 128,000或每个连接增加 64,000。攻击者通过先与目标建立多次合法连接记录返回的 ISN 并计算增量,即可推算出下一次连接时目标的 ISN 值。这使得攻击者即使收不到目标的 SYN+ACK也能准确构造出与之匹配的 ACK 包。
=== 2. 信任主机的静默化Host Silencing
当攻击者 A 冒充信任主机 B 向目标 T 发送 SYN T 会将 SYN+ACK 发送给 B。此时 B 处于正常状态,其协议栈会因收到未知的确认包而发送 RST 报文重置连接导致攻击失败。Mitnick 采用 SYN Flooding 攻击使主机 B 的半连接队列Half-open Queue饱和从而使其对 T 发来的报文不作响应,达到“静默”效果。
=== 3. 跨协议层面的 IP 欺骗IP Spoofing
攻击者在构造以太网帧时,将 IP 首部的源地址设为被信任主机的 IP。这要求攻击者必须处于能够发送原始包的环境中如拥有 root 权限的原始套接字)。
=== 4. rsh 协议的“二次连接”特性
rshRemote Shell协议在 514 端口建立主连接后,会要求客户端监听一个端口(在 payload 中指定),服务端会反向连接该端口以传输 stderr 信息。如果攻击者仅完成了主连接而未对该反向连接进行响应rsh 会因为无法建立 stderr 管道而超时退出。
= 实验环境与配置
本次实验采用 Docker 容器技术构建了一个高度隔离且受控的虚拟局域网。
- *网络环境*:独立子网 `10.9.0.0/24`,通过虚拟网桥连接。
- *目标机X-Terminal*IP `10.9.0.5`,运行传统的 `inetd` 超级守护进程及 `rshd` 服务。
- *信任机Trusted Server*IP `10.9.0.6`,已被目标机配置在 `.rhosts` 中。
- *攻击机Attacker*:运行在 `host` 网络模式。这一配置至关重要,因为它允许攻击容器直接操作物理网卡,从而能够嗅探网桥上的所有流量(由于实验在单台宿主机上进行,这模拟了同一局域网下的环境)。
#figure(
image("dockerps.png", width: 95%),
caption: [基于 Docker Compose 部署的实验节点拓扑],
)
= 实验步骤及结果
== 任务 1模拟环境初始化与信任验证
=== 1.1 建立信任根基
首先在目标机 `x-terminal` 上配置 `.rhosts` 文件。该文件是 rsh 身份验证的核心,它告诉系统:只要请求来自 `10.9.0.6` `seed` 用户,即可无需密码执行命令。
```bash
# 在 x-terminal 上执行,模拟合法的系统配置
docker exec x-terminal-10.9.0.5 bash -c "echo 10.9.0.6 > /home/seed/.rhosts"
```
=== 1.2 连通性测试
在实施攻击前,需确保合法的信任路径通畅。执行以下验证命令:
```bash
docker exec trusted-server-10.9.0.6 bash -c "su seed -c 'rsh 10.9.0.5 date'"
```
#figure(
image("task1_trusted_verify.png", width: 85%),
caption: [初始信任验证:信任服务器成功获取目标机日期],
)
=== 1.3 关键:静态 ARP 缓存注入
在真实攻击中,由于信任机已被静默,目标机在发送回包前会广播 ARP 请求查询其 MAC。如果无人响应连接将由于物理层解析失败而中断。本实验通过设置静态 ARP 缓存来模拟攻击者在局域网内通过 ARP 欺骗(或利用目标机已有缓存)的情景:
```bash
docker exec x-terminal-10.9.0.5 arp -s 10.9.0.6 7a:2f:97:ea:52:7c
```
#figure(
image("task1_arp_static.png", width: 85%),
caption: [在目标机注入静态 ARP 记录,确保其数据包能正确发出],
)
== 任务 2Mitnick 核心攻击实现
=== 2.1 多线程 Scapy 攻击逻辑
攻击脚本 `mitnick_final.py` 采用了多线程架构。主线程负责发送伪造的 SYN 包,嗅探线程则实时监控网桥上的回包。
核心交互逻辑分析:
- *Step 1*: 攻击者发送 `IP(src="10.9.0.6", dst="10.9.0.5")/TCP(sport=1023, dport=514, flags="S")`
- *Step 2*: 目标机返回 SYN+ACK。攻击者通过嗅探获取其 `seq`
- *Step 3*: 攻击者回复 ACK 完成主连接握手,随后立即发送包含 payload PSH+ACK 包。
- *Step 4*: 目标机解析 payload 发现客户端要求反向连接 `1022` 端口,于是发起 SYN。攻击者回复相应的 SYN+ACK 完成第二次连接。
=== 2.2 运行攻击与日志分析
```bash
docker exec seed-attacker python3 /volumes/mitnick_final.py
```
#figure(
image("task2_attack_execution.png", width: 90%),
caption: [攻击脚本执行日志:清晰可见两次握手与数据注入过程],
)
*技术细节分析*:在运行脚本时,我们利用 `iptables` 规则阻断了宿主机内核自动发送的 RST 包。这是因为攻击者伪造了源 IP宿主机内核收到针对该 IP 的回包时会认为是非法连接而尝试中断。通过 `iptables -t raw -A PREROUTING -p tcp --dport 1023 -j DROP` 解决了这一干扰。
== 任务 3植入后门与权限持久化
=== 3.1 权限跨越:从单次利用到永久后门
攻击脚本注入的指令是 `echo + + > /home/seed/.rhosts`。这里的 `+ +` 含义极具破坏性:第一个 `+` 代表信任任何主机,第二个 `+` 代表信任任何用户。
```bash
docker exec x-terminal-10.9.0.5 cat /home/seed/.rhosts
```
#figure(
image("task3_backdoor_success.png", width: 85%),
caption: [攻击结果:.rhosts 文件已被成功篡改,系统防御彻底瓦解],
)
=== 3.2 最终效果验证
此时,攻击者已无需再进行任何复杂的序列号预测或 IP 欺骗,直接从本机 IP 即可访问目标:
```bash
docker exec seed-attacker timeout 5s rsh -l seed 10.9.0.5 date
```
#figure(
image("task3_final_access.png", width: 90%),
caption: [攻击闭环:攻击者获得持久化的无密码远程执行权限],
)
= 实验总结
本次 Mitnick 攻击复现实验是一次跨越协议栈多层的综合演练。通过对该经典案例的研究,可以得出以下结论:
1. *协议安全的脆弱性*TCP 协议早期的 ISN 生成算法缺乏随机性,是整个攻击链条的阿基里斯之踵。虽然现代操作系统已引入加密强度的随机 ISN但这种“基于预测的攻击”思路在应用层协议中依然屡见不鲜。
2. *信任链条的连锁反应*IP 地址不应被视为身份认证的唯一凭证。rsh 这种基于 IP 信任的设计在面对 IP 欺骗时毫无抵抗力。
3. *环境干扰的解决能力*:实验过程中发现宿主机内核的 RST 响应会破坏欺骗连接,通过 `iptables` 进行策略性拦截是网络攻防实验中的常用技巧。
4. *纵深防御的重要性*:单点的安全防护(如仅仅保证 ISN 随机是不够的必须结合防火墙、加密协议SSH 替代 rsh以及严格的访问控制列表ACL才能构建稳固的防御体系。
通过本次实验,我不仅掌握了 Scapy 这一利器的使用,更对网络协议的精妙与风险有了从理论到实践的深刻认识。