Kerberos 簡介與安裝
今天要來介紹一隻可愛的小狗:Kerberos,傳說中的幽冥的守門員。而在現實世界中,是 MIT 提出來的一個認證協定,能爲網路通訊提供嚴格的身份驗證。
在提到 Kerberos 是如何爲通訊雙方提供信任基礎之前,我們可以先複習一下 HTTPS 等服務是如何進行身份驗證的。
PKI 的驗證機制與 Kerberos 的信任機制
各位可以回憶一下 PKI(Public key infrastructure) 是如何做到驗證機制的,這個世界上的 HTTPS 伺服器那麼多,我們不可能去記錄每一臺的憑證,因此我們勢必要使用到「具備公信力的第三人」的角色。
在 PKI 中,這個具備公信力的第三人,就是被大家信任的 CA(certificate authority),CA 若是信任這個服務,CA 便會去簽署某個人的公鑰,爲它頒佈憑證。我們只需要使用 CA 的公鑰,就可以判斷該憑證是否是被該 CA 信任。
然而因爲我們信任該 CA,因此我們也可以判定說我們信任那位被該 CA 信任的人,這就是信任鏈(chain of trust)。
而 Kerberos 的機制和 PKI 明顯不同,一個是中央化的認證機制,一個是分散式的基礎設施,但 Kerberos 本身就是類似 CA 那個作爲「具備公信力的第三人」而存在的角色。
Kerberos 的原理介紹
Kerberos 協定:A 要對 B 進行請求,B 要藉由 Kerberos 對 A 進行認證
在 Kerberos 協定中,存在三個角色:
- Client:就是 A,是需要被認證的主體。
- Server:就是 B,是提供服務的主體,需要藉由 Kerberos 驗證 A 的身份。
- Key Distribution Center(KDC):KDC 又分成兩個部分:
- Authentication Server(AS):對 A 進行身份驗證,並且對 A 發放 Ticket Granting Ticket(TGT)。
- Ticket Granting Server(TGS):接受 A 持有的 TGT,並且爲 A 發放針對 B 的專屬 Ticket。
因此,流程如下:
- A 想要對 B 發送請求;
- A 向 AS 請求 TGT,注意 A 無法解密 TGT;
- A 將 TGT 提交給 TGS,TGS 提供給 A 針對 B 的 Ticket;
- A 對 B 發送請求,並使用 Ticket 證明自己的身份。
架設過程
sudo apt update
sudo apt install krb5-kdc krb5-admin-server krb5-config
它會要求輸入 Kerberos Realm 的名稱,預設的 Realm 是 Host FQDN 的大寫形式。
接着編輯 /etc/krb5.conf
:
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
EXAMPLE.COM = {
kdc = kerberos.example.com
admin_server = kerberos.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
在理想情況下,最好真的有 DNS Record 將 kerberos.example.com
指向到你的 Kerberos 伺服器。
編輯 /etc/krb5kdc/kadm5.acl
:控制哪些使用者可以管理 Kerberos 資料庫。
最後,啓動 Kerberos:
sudo systemctl start krb5-kdc
sudo systemctl start krb5-admin-server
sudo systemctl enable krb5-kdc
sudo systemctl enable krb5-admin-server
測試
使用 sudo kadmin.local
操作 Kerberos 資料庫,輸入:addprinc user
,來創建使用者 user
。
輸入 kinit user
來測試登入,它會要求你輸入密碼。
最後用 klist
來輸出你 Tickets。
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: user@TEST.NASA
Valid starting Expires Service principal
10/22/24 08:58:38 10/22/24 18:58:38 krbtgt/TEST.NASA@TEST.NASA
其它 Issues
Pre-Authentication
如果攻擊者拿到了 AS 的回覆封包,他會拿到一個特殊的加密值,該加密值是使用使用者密碼進行加密的,因此可以在攻擊者電腦本地進行暴力破解。
基於這種情況,我們可以爲使用者開啓 Pre-Authentication,使用者一開始會發送一個由使用者密碼雜湊值加密的時間戳,最終,AS 回應的也是使用者密碼的雜湊值加密的資訊。
因此,攻擊者就沒辦法拿到使用者的原始密碼。
Clock Skew
如果 Kerberos 伺服器的時間不準的話,它可能會拒絕認證它所簽發的 Tickets。
