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

1. 基于目录编码的FTP隐蔽信道

1.1 原理描述

在对比分析不同CWD(change working directory命令数据包样本后发现CWD命令具有以下规律:

(1)FTP CWD命令的TCP头为固定的20字节,无选项。

(2)FTP CWD命令的应用层协议数据第0到2位为CWD的ASCII编码,固定为“43 57 44”;第3位为空格的ASCII编码,固定为20;接下来固定为目录名字字符的ASCII编码,位数跟目录名字字符数目相同;最后两位为回车符<CR>和换行符<LF>的ASCII编码“0D0A”。例如对于“CWD pic”命令,字符pic对应的ASCII码为“70 69 63”,故应用层数据如图1所示。

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

图1 应用层数据示例

基于此特征,通信双方事先对FTP服务器端某FTP目录下M 个子目录编码,选取的M 为2的整数次幂,则单个目录可以编码的二进制位数为

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

例如FTP服务器某目录下有如图2所示4个可以访问的目录。隐蔽信道通信双方对该4个目录编码,每个目录可以编码2位二进制比特,得到的编码见表1。

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

图2 访问目录示意

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

发送端首先发送一个ABOR命令表示通信开始,接着将隐蔽信息分割,每次取N位对照编码表,找到对应的目录名称,发送该目录的CWD命令即可,为了模拟正常的切换工作目录动作,每发送一个CWD 命令后再发送一个CDUP命令返回到上级目录,以便于下次再次切换到该目录下的已编码的其它子目录,隐蔽数据发送完毕再发送一个ABOR表示通信结束。例如,要发送的秘密信息二进制为10010011,每次取2bit数据根据编码表查找对应目录名,首先发送的2bit是10,则查找编码表得到对应需要发送的命令为“CWD mp3”,再发送CDUP命令返回原工作目录;接下来需要发送的2bit是01,则对照编码表需要发送的命令为“CWD movie”,再发送CDUP命令,依次类推,发送过程如图3所示。

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

图3 发送端FTP命令发送过程

接收端监听所有来自隐蔽信道发送端的命令,只要是CWD命令且目录为双方已编码的目录,则通过编码表根据目录名称解码对应的N位隐蔽数据,其它命令则不作为隐蔽通信数据处理。接收端数据包处理流程如图4所示.

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

图4 接收端数据处理流程

1.2 性能分析

1.2.1 隐蔽性

该隐蔽信道发送的是正常的真实的FTP命令,命令本身不含有秘密信息,在第三方看来只是普通的FTP切换工作目录操作,传输少量秘密数据时,使用的CWD命令较少,这种情况下能较好地伪装成正常FTP通信,所以不能被SNORT、NIDS等检测系统检测到,隐蔽性很高;如果在短时间传输大量秘密数据时,过多的CWD命令容易引起网络监控者的怀疑,此时易被基于统计分析的检测系统识别。因此基于目录编码的方法适合传输少量重要秘密数据。

1.2.2 鲁棒性

FTP下层使用了可靠通信的TCP协议,鲁棒性较强。

1.2.3 容量

每个目录名称可以隐藏Nbit信息,若发送xbit秘密信息,需要发送2(x/log2 M)+2个命令,则每个命令的容量为

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

随着编码目录个数M 增大,容量将增大。当M=2时,容量为N/(2N+2),N增大时容量接近0.5bit,当M=4时,容量为N/(N+2),N增大时容量接近1bit;当M=8时,容量为N/((2N/3)+2),N增大时容量接近1.5bit,依此类推,考虑到真实性,M 大于64的情况不做分析。不同编码目录数M 取不同值时的容量见表2。

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

2. 基于MQTT 协议命令分组编码的隐蔽信道研究

2.1 MQTT介绍

消息队列遥测传输协议( Message Queuing Telemetry Transmission,MQTT) 是由IBM 公司开发的一种基于发布/订阅模式的轻量级消息传输协议,其对于资源受限的不可靠网络,如低带宽网络和高延迟网络,具有良好的适应性,已成为当前应用最广泛的物联网通信协议之一。MQTT 构建于TCP /IP 协议之上,属于应用层协议,其采用轻量级的“发布/订阅”消息传输机制,实现一对多的消息分发。其通信由图5所示。

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

图5 MQTT通信架构

MQTT 协议共定义了14 种类型的控制数据包,以实现连接、发布、订阅、心跳确认等过程。控制数据包包含固定包头、可变包头和有效负载3 个部分,如图6所示。

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

图6 MQTT协议数据包格式

MQTT 支持3 个级别的服务质量,即QoS0、QoS1 和QoS2,其由发布消息包( PUBLISH 包) 固定包头的QoS level 字段( 第1、2 位) 控制。在各QoS级别下基于不同类型数据包实现发布、订阅的过程如图7所示。QoS0 为最多一次模式,即只发送一次消息,不检查消息是否到达目的地,因此消息可能丢失。QoS1 为最少一次模式,即消息可以传输多次直至到达,由发布确认包( PUBACK 包) 检查消息的状态。QoS2 为保证交付模式,信息只传输一次并通过4 次握手过程保证消息的成功抵达。

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

图7 MQTT数据包传输过程

2.2 MQTT 隐蔽信道构建

2.2.1 构建思路概述

传统隐蔽信道的通信在发送方和接收方共享相同的秘密信息编码方案的前提下进行。发送方对秘密信息进行编码,并根据编码结果调制载体信息,实现秘密信息的嵌入; 接收方收到数据包后进行解码,得到秘密信息。本文依据MQTT 网络的组成结构,将同时充当发布者和订阅者的客户端作为秘密信息的发送方,代理服务器作为秘密信息的接收方,利用MQTT 发布/订阅消息的过程建立隐蔽信道。在传统通信模型的基础上,分别在发送方和接收方添加散列值生成器和完整性校验模块,通过对秘密信息进行完整性校验,避免因数据包丢失、乱序或中间人攻击等因素而导致接收方获取错误的秘密信息。发送方的编码器采用分组编码算法,相较于传统隐蔽信道中的直接编码和序列编码算法,可有效提升正常通信数据中秘密信息的数量,具体的信息传输模型如图8所示。

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

图8 传输模型

2.2.2 分组编码算法

通过分析MQTT 协议的14 种命令及其相互间的联系,选取客户端发送给代理服务器的6 种常用命令以实现隐蔽通信,相关命令如表3所示。其中,CONNECT 和DISCONNECT 构成客户端和代理服务器间一次完整的通信会话,在会话过程中客户端可定时向代理服务器发送PINGREQ 命令,用以检测网络的连通性。

表3 命令类型及含义

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

将CONNECT 命令作为隐蔽通信开始的标志,DISCONNECT 命令作为单次隐蔽通信结束的标志。在每次通信过程中,采用分组编码方式将X bit 的秘密信息δ 平均划分为n 组,即{δ1,δ2,…,δn} ,并嵌入隐蔽会话中。在单次隐蔽会话中,以每个PINGREQ命令为起始标志传输秘密信息,单次隐蔽通信传输原理如图9所示。

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

图9 分组编码的信息传输原理

分组编码算法依据命令的数量及序列2 个因素对每组秘密信息进行编码。用于编码的m 种命令构成命令集 S = {Si 0≤i≤m},依次选择集S中不同数量的元素并对其进行全排列,则m 种命令共有K 种不同的组合,K 的计算公式如下:

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

若2y<K <2y+1,则对2y种命令组合进行编码,每种组合可以编码y bit 的秘密信息。在秘密信息传输过程中,每组秘密信息对应一种命令组合,每组秘密信息的长度为y bit,即:

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

在编码算法中,每种命令组合具有不同数量的命令,2y种命令组合中的命令数量具有m 种可能性,即传输y bit 信息需要r ( 0≤r≤m) 个命令。因此,每种组合中的命令容量不同。当命令数量最小时,即传输的命令数量为0,编码y bit 信息; 当命令数量最大时,即m 个命令共同编码y bit 信息。每个命令平均可编码的秘密信息量如下 所示:

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

在用MQTT 协议命令构建隐蔽信道时,根据QoS级别的不同将PUBLISH 命令分为3 类,分别记为PUBLISH0、PUBLISH1 和PUBLISH2。PUBLISH0、PUBLISH1、PUBLISH2、SUBCREIBE、UNSUBCRIBE 这5 种命令构成命令集S’ = {S1,S2,S3,S4,S5 }  。在进行分组编码时,K = 326,28≤326≤29,因此,每种命令组合可以编码8 bit 信息,编码示例如表4所示。隐蔽信道中每个命令平均可传输的秘密信息量Q为8/3bit。

表4 命令组合与编码值对应表

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

2.3 完整性校验

完整性校验采用数字摘要算法MD5 实现。隐蔽信道的秘密信息传输在一次CONNECT、DISCONNECT 会话过程中完成。当秘密信息传输完成后,发送方和接收方再由CONNECT 和DISCONNECT 命令建立一次通信会话,用于发送方将秘密信息的摘要H( δ) 传输给接收方,摘要的传输依然使用分组编码方案。接收方首先对第1 次会话中接收到的秘密信息计算摘要H’ ( δ) ,然后比较H( δ) 与H'( δ) 。若H'( δ) = H( δ) ,则说明接收到的秘密信息是准确的,若H'( δ) ≠H( δ) ,则说明接收到的秘密信息不准确,需要发送方重传秘密信息。

完整性校验的具体步骤如下:

1) 发送方在第2 次会话中将信息摘要传输到接收方;

2) 发送方发送一个SUBCRIBE( QoS = 1) 命令紧接在信息摘要后;

3) 接收方计算H( δ) 与H’ ( δ) 是否相等,若相等,执行步骤4) 和步骤5) ,若不相等,执行步骤6)和步骤7) ;

4) 当H’ ( δ ) = H ( δ ) 时,接收方发送一个SUBACK 命令用于反馈秘密信息完整性校验结果,并将SUBACK 数据包有效载荷的返回码字段设置为0x01,代表此次隐蔽通信过程成功;

5) 发送方用DISCONNECT 命令结束本次通信;

6) 当H'( δ) ≠H( δ) 时,接收方发送一个SUBACK命令反馈秘密信息完整性校验结果,并将返回码字段设置为0x80,代表此次秘密信息传输失败;

7) 发送方构建新的会话进行秘密信息重传。

本文简单研究了基于目录编码的FTP隐蔽信道和基于MQTT协议命令分组编码的隐蔽信道,下文将对特洛伊木马穿透个人防火墙技术和SSL协议隐蔽信道的研究实现做出简单介绍,请期待。

原文链接

来源:freebuf.com 2020-11-06 09:56:31 by: 龙渊实验室LongYuanLab

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

请登录后发表评论