码迷,mamicode.com
首页 > 其他好文 > 详细

hostapd wpa_supplicant madwifi详细分析(十三)——EAPOL(802.1X-2004/IEEE Std 802.1X-2010)

时间:2016-08-07 21:52:21      阅读:2098      评论:0      收藏:0      [点我收藏+]

标签:

这篇文章主要介绍EAPOL,关于它的详细定义可以到802.1X-2004/IEEE Std 802.1X-2010两个文档里面查询。这两个文档核心内容大同小异,只是2010版定义得更细致,同时也更难以理解,建议先了解2004版,会更容易看懂。因为2010版引入来更多的名词,加入了更多的参考资料,对一致性的描述更加细致具体,让标准可以适用于更多的加密场合,补充2004 版中的一下缺陷。

两个标准的前5章的差异,我们可以不用太深究,他们主要包括802.1x的定义,名词解释,适用范围,引用文档,一致性说明等内容进行的介绍,如果在后面的阅读中遇到障碍,回过来翻阅就好了,对于前5章,我们只需要知道:

802.1x协议是一种基于端口的网络接入控制协议(port based network access control protocol)。“基于端口的网络接入控制”是指在局域网接入设备的端口这一级对所接入的用户设备进行认证和控制。连接在端口上的用户设备如果能通过认证,就可以访问局域网中的资源;如果不能通过认证,则无法访问局域网中的资源——相当于物理连接被断开。

如果有阅读前面一篇文章,应该会了解EAPOL在局域网中是用来为EAP服务的,它主要用来装载EAP数据包,完成802.1x的认证过程。EAPOL也工作在LLC层,下面主要从6章开始了解。

一、第六章对比

基于端口的网络控制允许网络管理员限制无线局域网内服务接入点(ports)的使用,以达到和已认证和授权系统安全通信的目的。

以下是802.1x的一些核心概念

1. 端口PAE(Port Access Entity,端口访问实体)

端口PAE为802.1x系统中,在一个给定的设备端口上执行算法和协议操作的实体对象。设备端PAE利用认证服务器对需要接入局域网的客户端执行认证,并根据认证结果相应地控制受控端口的授权/非授权状态。客户端PAE负责响应设备端的认证请求,向设备端提交用户的认证信息。客户端PAE也可以主动向设备端发送认证请求和下线请求。

2. 受控端口和非受控端口

设备端为客户端提供接入局域网的端口,这个端口被划分为两个逻辑端口:受控端口和非受控端口。

l              非受控端口始终处于双向连通状态,主要用来传递EAPOL协议帧,保证客户端始终能够发出或接收认证报文。

l              受控端口在授权状态下处于双向连通状态,用于传递业务报文;在非授权状态下禁止从客户端接收任何报文。

l              受控端口和非受控端口是同一端口的两个部分;任何到达该端口的帧,在受控端口与非受控端口上均可见。

3. 受控方向

在非授权状态下,受控端口可以被设置成单向受控和双向受控。

l              实行双向受控时,禁止帧的发送和接收;

l              实行单向受控时,禁止从客户端接收帧,但允许向客户端发送帧。

对于两个版本的802.1x协议来说,第6章主要差别是

| The MAC Security Entity (SecY) specified in IEEE Std 802.1AE
| Link Aggregation as specified in IEEE Std 802.1AX (6.5)
| IEEE Std 802.11 (6.6)
|  IEEE Std 802.1AR (5.7, 8.11.2)

在802.1x-2010里面,新增了上面几种更加底层的加密方式描述,包括IEEE Std 802.1AE用于MAC层的加密,IEEE Std 802.1AX用于链路汇聚,IEEE Std 802.11 (6.6)链路层基于媒体的通信,IEEE Std 802.1AR用于设备标识符的鉴定。查询相关文档可以知道,这些更加底层的安全协议都是在2004年以后制定的,所以在802.1x-2010版本协议中才有将这些协议包含进来,下面来对比一下2004版和2010版802.1x的工作流程:

技术分享

技术分享

两张图对比,明显上面一张的简洁直接,因为它只描述了第二张图中红线以上部分内容,也就是只描述来LLC层的加密,对于MAC,媒介以及硬件标识都没有描述。其实弄清楚了2004版本中的内容,再来看2010版本中 内容会简单许多,关于LLC一下的加密这里不进行描述,至少在我接触到的产品或者hostap代码中都没有涉及到相关的内容,只要知道有这么回事,以后遇到时参考相关的文档就好了。其实我查了一下,在最新的hostapd代码中,在2014-3才有将IEEE Std 802.1AE加入hostapd代码中,也就是说在最新的hostapd代码中其实已经有支持802.1x-2010了。


二,第七章对比

802.1x-2004的第七章描述的是EAPOL报文的封装,但是802.1x-2010第七章描述的是PAC的应用,它将EAPOL PDUs放到第11章进行描述,下面这张图是其中的应用之一,可以看出,在新的版本中添加了VLAN,bridge, MAC secY 等描述,从硬件层到LLC层,每一层都有对应的安全标准,看起来简直完美,但实际中却很难应用。

技术分享

然而我们现在用的最多的仍然是802.1x-2004版本,成熟稳定。下面就来看看802.1x-2004第七章中关于EAPOL帧的封装。

1. EAPOL数据包的格式

EAPOL是802.1x协议定义的一种报文封装格式,主要用于在客户端和设备端之间传送EAP协议报文,以允许EAP协议报文在LAN上传送。格式如图3所示。

技术分享

图3 EAPOL数据包格式

PAE Ethernet Type:表示协议类型,为0x888E。

Protocol Version:表示EAPOL帧的发送方所支持的协议版本号。

Type:

l              EAP-Packet(值为0x00),认证信息帧,用于承载认证信息;

l              EAPOL-Start(值为0x01),认证发起帧;

l              EAPOL-Logoff(值为0x02),退出请求帧;

l              EAPOL-Key(值为0x03),密钥信息帧;

l              EAPOL-Encapsulated-ASF-Alert(值为0x04),用于支持ASF(Alert Standard Forum)的Alerting消息。

Length:表示数据长度,也就是“Packet Body”字段的长度,单位为字节。如果为0,则表示没有后面的数据域。

Packet Body:根据不同的Type有不同的格式。

其中,EAPOL-Start,EAPOL-Logoff和EAPOL-Key仅在客户端和设备端之间存在;在设备端和认证服务器之间,EAP-Packet报文重新封装承载于RADIUS协议上,以便穿越复杂的网络到达认证服务器;EAPOL-Encapsulated-ASF-Alert封装与网管相关信息,例如各种警告信息,由设备端终结。

2. EAP数据包的格式

当EAPOL数据包格式Type域为EAP-Packet时,Packet Body为EAP数据包结构,如图4所示。

技术分享

图4 EAP数据包格式

Code:指明EAP包的类型,一共有4种:Request,Response,Success,Failure。

Identifier:辅助进行Request和Response消息的匹配。

Length:EAP包的长度,包含Code、Identifier、Length和Data的全部内容,单位为字节。

Data:由Code决定。

Success和Failure类型的包没有Data域,相应的Length域的值为4。Request和Response类型数据包的Data域的格式如图1-5所示。

技术分享

图5 Request和Response类型数据包的Data域的格式

Type:指出EAP的认证类型。其中,值为1时,代表Identity,用来查询对方的身份;值为4时,代表MD5-Challenge,类似于PPP CHAP协议,包含质询消息。

EAP属性的封装

RADIUS为支持EAP认证增加了两个属性:EAP-Message(EAP消息)和Message-Authenticator(消息认证码)。RADIUS协议的报文格式请参见“安全分册”中的“AAA RADIUS HWTACACS配置”的RADIUS协议简介部分。

1. EAP-Message

这个属性用来封装EAP数据包,如图6所示,类型代码为79,String域最长253字节,如果EAP数据包长度大于253字节,可以对其进行分片,依次封装在多个EAP-Message属性中。

技术分享

图6 EAP-Message属性封装

2. Message-Authenticator

这个属性用于在使用EAP等认证方法的过程中,避免接入请求包被窃听。在含有EAP-Message属性的数据包中,必须同时也包含Message-Authenticator,否则该数据包被认为无效而被丢弃。格式如图7所示,类型代码为80,长度为18字节。

技术分享

图7 Message-Authenticator属性

三、第八章对比

两份文档的第八章主要讲的是实现,下面来对比一下EAPOL和EAP交互的接口

技术分享

技术分享

其中的差异就不用细说了,其实EAPol和EAP的接口两者都是相似的,只是后者做了更好的封装与归类,那几个交互的变量可以参考前面的文章进行了解,对于一个标准的实现,我们还是更关注他们状态机的变化,在是,802.1X-2004规范中为EAPOL Supplicant定义了5个不同的状态机,分别如下:

·Port Timers SM:Port超时控制状态机。

·Supplicant PAE SM:PAE是Port Access Entitiy的缩写。该状态机用于维护Port的状态。

·Supplicant Backend SM:规范并没有明示该状态机的作用。但笔者觉得它主要用于给Authenticator发送EAPOL回复消息。

·The Key Receiver SM:用于处理Key(指EAPOL-Key帧)相关流程的状态机。

·The Supplicant Key Transmit SM:该状态机非必选项,所以WPAS未实现它。

1)除了SUPP包含的这五个状态机外,规范还为Authenticator定义了四个状态机。
Authenticator也需要实现Port Timers SM和The Key Receiver SM。
2)规范中将这些状态机统称为PACP(Port Access Control Protocol)State Machine。

1.全局变量

多个状态机之间的交互会使用到全局变量,如下只是其中的一部分,详见802.1x-2004  8.2.2.2

技术分享

2.SUPP PACP状态机

(1)Port Timers SM

PT SM的功能比较简单,就是每一秒触发一次以从ONE_SECOND状态进入TICK状态。TICK状态的EA中,它将递减某些变量的值。注意在2010中有将这个图分成supplicant和authenticator画,这里合并在一起了,下图中有些变量是两段都会用到的,但是有些变量只有auth端才会用到。

技术分享

技术分享


(2)The Key Receiver SM

技术分享

·TKR SM包含两个状态。第一个是NO_KEY_RECEIVE状态。当rxKey(boolean型变量,当Supplicant收到EAPOL Key帧后,该值为TRUE)变为TRUE时,TKR进入
KEY_RECEIVE状态。
·TKR在KEY_RECEIVE状态时需要调用processKey函数处理EAPOL Key消息。

(3)PAE SM

技术分享

·txStart:用于发送EAPOL-Start消息给Authenticator。
·txLogoff:用于发送EAPOL-Logoff消息给Authenticator。

(4)Backend SM

技术分享

·abortSupp:停止认证工作,释放相关的资源。
·getSuppResp:这个函数本意是用来获取EAP Response信息的,然后用txSuppResp函数发送出去。但WPAS中,该函数没有包括任何有实质意义的内容。
·txSuppResp:发送EAPOL-Packet包给Authenticator。


总结:

这篇文章比较浅,主要来自网络总结以及一些自己的想法。其实EAPOL中有难度的内容不多,关键还是比较细节,比较繁琐,掌握了前面一篇的内容再看这部分只是拿着文档顺藤摸瓜,没有花那么多的篇幅来介绍这块内容,毕竟EAPOL在hostapd中主要是用来装载EAP数据包的,对于应用层的开发,会涉及到这里的会比较少。如果想要深入了解的童鞋可以详细阅读一下标准文档。

hostapd wpa_supplicant madwifi详细分析(十三)——EAPOL(802.1X-2004/IEEE Std 802.1X-2010)

标签:

原文地址:http://blog.csdn.net/lee244868149/article/details/52132350

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!