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+協定的基本資訊互動流程:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5SNyczNyETO2cTMtATNwITN5QzNxgTMyAjNxAjMtQjN1cTMz8CXyAjNxAjMvwFN2UzNxMzLcd2bsJ2Lc12bj5ycn9Gbi52YuUTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.jpg)
以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總長度減去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([email protected]#$%)) |
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
轉載于:https://www.cnblogs.com/wangliangblog/p/5198535.html