基于OSPF协议Hello报文隐蔽信道构建研究

2024-03-14 08:37赵自强
网络安全与数据管理 2024年2期
关键词:报头字段字节

赵自强,李 强,郭 涛

(1.安徽建筑大学 电子信息学院,安徽 合肥 230022;2.西南交通大学深圳研究院,陕西 西安 710000)

0 引言

近年来,随着网络隐蔽信道构建技术的发展,网络隐蔽信道因其隐蔽通信的特性在网络信息传输安全方面越来越被重视。在网络隐蔽信道构建的研究过程中,学者对很多协议都有研究,例如IP、TCP、UDP、HTTP等协议,但是还有一些协议,对其研究较少,这些协议仍然不可忽视,有着研究价值。开放式最短路径优先(Open Shortest Path First,OSPF)是被广泛使用的一种动态路由协议,也是一种链路状态协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点,被广泛运用在教育、金融、运营商、企业、医疗等行业。

在对OSPF协议应用的同时也不能忽略其中隐藏的网络安全问题,本文通过对OSPF协议进行理论分析,研究OSPF协议的隐蔽信道构建方法,分析出Hello报文下的三个可行字段并构建三个隐蔽信道,将三个隐蔽信道组合在一起构成更高传输效率的隐蔽信道。本研究实现了在不影响路由器网络正常通信的前提下使通信双方进行隐蔽通信,并且为完善隐蔽信道的种类多样性提供了一定的理论支持和技术支撑。

1 相关工作

1.1 隐蔽信道构建技术

在隐蔽信道的发展过程中,文献[1]将存储型隐蔽信道构建技术分为7个模式:调制大小模式、序列模式、增加冗余模式、PDU错误/丢失模式、随机值模式、值调制模式、保留/未使元素模式。文献[2]使用序列模式提出通过将HTTP协议特殊关键字的参数进行排序对隐蔽信息进行编码,从而构建隐蔽信道。这种方法的优点是不会在HTTP包头插入额外的字符,只是通过原有的多个参数的不同排序来隐藏信息。文献[3]使用随机值模式将加密后的信息填充在TCP协议的ISN低16位,同时为了保证序列的随机性,在高16位填充随机序列,从而构建隐蔽信道。文献[4]使用序列模式FTP服务器文件的目录进行构建隐蔽信道,发送方通过FTP的CWD命令访问不同的目录,每一个目录代表不同的隐蔽信息。由于CWD命令格式固定,接收方可以很方便地解析出每次CWD命令代表的隐蔽信息,从而实现隐蔽信道的构建。文献[5]使用序列模式将待发送的隐蔽消息分组编码至传输过程中数据帧的流编号所组成的序列信息中,采用基于组合数学的序列编码方法,将隐蔽信息转换为排列组合问题进行编码处理从而构建隐蔽信道。文献[6]使用增加冗余模式提出在IP报文的后面以太网帧的前面有空间可以写入隐蔽信息,只需要设置IP报文的总长度小于真实数据的长度,多出来的长度就可以用于隐蔽信道。

1.2 隐蔽信道优化技术

在信道优化方面通常使用微协议来提供可靠性、动态路由、代理功能、同步连接、段管理、自动适应网络配置等功能[7],从而提高网络隐蔽信道在真实网络环境下的适应性和灵活性。文献[8]在ICMP协议“expected sequence number”字段插入2 bit的序列号字段实现了收发确认功能,用“1”表示成功接收数据,用“2”表示等待下一条数据,从而提高了隐蔽信道的可靠性。文献[9]设计出SC-TL (同步通信和隐密传输协议)来解决IPv4和IPv6协议下两种隐蔽信道之间同步的问题。文献[10]设计了一种FH-NCC(跳频网络隐蔽信道协议)解决同步中信道选择、超时、数据包组合等问题。文献[11]实现了CFTP(隐藏数据传输协议),利用IP协议的“record route”选项实现类似FTP协议的文件隐蔽传输协议在网络流量上的优化。由于短时间内向接收方发送大量携带隐蔽信息的数据包可能会出现网络流量异常的情况,文献[12-14]认为正常流量数据包的时间间隔分布通常服从泊松分布,通过模拟正常流量的时间间隔来发送数据包,可以提高隐蔽信道的隐蔽性。

2 OSPF协议Hello报文分析

OSPF报文主要有5种:Hello报文、数据库描述(Database Description,DD)报文、链路状态请求(LinkState Request,LSR)报文、链路状态更新(LinkState Update,LSU)报文和链路状态应答(LinkState Acknowledgment,LSAck)报文。它们各自在OSPF路由更新中所担当的用途不一样,报文格式也存在比较大的差别。其中Hello报文用来建立和维护相邻邻居路由器之间的链接关系,每个路由器会周期性地向相邻路由器发送Hello 报文,检测其是否可达。如果邻站给予应答,说明链路正常,否则说明链路出现故障。因此Hello报文也是OSPF协议里使用最多的报文类型。

2.1 OSPF报头隐蔽信道构建的可行性分析

5种OSPF报文使用相同的OSPF报头格式,因此在发送Hello报文的时候也可以考虑使用OSPF报头来构建隐蔽信息。OSPF报头结构如图1所示。

图1 OSPF报头结构

Version:版本字段,占1个字节,指出所采用的OSPF协议版本号,目前最高版本为OSPF v4,即值为4。

Type:报文类型字段,标识对应报文的类型。OSPF有5种报文,分别是Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。

Packet Length:包长度字段,占2个字节。它是指整个报文(包括OSPF报头部分和后面各报文内容部分)的字节长度。

Router ID:路由器ID字段,占4个字节,指定发送报文的源路由器ID。

Area ID:区域ID字段,占4个字节,指定发送报文的路由器所对应的OSPF区域号。

Checksum:校验和字段,占2个字节,是对整个报文(包括OSPF报头和各报文具体内容,但不包括下面的Authentication字段)的校验和,用于对端路由器校验报文的完整性和正确性。

AuType:认证类型字段,占2个字节,指定所采用的认证类型,0为不认证,1为进行简单认证,2为采用MD5方式认证。

Authentication:认证字段,占8个字节,具体值根据不同认证类型而定。认证类型为不认证时,此字段没有数据,认证类型为简单认证时,此字段为认证密码,认证类型为MD5认证时,此字段为MD5摘要消息。

在以上字段中可用来构建隐蔽信道的字段有:

(1)Type字段。该字段有1~5五个参数,可以使用值调制的方法使得每个参数对应一个隐蔽信息,使每个数据包携带不同的参数来构建隐蔽信道。

(2)Packet Length字段。该字段为数据包的字节长度,可以使用调制大小模式来构建不同长度的数据包从而改变该字段的值,选择其中几种常见长度来对应不同的二进制从而可以构建隐蔽信道。

(3)Authentication字段。当AuType为1或者2时,Authentication里可存放隐蔽信息来代替密码。在AuType为1时,此字段为认证密码,由于密码具有一定随机性,可以通过异或加密处理隐蔽信息,增加隐蔽信息的随机性,减少被检测的风险。当AuType为2时,此字段为MD5摘要消息,可以对隐蔽信息进行MD5处理后再嵌入该字段。

上述3种可用于隐蔽信道构建的字段中,在理论分析上Authentication字段相比其他字段具有容量大、难以被发现的优点,更适合作为OSPF报头中嵌入隐蔽信息的字段。

2.2 Hello报文隐蔽信道构建的可行性分析

Hello报文的报头紧跟在OSPF报头后面,Hello报文的字段也可以用来构建隐蔽信息。Hello包的报文结构如图2所示。

图2 Hello包结构

Network Mask:发送Hello报文接口所在的子网掩码。

Hello Interval:指定发送Hello报文的时间间隔,默认为10 s。

Options:可选项。包括E:允许泛洪AS-external-LAS;MC:允许转发IP组皤报文;N/P:允许处理Type 7 LSA;DC:允许处理按需链路。

Rtr Pri:指定DR优先级,默认为1。如果设为0,则表示本路由器不参与DR/BDR选举。

Router Dead Interval:指定路由器失效时间,默认为40 s。如果在此时间内没有收到邻居路由器发来的Hello报文,则认为该邻居路由器已失效。

Designated Router:指定DR的接口IP地址。

Backup Designated Router:指定BDR的接口IP地址。

Neighbor:指定邻居路由器的RID。下面的省略号表示可以指定多个邻居路由器RID。

在以上字段中可用来构建隐蔽信道的字段有:

(1)Hello Interval和Router Dead Interval都可以通过设置不同的时间进行编码来构建隐蔽信道,但是Hello Interval的值通常固定不变,相比Router Dead Interval更容易引起怀疑,因此Router Dead Interval更适合构建隐蔽信道。

(2)Neighbor可以指定多个邻居路由器的RID,可以使用增加冗余模式增加不存在的邻居RID来嵌入隐蔽信息,也可以使用序列模式将现有的邻居RID进行排列来构建隐蔽信道。

在Hello包的隐蔽信道构建上也可以同时使用以上2个字段,增加隐蔽信道的容量。

3 实现方法

3.1 隐蔽信道设计

使用微协议来判断当前数据包中是否含有隐蔽信息,确定信息的开始、信息的结束和数据包的顺序。微协议使用两个字节,其中Flag字段表示当前是否为隐蔽信道;Password字段用来传递本次隐蔽信息的密钥;Seq字段表示当前数据包为本次消息的第几个数据包,当Seq为0时表示隐蔽信息开始发送,当Seq为255时表示信息发送结束,若信息长度大于255则自动分段成下一条信息重新从0开始计数。微协议结构如图3所示。

图3 微协议结构

在隐蔽信道构建方法的选择上:

(1)将AuType设置为1,从而使用OSPF协议头的Authentication字段嵌入隐蔽信息来构建隐蔽信道。本文代称信道A。

(2)使用调试模式对Router Dead Interval的值进行调制从而构建隐蔽信道。本文代称信道B。

(3)使用序列模式对Neighbor ID进行全排列来构建隐蔽信道。本文代称信道C。

完整的发送端流程如下:

(1)将Flag字段置为全1,生成4位的随机密码放入Password字段,把当前数据包的序列放入Seq字段组成微协议。

(2)使用随机密码对隐蔽信息进行加密。

(3)取一部分隐蔽信息采用信道A的构建方法和微协议组合嵌入Authentication字段。

(4)取一部分隐蔽信息构建信道B。

(5)取一部分隐蔽信息构建信道C和信道B一起组成完整的Hello包报头。

(6)将Hello包报头和OSPF报头组装成完整的数据包。

(7)数据包发送。

完整的接收端流程如下:

(1)捕获数据包。

(2)判断AuType字段是否为1,不为1正常处理。

(3)提取Authentication字段的前两个字节,解析隐蔽信道微协议。判断Flag字段是否全1,不为全1正常处理。

(4)提取Password和Seq。

(5)对Authentication字段的后面隐蔽信息进行解密,提出信道A的隐蔽信息。

(6)解析出信道B的隐蔽信息并解密。

(7)解析出信道C的隐蔽信息并解密。

(8)根据Seq字段将所有隐蔽信息组合成完整的信息。

3.2 隐蔽信道实现

隐蔽信道的实现需要实现以下几个模块:微协议的编解码,信道A、信道B、信道C的编解码,具体实现过程如下。

(1) 微协议编码实现

① 定义微协议结构体

Struct Microprotocol

{

uint8_t:4 pwd;

//密钥

uint8_t:4 flag;

//是否为隐蔽信道

uint8_t seq;

//当前包序号

}

② 随机数生成密钥:key= rand() % 255;

③ 序号增加:seq++;

(2)微协议解码实现

① 取出Authentication字段的前两个字节。提取Flag字段,根据Flag字段判断是否为隐蔽信息。

② 如果是隐蔽信道,则提取Password和Seq字段备用。

(3)信道A编码实现

① 取6个字节的隐蔽信息。

② 对隐蔽信息的每个字节都与密钥进行异或加密:data = data ^ key;

③ 将微协议和加密后的隐蔽信息组合在一起,放入Authentication字段:

memcpy(&hdr_packet.authentication,cdata.data(),sizeof (hdr_packet.authentication));

(4)信道A解码实现

① 取出Authentication的后6个字节。

② 使用密钥进行解密。

(5)信道B编码实现

① 在值调制的选择上,选择{30,40,50,60}四个值进行调制。

② 建立值与二进制对应的map。四个值最多可以对应2 bit的二进制,对应关系如表1所示。

表1 信道B二进制对应表

③ 取加密后的隐蔽信息,将隐蔽信息对应的值填充到Router Dead Interval字段。

(6)信道B解码实现

① 根据表1的对应关系,得到加密后的二进制。

② 根据密钥解密出真实的隐蔽信息。

(7)信道C编码实现

① 信道C使用序列模式,通过改变所携带的邻居ID来构建隐蔽信道,因此先从邻居表里选出要使用的邻居ID,这里的邻居表为{2.2.2.2,3.3.3.3,4.4.4.4,5.5.5.5,6.6.6.6};

② 对邻居ID进行全排列,可以得到120种排序,取出其中64个组合可以对应二进制为6 bit。生成二进制对应表的简略信息如表2所示。表2用下标1来代替邻居ID“2.2.2.2”,以此类推。

表2 信道C二进制对应表

③ 因为信道B的容量为2 bit,与信道C刚好组成1字节的容量,取出信道B剩余的6 bit,根据表2的对应关系,改变邻居表的排序。

④ 与信道B一起组合成完整的Hello报文。

(8)信道C解码实现

① 读取出Hello报文携带的所有邻居ID。

② 根据邻居ID的顺序和表2的对应关系得出加密后的6 bit隐蔽信息。

③ 与信道B解码出的2 bit隐蔽信息组成一个字节。

④ 根据密钥解密出原始的隐蔽信息。

隐蔽信道实现总流程如图4所示。

图4 隐蔽信道实现总流程

4 实验结果与分析

4.1 抓包分析

为验证信道的可用性,使用winshark抓包软件对伪造的OSPF的Hello报文进行抓包。为方便展示,抓包时的数据包不进行数据加密。发送数据为“hello word”。在第一次发包时信道A发送的6个字节分别是“h”“e”“l”“l”“o”“ ”,信道A抓包截图如图5所示。

图5 信道A部分抓包截图

根据图5可以看出,Authentication字段总共8个字节,前2个字节为微协议,后6个字节在没有加密的情况下可以清楚看到“hello ”,根据抓包分析可知隐蔽信道A构建正确。

信道B和信道C加起来为1个字节,发送内容为“w”。抓包截图如图6所示。

图6 信道B和信道C部分抓包截图

根据图6可以看出Router Dead Interval字段为40,由表1可知40对应的二进制为01,由表2可以得知邻居ID顺序对应的二进制为110111,从而组成完整的一个字节“01110111”,根据ASCII码得知对应的英文字母为“w”,抓包分析可知隐蔽信道B和隐蔽信道C构建正确。

4.2 传输速率

信道的传输速率也叫传输容量,一般指单个数据包能携带的隐蔽信息的比特数,或是在单位时间内通过信道传输的比特数,前者为理论值,后者为实际值,受到硬件性能等因素影响。

下面计算单个数据包能携带的隐蔽信息的比特数,本文隐蔽信道的容量为三个隐蔽信道的容量之和。

(1)信道A的容量是固定的每包携带48 bit。

(2)信道B使用的是值调制模式,根据调制的不同值可以增加携带的容量,如果有n个值可以用来调制,那么信道B的容量为每包log2nbit,以实验的4个值为例,容量为每包2 bit。

(3)信道C使用序列模式,根据选择排序的个数可以改变信道的容量,假设可排序数量为n,则全排列之后有n!种排序可能,n!种排序的可能对应的二进制数量k=log2n!,再对k进行向下取整得到信道的容量。以实验的可排序个数为5举例,全排列的可能为5!=120种,可对应的二进制位数为6 bit,即在可排序个数为5的前提下信道容量为每包6 bit。

可以得出此时信道单个数据包的总容量为48+log2n1+log2n2!bit。

在计算单位时间内通过信道传输的比特数时,需要考虑λ、n1和n2的值。其中λ为期望数据包发送的时间间隔,n1为信道B的参数,n2为信道C的参数。在这三个参数中λ对传输速率的影响最大,n2受限于网络环境中真实存在的路由器个数,不能随便调整。

评估参数λ和n2对信道容量的影响,步骤如下:

(1)将n1设为常量4,动态调整λ和n2的值;

(2)传输1 KB的文本数据5次,统计平均传输时间;

(3)根据平均传输时间计算传输速率。

实验结果如表3所示。

表3 隐蔽信道传输速率(bit/s)

在实际测试隐蔽信道的传输速率时,由于将隐蔽信息封装到数据包需要时间,隐蔽信道的容量略小于理论值。

本文构建的隐蔽信道容量为三个字段之和,作为对比,文献[3]构建的隐蔽信道容量为16 bit/包,文献[12]构建的隐蔽信道容量平均为2.67 bit/包,可知本文构建的隐蔽信道传输速率大于一般的隐蔽信道。

4.3 隐蔽性

隐蔽性作为隐蔽信道的基本要求,主要是指隐蔽信道不被发现的能力。为了验证信道的隐蔽性,通过 Snort 入侵检测系统、火绒安全软件、360 安全卫士等安全防护软件对信道的隐蔽性进行测试,结果如表4所示。

表4 隐蔽性测试结果

从测试结果来看,隐蔽信息在传递的过程中,Snort 入侵检测系统等安全防护软件均未发生报警拦截,说明在常用的杀毒软件环境里,信道具有较好的隐蔽性。

5 结束语

本文针对OSPF协议下Hello报文中的多个字段来构建隐蔽信道,通过协同多个字段来大幅度增加单个数据包隐蔽信道的容量,相对于其他隐蔽信道有着更高的传输速率。但本研究仍有很多不足之处,一方面对隐蔽信道的构建仍有优化的空间,OSPF本身也未有类似TCP的重传机制,可以使用纠错码来减少网络环境对信道的影响;另一方面,OSPF本身有多种报文包,可以研究不同报文下的隐蔽信道,通过多种隐蔽信道之间的协同来增加信道的容量或者隐蔽性,在某一种报文下的隐蔽信道存在被检测的风险后仍可以切换其他报文下的隐蔽信道来继续传输消息。

猜你喜欢
报头字段字节
图书馆中文图书编目外包数据质量控制分析
No.8 字节跳动将推出独立出口电商APP
城市党报报头:政治与艺术的平衡
No.10 “字节跳动手机”要来了?
简谈MC7字节码
淡妆浓抹总相宜
——对中国晚报报头变化的研究与欣赏
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述
IP语音报头压缩设计与实现
关于CNMARC的3--字段改革的必要性与可行性研究