PPP协议及认证分析
2018-12-22郭亮郭海智江荣旺周密
郭亮,郭海智,江荣旺,周密
(三亚学院,三亚 572000)
0 引言
点对点协议(Point to Point Protocol,PPP)及其衍生出来的PPPoE协议作为一种链路层传输协议,由于其功能简单并支持多种物理层和网络层协议,使其在广域网传输中应用广泛。由于当前物理层信道传输质量较以往有较大提升,该协议简化了HDLC协议中为保证可靠传输所使用的定时、重传、序号、排序及流量控制等机制以提升传输效率。该协议支持同步和异步传输并可承载多种网络层协议,支持认证、IP地址动态分配及管理、参数协商及多链路捆绑等功能。本文主要通过研究并分析PPP点对点协议工作过程和CHAP认证原理,以清晰协议运行过程,加深对该协议的理解。
1 协议分析
1.1 协议组成
PPP协议相关的RFC较多,主要内容在RFC1661(The Point-to-Point Protocol(PPP))[1]中有详细描述,对于 CHAP认证部分描述集中在 RFC1994(PPP Chal⁃lenge Handshake Authentication Protocol(CHAP))[2]中 。PPP协议由实现封装成帧和透明传输部分,实现链路层建立、配置、认证和测试等功能的链路控制协议LCP(Link Control Protocol),以及为支持不同网络层协议的网络控制协议NCP(Network Control Protocol)三个组成部分。协议总共包含了16个事件、10种状态和13个动作,标准详细规定了特定状态接收各类事件的状态转移过程。
1.2 工作过程
点到点链路的配置和维护过程中,经历了以下几个阶段:
(1)链路不可用阶段,也称为物理层不可用阶段,链路需从这个阶段开始并到这个阶段结束。该阶段在实际过程中停留时间短暂,当外部事件指示物理层准备就绪,如载波检测到对端设备,则立即进入到下一阶段。
(2)链路建立阶段,该阶段通过交换LCP配置报文配置数据链路,交换的信息涉及链路层所需的参数,但不包括网络层协议所需的参数,完成该阶段后进入网络层协议阶段或可选的认证阶段。
(3)认证阶段,默认情况下链路两端的设备通信前不进行认证,但可通过选用该阶段并采用口令认证协议(Password Authentication Protocol,PAP)或挑战握手认 证 协 议(Challenge Hand Authentication Protocol,CHAP)两种认证方式之一以保证连接的安全性。如果通过认证,则进入网络层协议阶段,否则进入链路终止阶段。
(4)网络层协议阶段,一旦PPP协议完成了前面几个阶段,每种网络层协议会通过各自特定的网络控制协议NCP进行网络层参数配置,如网络层采用IP协议则使用IPCP协议实现IP地址分配等配置。在这个阶段所需的一些配置参数协商完后就可以进行网络层通信。
(5)链路终止阶段,PPP协议能在任何时候终止链路。当载波丢失、认证失败和管理员人为关闭链路等情况下,使用LCP交换终止数据包,并通知网络层和物理层采取合适行动以应对链路终止。
上述工作过程的链路状态变迁如图1所示:
图1 PPP协议链路状态变迁
2 实验仿真
2.1 拓扑及配置
本实验使用GNS3软件仿真2台各配置一块NM-4T接口卡的Cisco C3640路由器[3],利用Wireshark软件进行抓包分析,拓扑结构如图2所示。为简化分析过程采用单向认证方式,R1作为认证方并在s0/0上配置采用CHAP认证,R2作为被认证放并在端口s0/1上配置对端认证的用户名和密码,具体配置如下:
图2 拓扑结构
认证端R1配置为:
接入端R2配置为:
2.2 抓包分析
为减少抓取的数据包数量以清晰协议运行原理方便后续分析,首先保证认证成功,两端ping测试通过,然后关闭R2的s0/1端口再开启抓包过程,短暂停留后开启s0/1端口,待认证通过且协议up后发送1次ping包测试,再次短暂停留后结束抓包过程。图3为按照上述步骤产生的抓包数据,为清晰分析对象过滤了其他流量信息。其结果清晰表明序号5、6、7为CHAP认证三次握手过程,序号18、19为一次ping包测试数据的请求与响应。
图3 抓包数据
通过抓包分析并结合前述理论分析,可绘出PPP协议工作过程如图4所示。
2.3 认证分析
如前所述,PPP协议可选用两种认证方式。其中的PAP认证采二次握手机制,用明文传输用户名和密码,很容易通过抓包可获取,被认证方容易被暴力破解,实际使用环境除PPPoE拨号使用该认证方式外其余较少使用,下面详述CHAP认证原理。CHAP认证采用三次握手机制完成认证过程。在链路建立阶段结束后,认证方发出由本次认证的序列号id,随机值和路由器名字组合的挑战口令给接入端,对端结合该挑战口令部分信息及自身配置的认证信息使用单向函数产生对应的应答信息,认证方验证应答后确认连接成功或失败。如果失败则随机等待一定时间后再次发起挑战口令进行认证。实验仿真采用的Cisco路由器进行CHAP认证的基本原理如图5所示,其三次握手的具体过程如下:
图4 PPP协议原理
图5 CHAP认证过程
(1)认证方发送01标识符表示挑战,以及标识本次验证的序号id,随机值,和认证方用户名,其中id和随机值保存在认证方以备后续验证使用。
(2)被认证方接收后,把id、random及通过认证方用户名找到的密码信息经单向md5哈希计算得到的值和表示应答的02标识符以及本次验证id和自身用户名组合成应答包回送。
(3)认证方收到应答后,利用id找到原来存储的随机值以及id标识符,和应答用户存储的密码通过md5哈希计算得到的值与收到的值进行比较,判断是否相同从而验证是否通过认证,进而给出认证成功的03标识符或认证失败的04标识符作为回应。
2.4 认证算法代码验证
分析了CHAP认证原理后,下面结合单向认证实验所抓取的数据包采用Python代码进行验证。具体代码如下,函数chap_md5verify在认证方收到被认证方的应答后调用,从接收消息中抽取标识符id,自身配置所保存的密码及发送挑战的随机值计算出hash值,然后与接收的hash值进行比较,相同则输出“access granted”提示认证通过,否则输出“Access denied”表明认证不通过。下面代码验证所使用的数据从上述抓包数据中得出,并验证通过认证。
从标准化和通用性考虑,其他系统为对接Cisco设备,其CHAP认证也必须遵循相关RFC标准,但RFC标准中并未给出hash计算所用参数的具体装配步骤,上述代码明确了该过程。同时,通过分析Linux平台上PPP协议实现的相关代码[4],与其CHAP认证实现部分做对比与上述代码原理一致,进而再次验证了代码正确性。
3 结语
本文通过实验仿真及抓包对PPP协议运行过程进行了比较全面的分析,结合代码验证更加清晰了对CHAP认证原理及细节的理解,提高了理论联系实际的能力,对其他网络协议的研究和学习有一定的参考价值。另外,通过分析和实验发现,CHAP和PAP认证模式在认证通过后不再随机持续验证,例如修改了被认证方的用户名和口令,如果没有重新使能端口则配置规则不起作用,链路依然保持通畅,该类问题为后续改进并提升协议安全性研究方面提供了方向。