14 KiB
FreeIPA ペンテスト
htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ!
HackTricks をサポートする他の方法:
- HackTricks で企業を宣伝したい場合や HackTricks をPDFでダウンロードしたい場合は SUBSCRIPTION PLANS をチェックしてください!
- 公式PEASS&HackTricksスウォッグを入手する
- The PEASS Familyを発見し、独占的な NFTs のコレクションを見つける
- Discord グループに参加する 💬 Discord group または telegram group に参加するか、Twitter 🐦 @hacktricks_live をフォローする。
- ハッキングトリックを共有するために HackTricks と HackTricks Cloud のGitHubリポジトリに PR を提出する。
基本情報
FreeIPA は、主に Unix 環境向けの Microsoft Windows Active Directory のオープンソース 代替 です。これは、Active Directory に似た管理のための MIT Kerberos Key Distribution Center と完全な LDAP ディレクトリ を組み合わせています。CA&RA 証明書管理のために Dogtag Certificate System を利用し、スマートカードを含む マルチファクタ 認証をサポートしています。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 チケットファイル
通常は /tmp
に 600 の権限で保存される CCACHE ファイルは、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 チケットを再利用することは課題があり、Tickey のようなツールが Kerberos チケットを抽出するために利用できます。
Keytab
Kerberos プリンシパルと暗号化キーを含む Keytab ファイルは、プリンシパルのパスワードを必要とせずに有効なチケット発行チケット(TGT)を取得するために重要です。Keytab ファイルからの資格情報の解析と再利用は、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の管理者ユーザーはADのドメイン管理者に相当します。 {% endhint %}
ハッシュ
IPAサーバーのrootユーザーはパスワードハッシュにアクセスできます。
- ユーザーのパスワードハッシュは、「userPassword」属性にbase64で保存されます。このハッシュはSSHA512(古いFreeIPAのバージョン)またはPBKDF2_SHA256である可能性があります。
- パスワードのNthashは、「ipaNTHash」にbase64で保存されます(システムがADと統合されている場合)。
これらのハッシュをクラックするには:
-
FreeIPAがADと統合されている場合、ipaNTHashは簡単にクラックできます:base64をデコード -> ASCIIヘックスに再エンコード -> 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ルールを介して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
ロールベースのアクセス制御
ロールはさまざまな特権で構成され、それぞれが権限のコレクションを含んでいます。これらのロールは、ユーザー、ユーザーグループ、ホスト、ホストグループ、およびサービスに割り当てることができます。たとえば、この構造を示すために、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
htARTE(HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ こちら!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したい、またはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksのグッズを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
- 💬 Discordグループに参加するか、telegramグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローする
- ハッキングトリックを共有するために、HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出する