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

article/2025/10/11 9:40:46

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隧道内传输。无法被破解。

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

 


http://chatgpt.dhexx.cn/article/ZYOB4UFE.shtml

相关文章

PEP是什么

转载 :https://www.cnblogs.com/abella/p/10056875.html PEP是什么? PEP的全称是Python Enhancement Proposals,其中Enhancement是增强改进的意思,Proposals则可译为提案或建议书,所以合起来,比较常见的翻…

企业级无线渗透之PEAP

0x00 前言 上月,受邀在C-SEC上海快递行业安全会议上做了关于无线安全威胁的议题分享。介绍了家庭级的无线网络薄弱环节及攻击方法,同时列举了乌云上因无线边界被突破,造成内网沦陷的诸多例子。后半部分,简要的介绍了企业级无线网络…

深度讲解linux中fputc()函数

字符写入fputc函数 int fputc(int char, FILE *stream) 返回值 如果没有发生错误,则返回被写入的字符。如果发生错误,则返回 EOF,并设置错误标识符。 ch 为要写入的字符,fp 为文件指针。fputc() 写入成功时返回写入的字符&…

文件操作之函数fputc(),fgetc()

目录 引言 一、fputc()与putchar()的联系 二、fgetc()与getchar()的联系 总结 引言 引用自《C程序设计-清华大学出版社 (2017)》 一、fputc()与putchar()的联系 fputc(ch,fp)是将ch输出到fp所指的文件里面putchar(ch)是将ch输出到屏幕 FILE*fpfopen("text.txt",…

文件操作:fgetc与fputc函数的使用

在成功打开文件后,我们便可以对文件进行操作,以下是字符输入函数fgetc和字符输出函数fputc的简单使用说明。 如果还不知道如何打开文件的可以看看我的另一篇文章。 点我 fputc函数的使用 当我们以读的形式打开文件的时候,便可以使用fputc函数…

c语言中fputc函数的作用是,C语言中fputc函数的用法_后端开发

Python画ROC曲线和AUC值计算(附代码)_后端开发 ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器的优劣。这篇文章将先简单的介绍ROC和AUC,而后用实例演示如何python作出ROC曲线图以及计算AUC。 C语言中fputc函数的用法 C语言中fputc函数…

C语言文件操作入门:fopen、fclose、fputc、fgetc、fputs、fgets、fprintf、fscanf、fwrite、fread详解

本篇文章主要讲解4组函数: 字符读写:fputc和fgetc。文本行读写:fputs和fgets。格式化读写:fprintf和fscanf。二进制读写:fwrite和fread。 预备知识:fopen和fclose 如果我们要读写一个文件,就必…

linux fputc fgetc fseek rewind 函数

目录 前言fputc 函数fgetc 函数fseek函数rewind函数 前言 <sprintf fprintf 函数 > 前一节讲了 sprintf fprintf 函数 的缓存问题 在他们的基础上加了一个while&#xff08;1&#xff09;&#xff1b; 来验证 结果都是输出的 不管怎么样 都会写入到内核态 内核态在输出…

c语言中fputc函数的作用是,C语言中fputc函数的用法

C语言中fputc函数的用法 C语言中fputc函数的用法为“int fgetc (FILE *fp)”&#xff0c;该函数的作用是从指定的文件中读取一个字符&#xff0c; 读取成功时会返回读取到的字符&#xff0c;读取到文件末尾或读取失败时返回EOF。推荐教程&#xff1a;《C语言》 示例代码#includ…

STM32重写fputc

操作步骤 01、在项目中&#xff0c;加上以下函数即可&#xff08;作用&#xff1a;重写fputc&#xff09; 库函数版 int fputc( int ch, FILE *f ){ USART_SendData(USART1,(u8) ch ); while(USART_GetFlagStatus(USART1,USART_F…

STM32重写fputc汇总

1. 在工程项目中加上函数fputc 例如&#xff1a; 库函数版 int fputc( int ch, FILE *f ) {USART_SendData(USART2,(u8) ch );while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)RESET);return ch; }寄存器版 int fputc(int ch, FILE *f){ while((USART2->SR&0X40)0)…

Keil 重定向 fputc 函数 以及 printf 函数的代码尺寸测试

本文的开发环境为 Keil Cortex-M3 内核处理器。 重定向 fputc 函数方法 如果想使用库函数 printf &#xff0c;必须要将 fputc 重定向到自己的串口上。 术语 重定向 可以理解为用户重写 fputc 函数&#xff0c;在重写的函数体内调用自己硬件的串口发送函数。 在 Keil 环境中…

fputc函数

/****************************************功能&#xff1a;写一个字节到文件流中*参数&#xff1a;* c 写入的字符* stream 流指针*返回值&#xff1a;* 成功返回字符* 失败返回EOF或errno*************************************/ int fputc(int c, FILE *stre…

标准c库:fputc,fgetc,feof

1、了解标准c库fopen等用法&#xff08;点击跳转&#xff09; 2、fputc写一个字符到文件 #include <stdio.h>int main() {FILE *fp;fp fopen("./test.txt","w");//int fputc(int c, FILE *stream);fputc(a,fp);fclose(fp);return 0; }3、fputc写一…

文件的输入输出函数

文章目录 前言字符输入输出函数 - fgetc和fputc文本输入输出函数 - fgets和fputs格式化输入输出函数 - fscanf和fprintf二进制输入输出函数 - fread和fwrite 前言 在文件操作函数&#xff08;一&#xff09;中&#xff0c;我们已经学会了怎样正确地打开和关闭一个文件&#xf…

计算机网络 | 传输层的两个重要协议——TCP、UDP

目录 传输层概述 传输层的作用 运输层端口号、复用与分用的概念 发送方的复用和接收方的分用 UDP和TCP的对比 TCP的流量控制 TCP的拥塞控制 TCP的差错控制 UDP的差错控制的和流控 TCP的封装格式 TCP主要特点 TCP的连接 可靠传输的工作原理 TCP连接的三次握手和四次挥…

以太网协议

以太网(Ethernet) 以太网是一种局域网技术,其规定了访问控制方法、传输控制协议、网络拓扑结构、传输速率等,完成数据链路层和物理层的一些内容,它采用一种称作CSMA/CD的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(Carrier Sense, Multiple Access with Collisi…

传输层TCP协议和UDP协议

传输层协议 文章目录 传输层协议传输层&#xff1a;传输层协议&#xff1a;UDP协议&#xff1a;TCP协议&#xff1a;UDP协议和TCP协议的比较&#xff1a;适用场景&#xff1a; 传输层&#xff1a; 传输层是OSI中最重要&#xff0c;最关键的一层,是唯一负责总体的数据传输和数据…

文件传输协议FTP

文件传输协议FTP(File Transfer Protocol)是因特网中使用最广泛的文件传输协议。FTP使用交互式的访问&#xff0c;允许客户指定文件的类型和格式(如指明是否使用ASCII码)&#xff0c;并允许文件具有存取权限(如访问文件的用户必须经过授权&#xff0c;并输入有效的口令)。 文件…

传输层协议详解

一、传输层的概念和服务 1、传输层的基本概念 传输层负责端到端之间的数据传输控制传输层依赖于网络层的服务&#xff0c;对应用层提供传输服务 2、传输层的功能 跟踪会话 跟踪源主机和目的主机上应用程序间的每次通信 数据分段 将数据分段&#xff0c;并管理每个分段 …