APP下载

基于NDIS中间层驱动和SSL协议的安全通信

2011-03-14赵春平刘文丽

网络安全技术与应用 2011年3期
关键词:链路层中间层网卡

赵春平 刘文丽

江南计算技术研究所 江苏 214083

0 前言

在SSLVPN中,通过虚拟网卡和SSL协议可以实现安全通信,保护IP和链路层数据安全。Openvpn是这种技术的开源实现,它通过实现一个虚拟网卡将IP或链路层数据传输到应用层,在应用层通过SSL隧道通信,以达到安全目的。

通过虚拟网卡技术实现IP和链路层层的安全有一些缺点:

(1)对于建立SSL隧道的两台机器,只有通过对方的虚拟地址访问时,数据才被保护。从根本上说(在不采用其他安全措施,比如防火墙),两台机器之间仍然存在明文通信;

(2)虚拟网卡技术依赖虚拟IP地址,可能会影响上层应用的访问方式。

本文提出了一种基于Window NDIS协议和SSL协议来进行安全通信的方法,并在原型通信的基础上给出了多种安全通信方式。本方法可以实现下面的安全通信方式:

(1)构建远程访问模式SSLVPN;

(2)构建局域网访问模式SSLVPN;

(3)任意两台计算机的安全通信;

(4)构建加密网络。

本方法的安全通信仅需要物理IP地址,并且安全通信不影响非安全通信,安全通信和非安全通信使用相同的IP地址。

本方法借鉴了虚拟网卡方式SSLVPN的思想:实现一个SSLVPN,开发人员需要通过各种不同的手段来截获通信数据,然后将通信数据在SSL隧道中传输。虚拟网卡工作方式的SSLVPN从根本上讲是将windows内核态协议栈中的数据通过IO控制传递到用户态的SSL隧道中进行传输,它的实现手段是虚拟网卡。本文介绍的方法通过IO控制将windows的NDIS层数据传递到用户态进行安全传输。

1 NDIS介绍

NDIS(Network Driver Interface Specification)是微软实现的网络驱动接口规范。它包括NDIS协议驱动,NDIS小端口驱动和NDIS中间层驱动,各种驱动遵循规范进行交互。

通过NDIS中间层可以进行网络数据的截获,NDIS中间层截获的数据为数据链路层数据。

微软的WDK中提供了passThru实现范例,它是一个透明的NDIS中间层驱动。开发人员可以修改passThru范例来达到自己的目的。

2 SSL协议介绍

SSL(Security Socket Layer)协议是广泛使用的安全通信协议。SSL客户端和SSL服务端在socket层协商秘密信息,并在此基础上进行安全通信。

3 实现原理

本方法通过NDIS中间层驱动来截获网络数据,通过操作系统 IO控制,将数据传递到操作系统应用层来进行安全通信。安全通信的方式可以是SSL协议或其他自定义通信协议。大致的通信示意图如图1所示。

图1 通信示意图

应用数据发送过程如下:

(1)发送方发送数据时,网络数据被NDIS中间层截获,存入缓冲区;

(2)用户态进程读取NDIS中间层截获的网络数据;

(3)用户态进程采用SSL通道发送给目标;

(4)目标机器应用层进程从SSL通道接收数据;

(5)目标机器应用层进程将收到的数据写入NDIS中间层驱动;

(6)目标机器NDIS中间层驱动将数据提交给上层协议。

为了避免出现环路通信,使 SSL通道能够正常工作,NDIS中间层必须放过SSL通道的网络通信,有目的的截获。NDIS截获时,可以根据需求进行截获。

NDIS截获的数据是链路层数据,因此,此种方法能保证链路层之上的所有安全通信。

4 原型及其模式演化

4.1 通信原型

基于NDIS中间层驱动和SSL协议的原型如图2所示。

图2 NDIS安全通信原型

在原型中,发起方的网络数据通过NDIS中间层驱动传递到SSL模块,然后通过SSL模块发送;接收方通过SSL模块接收,再通过NDIS中间层驱动传递到上层。

4.2 远程访问模式

在上述原型中,将接收方的SSL模块与NDIS中间驱动层剥离,那么,它将演化为远程SSLVPN访问。如图3所示。

图3 远程SSLVPN访问模式

此种工作方式下,远程访问者的机器需要安装NDIS中间层驱动和 SSL模块。受保护网络需要有一台前置的 SSL转发服务器,目标机器上需要安装 NDIS中间层驱动。SSL转发服务器与目标机器间采用socket进行明文通信。

4.3 局域网访问模式

在远程访问模式下,将远程访问者一端进行剥离,那么将转化为局域网访问模式。如下图所示:

图4 SSLVPN 局域网工作模式

4.4 通过中转的加密网络

在局域网模式下,如果将两台SSL转发服务器合二为一,那么将组成一个通过中间服务转发的加密网络,如下图所示:

图5 通过中转的加密网络

4.5 点对点安全通信

如果不通过SSL转发,可以实现任意两台机器间的安全通信,相当于构造了一个加密网络。如下图所示:

图6 点对点安全通信

5 实现方法

下面给出了主要模块的大致实现方法:

(1)NDIS驱动

NDIS驱动以微软WDK中提供的Passthru范例为基础,增加读写文件操作。在读文件操作中,需要NDIS驱动缓存MPSendPackets中的发送数据,如何缓存以及如何读取,可以参考openvpn的实现方式。在写文件操作中,我们需要构造一个数据包提交给上层协议,调用 NdisMEthIndicateReceive函数。

(2)SSL协议

SSL协议可以使用openssl来实现。

按照上述方式实现的NDIS驱动,完全可以替换openvpn中的虚拟网卡驱动来实现安全通信。

6 总结

通过NDIS中间层驱动和SSL协议来实现安全通信时,所使用的均为实际的物理地址,即一个物理地址即能做到明文通信同时也在进行明文通信。并且,NDIS的截获可以只针对特定目标,完全不影响其他的正常通信。

[1]rfc2246,The TLS Protocol Version.1.0.

[2]WDKDocs_12112009.chm.windows wdk.帮助文档.

猜你喜欢

链路层中间层网卡
Zn-15Al-xLa中间层对镁/钢接触反应钎焊接头性能影响
基于多空间内存共享的数据链路层网络包捕获方法
卫星网络中的TCP 跨层技术研究
一种基于PCI接口的1394B总线的设计与实现
部署Linux虚拟机出现的网络故障
一种十七股子午胎钢丝帘线
Server 2016网卡组合模式
镍基高温合金TLP扩散焊中间层材料研究进展
B含量对IC10合金TLP焊接用中间层材料及接头组织的影响
挑战Killer网卡Realtek网游专用Dragon网卡