隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab

本文接着上文,介绍特洛伊木马穿透个人防火墙技术及SSL协议隐蔽通道的研究实现,点击文章标题即可进入上篇文章,隐蔽信道研究综述-1,欢迎移步前去阅读。

3. 特洛伊木马穿透个人防火墙技术综述

木马攻击者要达到长久控制目标主机的目的,依赖于稳定、可靠的木马隐蔽信道。木马隐蔽信道的核心是突破主机防火墙的拦截。最近几年木马技术发展很快,其通信隐藏技术已经从应用层发展到内核层。

3.1用户态穿透个人防火墙技术

3.1.1 端口复用

不同的网络应用程序对应着不同的端口号,当系统收到一个数据包时,会根据数据包中的目的端口号找到对应的应用程序并转交该数据包。端口复用是指木马程序绑定到一个已经合法存在的端口上进行端口的隐藏,它通过自己特定的包格式判断该复用端口收到的数据包是不是木马程序的数据包,如果是则自己处理,如果不是则通过127.0.0.1 的地址转交给真正的服务器应用进行处理。图10展示了端口复用的原理。

图片[1]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图10 端口复用原理

3.1.2 反向连接技术

传统的木马是客户端程序主动连接服务端程序,这种连接方法叫做主动连接,此类木马最大的弱点在于攻击者必须和被控主机建立连接,木马才能正常工作。反弹式木马的工作原理与传统型木马截然不同。图11 是反弹式木马的工作原理。木马程序的服务端通过第三方代理服务器获得控制端的IP 地址,并主动向该IP 地址发出连接请求。由于连接是从防火墙内部网络到外部网络的连接请求,防火墙一般不进行严格的检查,因此可以轻易的躲避防火墙的拦截。

图片[2]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图11 反向连接

3.1.3 潜伏技术

潜伏技术是指利用TCP/ IP 协议族中的ICMP 协议而非TCP/ UDP 来进行通信。ICMP 最典型的用途是差错报告。它是由内核或进程直接处理,不会占用任何端口。从而可以躲避Fport 或端口扫描软件的检测。此类木马的工作模式如图12 所示。

图片[3]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图12 ICMP木马工作原理

木马利用ICMP 报文与控制端进行通信时将自己伪装成一个Ping 的进程。在通信时,木马服务器端利用Ping 命令向客户端发送一个或多个ICMP_ECHO 数据包,把要发送的数据隐藏在ICMP 数据包包头的选项域中。当客户端收到ICMP 请求报文后,在ICMP 响应报文(ICMP_ECHOREPLY)中填写标识域和序号回应请求应答,并且将木马的控制命令和数据写入ICMP数据包包头的选项域中。当木马服务器端监听到特殊报文出现时(根据包的大小、ICMP_SEQ 等特征),木马就会接收、分析出ICMP 报文中的命令和数据,进而采取相应的措施。

3.1.4 HTTP隧道技术

由于HTTP 协议一般采用80 端口,因此个人防火墙一般只允许主机通过80 端口向外部网络访问,同时为了防止其他应用程序利用80 端口与外部通信,采取包过滤技术的防火墙会对80 端口的数据进行包头分析,拦截非HTTP 数据包。因此可以将所有要传送的数据封装到HTTP协议里进行传输,并将请求的目的端口设置成80,从而躲避防火墙的检测。目前HTTP 隧道有两种方式:直接型模式和中转型模式。

(1)直接型模式

图片[4]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图13 直接型模式

客户端和服务器端分别与本地主机建立TCP 连接,主机应用程序将原始数据发送给本地的HTTP 隧道客户端或服务器端。隧道软件利用HTTP 协议对数据进行封装,然后发送到对方主机。对方主机收到HTTP 数据包后拆封,然后将原始数据转发给本地的相应进程。

(2)中转型模式

图片[5]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图14 中转型模式

中转型模式中的服务器端相当于中转站。如图14 所示,将主机B上的服务器端单独安装到一台主机上,服务器端负责与客户端请求的服务器主机建立连接。当计算机A 想访问外部服务器C 时,HTTP 隧道程序会通过HTTP 协议在计算机A 和计算机B 之间建立一条隧道。计算机A 中的HTTP 隧道软件利用HTTP 协议将请求数据进行封装,然后向外部计算机B 发送HTTP 请求。当计算机B 接收到数据后,将数据的HTTP 头去掉,获得其中有效数据,再将数据通过网络发送到外部服务器C。服务器C 收到来自B 的请求后对请求进行我处理,并将处理结果发送回计算机A,计算机A 利用HTTP 协议对结果进行封装,然后发送给内部服务器。防火墙认为这是一组服务器返回给客户端的数据,因此可以顺利的通过防火墙的拦截到达计算机A。

3.1.5 Winsock 2 SPI技术

Winsock 2 SPI 是服务提供者接口,建立在Windows 开放系统构架WOSA(Windows Open Syetem Architecture)之上,是Winsock 系统组件提供的面向系统底层的编程接口。Winsock 2 不仅为应用程序提供了访问网络服务的Windows socket 应用程序编程接口(API),还包含了由传输服务提供者和名字解析服务提供者实现的Winsock 服务提供者接口(SPI)和WS2-32.dll。其应用程序、WS2-32.dll 和传输服务提供者接口之间的关系如图15 所示。

图片[6]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图15 Winsock提供者结构图

Winsock 2 引入的服务提供者接口允许开发者自己重新编写。开发者可以通过SPI 在Winsock 2 结构中插入一层SPI 动态链接库,它为Ws2-32.dll 中的API 调用提供了接口函数。因此在开发者编写的SPI 程序安装以后,所有的Winsock 请求都会自动的发送到该程序并由该程序完成网络调用。但由于系统提供的SPI 也可以完成对网络的调用,因此一般开发者不会利用SPI 技术实现数据包的截获,而是利用SPI 技术实现木马的隐藏。

3.2 内核态穿透个人防火墙技术

3.2.1 TDI过滤驱动技术

TDI(Transfer Driver Interface,传输驱动接口)是Windows 网络体系结构中TDI 客户端与TDI 传输者之间的一套IOCTL 接口。Windows TCP/IP 协议的内核模式是通过Tcpip.sys 实现的,它通常创建设备对象来代表特定的协议,如:\Device\Tcp、\Device\Udp 和\Device\Ip。上层的TDI 客户端可以获得一个代表协议的文件对象,并且通过IRP 与协议进行网络通信。Tcpip.sys 是网络协议栈的核心,因此可以采用分层驱动程序技术,即将一个驱动程序挂接到TDI 传输驱动程序之上,从而实现网络数据包的拦截。当TDI 客户端向协议发送请求时,TDI过滤驱动程序先于传输驱动程序得到IRP 请求,当协议向TDI 客户传输数据时,TDI 过滤驱动程序先于传输驱动程序得到数据,如图16所示。

图片[7]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图16 TDI过滤原理

TDI 过滤驱动程序先于传输驱动程序得到IR P,然后通过解析这些IR P 可以获得通信双方的IP地址、端口号以及在该端口上发送和接收的数据量等信息。处理后再将IRP传递给被挂接的设备。基于TDI 过滤驱动程序处在Windows 网络协议栈的较上层,因此在TDI 层可以获得相关进程的信息。同时由于工作在内核层,TDI 过滤驱动程序能够截获和过滤所有经过协议驱动Tcpip.sys 的网络应用程序的IRP,可以有效的绕过基于应用层的防火墙检测。

3.2.2 NDIS层过滤技术

NDIS 是网络驱动程序接口规范的简称。它横跨传输层、网络层和数据链路层,负责上下层驱动程序之间服务原语和实际驱动程序相应调用入口之间的转换,分派消息通知,使得上层的协议驱动程序可以和底层的网卡直接进行通信,而不考虑操作系统的内核以及其他驱动程序的接口问题。NDIS 为网络驱动程序创建了一个完整的开发环境,使得网络驱动程序可以从与操作系统的复杂通讯中分离出来。基于NDIS 层的过滤技术可以分为NDIS HOOK 技术和NDIS 中间层驱动技术。

(1)NDID HOOK技术

基于NDIS HOOK 的木马信道是直接替换NDIS 函数库中的函数地址,这样使得所有向NDIS 的请求先经过自定义的替换函数处理,替换函数将数据进行分流,并通过IO 通道将数据转发给应用层的木马程序,处理完再将数据转发给系统函数。以此实现躲避主机防火墙的拦截。其工作原理如图17所示。

图片[8]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图17 基于NDIS驱动木马工作原理

基于NDIS HOOK 的隐蔽通道技术是在NDIS 层截获网络数据包,对数据包进行分流。特征数据包通过IO 通道转发至应用层木马程序。应用层木马程序解析特征数据包,执行相应命令,并将执行结果进行数据封包,通过IO 通道发送到NDIS 层的木马驱动中,从而绕过主机防火墙的检测。

(2)NDIS中间层驱动技术

NDIS 中间层驱动是介于协议层驱动和小端口驱动之间。对于高层的传输层驱动程序,它表现为一个虚拟的微端口网卡结构,对于底层的微端口驱动程序,它表现为一个协议层驱动结构。任何进出网卡的网络数据包必须经过中间驱动程序的处理。利用中间层驱动实现隐蔽信道时,当通道接收到了封包时,通过驱动初始化时设置的绑定端口号来判断是否将封包直接递交给应用程序。若将封包直接传递给应用程序而不是递交给上层协议驱动,则将封包内容复制到共享内存中,然后直接释放封包并通知下层微端口驱动释放封包。发送数据时,通道根据发送函数中的NDIS_Packet 的预留字段是否为NULL,以此来区分中间驱动程序构造的封包和协议驱动传下来的封包。接收数据时,直接将其复制到共享内存中,驱动读取内容后将其组织成封包,然后通过发送函数将封包发送给下层的微端口驱动,进而释放封包。

3.3结论

可以发现木马穿透个人防火墙技术是多种多样的:从应用态到操作系统内核态,由表及里,越来越深入。传统的木马通信隐藏技术在端口扫描软件、防火墙的围攻下,不但没有消失,反而以一种新的方式出现。而基于NDIS 层过滤技术可以监控到所有IP、TCP、UDP、ICMP 包头信息以及应用层的数据信息,还可以过滤不使用TCP/ IP 协议栈的包。所以基于这一层的过滤技术还是有可取之处的。

4. SSL协议隐蔽信道的研究实现

SSL 协议全称Secure Sockets Layer 安全套接层协议,为网络通信提供安全性保障。其体系结构如图18所示。

图片[9]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图18 SSL协议体系结构

SSL协议通信可分为握手和数据传输两步,握手过程并没有建立完整的连接和产生数据通信行为,所以在握手过程中来传递秘密信息相比于数据传输过程,能更好地隐匿其行为。SSL 隐蔽通道的构建思想是在SSL客户端和服务器进行握手密钥协商的过程中传递信息,使用SSL 协议握手协商的第一个报文进行隐蔽通道的构建,第一个报文为客户端的请求协商报文,传递客户端生成的随机数和一系列协商信息。客户端把秘密信息隐藏在第一个报文的随机数字段。修改随机数字段的值不会影响后期的通信,只要满足随机数的特性就能使信息得到充分的隐藏。伪造的报文可以发往任意HTTPS 服务器,接收端可以安置在流量过往的任意节点上,通过特定的算法来标识SSL 隐蔽通道的流量,而不影响数据包的正常通信,使得接收端的使用更为灵活。

4.1 构造方法

SSL 隐蔽通道构建方法为伪造Client_Hello 握手协商报文,该报文主要由3 个部分构成:第一个部分为握手协议的类型,由1 个字节组成,取值不同代表不同的握手协议。第二部分使用3 个字节来表示以字节为单位的报文长度。剩下的所有部分为内容字段,内容字段包含版本号、随机数、会话ID 长度、会话ID、加密套件长度、加密套件列表、压缩方法长度、压缩方法、扩展字段长度、扩展字段等,具体报文格式如图19 所示。

图片[10]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图19 SSL握手报文格式

将秘密信息隐藏在Client_Hello握手报文的32 ByteRandom 随机数字段中。该随机数由客户端生成,后期将使用该随机数来生成用于通信加密的对称密钥。该字段被修改不会影响报文本身。整个隐蔽通信过程只涉及到SSL 握手的前2 步和5 个报文,具体通信过程如图20所示。

图片[11]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图20 SSL隐蔽通信过程

为了使填充的数据更符合字段的性质,即使数据具有随机性,需要使用某种算法对数据进行处理使其变为伪随机数。如图21 所示,为了让相同的信息每次经过处理后能变成不同的伪随机数,每个报文都将使用一个不同的密钥进行加密。并且为了让加密后的数据更具有随机性,本文设计了一种循环对称加密算法来进行消息的处理。随机数字段为32 Byte,保留前4 Byte 作为消息加密的对称密钥,该密钥由随机数生成器生成,仅使用后面28 Byte 来传输数据。将后面的28 Byte 分为7 段信息,每一段为4 Byte。32 Byte 随机数字段的第1~4 Byte 为生成的随机对称加密密钥,第5~8 Byte 为第一段信息。使用1~4 Byte 的密钥对5~8 Byte 的信息进行对称加密,加密后的密文填充到5~8 Byte,再用加密后的5~8 Byte即第一段密文信息作为后面9~12 Byte 的对称密钥进行加密,依次循环直到7 段信息28 Byte 加密完成。

图片[12]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图21 循环对称加密

由于短时间内产生大量的握手报文相比正常握手时的通信流量来说是异常现象,采集相关流量进行统计分析就能发现其异常。所以需要平衡通信时的流量,主要通过两种方式实现:一是通过增加时间成本来平衡流量。主要方法是通过收集正常用户访问HTTPS 服务器的时间间隔,在数据包发送时随机选择时延进行发送,来模拟用户访问并均衡流量。二是通过流量混淆的方式,在进行隐蔽通信的过程中,使用同一客户端或者不同客户端进行正常HTTPS的访问,从而实现流量的混淆。

4.2 隐蔽性分析

本文使用SSL 协议作为隐蔽通道的承载协议。由于SSL协议本身就是一个基于安全传输的协议,普通的防火墙和NAT设备基本不会对其进行过滤和拦截,并且实验通过随机数字段的数据进行变换处理来增强SSL 隐蔽通道的隐蔽性。作者统计了0~F 这16 个字符出现的次数,最后计算出每个字符的出现频率,结果如图23所示。通过图表的对比分析,可以看出正常的随机数字段的16 个字符的出现频率十分相似,具有随机性。

图片[13]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图22 字符频率对比图

另一方面,通过加入流量混淆技术,在进行SSL 隐蔽通信的过程中产生正常的SSL 通信流量来进行流量的混淆,从而提高隐蔽性。

4.3 可靠性分析

由于SSL协议作为构建协议本身就是一个可靠的传输协议,是基于TCP可靠传输协议基础上的,所以协议本身是具备可靠传输的机制,能够确保把秘密消息准确有序地传递给接收端。

4.4 信道容量分析

SSL隐蔽通道的本质是存储型隐蔽通道,使用SSL 握手协议的随机数字段来作为秘密消息的填充字段。该字段为32 Byte,前4 Byte 作为循环对称加密的密钥,剩余的28 Byte 来进行数据的填充。所以每个报文可以承载28 Byte 秘密信息。相比其余各存储型隐蔽信道容量(如图23所示),可以看出基于SSL的隐蔽信道构建方法具有较高的信道容量。

图片[14]-隐蔽信道研究综述-2 – 作者:龙渊实验室LongYuanLab-安全小百科

图23 通道容量比较

4.5 展望

本文提出的方法也有一定的局限性,如果传输大文件,依然会产生大量的流量。所以未来的工作将继续从隐蔽性入手,在流量的层面去研究如何平衡流量,可借助分布式等技术,例如将传输一个文件的任务分布给多个客户端,从而平衡流量分布,以此提高隐蔽通道在流量层面上的隐蔽性和抗检测能力。并且由于SSL 隐蔽通道仅仅是模仿SSL 的握手过程,并没有进行完整HTTPS业务即应用数据的交互,所以后期对SSL的隐蔽通道进行研究的重点依然是如何去完善整个隐蔽通信的通信流程。

原文链接

来源:freebuf.com 2020-11-09 09:23:04 by: 龙渊实验室LongYuanLab

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论