14 KiB
FreeIPA ペンテスト
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 を提出する
基本情報
FreeIPA は、Microsoft Windows Active Directory のオープンソース 代替 として提示され、統合管理のために主に Unix 環境で利用されています。これには、Active Directory に類似した MIT Kerberos Key Distribution Center によってバックアップされた完全な LDAP ディレクトリ が備わっています。Dogtag Certificate System は CA & RA 証明書の管理に使用され、スマートカードを含む マルチファクタ認証機能を可能にします。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を使用してクラックできます。
![](/Mirrors/hacktricks/media/commit/d24d1f5a7c83f37063628cb777a7c95ac1edea23/.gitbook/assets/image%20%2833%29.png)
ハッシュを抽出するには、FreeIPAサーバーでrootである必要があり、そこで**dbscan
**ツールを使用してそれらを抽出できます:
![](/Mirrors/hacktricks/media/commit/d24d1f5a7c83f37063628cb777a7c95ac1edea23/.gitbook/assets/image%20%28196%29.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ルールを介して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のデフォルトの「ユーザー管理者」ロールを考えてみましょう。
ロールユーザー管理者
には、以下の特権があります:
- ユーザー管理者
- グループ管理者
- ステージユーザー管理者
以下のコマンドを使用すると、ロール、特権、および権限を列挙することができます:
# 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を提出する。