一种适用于局域网的安全邻居发现协议

作者: 苏彦圣 胡建华 宋广佳

一种适用于局域网的安全邻居发现协议0

摘要:邻居发现问题是互联网通信过程中的一个重要问题,互联网中的节点通过邻居发现过程来获取其他节点的通信标识。传统的邻居发现协议由于假设所有的节点都是可靠的,使其面临很多安全威胁,比如欺骗攻击,DoS攻击等。为了提高发现过程的安全性,文章提出了一种新的邻居发现协议SNDP。SNDP采用加密方法对自身的通信标识以及邻居发现的目标地址进行保护,使得恶意节点无法获知邻居发现的目标地址,也无法获知是哪个节点在进行邻居发现以及哪个节点进行了应答,因此可以有效防止欺骗攻击和DoS攻击,具有极高的隐私保密性。

关键词:邻居发现;地址解析;IPv6;网络安全

图分类号:TP311      文献标识码:A

文章编号:1009-3044(2023)35-0090-04

开放科学(资源服务)标识码(OSID)

0 引言

计算机网络采用分层的体系结构,为了简化各层的设计,每一层都使用了独立的通信标识以减少耦合。比如二层使用MAC作为数据帧的传输地址;三层使用IP作为IP 数据包的目的地址;四层则使用<IP, Port>作为进程的通信地址,即Socket接口。为了保障通信的顺利进行,上下层的通信标识必须要有明确的对应关系,否则通信将无法完成。比如在三层,源主机要与目标地址IPX进行通信时,将数据包发送至二层后,二层必须知道IPX所对应的MAC地址(假设源主机与目标主机在同一个局域网中)才能进行信息传送。网络通信除了需要解决IP与MAC的对应关系外,还需要解决域名与IP的对应以及<IP: Port>与IP的对应等其他对应关系。三种典型的对应关系见图1。

通信标识对应关系的安全性是互联网需要解决的安全问题之一,随着互联网与产业的融合,融入互联网的设备的增加及互联网承载业务的增多,通信标识对应关系的安全问题将更加凸显。本文提出了一种新的邻居发现协议,叫作安全局域发现协议(Secure Neighbor Discovery Protocol,SNDP) ,并给出了具体实现方法,并将其与几种典型的安全方案进行了对比与分析。

1 研究背景

目前,广泛使用的局域发现协议有两种:一种是用于IPv4环境中的地址解析协议(Address Resolution Protocol,ARP) ,另一种是用于IPv6环境的邻居发现协议(Neighbor Discovery Protocol,NDP) 。对于局域发现过程,由于其没有注册过程,也没有服务器支持,因此非常容易受到欺骗攻击。以地址解析协议为例,当主机A广播ARP请求拥有网络地址IPX的主机B回答其MAC地址时,如果主机C不断进行ARP应答,谎称自己拥有IPX,则A收到应答后并不知道这是冒充的报文,A会更新自己的ARP缓存表,将C当作B,并将本应发送给B的数据包发送给C,从而形成了ARP欺骗[1]。

目前,国内外对局域发现协议的安全性研究主要集中在以下三方面:

1) 防御与检测技术,即采用技术手段对攻击进行防御或者检测已经发生的攻击,对网络中主机的<IP,MAC>进行长期监视与记录,一旦发现主机发送的ARP报文中<IP,MAC>映射与记录中的不符,则认为存在欺骗[2-3]。传统的<IP,MAC>绑定与划分VLAN方法也可归为此类,但该方法属于被动防御,同时增大了网络复杂度与维护成本。

2) 改进协议的方式,主要以采用改变协议过程或者增加协议环节的方法来增强安全性[4-6]。比如文献[4]中采用在网络中增加一台DHCP服务器,并且扩展了DHCP协议使其可以完成地址解析过程,但产生了单点故障问题,增加了组网成本。

3) 加密通信的方式。比如使用非对称加密技术对报文进行加密,防止IP地址盗用[7]。虽然IPv6中规定可以用IPSec保护邻居发现协议报文,但在邻居发现中使用IPSec还存在很多问题,为此IETF小组提出安全邻居发现协议(SEcure Neighbor Discovery,SEND) ,SEND使用CGA(cryptographically generated address,CGA) 、数字签名、时间戳等方法来保护NDP消息[8],但加密方式存在密钥管理难的问题,而且SEND与NDP同时存在还会引起路由问题[9]。由于SEND协议固有时间复杂度高[10-12],目前仍然处于实验阶段[13]。加密通信存在一个逻辑问题,即通信双方在加密通信前双方须互相知道MAC地址以便能够交换密钥,而这恰恰是局域发现协议要实现的,这一过程如果存在欺骗,那么后续的通信保障则失去了意义。

源地址验证技术(Source Address Validation Architecture,SAVA) 是一种新的安全机制,其主要思想是根据数据包中的源地址信息对报文行过滤,这样做的好处是一方面可以从源头直接阻止攻击,另一方面是便于源地址的追踪、溯源以及网络诊断与管理[14-15]。SAVA作为一种安全机制,需要网络设备的支持。目前SAVI(Source Address Validation Implementation) 还处于实验阶段,其域内源地址验证的功能需要路由器支持,并且路由器要完成大量集中计算,因此会影响网络性能,而且由于各设备厂商对SNMP协议的实现方式不同,致使SAVI部署难度很大[16-17]。

2 安全局域发现模型设计

SNDP依然采用NDP的消息格式,如图2所示,但部分字段进行了改进。下面首先介绍NDP协议的基本构成。NDP协议使用邻居请求NS(Neighbor Solicitation) 与邻居公告NA(Neighbor Advertisement) 来完成邻居发现过程。NDP报文主要由3部分构成:Ethernet部分、IPv6头部与ICMPv6部分,主要字段如图2所示。NS报文没有“RSO”字段,NS报文的“Type”字段为135,NA的“Type”字段为136。“RSO”字段只在NA中使用,“Target address”字段一般写入邻居发现的目的地址,“Option”字段在不同类型的ICMPv6消息中用法各不相同,在NDP中一般给出发送该报文的节点的MAC地址。

SNDP使用NSSNDP与NASNDP来完成局域发现过程,其Type字段值分别为200与201(ICMPv6的保留值)。SNDP消息的“Target address” 字段不再存储邻居发现的目标IP地址,而是存储目标地址的哈希值。SNDP中使用的密钥[K]以及消息签名[SigK]都使用NDP的Option字段存储。模型中的RO使用Hash函数进行替换,本文中hash函数使用的是MD5(Message Digest Algorithm 5) ,加密算法使用的是IDEA(International Data Encryption Algorithm) 。SNDP中用到的几个函数含义如下:

[Left(x, n)],从左边截取x的[ n] bit,得到长度为[n]的二进制串;

[EK(x)],以[K]为密钥,使用IDEA将[x]进行加密;

[DK(x)],以K为密钥,使用IDEA对[x]进行解密;

[H(x)],计算[x]的MD5值,结果长度为128 bit。

我们用IPA、MACA表示主机A的IP地址与MAC地址,用IPB、MACB表示主机B的IP地址与MAC地址。SNDP的局域发现过程如下:

(1) 发起阶段。主机A进行如下操作:

Step 1:当主机A需要寻找网络地址IPX所对应的MAC地址时,首先,主机A产生密钥对([KA,K-1A])

Step 2:主机A以广播方式发送NSSNDP,各字段赋值如下:

Src_IP=[EIPX(IPA)]

Src_MAC=[Left(EIPX (MACA),48)]

Dest_IP=FF02::1(IP广播地址)

Dest_MAC=33-33-00-00-00-01(MAC广播地址)

Target address=[H(IPX)]

Type=200

Options={[EIPX (MACA,KA), SigK-1A]}

(2) 应答阶段。其他主机(以主机B表示)进行如下操作:

Step 3:接收NSSNDP

Step 4:如果地址池中还有地址可取,则取出一个地址记为IPY,产生密钥([KB,K-1B]) ,进行Step 5,如果无地址可取,则过程结束;

Step 5:计算[H(IPY)]

如果[H(IPY)]与NSSNDP的Target address字段相同,则将[IPY]作为密钥,解密主机A的IP地址与MAC地址

IPA=[SNDP]

MACA=[DIPY] ([SNDP])

发送NASNDP回复主机A,各字段赋值如下:

Src_IP=[EKA(IPY)]

Src_MAC=[Left(EKA(MACB), 48)]

Dest_IP=[EKA(IPA)]

Dest_MAC= [MACA]

Target addrss= [EKA(IPY)]

Options=[(EKA(MACB,KB), SigK-1B)]

如果[H(IPY)]与NSSNDP的Target address字段不同,回到Step 4。

(3) 验证过程。主机A进行如下操作

Step 6:在规定的时间内(一般为1-3秒钟),对所有接收到的NASNDP进行验证,测试NASNDP的Target address字段与IPX是否匹配:

如果Target addrss=IPX,则表明局域发现成功,使用[K-1A]解密NASNDP的Option字段即可获得主机B的MAC地址MACB。

如果Target addrss≠IPX,则将NASNDP丢弃。

SNDP工作流程图见3。

下面以一个实例进行说明SNDP的局域发现过程。假设局域网中有三台主机,主机的地址信息见表1。

如果主机A要寻找地址为1::5:B主机的MAC地址,则A首先广播NSSNDP,各字段值见图4。主机B与C都可以收到这条广播。主机C从地址池中取出地址1::5:C,计算:

h(1::5:C)=E77B56DC72BF9E34EBA732592A5A6DD0

发现[H(1::5:C)]与NSSNDP中的Target address字段不等,而且地址池中也无下一个地址了,则将该NSSNDP丢弃。主机B从地址池中取出地址1::5:B,计算:

hash(1::5:B)= BAED6FB66CBEDFDCA5D0A910D315BF89

发现与NSSNDP中的Target address字段相等,则以1::5:B作为密钥解密主机A的IP地址与MAC地址,然后使用主机A的密钥[KA]将自己的IP地址、MAC地址以及主机A的IP地址与MAC地址进行加密,发送NASNDP进行应答,各字段值见图4。

主机A在收到这个NASNDP后,进行验证。主机A使用私钥[K-1A]解密NASNDP的Target address字段,发现 [SNDP],即目标节点拥有自己所要寻找的IP地址,则进一步解密NASNDP的Option字段,获得主机B的MAC地址。

3 对比与分析

3.1 SNDP的特点

通过第三部分的描述可知,SNDP与ARP、NDP是完全不同的,SNDP具有以下几个特点:

1) 防止欺骗攻击。在SNDP中,目标的IP地址是不公开的,公开的只是目标IP地址的hash值,恶意节点无法根据hash值推测出真实的IP地址,因此无法发送伪造的应答。同时,由于SNDP使用了消息签名,即使消息被截获,恶意节点也无法篡改内容。

上一篇 点击页面呼出菜单 下一篇