代理服务整体评价
优点
- 该协议在一定条件下可以完成正常的代理功能
- 该协议在 ProxyServer 与 WebServer 间使用 HTTP 协议通信, 简化了代码实现
缺点
- 由于没有解决好粘包, 导致在进行内容转发时服务端可能崩溃
- 服务端实例只支持一个客户端连接, 对多用户可能需要多个服务端实例
- 服务端没有进行良好的异常处理, 导致需要经常重启服务端
安全问题
密钥固定的风险
- 该协议在服务端和客户端使用固定的对称密钥, 且在认证时会使用固定 20B 长的随机 Challenge 字符串, 由服务端明文给出, 再由客户端加密返回
- 因此攻击者可以不停向客户端发送 Challenge 字串, 获取大量明文-密文对, 从而构造 Rainbow Table 甚至猜测出密钥
- 如截获 Challenge 在 Rainbow Table 中碰撞成功, 则可以伪造客户端, 向服务端发送非法报文引发异常
- 如猜测出密钥, 则在上条之外还可以完成对代理流量的解密
无异常处理的停机风险
可以在局域网内通过 ARP 污染等方法实施中间人攻击, 在"认证成功"后向服务端发出非法
请求引发异常, 导致服务端停机
认证 Flood 风险
在用户应答 Challenge 时可以通过局域网 Flood 掉该报文, 以使服务端判断为认证失败
攻击效果演示
无异常处理的停机风险
首先修改拓扑,在受害者同一子网下添加 attacker ,以进行中间人攻击。拓扑修改如下:
首先进行 attacker 的静态路由配置,配置过程如下:
nmcli con add con-name "static-eth0" ifname eth0 type ethernet ip4 192.168.1.3/24 gw4 192.168.1.1
nmcli con up id "static-eth0"
这里遇到的一个 bug :在拓扑保存再查看之后找不到eth0…不知道为什么
首先进行 arp 欺骗:
初始 arp
之后在攻击机上运行代码:
netwox 80 -e 02:80:29:5e:51:00 -i 192.168.1.1 -E 02:23:ac:2b:a2:c8 -I 192.168.1.2
r欺骗成功。之后开启流量转发
echo 1 > /proc/sys/net/ipv4/ip_forward
经过流量转发,client 可以和 server 进行连接,同时在 attacker 上抓包如下:
将最后的数据包保存下来之后使用 scapy 重放。
理论上,虽然攻击者不知道加密的包的内容,但利用认证的包中的加密信息,发送到 server 之后,server 会尝试解密,解密成功之后尝试从中读取 url 并访问,但由于发送的加密信息中并不包含 url (仅是认证时候的加密信息),所以 server 并不能得到 url ,而又由于 server 没有进行异常处理,所以在这里就会报错崩溃。
实际实验中,由于对 tcp 重放不太熟悉,序列号没有改对,导致 server 端收到包之后并不认可,故没能完成该攻击。之后如果有更多时间可以进一步尝试这个攻击。
分工
何哲:漏洞分析,无异常处理的停机风险攻击尝试,报告撰写
王文新:漏洞分析,认证 Flood 风险攻击尝试,报告撰写
Loading Comments...