【转】 IEEE 802.1X-PEAP认证过程分析(抓包)

转自:https://blog.csdn.net/u012503786/article/details/79296522

IEEE 802.1X-PEAP认证过程分析(抓包)
 本文介绍IEEE802.1X认证的PEAP认证方式,是带有radius服务器的EAP中继认证。
 IEEE802.1X认证是使用EAP报文格式在申请者和认证者之间交换信息。带有radius服务器,即认证者不对申请者发送的数据进行解析处理,而是封装后直接转发给radius服务器。由radius服务器进行处理。

 PEAP认证方式,是在此基础上,首先建立一个申请者到认证服务器的传输隧道。然后在隧道中进行认证挑战等操作。隧道保证了挑战等数据的安全性

下面将根据把整个802.1X认证过程分为三部分

1、认证初始化:radius服务器获取申请者的身份信息,并回应认证开始

2、建立TLS隧道:为了保证认证数据的安全性

3、认证过程:由于在安全的TLS隧道内传输,我们并不知道进行的是什么挑战方式。只有申请者和认证服务器才能知道。

1、过程报文介绍
1.1、认证初始化
1、申请者向认证者发送EAPOL-start报文,开始802.1X接入的开始

2、认证者向申请者发送EAPOL-request/identity报文,要求申请者将用户信息送上来

 

EAP-request/identity

1、     申请者回应认证者发送EAPOL-response/identity报文。其中包含用户名

 

EAP-response/identity

2、  认证者以EAP overRADIUS 的报文格式将EAP-response/identity发送给认证服务器,并带上相关的RADIUS属性

 

Access-request/identity

字段含义:

Authenticator域占用16个字节,用于RadiusClient 和Server之间消息认证的有效性,和密码隐藏算法。访问请求Access-Request报文中的认证字的值是16字节随机数,认证字的值要不能被预测并且在一个共享密钥的生命期内唯一。

1.访问请求认证字

在Access-Request包中认证字的值是16字节随机数,认证字的值要不能被预测,并且在一个共享密钥的生命期内唯一;

2.访问回应认证字

Access-Accept Access-Reject 和Access-Challenge包中的认证字称为访问回应认证字,访问回应认证字的值定义为MD5(Code+ID+Length+RequestAuth+Attributes+Secret);

Attributevalue pairs:

service-type:2:为接入用户

          NAS-IP-address:网络接入服务器IP地址

         called-station-ID:认证者的MAC地址

         NAS-port-type:NAS的端口类型,总是802.11

          NAS-port:NAS的端口

          calling-station-ID:申请者的MAC地址

         acct-session-ID:计费连接号

          framedMTU:最大传输单元

          EAP-message:EAP报文

          message-authenticator:(RFC3579)客户端发送一个access-request,或者是服务器发送access-challenge时,添加的一个标识。接收方可以根据相同的操作进行验证。计算方法:

Message-Authenticator = HMAC-MD5(Type, Identifier, Length, Request Authenticator,
Attributes)

每一个EAP报文都可以使用该属性。

3、  认证服务器收到认证者发来的EAP-response/identity,根据配置确定使用EAP-peap认证,向认证者发送RADIUS-access-challenge报文,里面含有radius发送给申请者的EAP-request/peap/start报文,希望开始进行EAP-PEAP认证

 

Access-challenge/EAP-peap-start

字段含义:state:如果RADIUS服务器发送给设备的接入质询报文中包含该值,则设备在后续的接入请求报文中必须包含相同的值

4、  认证者向申请者发送EAP-request/peap/start报文

 

EAP-request/protected EAP(EAP-PEAP)-start

3.1.2、建立TLS通道


5、  申请者收到EAP-request/peap/start报文,产生一个随机数、客户端支持的加密算法列表、TLS协议版本、会话ID、以及压缩方法(目前均为NULL),封装在EAP-response/TLS/clienthello报文中发送给认证者

 

TLSv1-client hello

字段含义:

 version:客户端支持的最高版本号

 random:客户端生成的随机值

 session ID:唯一标识一个session

 cipher suite:每个ciphersuite 包含一个密钥交换算法,一个大量数据加密算法,一个MAC算法和一个PRF(TLS的 PRF 就是把 P_hash 应用在secret上)构成

 

Compression methods:包含压缩算法的列表

客户端发送client hello后,服务器必须回复server hello。

6、  认证者以EAP overRADIUS 的报文格式将EAP-response/TLS/client hello发送给认证服务器,并带上RADIUS的属性

 

Access-request/client hello

7、  认证服务器收到clienthello报文后,会生成server hello、certificate、server key change、server hello done报文封装在EAP消息中,使用access-challenge报文发给认证者

 

Access-challenge/server hello

总共发送server hello,certificate,server key exchange,server hello done四组数据。由于数据太长,所以进行分段处理

使用EAP-response/protected EAP报文进行响应,直到接收最后一片。

Server hello字段:

version:服务器选择客户端client hello报文中version和服务器支持的版本号的最小值

random:服务器生成的random,与client hello中的random没有任何关系

session ID:服务器为本链接分配的session ID

cipher suite:服务器从client hello的cipher suite 字段选择的一个。

Compression method:压缩方法

certificate字段:

certificate:服务器证书

server key exchange字段:

EC Diffie-Hellman server params:

Curve type:支持3中曲线类型,可以自行制定椭圆曲线的多项式系数,基点等参数。但是现在基本不使用,而是使用named curve

Named curve:参数已经预先选定,各种密码学库普遍支持的一组曲线,最常见的是secp256r1

pubkey:公钥

signature:签名

server hello done:在serverhello和相关信息已经处理完毕之后,服务器发送server hello done。发送完server hello done后服务器开始等待客户端的响应

8、  认证者将认证服务器的报文中的EAP-request消息发送给申请者

 

TLSv1-server hello

11、申请者收到报文后,进行验证server的证书是否合法(使用刚从CA证书颁发机构获得的根证书进行验证,主要验证证书时间是否合法,名称是否合法),即对网络进行认证,从而可以保证server的合法。

     如果合法,提取server证书中的公钥,同时产生一个随机密码串pre-master-secret,并使用服务器的公钥对其进行加密,最后将加密的信息clientkeyexchange + 客户端的证书(如果没有证书,可以把属性置为0) + TLS finished属性封装成EAP-response/TLS clientkeyexchange报文发送给认证者,

如果申请者没有安装证书,则不会对server证书的合法性进行认证,即不能对网络进行认证

 

TLSv1-client keyexchange

Client key exchange字段:客户端必须在serverhello done 到达后发送client key exchange消息。

ec_diffie_hellman:pubkey:公钥

change cipther spec字段:客户端切换成密文模式

encrypted handshake message字段:(finished)这个包表示握手已经完成,并且对之前发过的数据进行加密发送给对方做校验,防止被篡改。同时也验证加密算法和密钥是否正常工作

12、认证者以EAP over RADIUS 的报文格式将EAP-response/TLSclientkeyexchang发送给认证服务器,并带上相关的RADIUS属性

 

Access-request/client key exchange

13、认证服务器收到报文后,用自己的证书对应的私钥对clientkeyexchange进行解密,从而获得pre-master-secret,然后对pre-master-secret进行运算处理,加上申请者和server产生的随机数,生成加密密钥、加密初始化向量和hmac的密钥,这时双方已经安全的协商出一套加密办法了。认证服务器将协商出的加密方法 + TLS finished消息封装在EAP over RADIUS 的报文access-challenge中,发送给认证者

 

Access-challenge/change cipher spec

changecipherspec:服务器切换到密文模式

14、认证者将认证服务器发送的报文,以EAP-request消息发送给申请者

 

TLSv1-change cipher spec

15、申请者回复认证者EAP-response/TLSOK

 

EAP-response/protected EAP(EAP-PEAP)

16、认证者将EAP-response/TLSOK消息封装在radius报文中,发送给认证服务器,告知服务器申请者和认证服务器之间的TLS隧道建立成功

 

Access-request/protected EAP(EAP-PEAP)

至此,隧道建立完毕,申请者和认证服务器之间使用协商的密钥进行加密传输,然后进行验证

3.1.3、认证过程
17、认证者将radius报文中的EAP域提取,封装成EAP-request报文发送给申请者

 

Access-challenge/application

 

TLSv1-request/application

18、申请者受到报文后,用服务器相同的方法生成加密密钥。加密初始化向量和hmac的密钥,并用相应的密钥及其方法对报文进行解密和校验,然后产生认证回应报文,用密钥进行

加密和校验,最后封装成EAP-response报文发送给认证者,认证者转发给认证服务器,并带上相关的RADIUS的属性,这样反复进行交互,直到认证完成。在认证过程中,认证服务器会下发认证后用于生成空口数据加密密钥PMK给申请者

 

TLSv1-response/application

 

Access-request/application

以上application data 的交换过程可能执行多次,直至成功。

19、服务器认证客户端成功后,会发送一个RADIUS-access-accept给认证者,并包含认证服务器提供的MPPE属性(vendor specific)。

 

Access-accept

20、认证者收到RADIUS-access-accept报文,会提取MPPE属性中的密钥作为WPA加密用的PMK,并且会发送EAP-SUCCESS报文给申请者

 

EAP-success

2、问题
(1)为什么server hello 要进行很多次?

数据太长了,需要分段,每次只发一小段。

(2)802.1X和PSK认证方式在RSN信息中,那么PEAP还是其他认证方式,在哪里体现?

    申请者连接时,输入用户名和密码的同时要选择认证类型PEAP、TTLS或其他。表明申请者并不知道radius服务器能支持什么认证 。挑战方式等是由申请者决定的,而radius服务器会发送一个默认的方式,如果与申请者想要的挑战方式不同,可以经过协商解决。如果服务器不支持这种认证方式,那么认证就会失败。

     如果在用户名传递之后(EAP-response/identity)之后,回复的挑战并不是申请者要进行的挑战,申请者可以发送EAP报文进行协商

(3)外层认证方式是PEAP,内层认证方式是什么?

 在报文中内层认证方式不能确定。因为在TLS隧道内传输。无法被破解。

 内层认证方式由申请者连接时选择的。



原文地址:https://www.cnblogs.com/cxt-janson/p/11010672.html