Hidden dangers of censorship
Weaponizing Censorship
今天在群里看见有人发了一篇文章Weaponizing Censorship Infrastructure for Availability Attacks,提到了将审查系统作为武器对网络上的服务发起攻击的操作。提到利用审查系统对网络服务进行攻击,不禁令人想到最近半年多来出现的利用gfw漏洞,利用大量国内服务器向一个网站发送包含敏感词汇的http请求,导致ip被墙甚至是域名被污染,以此来向站长勒索的犯罪团伙,他们使用的攻击手段应该和这篇文章里面提到的类似。
这篇文章主要针对使用了Residual censorship的系统,这类审查系统在检查到包含禁止信息的请求后,会拦截请求,并且将持续一段时间拦截后续的请求(即使后续请求不包含违禁信息),需要注意的一点就是审查系统标识一个连接的方式,常见的有下面几种:
- 客户端ip - 服务器ip
- 客户端ip - 服务器ip - 服务器端口
- 客户端ip - 客户端端口 - 服务器ip - 服务器端口
这篇文章中针对的场景是两点间的连接 使用国内的机器对国外的机器进行中转加速便符合这种场景。 思路如下:
假设境内的客户端A,境外的服务器B,攻击者想要阻断二者间的连接,攻击者可以伪造成A的ip向B发送一个包含了违禁信息的请求,这个请求便会触发封禁,并影响到后续一段时间内两者间的通信。这里需要注意到一点,伪造源ip发送出去的数据包是收不到回应的,也就建立不了会话。这篇文章的作者寻找了一些不需要三次握手便能触发审查封禁的数据包。
How can an attacker generate a forbidden request for TCP based protocols while spoofing their source IP address? In prior work, we used Geneva to identify packet sequences that could be used to trigger censors without requiring a proper 3-way handshake, even for stateful censors that try to monitor the 3-way handshake.
也就是说,伪造ip发出的一个数据包,即使服务器不进行响应,同样可以触发封禁。(实在是无妄之灾)
在实验中使用了审查系统的网络都有过滤机制 比如rpf(国内的网络基本上都开启了这个机制防止源ip伪造),所以他们使用了境外的能够伪造ip的机器发起攻击,场景变为攻击者尝试阻断国外的客户端A和国内的服务器B的连接。 , 他们使用伪造的源ip发送一些包含违禁信息的请求(比如包含在明文的http、sni、或者加上esni),便能够触发封禁。
Special scenario
上面提到的攻击方式使用了能够伪造ip的机器,但是这种攻击在一种特定的场景下,不需要能够伪造ip的机器便能够阻断服务,即一些服务提供商使用了国内的机器对国外的机器进行转发,以求通过商宽来加速网络连接。但是这也意味着发往国内机器A特定端口的数据都会被转发到境外机器B的特定端口上, 也就是说攻击者只要对着国内机器A发送一些包含了恶意请求的数据包, A也会将这些数据包转发到B的特定端口上,数据包在旅途中会经过审查系统,于是触发封禁,二者间的连接被阻断。不过也可以通过在两台机器之间使用加密的隧道而不是直接的包转发来抵御这种攻击。
更加恶毒的一个想法?
在看到上面提到的攻击方式后,我想到了一种更为恶毒的攻击方式——伪造完整的tcp连接,直接导致ip封禁。如果我们有一台能够伪造源ip的机器B、国内的机器A,目的是导致C的ip被封禁,我们可以提前在A和B之间建立一个连接,之后双方会预先通过这个连接交流将要发送的伪造信息。流程如下:
- A对B说: 我要向C的ip发送SYN数据包,你等下伪造成C的ip响应我
- A对B说: 已发送
- B伪造成C的ip,向A发送ACK数据包
- A会收到“C”的ACK包继续后续操作
总之,A每向C发送一个数据包都要预先告知B数据包的内容,知道内容后B便伪造成C能做出正确的响应,这样在审查系统看来这就是一个真正的连接。(A可能需要忽略来自真实的C的拒绝连接的信息),那么在这条连接上我们甚至可以故意去传输一些会导致ip封禁的数据……这样会导致C的ip被封禁,这要比上面的“假墙”更为狠毒。