概述:
PPP链路认证分成两种方式,分别是PAP认证和CHAP认证。
PAP(密码认证协议)
认证较为简单,其中包含着三种报文。
分别为用于被认证端传输用户名和密码Authenticate-Request报文;认证端传输验证成功信息的Authenticate-Ack报文;最后是Authenticate-Nak报文,携带认证方传输的验证未通过信息。其认证过程如图所示:
首先被认证端发送Authenticate-Request报文给认证设备,其中需要携带密码与用户名。认证端收到请求认证的报文后,会检查其中携带的用信息是否与自己所保存相匹配,如果一致则可以认为认证通过,发送Authenticate-Ack报文给被认证方,否则发送Authenticate-Nak给被认证方。
PAP的缺点:
PAP 并不是一种强有效的认证方法,其密码以明文在电路上进行发送,对于窃听、重放或重复尝试和错误攻击没有任何保护。并且PAP报文只要连接成功就不会发送报文进行验证了,除非等到设备或接口重新开启或关闭,安全性很差,可能被第三方冒充攻击,也不能用于网络计费的认证,例如不关电脑,认证是永远通过的。
实验:
完成R1和R2之间的PAP认证配置,并且抓包检测(R1作为认证方,R2作为被认证方)
首先完成R1上的配置:
aaa
local-user huawei password cipher huawei
local-user huawei service-type ppp
在接口下S4/0/0下,设置认证模式
ppp authentication-mode pap
然后将S4/0/0关闭后重新打开,观察抓包的信息:
这时我们会发现,虽然R1回复R2的是ACK信息但是还是被关闭了链路的连接,这时我们在R2上进行相应的配置再抓包观察:
[R2-Serial4/0/0]ppp pap local-user huawei password cipher huawei
重新关闭打开接口,建立成功
PAP报文格式: 封装在PPP报文的information字段中
CHAP(挑战握手认证协议)
通过三次握手的方式来进入认证,其中包含的四种报文:
分别为Challenge,用于认证端向被认证方传输挑战信息;Response报文可以把用户信息回传给认证端;Success报文,用于认证端向被认证方传输认证成功信息,Failure报文,用于认证方向被认证方发送认证失败信息。除此之外,CHAP的认证报文中不会带有密码,而是通过hash值来实现的,因此其相比于PAP有着更高的安全性。
首先认证方发送Challenge报文给认证方,携带ID号、随机数和认证方账号名。被认证方收到认证的挑战请求报文后,会通过挑战报文中的账号名在本地找到对应的密码,紧接着再讲随机数、ID号和密码做Hash运算。之后把得到的结果放在Response报文中发送给认证方。认证方会通过同样的方式用自己存储的对应账号的密码与其他参数做Hash运算,将得到的结果与被认证方进行比较。相同发送Success报文,否则发送Failure报文通知被认证方。
CHAP相比于PAP的优点:
CHAP对PAP进行了改进,不再直接通过链路发送明文口令,而是使用挑战口令以哈希算法对口令进行加密,提高了安全性。因为服务器端存有客户的明文口令,所以服务器可以重复客户端进行的操作,并将结果与用户返回的口令进行对照。CHAP为每一次验证任意生成一个挑战字串来防止受到再现攻击(replay attack)。并且在整个连接过程中,CHAP将不定时的向客户端重复发送挑战口令,从而避免第3方冒充远程客户(remote client impersonation)进行攻击。而PAP报文只要连接成功就不会发送报文进行验证了,除非等到设备或接口重新开启或关闭。
实验:
R1作为认证方,R2作为被认证方。
在R1的认证方上配置:
aaa
local-user huawei password cipher huawei
local-user huawei service-type ppp
interface Serial4/0/0
ppp authentication-mode chap
ppp chap user huawei 指定chap协议认证的用户,携带在challenge信息中发送
在R2的被认证方上配置:
interface Serial4/0/0
ppp chap user huawei
ppp chap password cipher huawei
配置完成后重新开启关闭接口,认证成功
CHAP报文格式: CHAP报文封装在PPP的information字段
挑战报文:
被认证方回应报文:
认证成功报文:
在华为设备上,CHAP验证配置注意点:
用户名 | 密码 | |
---|---|---|
全局AAA下配置 | 认证方:用来查找全局用户名对应的密码进行HASH运算;被认证方:发送响应报文携带的用户名,先检查全局再检查接口。 | 认证方:仅适用全局密码;被认证方:用来进行HASH计算的参数,先检查全局再检查接口。 |
接口配置 | 认证方:发送挑战报文时携带的用户名;被认证方:发送响应报文携带的用户名。 | 认证方:不使用;被认证方:用来进行HASH计算的参数。 |
注意:认证方没有在接口配置用户时,被认证方一定要在接口上配置账号密码,而非全局下;因为被认证方无法通过challenge报文找到用户名,以至于不能全局下找到相应用户的密码,便只能使用接口上的账号密码。
参考资料:华为HCIE培训资料