技术好文:Tacacs+认证详细调研

简介: 技术好文:Tacacs+认证详细调研

1 、TACACS+概述


1.1 什么是TACACS+


TACACS+(Terminal Access Controller Access Control System,终端访问控制器控制系统协议)是在TACACS协议的基础上进行了功能增强的安全协议。该协议与RADIUS协议的功能类似,采用客户端/服务器模式实现NAS与TACACS+服务器之间的通信。


1.2 TACACS+的用途


TACACS+协议主要用于PPP和VPDN(Virtual Private Dial-up Network,虚拟私有拨号网络)接入用户及终端用户的AAA。AAA是Authentication、Authorization、Accounting(认证、授权、计费)的简称,是网络安全的一种管理机制,提供了认证、授权、计费三种安全功能。


认证:确认访问网络的远程用户的身份,判断访问者是否为合法的网络用户。


授权:对不同用户赋予不同的权限,限制用户可以使用的服务。例如用户成功登录服务器后,管理员可以授权用户对服务器中的文件进行访问和打印操作。


计费:记录用户使用网络服务中的所有操作,包括使用的服务类型、起始时间、数据流量等,它不仅是一种计费手段,也对网络安全起到了监视作用。


2、 TACACS+协议介绍


2.1 TACACS+基本消息交互流程


下图是TACACS+协议的基本信息交互流程:


以Telnet用户认证过程为例,基本消息交互流程如下:


(1) Telnet用户请求登录设备。


(2) TACACS+客户端收到请求之后,向TACACS+服务器发送认证开始报文。


(3) TACACS+服务器发送认证回应报文,请求用户名。


(4) TACACS+客户端收到回应报文后,向用户询问用户名。


(5) 用户输入用户名。


(6) TACACS+客户端收到用户名后,向TACACS+服务器发送认证持续报文,其中包括了用户名。


(7) TACACS+服务器发送认证回应报文,请求登录密码。


(8) TACACS+客户端收到回应报文,向用户询问登录密码。


(9) 用户输入密码。


(10) TACACS+客户端收到登录密码后,向TACACS+服务器发送认证持续报文,其中包括了登录密码。


(11) TACACS+服务器发送认证回应报文,指示用户通过认证。


(12) TACACS+客户端向TACACS+服务器发送授权请求报文。


(13) TACACS+服务器发送授权回应报文,指示用户通过授权。


(14) TACACS+客户端收到授权回应成功报文,向用户输出设备的配置界面。


(15) TACACS+客户端向TACACS+服务器发送计费开始报文。


(16) TACACS+服务器发送计费回应报文,指示计费开始报文已经收到。


(17) 用户请求断开连接。


(18) TACACS+客户端向TACACS+服务器发送计费结束报文。


(19) TACACS+服务器发送计费结束报文,指示计费结束报文已经收到。


2.2 TACACS+消息类型


由2.1可知TACACS+共有7种类型的消息:


1、Authentication_START


2、Authentication_CONTIUNE


3、Authentication_REPLY


4、Authorization_REQUEST


5、Authorization_RESPONSE


6、Accounting_REQUEST


7、Accounting_REPLY


由于我们只关心认证流程所以只涉及到以上的1、2、3类型报文及TACACS+报文头,共计四中类型的报文,以下分别对其报文结构加以说明。


2.3 TACACS+报文结构


2.3.1 TACACS+报文头


所有的TACACS+数据包都使用12字节长的包头,结构如下:


下面对各个字段分别进行说明:


1) Major:TACACS+主版本号,取值为0x0C


2) Minor:TACACS+次版本号,用于向后兼容扩展,一般为0。


3) Packet Type:定义包的类型,取值:


#define TAC_PLUS_AUTHEN 1 // authentication表示认证


#define TAC_PLUS_AUTHOR 2 // authorization表示授权


#define TAC_PLUS_ACCT 3 // accounting表示计费


4) Sequence No:当前会话中的数据包序列号。会话中的第一个TACACS+数据包序列号必须为1,其后的每个数据包序列号逐次加1。因此客户机只发送奇序列号数据包,而TACACS+ Daemon只发送偶序列号数据包。当序列号达到255时, 会话会重启并置回序列号为1。


5) Flags:用来示一些特殊条件,比如不加密(0x01),支持单连接多会话(0x04)等


6) Session_id:为TACACS+会话的ID,是个随机数。


7) Length:为TACACS+报文除头部之外的长度


2.3.2 Authentication 消息


TACACS+认证有三种类型数据包:开始(START)、继续(CONTINUE)和回复(REPLY)。客户端(client)发送START和CONTINUE数据包,服务端(daemon)发送REPLY数据包。


认证开始时,客户端发送一个START消息到服务端,该消息描述了要执行的身份验证类型,可能还包括用户名和一些认证数据。起始数据包仅作为TACACS+舍话开始或者会话重置后紧接着的第一个消息(会话重置可能是由服务端的回复包发起的)。起始数据包的序列号总是等于1。服务端发送一个REPLY包以响应START包。回复包表明认证是否结束或者继续。如果认证继续,则回复包将指明所需要的新的认证信息。客户端取出相关信息并以CONTINUE包的形式进行返回。服务端以REPLY包来回复START包或者CONTINUE包,直到客户端在CONTINUE包指示要中止,此时会话将立即中止。


2.3.2.1 认证START报文格式:


1) Action:认证操作,合法值为:


TAC_PLUS_AUTHEN_LOGIN = Ox01 (甏录)


TAC PLUS ALTTHEN CHPASS=Ox02(修改密码)


TAC PLUS AUTHEN SENDPASS=Ox03(发送密码,已作废)


TAC PLUS AUTHEN SENDAUTH=Ox04(发送认证)


2) Priv lVl:认证权限级别,值域为0-15,可以在NAS客户端中设置,预设值为:


TAC PLUS PRIV LVL MAX=OxOf(最高级别)


TAC_PLUS_PRIV_LVL_ROOT=OxOf (ROOT用户级别)


TAC PLUS PRIV LVL USER=Ox01(普通用户级别)


TAC PLUS PRIV LVL MIN=Ox00(最低级别)


3) Authen_type:认证类型,合法值为:


TAC_PLUS_AUTHEN_TYPE_ASCII = Ox01 (ASCII值)


TAC_PLUS_AUTHEN_TYPE_PAP = Ox02 (PAP伤iX)


TAC_PLUS_AUTHEN_TYPE_CHAP = Ox03 (CHAP协iX)


TAC_PLUS_AUTHEN_TYPE_ARAP = Ox04 (ARAP协议)


TAC PLUS AUTHEN TYPE MSCHAP=Ox05(微软CHAP协议)


4) Service:认证服务,合法值为:


TAC_PLUS_AUTHEN_SVC_NONE = Ox00 c无服务 )


TAC_PLUS_AUTHEN_SVC_LOGIN = Ox01(登录)


TAC_PLUS_AUTHEN_SVC_ENABLE = Ox02 (enable服务)


TAC_PLUS_AUTHEN_SVC_PPP = Ox03 (PPP协议)


TAC_PLUS_AUTHEN_SVC_ARAP = Ox04 (ARAP协 iX)


TAC PLUS AUTHEN SVC PT=Ox05(负载类型)


TAC PLUS AUTHEN SVC RCMD=Ox06(远程命令)


TAC_PLUS_AUTHEN_SVC_X25 = Ox07 (x. 25协iX)


TAC_PLUS_AUTHEN_SVC_NASI = Ox08 (NASI服务)


TAC_PLUS_AUTHEN _SVC_FWPROXY=Ox09(防火墙代理)


其中ENABLE服务是指获得管理特权,类似于Linux系统中的“su”命令。NONE服务是在没有任何其它服务的情况下填写的。


5) User:用户名,可选值。


6) Port:客户端认证所使用的端口,由客户端指定。


7) Rem addr:远程地址,可选值,由客户端指定。


8) Data:负载数据。


2.3.2.2 认证REPLY报文格式:


1) Status:认证当前状态,合法值为:


TAC_PLUS_AUTHEN_STATUS_PASS = Ox01(通过)


TAC_PLUS_AUTHEN_STATUS_FAIL = Ox02 (失败)


TAC PLUS AUTHEN STATUS GETDATA=Ox03(获取数据)


TAC PLUS AUTHEN STATUS GETUSER=Ox04(获取用户名)


TAC PLUS AUTHEN STATUS GETPASS=Ox05(获取密码)


TAC PLUS AUTHEN STATUS RESTART=Ox06(重启会话)


TAC_PLUS_AUTHEN_STATUS_ERROR = Ox07(错误)


TAC_PLUS_AUTHEN_STATUS_FOLLOW = Ox21 (使用备用 deamon)


2) Flags:该字段包括各种位图格式的标志,定义值:


TAC PLUS REPLY FLAG NOECHO = Ox01应)


3) Server_msg:服务器返回给用户的提示信息,可选的。


4) Data:负载数据。


2.3.2.3 认证CONTINUE报文格式


1) Flags:该字段包括各种位图格式的标志,定义值:


TAC PLUS CONTINUE FLAG ABORT = Ox01c中止)


2) User_msg:用户输入信息,用于答复Server_msg。


3) Data:负载数据。


2.4各类认证类型详解


Tacacs+认证协议支持ASCII值、PAP、CHAP、 ARAP协议、MS-CHAP等五种认证类型,现分别对其进行分析。


2.4.1 ASII值认证类型


ASII认证类型在认证流程中共包含START报文、REPLY报文和CONTINUE报文,其中START报文中可以携带用户名信息也可以不携带(在continue中携带),具体流程如下:


图2-4-1-1 start报文不含用户信息认证流程


图2-4-1-2 start报文包含用户信息认证流程


2.4.2 PAP协议认证类型


PAP认证类型只包含一个START报文和一个REPLY报文,START报文必须包含用户名信息和密码信息,其中用户名信息存储在START报文的user字段,密码存储在START报文的data字段,数据信息不需加密,认证流程如下:


图2-4-2-1 PAP协议类型认证流程


2.4.3 CHAP协议认证类型


CHAP认证类型只包含一个START报文和一个REPLY报文,START报文必须包含用户名信息和数据信息,其中用户名信息存储在START报文的user字段,数据存储在START报文的data字段,数据信息必须包含session_id、challenge和authentication。


session_id必须占用1个字节,authentication必须用16个字节,challenge长度等与data总长度减去session_id长度和认证信息长度,authentication是由session_id、用户密码和challenge通过MD5加密生成。具体认证流程如下:


图2-4-3-1 CHAP协议类型认证流程


session_id


challenge


authentication


1 byte


16 bytes,auth=MD5(se_id,usr_pwd,challenge)


图2-4-3-2 START报文data字段数据结构


2.4.4 MS-CHAP协议认证类型


MS-CHAP认证类型只包含一个START报文和一个REPLY报文,START报文必须包含用户名信息和数据信息,其中用户名信息存储在START报文的user字段,数据存储在START报文的data字段,数据信息必须包含session_id、MS-challenge和MS-authentication。


session_id必须占用1个字节,authentication必须用49个字节,challenge长度等与data总长度减去//代码效果参考:http://www.lyjsj.net.cn/wx/art_23837.html

session_id长度和authentication长度,认证信息是由用户密码、challenge等通过MD4和DES加密生成。具体认证流程如下:

图2-4-4-1 MS-CHAP协议类型认证流程


session_id


challenge


authentication


1 byte


49bytes


图2-4-4-2 START报文data字段数据结构


MS-CHAPv1协议authentication组成


NTHASH=MD4(user_pwd)


ChallengeResponse=DES(NTHASH【0-7】、challenge)||DES(NTHASH【7-14】、challenge)||DES(NTHASH【14-21】、challenge);challenge一般为8字节


ChallengeResponse封装在authentication的【24-47】字节中,并且authentication最后一个字节(49字节)值为1


图2-4-4-3 MS-CHAPv1authentication组成


MS-CHAPv2协议authentication组成


NTHASH=DES(toupper(user_pwd),MS-KEY(KGS!@#$%))


ChallengeResponse=DES(NTHASH【0-7】、challenge)||DES(NTHASH【7-14】、challenge)||DES(NTHASH【14-21】、challenge);challenge一般为16字节


ChallengeResponse封装在authentication的【0-23】字节中,并且authentication最后一个字节(49字节)值为0


图2-4-4-4 MS-CHAPv2 authentication组成


2.4.5 ARAP协议认证类型


ARAP认证类型只包含一个START报文和一个REPLY报文,START报文必须包含用户名信息和数据信息,其中用户名信息存储在START报文的user字段,数据存储在START报文的data字段,数据信息必须包含ServerChallenge、ClientChallenge和authentication。


ServerChallenge、ClientChallenge和authentication都只占用8个字节,authentication是由用户密码作为DES_KEY对ServerChallenge和ClientChallenge进行DES加密生成。具体认证流程如下:


图2-4-5-1 ARAP协议认证流程


ServerChallenge


ClientChallenge


authentication


8byte


8字节


8bytes


图2-4-5-2 START报文data字段数据结构


ARAP协议authentication组成


KEY=pwd各个字节分别左移一位


ChallengeResponse=DES(ServerChallenge,KEY);challenge一般为8字节


图2-4-5-3 ARAP authentication组成


2.5 TACACS+数据包的加密


TACACS+支持除包头之外所有信息的加密,加密方法如下:


1) 将session_id、secret key, 版本号和sequence number一起进行MD5运算(其中secret key 为TACACS客户端和服务器之间的共享秘密),计算结果为MD5_1。


2) 后续的MD5运算将上次MD5运算的结果也纳入运算范围,如下:


MD5_1 = MD5{session_id, key, version, seq_no}


MD5_2 = MD5{session_id, key, version, seq_no, MD5_1}


....


MD5_n = MD5{session_id, key, version, seq_no, MD5_n-1}


3) 将所有的运算结果连接起来,直到总长度大于需要加密的数据的长度,然后截断到实际数据的长度,得到pseudo_pad:


pseudo_pad = {MD5_1 【,MD5_2 【 ... ,MD5_n】】} truncated to len(data)


4) 随后将需要加密的数据和上面的pseudo_pad进行XOR运算,得到密文:


ENCRYPTED {data} == data ^ pseudo_pad


由于TACACS+对整个数据包进行加密,私密性要好于RADIUS,窃听者无法根据报文的内容来猜测网络的配置和用户的身份。


3、TACACS+服务器环境配置


1. 硬软件要求


硬件:Pentium IV 处理器, 1.8 GHz 或者更高


操作系统:Windows 2000 Server 、Windows Server 2003, Enterprise Edition or Standard


Edition (Service Pack 1)


内存:最小1GB


虚拟内存:最小1GB


硬盘空间:最小1GB可用空间,实际大小根据日志文件的增长,复制和备份的需求而定。


2. 软件要求


浏览器:Microsoft


Internet Explorer 6 或者更高版本


JAVA运行环境:Sun JRE 1.4.2_04 或更高版本


TACACS+服务器:安装cisco ACS


一天一天的满足,即一天一天的堕落!

相关文章
|
1月前
|
Kubernetes 网络协议 网络安全
提升你的云技能:深入了解CKA认证之k8s升级秘籍!
提升你的云技能:深入了解CKA认证之k8s升级秘籍!
51 0
|
1月前
电子好书发您分享《阿里云认证的解析与实战-数据仓库ACP认证》
电子好书发您分享《阿里云认证的解析与实战-数据仓库ACP认证》
116 1
|
存储 缓存 安全
一文讲透认证授权的那些事
权限管理一直都是初级程序员学习的一大重点,也是一大难点,有单点登录,有联合登录,有session有Token,有各种权限框架,还有什么是RBAC,以及分布式下如何做权限管理。
646 0
|
1月前
|
运维 架构师 算法
全球仅通过不到 2000 位的 Elastic 认证工程师,到底难不难?
全球仅通过不到 2000 位的 Elastic 认证工程师,到底难不难?
22 0
|
11月前
|
云计算
为什么一定要考阿里云认证?对工作有什么帮助?
考证对工作的帮助并不是短时间内见效的,而是长期的回报,在同等的技术下选择拥有证书的,在拥有证书的人群中选择技术更好的,这是职场永远不变的铁律。
|
存储 运维 监控
什么是华为职业认证体系?阿里云认证呢?一篇就全讲清楚了
华为职业认证 对ICT从业者职业技能的一种认可。 就像我们考取的英语四六级证书一样,他代表你具有相关方面的技能。 华为职业认证体系分为三个层次的认证,而每一个层次又可以细分为不同的领域,具体下图。
889 1
什么是华为职业认证体系?阿里云认证呢?一篇就全讲清楚了
|
分布式计算 DataWorks 大数据
【实验】阿里云大数据助理工程师认证(ACA)- ACA认证配套实验-02-MaxCompute客户端配置(上)
【实验】阿里云大数据助理工程师认证(ACA)- ACA认证配套实验-02-MaxCompute客户端配置(上)
229 0
【实验】阿里云大数据助理工程师认证(ACA)- ACA认证配套实验-02-MaxCompute客户端配置(上)
|
Web App开发 架构师 Go
认知篇:Elastic认证工程师,完全解读
认知篇:Elastic认证工程师,完全解读
认知篇:Elastic认证工程师,完全解读
|
SQL 分布式计算 安全
【实验】阿里云大数据助理工程师认证(ACA)- ACA认证配套实验-05-安全与权限基本操作(上)
【实验】阿里云大数据助理工程师认证(ACA)- ACA认证配套实验-05-安全与权限基本操作
334 0
【实验】阿里云大数据助理工程师认证(ACA)- ACA认证配套实验-05-安全与权限基本操作(上)