88tcp/udp - Pentesting Kerberos
Reading time: 8 minutes
tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報
Kerberos は、ユーザーを認証する一方でリソースへのアクセス権を直接管理しないという原則で動作します。これはプロトコルがセキュリティフレームワーク内で果たす役割を強調する重要な違いです。
Active Directory のような環境では、Kerberos はユーザーの秘密のパスワードを検証することでユーザーの身元を確立する上で重要な役割を果たします。このプロセスは、ユーザーがネットワークリソースとやり取りする前にその身元が確認されることを保証します。しかし、Kerberos は特定のリソースやサービスに対するユーザーの権限を評価したり強制したりする機能までは提供しません。代わりに、ユーザーを認証する安全な方法を提供し、これがセキュリティプロセスにおける重要な第一歩となります。
Kerberos による認証後、リソースへのアクセスに関する意思決定プロセスはネットワーク内の各サービスに委ねられます。これらのサービスは、Kerberos が提供するユーザーの権限に関する情報に基づいて、認証済みユーザーの権利やアクセス許可を評価する責任を負います。この設計により、ユーザーの身元を認証することとアクセス権を管理することの関心の分離が可能となり、分散ネットワークにおけるリソース管理をより柔軟かつ安全に行うことができます。
デフォルトポート: 88/tcp/udp
PORT STATE SERVICE
88/tcp open kerberos-sec
Kerberosを悪用する方法を学ぶには、Active Directoryに関する投稿を読むべきです。
Kerberos-only 環境:クライアントの準備とトラブルシューティング
ドメインサービス(SMB/WinRM/etc.)で NTLM が無効になっている場合、Kerberos で認証する必要があります。よくある落とし穴と実用的なワークフロー:
- 時刻同期は必須です。ホストの時計が数分以上ずれていると
KRB_AP_ERR_SKEWが表示され、すべての Kerberos 認証が失敗します。DC と時刻を同期してください:
# quick one-shot sync (requires sudo)
sudo ntpdate <dc.fqdn> || sudo chronyd -q 'server <dc.fqdn> iburst'
- ターゲットのレルム/ドメイン用の有効な krb5.conf を生成する。
netexec(CME fork) は SMB テスト中にそれを出力できます:
# Generate krb5.conf and install it
netexec smb <dc.fqdn> -u <user> -p '<pass>' -k --generate-krb5-file krb5.conf
sudo cp krb5.conf /etc/krb5.conf
- TGTを取得し、ccacheを確認する:
kinit <user>
klist
- Kerberos を SMB tooling で使用する(パスワードは送信されず、あなたの ccache を使用します):
# netexec / CME
netexec smb <dc.fqdn> -k # lists shares, runs modules using Kerberos
# impacket examples also support -k / --no-pass to use the ccache
smbclient --kerberos //<dc.fqdn>/IPC$
- GSSAPI SSH シングルサインオン (OpenSSH から Windows OpenSSH server):
# Ensure krb5.conf is correct and you have a TGT (kinit)
# Use the FQDN that matches the host SPN. Wrong names cause: "Server not found in Kerberos database"
ssh -o GSSAPIAuthentication=yes <user>@<host.fqdn>
ヒント:
/etc/hostsが SSH/SMB で接続する正確な FQDN を解決するようにし、DNS をオーバーライドしている場合は裸のドメインエントリより前に記載されていることを確認してください。SPN の不一致は GSSAPI 認証を失敗させます。- SMB で NTLM が無効になっている場合、NTLM 試行で
STATUS_NOT_SUPPORTEDが表示されることがあります。Kerberos を強制するには-kを追加してください。
その他
Shodan
port:88 kerberos
MS14-068
MS14-068 の脆弱性により、攻撃者は正当なユーザーの Kerberos ログイントークンを改ざんして、Domain Admin のような権限昇格を偽って主張できます。この偽の主張が Domain Controller によって誤って検証され、Active Directory フォレスト全体のネットワークリソースへの不正アクセスを可能にします。
Other exploits: https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek
参考
- NetExec (CME) wiki – Kerberos and krb5.conf generation
- OpenSSH GSSAPIAuthentication
- MIT Kerberos – Using Kerberos on UNIX
- 0xdf – HTB: TheFrizz
HackTricks 自動コマンド
Protocol_Name: Kerberos #Protocol Abbreviation if there is one.
Port_Number: 88 #Comma separated if there is more than one.
Protocol_Description: AD Domain Authentication #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for Kerberos
Note: |
Kerberos operates on a principle where it authenticates users without directly managing their access to resources. This is an important distinction because it underlines the protocol's role in security frameworks.
In environments like **Active Directory**, Kerberos is instrumental in establishing the identity of users by validating their secret passwords. This process ensures that each user's identity is confirmed before they interact with network resources. However, Kerberos does not extend its functionality to evaluate or enforce the permissions a user has over specific resources or services. Instead, it provides a secure way of authenticating users, which is a critical first step in the security process.
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-kerberos-88/index.html
Entry_2:
Name: Pre-Creds
Description: Brute Force to get Usernames
Command: nmap -p 88 --script=krb5-enum-users --script-args krb5-enum-users.realm="{Domain_Name}",userdb={Big_Userlist} {IP}
Entry_3:
Name: With Usernames
Description: Brute Force with Usernames and Passwords
Note: consider git clone https://github.com/ropnop/kerbrute.git ./kerbrute -h
Entry_4:
Name: With Creds
Description: Attempt to get a list of user service principal names
Command: GetUserSPNs.py -request -dc-ip {IP} active.htb/svc_tgs
tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks