Header Ads

奇虎 360 研究员披露 Shadowsocks 流密码重定向攻击

对Shadowsocks流密码的重定向攻击
奇虎360 Core Security的Zhinang Peng
我们发现了shadowsocks协议中的一个漏洞,该漏洞打破了shadowsocks流密码的机密性。攻击者可以使用我们的重定向攻击轻松解密所有加密的shadowsocks数据包。由于该漏洞很明显并且易于利用。我认为**已经知道了。因此,在蒸汽密码中使用影s不能使自己免受监视。
影s的工作原理:
Shadowsocks本地组件(ss-local)的作用类似于传统的SOCKS5服务器,并为客户端提供代理服务。它对来自客户端的数据流和数据包进行加密并将其转发到Shadowsocks远程组件(ss-remote),后者将对其进行解密并将其转发给目标。对目标的答复进行类似的加密,然后通过ss-remote中继回ss-local,由ss-local解密并最终返回到原始客户端。
客户端<---> ss-local <-[已加密]-> ss-remote <--->目标
Shadowsocks的官方实现:
shadowsocks:原始的Python实现。
shadowsocks-libev:嵌入式设备和低端盒的轻量级C实现。数千个连接的占用空间非常小(几兆字节)。 shadowsocks-go:使用多端口,多密码,
用户管理和交通统计支持商业部署。 go-shadowsocks2:另一个侧重于核心功能的Go实现
和代码可重用性。
Shadowsocks-nodejs:nodejs的另一个shadowsocks实现。尽管已弃用,但仍有很多人通过npm使用它。
影s的密码:
Shadowsocks支持两种密码:Steam密码(无AEAD密码):
Rc4-md5,salsa20,chacha20,chacha-ietf,aes-ctf,bf-cfb,camellia-cfb,aes-cfb AEAD密码:
aes-gcm,chacha-ietf-poly1305,xchacha20-ietf-poly1305
通常,流密码仅提供机密性,不能保证数据完整性和真实性。用户应尽可能使用AEAD密码。我们审核上面列出的shadowsocks的所有正式实现。让我们感到惊讶的是,只有shadowsocks-libev支持AEAD密码。所有其他官方实施仅支持蒸汽密码。这意味着Mitm攻击者无法保证大多数SS用户的数据完整性和真实性。
Shadowsocks是一个松散地基于SOCKS5的安全拆分代理。在中国广泛使用。
然而,

更严重的是,我们发现了shadowsocks协议中的一个漏洞,该漏洞打破了shadowsocks流密码的机密性。攻击者可以使用我们的重定向攻击来解密所有加密的shadowsocks数据包。
对Shadowsocks流密码的重定向攻击:
在这里,我们首先投资Shadowsocks如何启动连接。
启动TCP连接:
ss-local通过发送以目标地址开头和有效负载数据开头的加密数据流来启动与ss-remote的TCP连接。确切的加密方案取决于所使用的密码。
[目标地址] [有效载荷]
ss-remote接收加密的数据流,解密并解析前导目标地址。然后,它与目标建立新的TCP连接,并将有效载荷数据转发给目标。 ss-remote从目标接收答复,对其进行加密并将其转发回ss-local,直到ss-local断开连接。
顺便说一句,shadowsocks的UDP数据包具有相同的结构。
地址格式:
Shadowsocks中使用的地址遵循SOCKS5地址格式:
[1字节类型] [可变长度主机] [2字节端口]
定义了以下地址类型:
0x01:主机是一个4字节的IPv4地址。
0x03:主机是可变长度的字符串,从1字节长度开始,后跟最多255字节域名。
0x04:主机为16字节的IPv6地址
端口号是2字节的big-endian无符号整数。
本质上,ss-remote正在为ss-local执行网络地址转换。
流加密/解密:
Stream_encrypt是一个函数,该函数需要一个秘密密钥,一个初始化向量,一个消息,并生成与消息长度相同的密文。
Stream_encrypt(key,IV,message)=>密文
Stream_decrypt是一个函数,该函数需要一个秘密密钥,一个初始化向量,一个密文,并产生原始消息。
Stream_decrypt(key,IV,密文)=>消息
密钥可以直接从用户输入,也可以从密码生成。密钥派生遵循OpenSSL中的EVP_BytesToKey(3)。详细规格可在此处找到。
密钥可以直接从用户输入,也可以从密码生成。密钥派生遵循OpenSSL中的EVP_BytesToKey(3)。详细规格可在此处找到。
[IV] [加密的有效负载]
密钥可以直接从用户输入,也可以从密码生成。密钥派生遵循OpenSSL中的EVP_BytesToKey(3)。详细规格可在此处找到。

攻击者可以巧妙地强行使用您的密码,然后解密您的数据包。这意味着Shadowsocks没有前向安全性。您可以使用Stron轻松保护自己免受暴力攻击

没有评论

Blogger 提供支持.