TISec是IP网络安全可信技术
TISec即IP网络安全可信技术(Trust of IP Security,TISec)是一项用来保护 IP 通信安全的协议技术,也是西电捷通致力于三元对等安全架构研究在IP安全领域的技术应用实例。TISec不仅为 IPv4和IPv6协议提供完整性和机密性服务,还通过引入在线第三方实体为通信节点的身份安全和平台安全提供安全服务,从而为IP协议提供完整性、安全性、抗重放、原发鉴别以及通信节点身份鉴别和平台可信等网络安全服务。
虽然TISec 技术并不像Windows那般被人们所熟知。然而,无论在传统办公虚拟专用网络(Virtual Private Network,VPN)、工业网络数据安全传输还是云服务网络层安全服务应用,均有 TISec技术的身影。而这一切归功于TISec能够快速为企业用户构建VPN,从而满足用户借助互联网及其他公共网络实现企业业务应用的安全需求。
TISec LWF驱动作用于Windows系统的内核层
早期的微软Windows操作系统如Windows XP主要依靠微软提供中间层驱动来过滤网卡数据。不过,随着系统和技术的更新,中间层驱动在微软的Windows 10操作系统中已无法正常使用。微软自NDIS(Network Driver Interface Specification) 6.0引入了过滤型驱动,即LWF驱动(Lightweight Filter,简称LWF)。而TISec技术作为一项IP 通信安全的协议技术,通过对Windows系统协议栈中传输的所有网络协议数据进行过滤,随之完成对相符合策略的数据包进行加解密处理。从结果来看,Windows LWF驱动和TISec客户端组合之后,网络协议数据传输的安全性进一步提高。
TISec客户端和TISec LWF驱动在操作系统中的关系如下图所示:
图1 TISec客户端和TISec LWF驱动在操作系统中的关系
由图1可以看到TISec LWF驱动是作用在系统的内核层,其本身属于NDIS6.0框架的一部分。NDIS提供了一系列对微端口驱动和协议驱动操作的接口,从而在TISec LWF驱动中可以获得网络上传输的全部数据,进而对相符合策略的数据包采用ALG(SM2/3/4)算法进行加解密处理,保证网络数据传输的安全性。
TISec LWF驱动展示如图所示:
图2 TISec LWF驱动图示
在传输效率方面,TISec的LWF驱动相比于之前的中间层驱动,也有一定的提升,传输速率对比如图所示:
测试环境备注:
2、测试PC机硬件配置:CPU:2.6G,Pentium双核,内存:2G
3、操作系统:Win7 SP1简体中文RTM
4、IP报文长度:300 Bytes
5、上行:从客户端向服务器发送数据。
6、下行:从服务器向客户端发送数据。由表中可以看到,TISec LWF驱动IP数据包的传输速率相比于之前TISec中间层驱动,提升了50%左右。TISec LWF驱动在保证IP数据传输的安全性的同时性能也得到了进一步的提高。
LWF驱动的数据结构如何运转
1、LWF驱动与协议驱动和微端口驱动关系
图3 LWF驱动与协议驱动和微端口驱动关系
从图3可以看到LWF驱动是绑定在协议驱动和微端口驱动之间,所以它可以捕获到协议层发向网卡的数据,也可以捕获到网卡发往协议层的数据。同时,在同一个网卡上可以绑定多个LWF驱动,同一个LWF驱动可以同时绑定在系统中不同的网卡上。
2、LWF驱动中数据结构简介
在LWF中,网络中传输的数据都是同过NBL(NET_BUFFER_LIST)来表示的,其结构如下图所示:
图4 NBL数据结构
以太网传输的数据存放在图中红色区域表示的部分。NDIS调用Filter注册的回调函数时可能传递多个NBL,而每个NBL又有可能包含一个或多个NB(NET_BUFFER),每个NB有可能包含多个MDL。所以需要遍历每个NBL,NB,MDL得到以太网的帧数据。
LWF和TISec技术实现需要两个阶段,即LWF处理TISec加密数据流程和LWF处理TISec解密数据流程。当由协议层向网卡发送数据时,TISec LWF驱动会对相关数据进行加密封包处理。当网卡接收到由网络上传来的数据时,TISec LWF驱动会对相关数据进行解密封包再发送。
LWF处理TISec加密数据流程
图5 LWF处理TISec加密数据流程
首先,NDIS会调用LWF在DriverEntry函数中注册的SendNetBufferListsHandler的回调函数,这时就能得到NBL及其Raw Data。在代码中对其目的IP地址进行判断是否需要进行加密封包。如果不需要直接调用NDIS API:NdisFSendNetBufferLists发送这个NBL即可。如果需要,则要创建一个新的NBL来封装加密后的数据。然后调用API:NdisFSendNetBufferListsComplete丢弃原来的NBL,再调用API:NdisFSendNetBufferLists发送创建的NBL。当数据通过网卡发送完成后,NDIS再调用注册的SendNetBufferListsCompleteHandler回调函数,这时需要在此释放创建的NBL的内存。
LWF处理TISec解密数据流程
图6 LWF处理TISec解密数据流程
首先,NDIS会调用LWF在DriverEntry函数中注册的ReceiveNetBufferListsHandler的回调函数,这时就能得到NBL及其Raw Data。在代码中对网卡数据帧的源IP地址端口等进行判断是否需要进行解密封包。如果不需要则直接调用NDIS API:NdisFIndicateReceiveNetBufferLists向NDIS发送这个NBL即可。如果需要,则创建一个新的NBL来封装解密后的数据。再判断当前NBL的ReceiveFlags是否为NDIS_TEST_RECEIVE_CANNOT_PEND。如果为假,调用API:NdisFReturnNetBufferLists丢弃原来未解密的NBL,再调用API:NdisFIndicateReceiveNetBufferLists发送创建的NBL。当协议层收到这个数据帧后,NDIS调用注册的ReturnNetBufferListsHandler的回调函数,在此释放创建的NBL的内存。如果NDIS_TEST_RECEIVE_CANNOT_PEND为真,代表NDIS以同步方式调用ReceiveNetBufferListsHandler的回调函数,此时不能丢弃原始NBL,先调用API:NdisFIndicateReceiveNetBufferLists向NDIS发送原始的NBL,再设置新NBL的ReceiveFlags为NDIS_RECEIVE_FLAGS_RESOURCES,然后调用API:NdisFIndicateReceiveNetBufferLists向NDIS发送新的NBL,发送完成后立刻释放新NBL的内存,此时不能依赖在ReturnNetBufferListsHandler的回调函数内释放内存。
总结
LWF驱动是微软推荐的网络驱动的实现方式,具有更好的平台兼容性(如支持Windows 10),因此也得到广泛的应用,如VMware,VirtualBox等产品都使用LWF实现其功能。TISec客户端使用LWF驱动保证相关网络数据都以加密的方式进行传输,从而确保了IP数据的完整性和机密性,同时利用TISec的通信节点身份鉴别和平台可信等技术,为用户提供更可靠更有效的安全服务。