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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM