刘加慧,王轶骏,薛 质
(上海交通大学,上海 200240)
蜜罐作为一种主动性防御手段,在对攻击手段的研究和业务网络的保护上都具有非常重要的作用。蜜罐按照与攻击方的交互程度,可分为高交互蜜罐和低交互蜜罐。高交互蜜罐采用真实系统搭建,能够比较容易地构建出一个具有良好诱骗性的蜜罐欺骗环境。低交互蜜罐通过编制软件的模拟仿真方式实现,为攻击方提供受限的交互[1]。混合蜜罐的基本思想是在网络的前端利用较少的资源部署大量低交互蜜罐,通过与后端少量高交互蜜罐之间的流量迁移,实现攻击捕获和分析。但是,传统蜜网粗粒度的数据控制能力使得传统混合蜜网存在连接控制、连接转移等多方面不足。
本文提出一种基于SDN的混合蜜网连接转移方案,结合连接状态跟踪和TCP握手包的反向构造,实现TCP连接从低交互蜜罐向高交互蜜罐的无缝迁移。首先总结目前混合蜜网在连接转移方向的研究情况,其次阐述TCP握手包反向构造方法,给出连接转移方案,最后设计实现原型系统,实验证明该方案具有良好的稳定性,使得蜜网的部署更加灵活。
与传统蜜网相比,混合蜜网的核心是连接转移的时机和方法。Berthier[2]所提出的传统混合蜜网设计,通过智能网关实现连接转移。在无状态的网络层,通过标准NAT设备实现重定向;在传输层,重点处理有状态协议TCP的序列号、确认号、窗口大小以及TCP可选项;在应用层,采用报文重放方法。而Fan W[3]提出了利用SDN在报文处理上的强大灵活性,将所有报文发送至SDN控制器进行存储和决策,在连接转移时修改之前存储的报文并重放,实现了TCP连接透明转移。然而,该方案对存储要求过高,难以适应大规模混合蜜网系统。
软件定义网络(Software Defined Network,SDN)于2006年被斯坦福大学Clean State课题组提出。作为一种新的网络设计理念,SDN强调控制面与转发面的分离,通过控制器中的软件编程来控制底层硬件的报文转发[4]。SDN灵活的数据控制能力完全符合混合蜜网对连接转移的要求。
OpenFlow是目前比较成熟的SDN架构的实现方案。OpenFlow协议允许控制器直接访问和操作数据平面中的网络设备。数据平面的交换机通过查询流表完成对数据包的处理转发。
典型的TCP连接建立过程如图1所示。其中,虚线以上为TCP三次握手,虚线以下为TCP连接建立之后的数据交换。
在混合蜜网系统中,低交互蜜罐主要在攻击初期起作用,即网段信息扫描阶段。在扫描探测阶段,攻击者为避免扫描行为被记录,往往不会与目标主机建立完整的TCP连接。即便采用TCP全连接扫描,也不会与目标主机发生后续数据交换。因此,在典型的TCP连接过程中,TCP三次握手后的第一个PSH包的到达,可以作为连接转移的信号。
图1 TCP连接建立过程
在Linux内核下,连接状态的跟踪通过Netfilter框架[5]的CT(Connection Tracking)模块实现。CT模块使内核可以跟踪所有逻辑会话,常用于实现有状态防火墙。
Open vSwitch作为支持OpenFlow协议的虚拟交换机,也在Linux下实现了对内核CT模块的调用[6]。将报文提交到CT模块后,在流表中利用ct_state和tcp_flags匹配域,可实现对TCP三次握手后的第一个PSH包的准确定位。
CT模块可识别与FTP已建立的控制连接有关联的数据连接。若FTP服务器端采用被动模式的数据连接,服务器端将随机选取端口,监听客户端的连接请求。通过连接状态跟踪,可以直接将客户端的FTP数据连接请求转移至高交互蜜罐,避免因低交互蜜罐拒绝连接而被攻击者察觉。
具体连接转移过程如图2所示。其中,虚线上方为典型的TCP连接转移过程,虚线下方为FTP协议的数据连接转移过程。
步骤详细说明如下。
步骤1:SDN交换机会将收到的每一个数据包发送至CT模块,记录连接状态。当攻击者尝试与蜜罐进行交互时,握手阶段的报文将先被发送至低交互蜜罐。若成功建立TCP连接,则交换机会将该连接中的第一个PSH报文发送至控制器请求决策。此步骤成功隔离了网络中的大量扫描数据。
图2 高、低交互蜜罐之间的连接转移过程
步骤2:控制器收到第一个PSH包后,首先提取数据包中的序列号、应答号以及标识号等关键字段,保存连接信息,并保存此报文。其次,控制器利用序列号和标识号反向构造SYN握手包,发送给高交互蜜罐。最后,控制器下发流表,通知交换机将此连接的后续报文全部提交至控制器处理。
当控制器收到高交互蜜罐的SYN/ACK包时,提取并保存该报文中的序列号后构造ACK包,将其发送至高交互蜜罐,完成TCP三次握手。控制器对保存的PSH包进行应答号修改,发送至高交互蜜罐,完成连接转移。
步骤3:后续报文都将由交换机提交给控制器,控制器对报文进行修改后,交由交换机完成报文转发,从而实现攻击者与高交互蜜罐的通信。
对于FTP数据连接,TCP三次握手的第一个SYN包被CT模块判断为FTP数据连接。交换机直接将该报文提交给控制器,控制器下发流表,将报文直接转发至高交互蜜罐。
连接转移过程中,控制器仅需构造TCP三次握手中攻击者发送的SYN包和ACK包。下面给出TCP握手包不同字段的构造方法。
从图1给出的连接建立过程可知,第一个PSH包与SYN握手包之间的序列号差值为1,与ACK握手包的序列号相同。
连接切换时,使用攻击者的序列号与高交互蜜罐建立新的TCP连接,高交互蜜罐将生成一个新的序列号,其中以SeqLIH表示低交互蜜罐的初始序列号,以SeqHIH表示高交互蜜罐的初始序列号。连接转移后,后续所有来自攻击者的报文都需要对应答号按照式(1)修改,而来自高交互蜜罐的报文都需要对序列号按照式(2)修改。
该字段为接收端通知发送端自己当前能够接收的字节数。在TCP握手阶段,双方报文不携带载荷,因此该值在握手阶段所起作用不大,常见值为64 240。在反向构造时,它可以使用PSH包的窗口值。
TCP可选项位于TCP头部的最后,此处仅分析会出现在SYN和SYN/ACK报文中的可选项。
(1)最大报文长度(Maximum Segment Size,MSS)。TCP连接双方会在各自的SYN包中声明MSS值,并在握手结束后选择两个值中的较小值作为协商值。MSS是可选项中最重要的一个选项,默认大小为1 460。由于该值受链路上其他转发设备的影响,因此需要综合考虑实际情况进行设置。为避免丢包,可启用高交互蜜罐的路径MTU发现机制,并设置防火墙允许ICMP报文分段消息通过。或者可以采取更简单的方式,将MSS设置为一个较小值1 380,以适应大部分链路状况。
(2)时间戳。时间戳用于计算往返时延。发送方发送报文时将当前时间戳放入TSval,接收方确认该报文时会把该值放入TSecr。如果TCP通信双方协商使用时间戳,则每个数据包中都会带有该可选项,因此控制器可通过PSH报文进行判断。该值的修改方式类似序列号和应答号。
(3)其他选项,如SACK、窗口扩大因子等。通常,由于客户端与服务器的SYN包中很少使用这些选项,也无法通过PSH包推理得到,因此本文所提方案不会使用这些可选项。
源和目的端口可根据高、低交互蜜罐之间的映射关系,交由SDN交换机进行修改。校验值、标志位以及紧急指针等字段进行相应的设置即可。
该字段主要在报文分段时起作用,初始值随机生成,在客户端的SYN包、ACK包和第一个PSH包中加1递增,而在服务器端的SYN/ACK包中值为0。因此,在反向构造SYN包和ACK包时,可依据PSH包的标识值做减法处理,连接转移之后则不需要修改该字段。
本文选择OpenFlow协议1.3版本,控制器框架采用基于Python的Ryu,以实现更好的扩展性。交换机采用Open vSwitch,部署于Ubuntu系统之上。系统搭建如图3所示,实现多控制器控制,分别用于实现流量过滤和连接转移。前端部署Honeyd低交互蜜罐,后端部署FTP高交互蜜罐。Honeyd仅支持MSS可选项。
下面采用较为特殊的FTP协议进行连接转移验证。通信双方采用被动模式进行数据连接。根据FTP连接的实际情况,交换机会将攻击者的ACK握手包提交控制器进行连接转移。图4展示了OVS交换机1的关键流表项。
图3 系统搭建结构
图4 OVS交换机1关键流表项
图5为低交互蜜罐捕获的握手包,在收到攻击者的ACK包后,连接从低交互蜜罐向高交互蜜罐转移。图6展示高交互蜜罐中FTP控制连接建立时的握手包,其中SYN握手包(编号29)由控制器反向构造,ACK握手包(编号31)由控制器修改原始包(图5编号73)的应答号后重放。三次握手结束后,高交互蜜罐发送PSH包(编号32),连接转移成功。图7展示高交互蜜罐中FTP数据连接建立时的握手包。通过CT模块的跟踪功能,FTP的数据连接在第一个SYN握手包到达时被识别,连接直接转移至高交互蜜罐。
图8和图9展示了SSH连接转移过程中,攻击者发送的SYN握手包和SDN控制器构造的SYN握手包。两者仅在可选项上存在差异。
性能测试同样使用SSH建立连接,计算攻击者发送第一个PSH包和收到的服务器ACK回复之间的时间差。选取攻击者与低交互蜜罐直接连接方案、本文连接转移方案以及攻击者与高交互蜜罐直接连接方案3种情况进行对比。实验计算10次SSH连接的平均值,50次SSH并发连接平均值,统计结果见表1。
图5 低交互蜜罐FTP握手包
图6 高交互蜜罐FTP控制连接报文捕获
图7 高交互蜜罐FTP数据连接报文捕获
图8 控制器构造SYN包内容
图9 攻击者发送SYN包内容
表1 性能测试结果
可以发现:本文连接转移方案的两种时延之间没有较大差别,具有良好的稳定性;相比另外两种方式,本文方案带来了5~6 ms的时延,主要原因是控制器与高交互蜜罐之间发生了TCP连接的重放。在实际的生产环境中,远距离传输将对报文的送达时间引入不小的时延。本文方案带来的时延几乎可以淹没其中,因此不易被攻击者察觉,具有良好的隐蔽性。
如今,SDN被广泛应用于网络空间安全领域,其灵活的数据控制能力对蜜网系统的设计和部署具有极大的启发。本文结合连接状态跟踪和TCP握手包反向构造,提出了一种基于SDN的混合蜜网连接转移方案,并进行了原型系统实现和实验验证分析。在本文提出的方案中,网络上的扫描探测流量被准确过滤,减轻了高交互蜜罐的负担;高、低交互蜜罐之间的映射限制较少,提高了混合蜜网部署的灵活性;通过少量关键字段实现对 TCP握手包的反向构造,大大降低了数据的存储和查询成本。实验结果表明,本方案具有良好的稳定性和通用性。