hacktricks/linux-hardening/freeipa-pentesting.md

14 KiB
Raw Blame History

FreeIPA ペンテスト

htARTEHackTricks AWS Red Team Expert を通じてゼロからヒーローまでAWSハッキングを学ぶ

HackTricks をサポートする他の方法:

基本情報

FreeIPA は、主に Unix 環境向けの Microsoft Windows Active Directory のオープンソース 代替 です。これは、Active Directory に似た管理のための MIT Kerberos Key Distribution Center と完全な LDAP ディレクトリ を組み合わせています。CARA 証明書管理のために Dogtag Certificate System を利用し、スマートカードを含む マルチファクタ 認証をサポートしています。Unix 認証プロセスには SSSD が統合されています。

フィンガープリント

ファイルと環境変数

  • /etc/krb5.conf にあるファイルには、ドメインへの登録に必要な Kerberos クライアント情報が格納されています。これには KDC や管理サーバーの場所、デフォルト設定、マッピングが含まれます。
  • IPA クライアントとサーバーのシステム全体のデフォルト設定は、/etc/ipa/default.conf にあるファイルに設定されています。
  • ドメイン内のホストは、認証プロセスに /etc/krb5.keytab にある krb5.keytab ファイルを持っている必要があります。
  • 様々な環境変数(KRB5CCNAMEKRB5_KTNAMEKRB5_CONFIGKRB5_KDC_PROFILEKRB5RCACHETYPEKRB5RCACHEDIRKRB5_TRACEKRB5_CLIENT_KTNAMEKPROP_PORTが、Kerberos 認証に関連する特定のファイルや設定を指すために使用されます。

バイナリ

ipakdestroykinitklistkpasswdksukswitchkvno などのツールは、FreeIPA ドメインの管理、Kerberos チケットの処理、パスワードの変更、サービスチケットの取得など、さまざまな機能を提供するために中心的な役割を果たします。

ネットワーク

典型的な FreeIPA サーバーのセットアップを示す図が提供されています。

認証

FreeIPA における Kerberos を利用した認証は、Active Directory と同様です。ドメインリソースへのアクセスには有効な Kerberos チケットが必要であり、これは FreeIPA ドメインの構成に応じてさまざまな場所に保存されます。

CCACHE チケットファイル

通常は /tmp600 の権限で保存される CCACHE ファイルは、Kerberos 資格情報を保存するためのバイナリ形式であり、ポータビリティがあるため、ユーザーの平文パスワードなしでの認証に重要です。CCACHE チケットの解析は klist コマンドを使用して行い、有効な CCACHE チケットを再利用するには、KRB5CCNAME をチケットファイルのパスにエクスポートする必要があります。

Unix キーリング

代わりに、CCACHE チケットを Linux キーリングに保存することもでき、チケットの管理についてより多くの制御を提供します。チケットの保存範囲は異なります(KEYRING:nameKEYRING:process:nameKEYRING:thread:nameKEYRING:session:nameKEYRING: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で確認できます。

参考文献

htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ こちら

HackTricksをサポートする他の方法: