FreeIPA Pentesting

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

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

基本情報

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 ファイルを持っている必要があります。

  • 様々な環境変数(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 でチケットを使用する方法に関する詳細情報は、以下のリンクで見つけることができます:

pageLinux Active Directory

列挙

ldap や他の バイナリ ツールを使用した 列挙、または FreeIPA サーバーのポート 443 に 接続することによって 列挙 を実行できます。

ホスト、ユーザー、およびグループ

ホストユーザー、および グループ を作成することが可能です。ホストとユーザーはそれぞれ「ホストグループ」と「ユーザーグループ」と呼ばれるコンテナに分類されます。これらは 組織単位(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

FreeIPA管理者ユーザーはADドメイン管理者に相当します。

ハッシュ

IPAサーバーrootユーザーはパスワードハッシュにアクセスできます。

  • ユーザーのパスワードハッシュは、「userPassword属性base64で保存されます。このハッシュはSSHA512(古いFreeIPAのバージョン)またはPBKDF2_SHA256である可能性があります。

  • システムがAD統合されている場合、パスワードのNthashは「ipaNTHash」にbase64で保存されます。

これらのハッシュを解読するには:

  • 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-Rules

これは、特定の権限をユーザーやホストに付与するルールです(ホスト、サービス、サービスグループなどのリソースに対して)。

# 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ユーザーの作成

新しいユーザーを root という名前で作成できる場合、そのユーザーに成りすまして 任意のマシンにrootとしてSSHできます。

これはパッチ済みです。

詳細な説明はhttps://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66bで確認できます。

参考文献

AWSハッキングをゼロからヒーローまで学ぶ htARTE(HackTricks AWS Red Team Expert)!

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

Last updated