摘要: 本文通过分析802.1X协议,发现其存在离线字典攻击漏洞。同时对广州大学锐捷认证协议的具体实现进行黑箱测试后,找到了同一个子网的机器和饶过认证进行通信的方法。

关键字:802.1X,锐捷,离线字典攻击

Research on Ruijie Authentication Protocol in Guangzhou University

Abstract: This paper found a weak point, offline dictionary attack in 802.1X protocol. Also after carrying out black box test on the implementation of Ruijie Authentication protocol in Guangzhou University, we proposed a method that machines in the same sub network can communicate with each other without 802.1X authentication.

Keyword: 802.1X, Ruijie, offline dictionary attack

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].

3 广大锐捷认证协议的实现

再安全的协议,如果实现不当的话,都会变得十分脆弱。由于设计之初并没有考虑到不同子网之间存在相同MAC地址的问题,导致只有一个端口的MAC地址通过了认证,那么具有相同MAC地址的其他网络端口也可以通过认证。实践证明,接在不同交换机上的任何两个网络端口都可以利用这个漏洞。不过,最近实施的网络端口和MAC地址的绑定政策,又让大家失望了。那么,接下来,我们就是要考虑绑定MAC地址之后的环境下的实验了。记住,我们实验的几个目标:

1级目标:可以不经认证就发送数据到同一个交换机中的其他端口;

2级目标:可以不经认证就接收到同一交换机上其他端口发送过来的数据;

3级目标:可以不经认证就发送数据到其他交换机中的其他端口;

4级目标:可以不经认证就接收到其他交换机上端口发送过来的数据。

3.1实验环境说明

下面是实验的网络拓扑:

在该拓扑下面,重复一遍我们的目标:(A机器不经认证)

1级目标:可以发送数据到B机器

2级目标:可以接收来自B机器的数据

3级目标:可以发送数据到C机器

4级目标:可以接收来自C机器的数据

相关实验软件工具:

1. VC++6.0。用于编写代码实现发送经过精心构造的数据包

2. wireshark。基于pcap的网络监听工具,以分析是否满足实验的目标

3. winpcap。一个跨平台的,提供驱动级别的访问网络底层能力的库pcap在Windows下的实现。

3.2关于2级和4级目标

对于2级和4级目标,所谓交换机控制的是机器A访问网络的能力,指的是其主动访问网络的能力,对于被动接收网络上发过来的数据是没有做限制的,因此,这两个目标是自然成立的,只需要按照正常的网络通信那样进行就可以了。不过需要注意的是,由于TCP连接存在三次握手和ACK包,因而,传统意义上的TCP连接是无法建立的。只有UDP数据包就可以正常通信。

备注1:因为考虑到跨子网问题,故而需要考查高层网络协议,如IP,  TCP, UDP等,而链路层上的协议在当前环境的交换机中是不跨子网的。

3.3实现1级目标

为了实现这个目标,我们首先观察到这样的一些事实:

事实1:源地址为任意,目标地址为01-80-c2-00-00-03的802.1X认证报文,能够通过交换机。

事实2:IP地址为202.192.18.0/24的IP数据包能够通过交换机。

根据以上两个事实,我们首先尝试了将802.1X认证报文的目标地址改为机器B的MAC地址,实验后得到以下这个事实:

事实3:目标地址不为01-80-c2-00-00-03的802.1X认证报文,无法通过交换机。

既然这样满足不了我们的要求,下面就要利用事实2了。我们首先截获了一个到DNS服务器的Query数据包:

uint8_t DNSPackage[] = {0x00, 0x0c, 0xdb, 0xd0, 0x01, 0xa0, 0x00, 0x23, 0x54, 0x86, 0x94, 0xf3, 0x08, 0x00, 0x45, 0x00, 0x00, 0x3b, 0x45, 0x67, 0x00, 0x00, 0x40, 0x11, 0x8f, 0x2a, 0xac, 0x12, 0x1d, 0x4d, 0xca, 0xc0, 0x12, 0x01, 0xde, 0x59, 0x00, 0x35, 0x00, 0x27, 0x0c, 0xc9, 0x97, 0x26, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0x77, 0x77, 0x05, 0x62, 0x61, 0x69, 0x64, 0x75, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x1c, 0x00, 0x01};

其中0x0023548694F3是机器A的MAC地址,0x000CDBD001A0对应为网关的MAC地址。我们将数据帧的目的地址改为机器B的MAC地址0x00235A11CC50,惊喜地发现机器B可以接收到从机器A发过来的数据。这样,我们得到这样一个事实:

事实4:机器A要发送数据到机器B,只需要修改数据包的目的MAC地址为对方的MAC地址,并且将IP包的目的地址改为202.192.18.1,然后再发送到网络中即可;机器B根据接收到的数据包如果IP目的地址为202.192.18.1,源目的地址不为0x000CDBD001A0,那么就认为是机器A发送过来的。

由事实4,我们实现了1级目标。实验的关键代码为:

uint8_t     remote_mac[ETHER_ADDR_LEN]= {0x00, 0x23, 0x5a, 0x11, 0xCC, 0x50};

memcpy(sendpackage, DNSPackage, 38);

int len_pack = sizeof(DNSPackage);

memcpy(sendpackage, remote_mac, ETHER_ADDR_LEN);

3.4 突破3级目标

在完成了1级目标之后,接下来就要突破3级目标了。注意到3级目标要求我们构造的数据包可以通过不同的交换机。然而由事实2,通过简单的尝试后就很容易得到另一个事实了:

事实5:IP地址不为202.192.18.0/24的数据包无法通过交换机。

既然无法通过交换机,那么要达到跨网就无从谈起了,这样,只好在目的IP地址为202.192.18.1的前提下进行讨论了。既然目的地址已经确定了,为了识别另一个网段上的机器,又只好将源IP地址设定为机器C的IP地址了。于是,我们的想法很自然,就是希望通过DNS服务器转发消息给机器C。当然了,通常的DNS查询应答是无法为我们传递所需的消息的,那么唯一的办法就是将我们的消息嵌套到DNS查询当中。这里,我们说的是这样一个事实:

事实6:机器A通过构造一个包含有发送消息T的DNS数据包,并修改数据包源IP地址为机器C的IP地址,那么机器C将收到来自DNS服务器的一个DNS应答数据包,并且该应答数据包中包含了消息T。

由事实4,我们实现了3级目标。通过构造DNS查询数据包的方法的效率比较,其效率为:

其中38为构造DNS查询所必须花费的网络带宽代价。

除去DNS数据包之外,FTP和BBS的短消息功能也都可以作为信息交换的中心,然而,这样通过第三方进行信息交换的方法会加大服务器额外的负担,甚至会被认为是恶意的拒绝服务攻击,因此并不建议采用这样方法来处理。

综上,对于突破3级目标对于我们来说只是基本实现,还没有很完美地满足要求,仍需要更进一步的实验。

4 结论

请记住,我们上面的所有实验都是在没有通过锐捷认证的条件下进行的,我们很好地实现了1级,2级和4级目标,并且基本实现了3级目标,也就是说可以进行基本的网络通讯。在接下来的实验里面,如何更好地实现3级目标还是一个有挑战的问题。

参考文献

[1] EAP的总体流程, http://apt-blog.net/details_about_802_1x_in_campus_authentication_1

[2] Extensible Authentication Protocol (EAP), http://tools.ietf.org/html/rfc3748

[3] Wireshark, http://www.wireshark.org/download.html

[4] Winpcap, http://www.winpcap.org/install/default.htm

广州大学锐捷认证协议安全性研究相关推荐

  1. 锐捷认证客户端在嵌入式linux平台上的移植

    一.TCP/IP协议简介 IP协议用于将多个包交换网络连接起来,IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流 ...

  2. 校园生存手册之Linux下锐捷认证

    一般来说 大部分学生使用锐捷校园网认证的时候 在开启虚拟机锐捷会把踢下去 所以我的想法是用锐捷破解版破解多网卡限制+mentohust实现kali下锐捷认证 而且会给你一个新的ip 研究了半天后,说下 ...

  3. 服务器ipv4协议认证,基于TCP/IP应用层密码认证协议的研究

    Internet在全世界盛行,它的基础协议就是传输控制协议/网际协议(TCP/IP).TCP/IP是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来以及传送方式 ...

  4. linux锐捷认证成功无法上网,win7系统锐捷认证成功但是却无法上网的解决方法

    很多小伙伴都遇到过win7系统锐捷认证成功但是却无法上网的困惑吧,一些朋友看过网上零散的win7系统锐捷认证成功但是却无法上网的处理方法,并没有完完全全明白win7系统锐捷认证成功但是却无法上网是如何 ...

  5. linux fedora下实现锐捷认证

    装上fedora时间也不短了,可就是一直都没有能在fedora下实现上网,一日与学院网络管理中心的老师交流,有幸得到老师的点化,进而实现了linux fedora下用锐捷认证上网. 老师发来的邮件,原 ...

  6. Ubuntu Linux下使用锐捷认证的方法

    http://bbs.710071.cn/viewthread.php?tid=4688 http://bbs.710071.cn/viewthread.php?tid=4918 感谢以上两篇文章的作 ...

  7. 锐捷 linux无法上网,通过锐捷认证了,为什么还不能上网?

    通过锐捷认证了,为什么还不能上网? 发布时间:2008-10-06 18:06:38来源:红联作者:maitt 通过锐捷认证了,为什么还不能上网? 以下为在终端显示的信息,请高手指点一下 谢谢!!! ...

  8. Ubuntu锐捷认证方法(vmware)

    Ubuntu+VMware玩转锐捷认证 Ubuntu系统如何通过锐捷认证有线上网?如果电脑装了VMware Workstation,那么可以用网络知识解决这个问题. 原理:将一台虚拟windows计算 ...

  9. arm-linux平台的锐捷认证工具Mentohust移植

    arm-linux平台的锐捷认证工具Mentohust移植 前期准备 编译libpcap 编译mentohust 测试 前期准备 根据不同的arm-linux平台选择对应的交叉编译器,我的开发板芯片是 ...

  10. 锐捷认证客户端——多网卡限制破解

    锐捷认证v3.02 有多网卡限制和使用代理服务的限制. 使用锐捷认证后,无法组件内部局域网,很不方便. 经观察,锐捷认证v3.02一分钟就检测一次. 先用 W32DASM 反汇编8021x.exe,然 ...

最新文章

  1. Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?
  2. Linux C动态链接库实现一个插件例子
  3. SqlDataAdapter上调用存储过程
  4. 【转载】Linux命令-自动挂载文件/etc/fstab功能详解[转]
  5. db2 查杀死锁进程
  6. erlang的epmd指定端口范围验证及端口权限配置
  7. 不可小觑汽车广告海报,设计感分分钟爆棚!
  8. UVA10494 If We Were a Child Again【大数除法】
  9. linux 命令行域名的解析(DNS) —— dig、host
  10. day01 --环境搭建 注册 表单校验
  11. 21. Element isContentEditable 属性
  12. 拓端tecdat|R语言广义相加模型 (GAMs)分析预测CO2时间序列数据
  13. 数据库毕业设计参考文献最新合集
  14. verilog实现矩阵卷积运算
  15. python xlwt图表_Python中用xlwt制作表格实例讲解
  16. 微信抽奖网络服务器错误,微信抽奖账号异常原因?
  17. 有道智云应用ID应用密钥审请
  18. 互联网常见34个术语解释
  19. 计算机五笔打字口诀,电脑五笔打字的字根口诀是什么?
  20. 通过授权微信,达到软件登录账号的效果~~未完

热门文章

  1. os+rom+android+6.0+n9005,三星S8+官方韩版安卓9固件rom系统线刷升级包:G955NKSU3DSG5
  2. Linux 4G/5G 驱动移植、实践测试记录
  3. 计算机维修兴趣小组,计算机兴趣小组章程
  4. 火狐浏览器不能看网页视频了的解决方法
  5. 怎么在gif表情包上添加文字?
  6. 将两张图片合并成一个PDF,不收费
  7. http post java工具类_java实现Http post(参数json格式)、get 请求的HttpUtil工具类
  8. php获取多选框的值
  9. 怎么使用biopython_Biopython - 简介
  10. VS201编译jpeg