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總長度減去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
