NAT 滑流攻击 允许攻击者远程访问受害者 NAT 后方 任意系统 上的任何 TCP/UDP 服务,只需受害者访问一个网站即可绕过受害者的 NAT/防火墙(远程任意防火墙端口控制)。
v1 开发者:@SamyKamkar // https://samy.pl
v2 开发者:Samy Kamkar && (Ben Seri && Gregory Vishnipolsky of Armis)。
阅读 Ben 和 Gregory 关于 v2 的优秀技术文章,其中深入介绍了他们对 v2 的更新以及大量额外细节。
v1 发布日期:2020年10月31日 👻
v2 发布日期:2021年1月26日
源代码:https://github.com/samyk/slipstream
此处为动画版本,使用 我的 fork 版本的 draw.io 生成,支持导出边缘上下文流动和动画控制
NAT 滑流攻击通过利用用户的浏览器以及 NAT、路由器和防火墙内置的应用层网关(ALG)连接跟踪机制,结合通过时序攻击或 WebRTC 提取内部 IP、自动远程 MTU 与 IP 分片发现、TCP 数据包大小调整、TURN 认证滥用、精确数据包边界控制以及浏览器协议滥用等手段实现。由于是 NAT 或防火墙开启了目标端口,因此可以绕过任何基于浏览器的端口限制。
这种攻击利用了在 不包含 HTTP 或其他头部的情况下对某些 TCP 和 UDP 数据包数据部分的任意控制;该攻击在所有主流现代(及旧版)浏览器中执行这种新的数据包注入技术,是我最初于 2010 年提出的 NAT 固定技术(在 DEFCON 18 和 Black Hat 2010 上展示)的现代化版本。此外,还包括了本地 IP 地址发现的新技术。
该攻击要求 NAT/防火墙支持 ALG(应用层网关),而 ALG 对于使用多端口(控制通道 + 数据通道)的协议(如 SIP 和 H323(VoIP 协议)、FTP、IRC DCC 等)是必需的。
在高层面上,NAT 滑流攻击的工作原理如下:
.local mDNS/Bonjour 地址对攻击无效)img 标签(例如 192.168.0.1)img 标签附加 onerror/onsuccess 事件username 字段
username 字段中发送,强制 IP 分片并实现精确边界控制username 字段被“填充”到精确的 TCP 分段大小/数据包边界,然后通过 Web 表单附加并提交“H.323 数据包”我们使用 NAT(网络地址转换)有几个原因。NAT 最有用的特性是允许单个公共 IP 地址被多个系统共享。它通过创建一个本地网络,为所有连接的机器提供本地 IP 地址,当其中一个系统访问互联网时,它会重写出站数据包以使用公共 IP,以便响应返回 NAT,反之亦然,重写目标 IP 为特定客户端的 IP。
NAT 需要区分来自内部主机的连接到相同地址/端口(google.com:443),因为最终它们的外出端口、目标 IP 和源 IP 都是相同的。如果两个不同的内部对等体尝试从相同的源端口连接,现代 NAT 会更改其中一个源端口(有些网络对所有 TCP/UDP 源端口都这样做)。

来自 Wikipedia 通过 Wikiwand:``` One of the important features built on top of the Netfilter framework is connection tracking. Connection tracking allows the kernel to keep track of all logical network connections or sessions, and thereby relate all of the packets which may make up that connection. NAT relies on this information to translate all related packets in the same way, and iptables can use this information to act as a stateful firewall.
如果你的 NAT 后面的某台机器向外出站一个数据包,你的路由器预期远程主机可能会响应,于是它会记录相关信息,特别是源端口、目标端口、源 IP 地址、目标 IP 地址以及你的内部 IP,然后将任何匹配的数据包返回给你的内部 IP。
如果你的局域网中的另一台主机尝试使用相同的源端口、目标端口及 IP 发起同样的连接,你的 NAT 将无法区分它们(它们在局域网内的源 IP 不同,但在广域网侧都被改写为相同的公网 IP),因此它会修改源端口,但在回传给你时再将其改回。
### 应用层网关
ALG 允许 NAT 跟踪像 FTP 这样的多端口协议,使其从你的系统出去到 FTP 服务器,然后跟踪当你请求将某个文件发送到你的内部 IP 的特定端口时的情况,ALG 可以改写数据包,使其包含你的公网 IP,然后将 FTP 服务器的连接转发回给你。如果它没有改写你的 IP,FTP 服务器将会尝试通过你的内部 IP 回连给你(或者如果它期望源 IP 与信令连接的 IP 相同,则根本不会尝试)。