hacktricks/linux-hardening/freeipa-pentesting.md

14 KiB
Raw Blame History

FreeIPA ペンテスト

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

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

基本情報

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 ファイルを持っている必要があります。
  • 様々な環境変数(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のデフォルトの「ユーザー管理者」ロールを考えてみましょう。

ロールユーザー管理者には、以下の特権があります:

  • ユーザー管理者
  • グループ管理者
  • ステージユーザー管理者

以下のコマンドを使用すると、ロール、特権、および権限を列挙することができます:

# 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をサポートする他の方法: