14 KiB
FreeIPA Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
基本情報
FreeIPAは、主にUnix環境向けのMicrosoft Windows Active Directoryのオープンソースの代替です。これは、Active Directoryに類似した管理のために、完全なLDAPディレクトリとMIT Kerberosキー配布センターを組み合わせています。CAおよびRA証明書管理のためにDogtag 証明書システムを利用し、スマートカードを含む多要素認証をサポートしています。Unix認証プロセスのためにSSSDが統合されています。
フィンガープリント
ファイルと環境変数
/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でのチケットの使用方法についての詳細は、以下のリンクで確認できます:
{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}
列挙
{% hint style="warning" %} ldapや他のバイナリツールを使用して列挙を行うことができるか、FreeIPAサーバーのポート443に接続することができます。 {% endhint %}
ホスト、ユーザー、およびグループ
ホスト、ユーザー、およびグループを作成することが可能です。ホストとユーザーはそれぞれ「ホストグループ」および「ユーザーグループ」と呼ばれるコンテナに整理されます。これらは組織単位(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
{% hint style="info" %} FreeIPAのadminユーザーは、ADのdomain adminsに相当します。 {% endhint %}
ハッシュ
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がクラックするのを助けてくれます
ハッシュを抽出するには、FreeIPAサーバーのrootである必要があります。そこで、ツール**dbscan
**を使用してそれらを抽出できます:
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-rulesを介してsudo権限の集中管理を可能にします。これらのルールは、ドメイン内のホストで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
Role-Based Access Control
ロールは、さまざまな特権で構成されており、それぞれが権限のコレクションを含んでいます。これらのロールは、ユーザー、ユーザーグループ、ホスト、ホストグループ、およびサービスに割り当てることができます。たとえば、FreeIPAのデフォルトの「ユーザー管理者」ロールを考えて、この構造を例示します。
ロールUser Administrator
には、次の特権があります:
- ユーザー管理者
- グループ管理者
- ステージユーザー管理者
次のコマンドを使用すると、ロール、特権、および権限を列挙することができます:
# 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ユーザーの作成
{% hint style="warning" %}
もし root
という名前の新しいユーザーを作成できるなら、彼になりすますことができ、rootとして任意のマシンにSSH接続することができます。
これはパッチが当てられました。 {% endhint %}
詳細な説明は 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
{% hint style="success" %}
AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、練習する:HackTricks Training GCP Red Team Expert (GRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- ハッキングのトリックを共有するには、HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してください。