背景
观成科技安全研究团队近期发现加密通信工具——Shadow-TLS发布了0.20版本(以下简称Shadow-TLS-V2)。与之前版本相比,Shadow-TLS-V2主要在两个方面做出改进:一是针对客户端转发流量进行混淆处理,将转发信息封装成TLS协议Application Data消息形式,以规避流量检测设备的检测;二是针对Shadow-TLS服务端增加校验,将来自非客户端访问进行重定向,返回可信网站的响应结果,以达到规避主动探测的目的,降低服务端被发现的概率。
分析
Shadow-TLS-V2工作流程与之前版本相似,在此不再赘述,主要介绍与之前版本不同的地方。工作流程如下图所示:
需要重点关注的是第三阶段发往Shadow-TLS服务端的第一个数据包。与之前版本相比,新版做出了两个修改:
- 旧版客户端直接转发流量,当待转发的并不是TLS协议数据时,Shadow-TLS客户端与服务端的通信表现为TLS握手后出现非TLS协议消息,这是一个明显的异常,容易被检测。因此新版中这个数据包加了协议头,被封装为Application Data格式,达到欺骗流量检测设备的目的。
- 在上述Application Data消息中,客户端除封装待转发数据外,还在数据前增加8字节HMAC校验。校验值由服务端响应数据生成,计算方式为HMAC-SHA1(Server_Data)。服务端利用此校验值确定接收的数据是否由客户端发出。
重点流量截图如下:
- 阶段1
由终端向客户端发起连接请求,在TCP载荷中传递请求数据,长度分别为101字节和250字节,共351字节。
图1:终端向客户端发送请求
- 阶段2
客户端与服务端“Shadow” TLS握手后,将终端请求数据封装发出(39.144.93.96是客户端外网IP)。可以看到此时转发数据已加Application Data消息头,协议软件识别为TLS协议Application Data消息。另外,在Application Data消息中,前8字节为客户端运算好的HMAC校验(红框部分),因此数据载荷总长度为351+8=359字节。
图2:客户端向服务端转发请求
引入HMAC校验后,Shadow-TLS服务端具备了一定的筛选能力。当校验失败时,服务端可返回正常WEB服务器的响应数据,以此迷惑主动探测器。如下图所示:
总结
Shadow-TLS-V2在数据封装和数据校验方面做出了进一步改进,使被动检测和主动探测难度得到提升,但是其加密流量特征和服务端响应特征仍然存在可检测的异常点。类似Shadow-TLS的流量混淆工具在攻防演练等场景下呈现多样、多变的总体趋势,我们将会保持对此类工具的密切跟踪研究。