神州数码802.1x认证协议简析
2007-03-29 16:23
211 查看
[align=center]神州数码802.1x认证协议简析[/align]
一. 前言
本次神州数码802.1x认证协议的分析有这么几个前提:
1. 使用神州数码客户端进行上网认证。
2. 协议选择的是神州数码私有报文。
3. 使用的静态IP地址而不是DHCP分配。
4. 不涉及计时计费。
5. 分析的版本基于3.3/3.4
二.基本认证流程
1. 客户端向认证系统发送EAPOL-Start数据包发起认证。
2. 认证系统向客户端发送EAP-Request/Identity数据包,请求客户端发送身份标示。
3. 客户端接收到认证系统发来的EAP-Request/Identity后,发送包含身份标示信息(用户名)的EAP-Response-Identity数据包。
4. 认证系统接收到客户端发送的EAP-Response/Identity后,查询用户名,如果验证成功,继续,否则返回错误信息,客户端执行步骤11。
5. 认证系统向客户端发送EAP-Request/Md5-Challenge数据包,数据包中包含客户端进行Md5加密时所需的16字节Md5-Challenge。
6. 客户端接收到认证系统发送的EAP-Request/Md5-Challenge,从中取出所需要的Md5-Challenge字段和Id字段,结合密码,运算得到16字节的加密结果,用于合成EAP-Response/Md5-Challenge数据包。合成完毕,发送数据包。
7. 认证系统接收到客户端发送的EAP-Response/Md5-Challenge,进行验证,如果通过,则继续,否则返回错误信息,执行步骤11。
8. 认证系统向客户端发送EAP-Success数据包,同时将Port状态置为Enable,客户端所在的电脑就此得到上网权限。
9. 认证系统每隔一段时间主动向客户端发送EAP-Keepalive数据包。
10. 客户端接收到EAP-Keepalive数据包后(与EAP-Request/Identity数据包内容相同),客户端执行步骤3,完成连接的保持工作。重复步骤10。
11. 接收到错误信息,发送EAP-Logoff数据包,中止认证。
三.协议具体分析
神州数码802.1x认证协议并不是完全的私有协议,只是在标准协议的基础上进行了自己的扩展,为了叙述方便,对于标准802.1x的描述,附上一部分关于标准802.1x,EAP,EAPOL的相关说明,不再赘述:
1[b].以太网协议帧头描述:[/b]
神州数码客户端在发送认证包的时候,无论是否可以得到认证服务器的MAC地址,都采用802.1x协议分配的组播地址01-80-c2-00-00-03作为目的MAC地址。
2[b].[b]EAP[b]协议[/b] [/b][/b]
3[b].[b]EAPoL[b]协议[/b][/b][/b]
4.神州数码私有报文部分的分析
在标准802.1x认证协议的基础上,神州数码进行了扩展。具体表现如下:
A.从EAP-Response-Identity数据包开始,客户端发送的数据包中均包含一段45字节的私有数据。与标准数据之间用一个值为0的字节进行分隔【当该字节为01时表示是DHCP认证模式……后面的IP地址就是网卡信息中那个非法IP,子网掩码是FF FF 00 00,后面八个字节全零,这种认证方式目前还没有好好研究】。该数据段的意义如下:
例如,我见到的最新的版本号是:0x33 ,0x2e ,0x34 ,0x2e ,0x32 ,0x30 ,0x30 ,0x36 ,0x2e ,0x31 ,0x30 ,0x32 ,0x37
相应的文本就是:
3 . 4 . 2 0 0 6 . 1 0 2 7
B.EAP-Response/Md5-Challenge数据包中加密信息的形成
在EAP-Response/Md5-Challenge数据包中,有16字节的数据是通过md5加密形成的,该过程用C语言描述如下:
//读取md5 challenge,存储于m_digiMd5中
memmove(m_digiMd5,pkt_data+0x18,16);
//计算md5值
MD5_CTX md5;
md5.MD5Update(pkt_data+0x13,1);
md5.MD5Update(m_password,strlen((const char*)m_password));
md5.MD5Update(m_digiMd5,16);
md5.MD5Final(m_digiMd5);
//结果保留在m_digiMd5中
其中pkt_data是EAP-Request/Md5-Challenge数据包的起始位置,pkt_data+0x18起的16个字节是Md5-Challenge,pkt_data+0x13起的一个字节是Id,也就是对Id+密码+Md5-Challenge进行md5运算。
C.神州数码反馈信息的解析(目前只了解了少量信息的格式)
1.认证成功时的信息格式:
认证成功时,认证系统有可能返回相关信息,该信息的格式目前不是很清楚,只知道有时在pkt_data[0x82]处出现0x12标志,有时在pkt_data[0x99]处出现该标志,所以现在程序中的考虑是这样的:
if(pkt_data[0x82]==0x12)
{
char *msg=(char*)malloc(pkt_data[0x83]-2+1);
memmove(msg,pkt_data+0x84,pkt_data[0x83]-2);
msg[pkt_data[0x83]-2]=0;
printf(" 系统消息:/n[%s]/n",msg);
free(msg);
}
else
{
if(pkt_data[0x99]==0x12)
{
char *msg=(char*)malloc(pkt_data[0x9A]-2+1);
memmove(msg,pkt_data+0x9B,pkt_data[0x9A]-2);
msg[pkt_data[0x9A]-2]=0;
printf(" 系统消息:/n[%s]/n",msg);
free(msg);
}
}
标志位0x12后面的那一个字节就是附加信息的长度,但是这个长度是包含标志位以及长度自身的,所以信息真正的长度应该是pkt_data[0x83]-2或者pkt_data[0x9A]-2。因为协议使用一个字节来表示信息长度,所以信息的最大有效长度为254字节。信息使用GB2312编码,所以在linux下直接显示的话,可能会出现问题。
2.失败信息的格式。
在神州数码的失败信息,已经了解的有两个:用户名验证失败,用户名或密码错误。与成功的消息一样,都是在找到一个标志位0x12后,读取接下来一个字节中存储的长度信息,从而获取消息字符串。
在用户名验证失败的消息中,标志位位于pkt_data[0x2A]
在用户名或密码错误消息中,标志位位于pkt_data[0x42]
目前为止对神州数码802.1x认证协议的了解就是这些。
[align=center]附加材料:[/align]
1.EAP协议
802.1x协议在实现整个认证的过程中,其三个关键部分(客户端、认证系统、认证服务器)之间是通过不同的通信协议进行交互的,其中认证系统和认证服务器之间是EAP报文。
EAP帧结构如下表所示:
EAP帧格式中各字段含义如下:
其中Code的取值如下:
1: Request
2: Response
3: Success
4: Failure
2.EAPoL协议
802.1x协议定义了一种报文封装格式,这种报文称为EAPoL(EAP over LANs局域网上的扩展认证协议)报文,主要用于在客户端和认证系统之间传送EAP协议报文,以允许EAP协议报文在LAN上传送。
标准EAPoL帧结构如下表所示:
EAPoL帧格式中各字段含义如下:
EAPOL帧在二层传送时,必须要有目标MAC地址,当客户端和认证系统彼此之间不知道发送的目标时,其目标MAC地址使用由802.1x协议分配的组播地址01-80-c2-00-00-03。
一. 前言
本次神州数码802.1x认证协议的分析有这么几个前提:
1. 使用神州数码客户端进行上网认证。
2. 协议选择的是神州数码私有报文。
3. 使用的静态IP地址而不是DHCP分配。
4. 不涉及计时计费。
5. 分析的版本基于3.3/3.4
二.基本认证流程
1. 客户端向认证系统发送EAPOL-Start数据包发起认证。
2. 认证系统向客户端发送EAP-Request/Identity数据包,请求客户端发送身份标示。
3. 客户端接收到认证系统发来的EAP-Request/Identity后,发送包含身份标示信息(用户名)的EAP-Response-Identity数据包。
4. 认证系统接收到客户端发送的EAP-Response/Identity后,查询用户名,如果验证成功,继续,否则返回错误信息,客户端执行步骤11。
5. 认证系统向客户端发送EAP-Request/Md5-Challenge数据包,数据包中包含客户端进行Md5加密时所需的16字节Md5-Challenge。
6. 客户端接收到认证系统发送的EAP-Request/Md5-Challenge,从中取出所需要的Md5-Challenge字段和Id字段,结合密码,运算得到16字节的加密结果,用于合成EAP-Response/Md5-Challenge数据包。合成完毕,发送数据包。
7. 认证系统接收到客户端发送的EAP-Response/Md5-Challenge,进行验证,如果通过,则继续,否则返回错误信息,执行步骤11。
8. 认证系统向客户端发送EAP-Success数据包,同时将Port状态置为Enable,客户端所在的电脑就此得到上网权限。
9. 认证系统每隔一段时间主动向客户端发送EAP-Keepalive数据包。
10. 客户端接收到EAP-Keepalive数据包后(与EAP-Request/Identity数据包内容相同),客户端执行步骤3,完成连接的保持工作。重复步骤10。
11. 接收到错误信息,发送EAP-Logoff数据包,中止认证。
三.协议具体分析
神州数码802.1x认证协议并不是完全的私有协议,只是在标准协议的基础上进行了自己的扩展,为了叙述方便,对于标准802.1x的描述,附上一部分关于标准802.1x,EAP,EAPOL的相关说明,不再赘述:
1[b].以太网协议帧头描述:[/b]
[align=center]destination[/align] | [align=center]6字节[/align] | 目的MAC地址 |
[align=center]source[/align] | [align=center]6字节[/align] | 源MAC地址 |
[align=center]type[/align] | [align=center]2字节[/align] | [align=center]协议类型,802.1x的类型是88 8E[/align] |
2[b].[b]EAP[b]协议[/b] [/b][/b]
3[b].[b]EAPoL[b]协议[/b][/b][/b]
4.神州数码私有报文部分的分析
在标准802.1x认证协议的基础上,神州数码进行了扩展。具体表现如下:
A.从EAP-Response-Identity数据包开始,客户端发送的数据包中均包含一段45字节的私有数据。与标准数据之间用一个值为0的字节进行分隔【当该字节为01时表示是DHCP认证模式……后面的IP地址就是网卡信息中那个非法IP,子网掩码是FF FF 00 00,后面八个字节全零,这种认证方式目前还没有好好研究】。该数据段的意义如下:
[align=center]IpAdress[/align] | [align=center]4字节[/align] | Ip地址 |
[align=center]SubnetMasks[/align] | [align=center]4字节[/align] | 子网掩码 |
[align=center]GateWay[/align] | [align=center]4字节[/align] | 网关 |
[align=center]Dns[/align] | [align=center]4字节[/align] | Dns地址 |
[align=center]UsernameMd5[/align] | [align=center]16字节[/align] | 用户名的Md5 |
[align=center]VerInfor[/align] | [align=center]13字节[/align] | 版本信息的ASCII码 |
相应的文本就是:
3 . 4 . 2 0 0 6 . 1 0 2 7
B.EAP-Response/Md5-Challenge数据包中加密信息的形成
在EAP-Response/Md5-Challenge数据包中,有16字节的数据是通过md5加密形成的,该过程用C语言描述如下:
//读取md5 challenge,存储于m_digiMd5中
memmove(m_digiMd5,pkt_data+0x18,16);
//计算md5值
MD5_CTX md5;
md5.MD5Update(pkt_data+0x13,1);
md5.MD5Update(m_password,strlen((const char*)m_password));
md5.MD5Update(m_digiMd5,16);
md5.MD5Final(m_digiMd5);
//结果保留在m_digiMd5中
其中pkt_data是EAP-Request/Md5-Challenge数据包的起始位置,pkt_data+0x18起的16个字节是Md5-Challenge,pkt_data+0x13起的一个字节是Id,也就是对Id+密码+Md5-Challenge进行md5运算。
C.神州数码反馈信息的解析(目前只了解了少量信息的格式)
1.认证成功时的信息格式:
认证成功时,认证系统有可能返回相关信息,该信息的格式目前不是很清楚,只知道有时在pkt_data[0x82]处出现0x12标志,有时在pkt_data[0x99]处出现该标志,所以现在程序中的考虑是这样的:
if(pkt_data[0x82]==0x12)
{
char *msg=(char*)malloc(pkt_data[0x83]-2+1);
memmove(msg,pkt_data+0x84,pkt_data[0x83]-2);
msg[pkt_data[0x83]-2]=0;
printf(" 系统消息:/n[%s]/n",msg);
free(msg);
}
else
{
if(pkt_data[0x99]==0x12)
{
char *msg=(char*)malloc(pkt_data[0x9A]-2+1);
memmove(msg,pkt_data+0x9B,pkt_data[0x9A]-2);
msg[pkt_data[0x9A]-2]=0;
printf(" 系统消息:/n[%s]/n",msg);
free(msg);
}
}
标志位0x12后面的那一个字节就是附加信息的长度,但是这个长度是包含标志位以及长度自身的,所以信息真正的长度应该是pkt_data[0x83]-2或者pkt_data[0x9A]-2。因为协议使用一个字节来表示信息长度,所以信息的最大有效长度为254字节。信息使用GB2312编码,所以在linux下直接显示的话,可能会出现问题。
2.失败信息的格式。
在神州数码的失败信息,已经了解的有两个:用户名验证失败,用户名或密码错误。与成功的消息一样,都是在找到一个标志位0x12后,读取接下来一个字节中存储的长度信息,从而获取消息字符串。
在用户名验证失败的消息中,标志位位于pkt_data[0x2A]
在用户名或密码错误消息中,标志位位于pkt_data[0x42]
目前为止对神州数码802.1x认证协议的了解就是这些。
[align=center]附加材料:[/align]
1.EAP协议
802.1x协议在实现整个认证的过程中,其三个关键部分(客户端、认证系统、认证服务器)之间是通过不同的通信协议进行交互的,其中认证系统和认证服务器之间是EAP报文。
EAP帧结构如下表所示:
[align=center]字段[/align] | [align=center]字节[/align] |
Code | 1 |
Identifier | 2 |
Length | 3-4 |
Data | 5-N |
字段 | 占用字节数 | 描述 |
Code | 1个字节 | 表示EAP帧四种类型:1.Request;2.Response 3.Success;4.Failure |
Identifier | 1个字节 | 用于匹配Request和Response。Identifier的值和系统端口一起单独标识一个认证过程 |
Length | 2个字节 | 表示EAP帧的总长度 |
Data | 0或更多字节 | 表示EAP数据 |
1: Request
2: Response
3: Success
4: Failure
2.EAPoL协议
802.1x协议定义了一种报文封装格式,这种报文称为EAPoL(EAP over LANs局域网上的扩展认证协议)报文,主要用于在客户端和认证系统之间传送EAP协议报文,以允许EAP协议报文在LAN上传送。
标准EAPoL帧结构如下表所示:
[align=center]字段[/align] | [align=center]字节[/align] |
PAE Ethernet Type | 1-2 |
Protocol Version | 3 |
Packet Type | 4 |
Packet Body Length | 5-6 |
Packet Body | 7-N |
[align=center]字段[/align] | [align=center]占用字节[/align] | [align=center]描述[/align] |
PAE Ethernet Type | 2个字节 | 表示协议类型,802.1x分配的协议类型为888E |
Protocol Version | 1个字节 | 表示EAPOL 帧的发送方所支持的协议版本号。本规范使用值为0000 0001 |
Packet Type | 1个字节 | 表示传送的帧类型,如下几种帧类型: a) EAP-Packet. 值为 0000 0000 b)EAPOL-Start.值为0000 0001 b) EAPOL-Logoff. 值为0000 0010 |
Packet Body Length | 2个字节 | 表示Packet Body的长度 |
Packet Body | 0/多字节 | 如果Packet Type为EAP-Packet,取相应值。对于其他帧类型,该值为空。 |
相关文章推荐
- 神州数码802.1x认证协议简析
- 神州数码802.1x、DCBA协议认证方案
- 802.1X认证协议及漏洞分析
- 802.1X认证协议及漏洞分析
- 基于802.1X协议的认证系统
- Windows域与802.1X协议统一认证解决方案 推荐
- Windows域与802.1X协议统一认证解决方案
- 锐捷802.1x客户端认证协议分析方法
- 802.1x协议的认证过程
- 802.1x认证协议的应用
- Windows域与802.1X协议统一认证解决方案
- Windows域与802.1X协议统一认证解决方案
- Ubuntu下实现神州数码 802.1x私有报文认证
- 锐捷802.1x客户端认证协议分析方法
- 802.1X(DOT1X)端口用户认证协议
- 802.1X认证协议及漏洞分析
- 802.1x协议认证流程
- 802.1X认证协议及漏洞分析(转载)
- Windows域与802.1X协议统一认证解决方案
- 基于802.1x协议的接入认证简单实现