FreeIPA Pentesting
Reading time: 13 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を提出してハッキングトリックを共有してください。
基本情報
FreeIPAは、主にUnix環境向けのMicrosoft Windows Active Directoryのオープンソース代替です。これは、Active Directoryに類似した管理のために、完全なLDAPディレクトリとMIT Kerberosキー配布センターを組み合わせています。CAおよびRA証明書管理のためにDogtag 証明書システムを利用し、スマートカードを含む多要素認証をサポートしています。SSSDはUnix認証プロセスのために統合されています。
フィンガープリント
ファイルと環境変数
/etc/krb5.conf
にあるファイルは、ドメインへの登録に必要なKerberosクライアント情報が保存されている場所です。これにはKDCと管理サーバーの場所、デフォルト設定、およびマッピングが含まれます。- IPAクライアントとサーバーのシステム全体のデフォルトは、
/etc/ipa/default.conf
にあるファイルで設定されています。 - ドメイン内のホストは、認証プロセスのために
/etc/krb5.keytab
にkrb5.keytab
ファイルを持っている必要があります。 - 様々な環境変数(
KRB5CCNAME
、KRB5_KTNAME
、KRB5_CONFIG
、KRB5_KDC_PROFILE
、KRB5RCACHETYPE
、KRB5RCACHEDIR
、KRB5_TRACE
、KRB5_CLIENT_KTNAME
、KPROP_PORT
)は、Kerberos認証に関連する特定のファイルや設定を指し示すために使用されます。
バイナリ
ipa
、kdestroy
、kinit
、klist
、kpasswd
、ksu
、kswitch
、kvno
などのツールは、FreeIPAドメインの管理、Kerberosチケットの処理、パスワードの変更、サービスチケットの取得などの機能において重要です。
ネットワーク
典型的なFreeIPAサーバーのセットアップを示す図が提供されています。
認証
FreeIPAにおける認証は、Kerberosを利用してActive Directoryのそれを反映しています。ドメインリソースへのアクセスには、有効なKerberosチケットが必要であり、これはFreeIPAドメインの設定に応じて様々な場所に保存されます。
CCACHEチケットファイル
CCACHEファイルは、通常**/tmp
に600**の権限で保存され、Kerberos資格情報を保存するためのバイナリ形式であり、ユーザーの平文パスワードなしで認証を行うために重要です。CCACHEチケットの解析はklist
コマンドを使用して行うことができ、有効なCCACHEチケットを再利用するには、KRB5CCNAME
をチケットファイルのパスにエクスポートします。
Unixキーレング
代わりに、CCACHEチケットはLinuxキーレングに保存でき、チケット管理に対するより多くの制御を提供します。チケットストレージの範囲は(KEYRING:name
、KEYRING:process:name
、KEYRING:thread:name
、KEYRING:session:name
、KEYRING:persistent:uidnumber
)異なり、klist
はユーザーのためにこの情報を解析できます。しかし、UnixキーレングからCCACHEチケットを再利用することは課題を伴う場合があり、Kerberosチケットを抽出するためのTickeyのようなツールが利用可能です。
キータブ
Kerberosプリンシパルと暗号化されたキーを含むキータブファイルは、プリンシパルのパスワードを必要とせずに有効なチケット付与チケット(TGT)を取得するために重要です。キータブファイルからの資格情報の解析と再利用は、klist
のようなユーティリティやKeytabParserのようなスクリプトを使用して簡単に行えます。
チートシート
Linuxでのチケットの使用方法についての詳細は、以下のリンクで確認できます:
列挙
warning
ldapや他のバイナリツールを使用して列挙を行うことができるほか、FreeIPAサーバーのポート443に接続することも可能です。
ホスト、ユーザー、およびグループ
ホスト、ユーザー、およびグループを作成することが可能です。ホストとユーザーはそれぞれ“ホストグループ”と“ユーザーグループ”と呼ばれるコンテナに整理されます。これらは組織単位(OU)に似ています。
FreeIPAでは、LDAPサーバーはデフォルトで匿名バインドを許可しており、大量のデータが認証なしで列挙可能です。これにより、認証なしで利用可能なすべてのデータを列挙できます:
ldapsearch -x
詳細情報を取得するには、認証されたセッションを使用する必要があります(認証セクションを確認して、認証されたセッションの準備方法を学んでください)。
# Get all users of domain
ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local"
# Get users groups
ldapsearch -Y gssapi -b "cn=groups,cn=accounts,dc=domain_name,dc=local"
# Get all the hosts
ldapsearch -Y gssapi -b "cn=computers,cn=accounts,dc=domain_name,dc=local"
# Get hosts groups
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
ドメインに参加しているマシンから、インストールされたバイナリを使用してドメインを列挙することができます:
ipa user-find
ipa usergroup-find
ipa host-find
ipa host-group-find
-------------------
ipa user-show <username> --all
ipa usergroup-show <user group> --all
ipa host-find <host> --all
ipa hostgroup-show <host group> --all
tip
FreeIPAのadminユーザーは、ADのdomain adminsに相当します。
ハッシュ
IPAサーバーのrootユーザーは、パスワードのハッシュにアクセスできます。
- ユーザーのパスワードハッシュは、“userPassword”属性にbase64として保存されています。このハッシュはSSHA512(古いバージョンのFreeIPA)またはPBKDF2_SHA256である可能性があります。
- システムがADと統合されている場合、パスワードのNthashは“ipaNTHash”にbase64として保存されます。
これらのハッシュをクラックするには:
• FreeIPAがADと統合されている場合、ipaNTHashは簡単にクラックできます:base64をデコードして、ASCIIの16進数に再エンコードし、John The Ripperまたはhashcatを使用して迅速にクラックできます。
• 古いバージョンのFreeIPAが使用されている場合、SSHA512が使用されます:base64をデコードして、SSHA512のハッシュを見つけ、John The Ripperまたはhashcatを使用してクラックできます。
• 新しいバージョンのFreeIPAが使用されている場合、PBKDF2_SHA256が使用されます:base64をデコードして、PBKDF2_SHA256を見つけます。その長さは256バイトです。Johnは256ビット(32バイト)で動作できます。SHA-265が擬似乱数関数として使用され、ブロックサイズは32バイトです。PBKDF2_SHA256ハッシュの最初の256ビットのみを使用できます。John The Ripperまたはhashcatを使用してクラックできます。
.png)
ハッシュを抽出するには、FreeIPAサーバーのrootである必要があります。そこで、ツール**dbscan
**を使用して抽出できます:
.png)
HBACルール
特定のリソース(ホスト、サービス、サービスグループなど)に対してユーザーまたはホストに特定の権限を付与するルールです。
# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local"
# Using ipa
ipa hbacrule-find
# Show info of rule
ipa hbacrule-show <hbacrule> --all
Sudo-Rules
FreeIPA は sudo permissions に対する中央集権的な制御を sudo-rules を通じて可能にします。これらのルールは、ドメイン内のホストで sudo を使用してコマンドを実行することを許可または制限します。攻撃者は、これらのルールセットを調べることで、適用可能なホスト、ユーザー、および許可されたコマンドを特定する可能性があります。
# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local"
# Using ipa
ipa sudorule-find
# Show info of rule
ipa sudorule-show <sudorule> --all
ロールベースアクセス制御
A role is comprised of various privileges, each of which encompasses a collection of permissions. These roles can be assigned to Users, User Groups, Hosts, Host Groups, and Services. For instance, consider the default “User Administrator” role in FreeIPA to exemplify this structure.
The role User Administrator
has these privileges:
- User Administrators
- Group Administrators
- Stage User Administrators
With the following commands it's possibel to enumerate the roles, privileges and permissions:
# Using ldap
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
# Using ipa binary
ipa role-find
ipa role-show <role> --all
ipa privilege-find
ipa privilege-show <privilege> --all
ipa permission-find
ipa permission-show <permission> --all
攻撃シナリオの例
https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e では、ドメインを侵害するためにいくつかの権限を悪用する方法の簡単な例を見つけることができます。
Linikatz/LinikatzV2
プライバシー昇格
rootユーザーの作成
warning
root
という名前の新しいユーザーを作成できる場合、 彼を偽装することができ、rootとして任意のマシンにSSH接続できるようになります。
これはパッチされています。
https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b で詳細な説明を確認できます。
参考文献
- https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
- https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a
- https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1
- https://www.youtube.com/watch?v=9dOu-7BTwPQ
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を提出してハッキングトリックを共有してください。