taibeihacker
Moderator
Kerberoasting 攻击
1 背景
Kerberoasting 攻擊是Tim Medin 在DerbyCon 2014 上發布的一種域口令攻擊方法,Tim Medin 同時發布了配套的攻擊工具kerberoast。此後,不少研究人員對Kerberoasting 進行了改進和擴展,在GitHub 上開發發布了大量工具,使得Kerberoasting 逐漸發展成為域攻擊的常用方法之一。2 原理
kerberos 協議的認證授權過程,3 次涉及使用不同賬戶的NTLM 作為密鑰加密數據使用域用戶的NTLM 加密認證請求票據
KDC 使用Krbtgt 賬號的NTLM 加密認證後的票據TGT
KDC 使用運行服務的服務賬號的NTLM 加密授權票據TGS
Kerberos 使用公開的對稱加密算法
y=f(x, key) 為已知的對稱加密算法,如rc4_hmac_nt 等。
x 為待加密的數據,包含時間戳,其它為固定格式的內容;
key 為加密密鑰,即NTLM; y 為加密後的密數據。
如果能從Kerberos 域網絡中獲取y,則根據已知算法,使用不同的f 可推算出不同的x。
由於x 中包含簡單易辨的時間戳,所以通過時間戳可快速判定數據解密是否正確,從而判定使用的key 是否為要尋找的口令。
key 越簡單、加密算法f 強度越低,被破解的概率越大,因此需要尋找具有簡單key 的賬號,以及使用較低強度的加密算法f。
3 账号类型
在域內主要有主機賬號、用戶賬號、服務賬號(SPN 註冊在域用戶賬號下) 等3 種主要賬號類型主機賬號的口令由系統隨機設置,幾乎不能破解,而且每30 天自動變更一次
用戶賬號的口令複雜度由策略而定,在復雜度要求較高的域內,破解難度較大。
3.1 服务账号的口令存在很大的特殊性
口令在應用軟件安裝時往往自動設定,複雜度往往較為簡單口令幾乎不會更改,因為大部分應用軟件沒有提供修改服務賬號的功能和接口,例如運行MS SQL Server 服務的sqlsvc 賬號等
服務賬號基本滿足口令複雜度較低這個條件,可以作為破解的對象
要想達成破解條件,還需要獲取加密後的數據,則需獲取服務賬號的密數據
由於TGS 由服務賬號的NTLM 加密,因此獲取訪問服務的TGS 即可獲取密數據,即Kerberos 協議中的第4 步。
根據Kerberos 協議,任何用戶均可以向域服務器申請訪問某個服務
服務可以不在線,只要該服務在域中註冊了SPN(Service Principal Name) 即可。
4 SPN
4.1 SPN 相关概念
SPN 是服務器上所運行服務的唯一標識,每個使用Kerberos 的服務都需要一個SPNSPN 分為兩種,一種註冊在AD 上機器帳戶(Computers)下,另一種註冊在域用戶帳戶(Users)下
當一個服務的權限為Local System 或Network Service,則SPN 註冊在機器帳戶(Computers)下
當一個服務的權限為一個域用戶,則SPN 註冊在域用戶帳戶(Users)下
SPN 的格式為serviceclass/host

其中serviceclass 表示服務的種類,例如www 表示web服務;
host 盡量用FQDN 表示;
端口如果是知名端口,可以省略。

4.2 查询 SPN
SPN 存在於賬號的屬性中,因此可以通過查詢所有賬號的屬性,遍歷域內所有SPN 服務。因為主機賬號的口令幾乎不能破解,所以只查詢用戶賬號的SPN。系統提供了PowerShell 模塊供查詢,PowerViewer 對模塊進行了封裝,提供Get-DomainUser -SPN 命令,可遍歷域內所有的用戶賬號的SPN。

Win7 和Windows Server 2008 自帶的工具
setspn.exe -q */*
在一些域中,當一些服務不再運行或者停止服務後,這些服務賬號可能仍然遺留在域中,由於服務的運行與否不影響我們獲取TGS,因此這些不存在的SPN 仍然適用於Kerberoasting。
服務賬號中有些權限較高,例如有些特殊的服務需要具備域管理員權限的服務賬號才能運行正常,因此可以在查詢SPN 時加以標記和篩選,作為重點攻擊的對象。方法是在使用Get-DomainUser -SPN 命令時,添加AdminCount 參數,表示具備高權限。

5 攻击流程
獲取域內的服務賬號與所運行的服務進行對應關係需要獲取訪問這些服務的TGS,從而獲取由服務賬號NTLM 加密的加密數據
Mimikatz 提供了該功能,通過Kerberos 模塊的ask 命令可以獲取。

使用Mimikatz 每次只能申請獲取一個TGS,impacket 工具包提供了批量獲取的方法,可一次獲取域內所有SPN 的TGS,供離線批量破解。
微軟為了解決系統新舊版本兼容性問題,每個Windows 系統會支持多種加密算法,例如AES、DES、RC4、MD5 等。在Windows 2003、Windows 2000 系統中,主要採用RC4、MD5、HMAC_MD5 等算法,這些算法相對比較容易破解。所以在選擇破解重點時盡量選取運行在這些系統上的服務
有多種方式迫使系統選擇使用強度較低的加密算法。現在比較容易破解的算法是RC4_HMAC_NT 算法,在獲取TGS 時,可以誘使域服務器採用該算法進行加密。

Kerberoasting 攻擊的所有條件
密數據
演算法
口令字典庫
使用Tim Medin 的kerberoast 工具破解獲取口令,當然還有算法更快的HashCat 工具。下載解壓kerberoast 工具後,使用tgsrepcrack.py wordlist.txt tgs.kirbi 進行破解,其中wordlist.txt 是字典文件,tgs.kirbi 是前面獲取的TGS。破解的概率和時間依賴於口令複雜度、字典以及機器的性能。
./tgsrepcrack.py wordlist.txt test.kirbi
6 防御
Kerberoasting 攻擊的主要前提是口令複雜度較低、加密算法強度較弱對抗Kerberoasting 攻擊也需從這2 方面開展
提高服務賬號的口令複雜度;
盡量將域內的服務器系統升級至少至windows2008 系統,應用AES256 高難度的加密算法
檢測Kerberoasting 攻擊比較難,因為所有在線操作都是合法正常的操作,不過仍然有跡可循。例如批量獲取TGS 是一個特徵,低強度的加密算法是一個特徵,可以從這兩方面著手進行檢測是比較有效的檢測思路。