1 序言
网络的认证接入一直都是市场比较关注的问题,目前用得比较多的认证协议有PPPoE, 802.1X等。而锐捷认证协议就是以802.1X为基础进行修改扩展的。本文主要关注的是该协议的自身安全性和协议实现的安全性,实验环境为广州大学的校园网。
在此之前,已经有人指出了由于实现上的出错,导致多台相同MAC地址的机器只要其中一台成功通过了认证协议,就都可以同时正常访问网络。进一步地,我们指出了,同样是由于实现上的问题,导致网络中没有通过认证的机器仍然获得对网络的部分访问能力。
2 广大锐捷认证协议
2.1 802.1X协议
通过前面的介绍,我们知道广大的锐捷认证协议是基于802.1X扩展的私有协议,因此在研究之前必须先了解清楚标准的802.1X协议。具体可以参考RFC 3748,下面只给出简单的协议描述。
认证过程简述:
1. 主机向服务器(多播或广播地址)发送EAPOL-Start
2. 服务器向主机发送EAP-REQUEST-Identity要求验证身份的请求
3. 主机向服务器发送EAP-RESPONSE-Identity回应
4. 服务器向主机发送EAP-REQUEST-MD5_Challenge要求验证密码的MD5校验值
5. 主机向服务器发送EAP-RESPONSE-MD5_Challenge回应
6. 服务器向主机发送EAP-Success
7. 保持连接的通信...
当然这只是一般过程,如果在任何时候服务器发来EAP-Failure数据包,都表示整个认证过程终止。在以太网中,EAP协议当然也是通过以太网帧的格式来传送,帧类型为0x888e,在基于pcap的抓包程序中,可使用"ether proto 0x888e"来抓取。当用作802.1x应答帧时,常使用802.1x分配的多播地址01-80-c2-00-00-03作为目的地址。
EAP协议不仅可用于本文关注的以太网环境中,还可在无线WLAN、令牌环网中应用,而这些链路帧是各不相同的,这就是为什么有EAPOL类型的数据帧,用以抽象EAP协议报文。
EAPOL-报文结构:(byte)
0-13
14
15
16-17
18-
Ethernet-Header
a:EAPOL 协议版本
b:EAPOL 报文类型
c:EAPOL 帧长度
Packet Body
a类型说明:通常为常量0x01
b类型取值:
EAPOL-Packet : 0x00
EAPOL-Start: 0x01
EAPOL-Logoff: 0x02
各种EAP协议的信息交互,封装在EAPOL-Packet类型的EAPOL报文内。至于EAP报文的格式,基本就是如下所示。
EAP-报文结构(byte)
18
19
20-21
22
22-
d:EAP通信类型
e:EAP通信id
f:EAP数据长度
g:EAP协商类型
EAP Body
d类型取值:
EAP-Request: 0x01
EAP-Resopnse: 0x02
EAP-Success: 0x03
EAP-Failure: 0x04
e类型说明:
通常由服务器发来的报文指定,在连续的报文内使用这个id来协商或者计算MD5值的数据之一。
g类型取值:
Identity: 0x01
MD5_Challenge: 0x04
2.2 802.1X协议的安全性分析
在协议的数据流中,我们关心的是与密码有关的部分,关键是对于EAP的MD5挑战的响应。这里记住几个变量:
1. SID:会话编号。这个就是上面提到的EAP通信ID。在通信过程中以明文出现的,长度为1个字节。
2. Salt:随机盐。在MD5挑战报文中附带过来的,也就是上面提到的attach-key。在通信过程中以明文出现,长度为16个字节。
3. SK:会话密钥。SK=MD5(SID+Password+Salt)
服务器端正式通过这个SK来判断认证请求是否合法。我们看到,由于MD5函数的单向性,要得到用户的口令是不可行的,除非采用字典攻击。因此,该协议首先就存在被执行离线字典攻击的缺陷,这也是大部分现行的网络协议所共有的问题。
不过,即使存在这样的漏洞,但是对于一般用户来说,字典的大小还是让人生畏的,我们还需要寻求其他方法。关于该协议更多的安全细节可以参考[2].
1 序言
网络的认证接入一直都是市场比较关注的问题,目前用得比较多的认证协议有PPPoE, 802.1X等。而锐捷认证协议就是以802.1X为基础进行修改扩展的。本文主要关注的是该协议的自身安全性和协议实现的安全性,实验环境为广州大学的校园网。
在此之前,已经有人指出了由于实现上的出错,导致多台相同MAC地址的机器只要其中一台成功通过了认证协议,就都可以同时正常访问网络。进一步地,我们指出了,同样是由于实现上的问题,导致网络中没有通过认证的机器仍然获得对网络的部分访问能力。
2 广大锐捷认证协议
2.1 802.1X协议
通过前面的介绍,我们知道广大的锐捷认证协议是基于802.1X扩展的私有协议,因此在研究之前必须先了解清楚标准的802.1X协议。具体可以参考RFC 3748,下面只给出简单的协议描述。
认证过程简述:
1. 主机向服务器(多播或广播地址)发送EAPOL-Start
2. 服务器向主机发送EAP-REQUEST-Identity要求验证身份的请求
3. 主机向服务器发送EAP-RESPONSE-Identity回应
4. 服务器向主机发送EAP-REQUEST-MD5_Challenge要求验证密码的MD5校验值
5. 主机向服务器发送EAP-RESPONSE-MD5_Challenge回应
6. 服务器向主机发送EAP-Success
7. 保持连接的通信...
当然这只是一般过程,如果在任何时候服务器发来EAP-Failure数据包,都表示整个认证过程终止。在以太网中,EAP协议当然也是通过以太网帧的格式来传送,帧类型为0x888e,在基于pcap的抓包程序中,可使用"ether proto 0x888e"来抓取。当用作802.1x应答帧时,常使用802.1x分配的多播地址01-80-c2-00-00-03作为目的地址。
EAP协议不仅可用于本文关注的以太网环境中,还可在无线WLAN、令牌环网中应用,而这些链路帧是各不相同的,这就是为什么有EAPOL类型的数据帧,用以抽象EAP协议报文。
EAPOL-报文结构:(byte)
0-13
14
15
16-17
18-
Ethernet-Header
a:EAPOL 协议版本
b:EAPOL 报文类型
c:EAPOL 帧长度
Packet Body
a类型说明:通常为常量0x01
b类型取值:
EAPOL-Packet : 0x00
EAPOL-Start: 0x01
EAPOL-Logoff: 0x02
各种EAP协议的信息交互,封装在EAPOL-Packet类型的EAPOL报文内。至于EAP报文的格式,基本就是如下所示。
EAP-报文结构(byte)
18
19
20-21
22
22-
d:EAP通信类型
e:EAP通信id
f:EAP数据长度
g:EAP协商类型
EAP Body
d类型取值:
EAP-Request: 0x01
EAP-Resopnse: 0x02
EAP-Success: 0x03
EAP-Failure: 0x04
e类型说明:
通常由服务器发来的报文指定,在连续的报文内使用这个id来协商或者计算MD5值的数据之一。
g类型取值:
Identity: 0x01
MD5_Challenge: 0x04
2.2 802.1X协议的安全性分析
在协议的数据流中,我们关心的是与密码有关的部分,关键是对于EAP的MD5挑战的响应。这里记住几个变量:
1. SID:会话编号。这个就是上面提到的EAP通信ID。在通信过程中以明文出现的,长度为1个字节。
2. Salt:随机盐。在MD5挑战报文中附带过来的,也就是上面提到的attach-key。在通信过程中以明文出现,长度为16个字节。
3. SK:会话密钥。SK=MD5(SID+Password+Salt)
服务器端正式通过这个SK来判断认证请求是否合法。我们看到,由于MD5函数的单向性,要得到用户的口令是不可行的,除非采用字典攻击。因此,该协议首先就存在被执行离线字典攻击的缺陷,这也是大部分现行的网络协议所共有的问题。
不过,即使存在这样的漏洞,但是对于一般用户来说,字典的大小还是让人生畏的,我们还需要寻求其他方法。关于该协议更多的安全细节可以参考[2].