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(認證、授權、計費)的簡稱,是網絡安全的一種管理機制,提供了認證、授權、計費三種安全功能。

認證:確認訪問網絡的遠程用戶的身份,判斷訪問者是否為合法的網絡用戶。

授權:對不同用戶賦予不同的權限,限制用戶可以使用的服務。例如用戶成功登錄服務器后,管理員可以授權用戶對服務器中的文件進行訪問和打印操作。

計費:記錄用戶使用網絡服務中的所有操作,包括使用的服務類型、起始時間、數據流量等,它不僅是一種計費手段,也對網絡安全起到了監視作用。

AAA一般采用客戶機/服務器結構,客戶端運行於NAS(Network Access Server,網絡接入服務器)上,服務器上則集中管理用戶信息。NAS對於用戶來講是服務器端,對於服務器來說是客戶端。AAA的基本組網結構如下圖:

當用戶想要通過某網絡與NAS建立連接,從而獲得訪問其它網絡的權利或取得某些網絡資源的權利時,NAS起到了驗證用戶的作用。NAS負責把用戶的認證、授權、計費信息透傳給服務器(RADIUS服務器或HWTACACS服務器),RADIUS協議或HWTACACS協議規定了NAS與服務器之間如何傳遞用戶信息。

圖1-1的AAA基本組網結構中有兩台服務器,用戶可以根據實際組網需求來決定認證、授權、計費功能分別由使用哪種協議類型的服務器來承擔。例如,可以選擇HWTACACS服務器實現認證和授權,RADIUS服務器實現計費。

當然,用戶也可以只使用AAA提供的一種或兩種安全服務。例如,公司僅僅想讓員工在訪問某些特定資源的時候進行身份認證,那么網絡管理員只要配置認證服務器就可以了。但是若希望對員工使用網絡的情況進行記錄,那么還需要配置計費服務器。

TACACS+的典型應用是對需要登錄到設備上進行操作的終端用戶進行認證、授權、計費。設備作為TACACS+的客戶端,將用戶名和密碼發給TACACS+服務器進行驗證。用戶驗證通過並得到授權之后可以登錄到設備上進行操作。

2 TACACS+和RADIUS的比較

從上面的描述來看,TACACS+和目前被廣泛使用的RADIUS很相似,那么他們有什么區別和聯系呢?下面這個表格可以說明這個問題:

TACACS+協議

RADIUS協議

使用TCP,網絡傳輸更可靠

使用UDP,網絡傳輸效率更高

除了TACACS+報文頭,對報文主體全部進行加密

只對驗證報文中的密碼字段進行加密

協議報文較為復雜,認證和授權分離,使得認證、授權服務可以分離在不同的安全服務器上實現。例如,可以用一個TACACS+服務器進行認證,另外一個TACACS+服務器進行授權

協議報文比較簡單,認證和授權結合,難以分離

支持對設備的配置命令進行授權使用。用戶可使用的命令行受到用戶級別和AAA授權的雙重限制,某一級別的用戶輸入的每一條命令都需要通過TACACS+服務器授權,如果授權通過,命令就可以被執行

不支持對設備的配置命令進行授權使用

用戶登錄設備后可以使用的命令行由用戶級別決定,用戶只能使用缺省級別等於/低於用戶級別的命令行

3 TACACS+的基本原理

3.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+服務器發送計費結束報文,指示計費結束報文已經收到。

4 TACACS+的報文結構和具體工作過程

4.1 TACACS+的報文類型

TACACS+共有7種類型的消息:

1、Authentication_START

2、Authentication_CONTIUNE

3、Authentication_REPLY

4、Authorization_REQUEST

5、Authorization_RESPONSE

6、Accounting_REQUEST

7、Accounting_REPLY

4.2 TACACS+包頭

所有的TACACS+數據包都使用12字節長的包頭,結構如下:

圖1 TACACS+包頭

圖2 TACACS+包頭(實例)

下面對各個字段分別進行說明:

Major version的取值為0x0C

Minor version一般為0,一些特殊場景取值為1,本文后面會有說明

Type為1表示認證,2表示授權,3表示計費

Seq_no,序列號,從1開始,隨報文交互遞增

Flags,用來表示一些特殊條件,比如不加密(0x01),支持單連接多會話(0x04)等

Session_id為TACACS+會話的ID,是個隨機數。

Length為TACACS+報文除頭部之外的長度

4.3 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,竊聽者無法根據報文的內容來猜測網絡的配置和用戶的身份。

4.4 Authentication 消息

Authentication 消息包括三種類型:START、CONTINUE和REPLY。

4.4.1 Authentication Start

認證開始時,客戶端發送START消息,START消息中包括認證類型,同時可能包括用戶名和一些認證數據。

START消息一般來說是認證過程的第一個數據包,其seq_no總是1。

如果收到RESTART消息,客戶端需要發送START消息重新開始認證(使用一個新的會話)。

Server發送REPLY消息來回應START消息,表示認證結束或者仍需要繼續。

圖3 Authentication Start消息

Action字段表示具體的認證操作,如認證請求、上傳密碼等等。

priv_lvl字段表示用戶的權限級別。

authen_type字段表示認證的類型,如PAP、CHAP等。

Service字段表示服務類型。

user字段表示用戶名,該字段不一定在START消息中存在。

port字段表示客戶端上發生認證行為的端口,具體取值客戶端可以自行定義,沒有明確的要求。

rem_addr字段表示用戶的地址信息,屬於可選字段,一般使用客戶端IP地址、ISDN Caller ID等填充。

data字段用於針對action和authen_type字段的值來傳遞一些信息。

4.4.2 Authentication Reply

REPLY消息是TACACS+服務器向客戶端發送的唯一一種Authentication 消息,用於向客戶端反饋當前認證的狀態。

圖4 Authentication Reply消息

Status字段表示認證的狀態。

flags字段用於控制客戶端是否將用戶輸入的密碼回顯,如果該標志位置1,用戶輸入的密碼不會回顯。

server_msg字段為可選字段,用於服務器將一些附加信息帶給用戶。

data字段用於向客戶端(NAS)提供一些信息。

4.4.3 Authentication Continue

客戶端收到REPLY消息后,如果確認認證過程沒有結束,使用CONTINUE消息應答。

圖5 Authentication Continue消息

user_msg字段用於回應REPLY消息中的server_msg字段,向服務器提供客戶端或用戶的一些信息

flags字段用於中斷認證過程

4.5 TACACS+認證過程

TACACS+認證的工作過程取決於START消息中的action和authen_type字段的取值。

不同的action和authen_type字段的組合需要配合不同的priv_lvl、service、port和rem_addr字段,實現不同的業務。

TACACS+協議中目前描述了13個action和authen_type字段的組合,這里列出幾個比較常見的組合:

4.5.1 Enable Requests

Enable Requests通常用於提升當前用戶的級別的場合,比如Linux系統的su命令,Comware的super命令等,認證過程和后面馬上要講到的Inbound ASCII Login很相似

Action = TAC_PLUS_AUTHEN_LOGIN

priv_lvl = implementation dependent

authen_type = not used

service = TAC_PLUS_AUTHEN_SVC_ENABLE

4.5.2 Inbound ASCII Login

管理用戶login的場景,非常常見,該場景下START消息可以攜帶用戶名,整個交互過程包括一個START,中間可能存在一對或多對CONTINUE/REPLY,最后以一個REPLY結束

action = TAC_PLUS_AUTHEN_LOGIN

authen_type = TAC_PLUS_AUTHEN_TYPE_ASCII

4.5.3 Inbound CHAP login

CHAP認證,最常見的是PPP認證的場景,整個交互過程包括一個START和一個REPLY消息,START消息中必須包含用戶名。

Action = TAC_PLUS_AUTHEN_LOGIN

authen_type = TAC_PLUS_AUTHEN_TYPE_CHAP

minor_version = 0x1

4.5.4 具體認證過程

如下是Comwarev5平台Telnet用戶使用HWTACACS認證過程:

AUTHEN_REQUEST ------------->

<------------- AUTHEN_REPLY(status:AUTHEN_STATUS_GETPASS)

AUTHEN_CONTINUE(with password) ------------->

<------------- AUTHEN_REPLY(status:AUTHEN_STATUS_PASS)

4.5.5 認證過程的中止

客戶端可以通過在CONTINUE消息中攜帶一個TAC_PLUS_CONTINUE_FLAG_ABORT標志位來中止正在進行的認證過程,同時可以在data字段攜帶中止認證的原因。該CONTINUE消息不需要REPLY消息的回應。

4.6 Authorization消息

Authorization 消息包括兩種類型:REQUEST和RESPONSE。

4.6.1 Authorization Request

Authorization Request消息的機構比較復雜,如下:

圖6 Authorization Request消息

Authorization Request消息中包括了授權所需的一切信息,這些信息分為兩類,一類是必選的,另一類是可選的。

其中,authen_method字段表示授權的方式,TACACS+的認證和授權是分離的,用戶可以使用TACACS+認證而使用其它協議進行授權。

priv_lvl字段、authen_type字段、authen_service字段、port字段、rem_addr字段的含義和authentication消息中的相應字段一樣。

user字段表示用戶名。

arg_cnt字段表示REQUEST消息中攜帶的argument的數量, argument是一個AVP的結構,其中attribute和value之間使用等號(=)或星號(*)連接,當使用等號連接時表示該AVP是必選的,使用星號連接時表示該AVP是可選的。

AVP的類型很多,這里就不一一列舉了。

4.6.2 Authorization Response

Authorization Response消息的結構如下:

圖7 Authorization Response消息

Response消息中包括了授權的結果和一些其它的參數

status字段表示授權的結果和權限的操作方式

server_msg字段是服務器給用戶的提示信息。

data字段是服務器提供給管理員的信息。

arg_cnt字段表示RESPONSE消息中攜帶的argument的數量,argument的格式和REQUEST消息中相同。

4.7 具體授權過程

4.7.1 Comwarev5設備使用HWTACACS認證/授權

AUTHOR_REQUEST ------------->

<------------- AUTHOR_REPLY(status:AUTHOR_STATUS_PASS_ADD

4.8 Accounting消息

Accounting消息包括兩種類型:REQUEST和REPLY。

4.8.1 Accounting Request

Accounting Request消息的結構如下:

圖8 Accounting Request消息

Accounting Request消息中包括了計費所需的信息。

flags字段表示計費報文的類型,包括計費開始。計費停止和實時計費。

其它字段的含義和與authorization和authentication中對應字段的含義一致,這里不再贅述。

Accounting REQUEST消息中也可以攜帶很多AVP形式的參數,參數的數量很多,這里就不一一列舉了。

data字段是服務器提供給管理員的信息。

4.8.2 Accounting Reply

Accounting Reply消息的結構如下:

圖9 Accounting Reply消息

其中status字段表示計費的狀態,標志計費是否成功。

server_msg字段表示服務器發給用戶的信息,由客戶端來決定是否顯示給用戶。

4.9 具體計費過程

4.9.1 Comwarev5設備使用HWTACACS進行PPP用戶計費

下面是Comwarev5設備使用HWTACACS進行PPP用戶計費的過程,包括計費開始,計費持續和計費停止的全過程。

ACCOUNTING_REQUEST(flag:ACCT_FLAG_START ------------->

<------------- ACCOUNTING_REPLY(status:ACCT_STATUS_SUCCESS

ACCOUNTING_REQUEST(flag:ACCT_FLAG_WATCHDOG ------------->

<------------- ACCOUNTING_REPLY(status:ACCT_STATUS_SUCCESS

ACCOUNTING_REQUEST(flag:ACCT_FLAG_STOP ------------->

<------------- ACCOUNTING_REPLY(status:ACCT_STATUS_SUCCESS

4.10 TACACS+的附加功能

除了正常的AAA功能外,為確保功能實現的冗余和實時計費准確性等等,很多TACACS+實現都包括下面的內容:

1、計費停止報文的緩存和重傳機制;

2、認證、授權、計費服務器的主備切換功能。

4.11 Tacacs in Comware(以V5為例)

Comware v5的HWTACACS功能基本上實現了TACACS+所規定的功能:

#

hwtacacs scheme tacacs

primary authentication 101.3.201.1

primary authorization 101.3.201.1

primary accounting 101.3.201.1

key authentication h3c

key authorization h3c

key accounting h3c

timer realtime-accounting 3

user-name-format without-domain

#


免責聲明!

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



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