FreeIPA Pentesting

Reading time: 13 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

FreeIPAは、主にUnix環境向けのMicrosoft Windows Active Directoryのオープンソース代替です。これは、Active Directoryに類似した管理のために、完全なLDAPディレクトリとMIT Kerberosキー配布センターを組み合わせています。CAおよびRA証明書管理のためにDogtag 証明書システムを利用し、スマートカードを含む多要素認証をサポートしています。SSSDはUnix認証プロセスのために統合されています。

フィンガープリント

ファイルと環境変数

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

バイナリ

ipakdestroykinitklistkpasswdksukswitchkvnoなどのツールは、FreeIPAドメインの管理、Kerberosチケットの処理、パスワードの変更、サービスチケットの取得などの機能において重要です。

ネットワーク

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

認証

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

CCACHEチケットファイル

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

Unixキーレング

代わりに、CCACHEチケットはLinuxキーレングに保存でき、チケット管理に対するより多くの制御を提供します。チケットストレージの範囲は(KEYRING:nameKEYRING:process:nameKEYRING:thread:nameKEYRING:session:nameKEYRING:persistent:uidnumber)異なり、klistはユーザーのためにこの情報を解析できます。しかし、UnixキーレングからCCACHEチケットを再利用することは課題を伴う場合があり、Kerberosチケットを抽出するためのTickeyのようなツールが利用可能です。

キータブ

Kerberosプリンシパルと暗号化されたキーを含むキータブファイルは、プリンシパルのパスワードを必要とせずに有効なチケット付与チケット(TGT)を取得するために重要です。キータブファイルからの資格情報の解析と再利用は、klistのようなユーティリティやKeytabParserのようなスクリプトを使用して簡単に行えます。

チートシート

Linuxでのチケットの使用方法についての詳細は、以下のリンクで確認できます:

Linux Active Directory

列挙

warning

ldapや他のバイナリツールを使用して列挙を行うことができるほか、FreeIPAサーバーのポート443に接続することも可能です。

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

ホストユーザー、およびグループを作成することが可能です。ホストとユーザーはそれぞれ“ホストグループ”と“ユーザーグループ”と呼ばれるコンテナに整理されます。これらは組織単位(OU)に似ています。

FreeIPAでは、LDAPサーバーはデフォルトで匿名バインドを許可しており、大量のデータが認証なしで列挙可能です。これにより、認証なしで利用可能なすべてのデータを列挙できます:

ldapsearch -x

詳細情報を取得するには、認証されたセッションを使用する必要があります(認証セクションを確認して、認証されたセッションの準備方法を学んでください)。

bash
# 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"

ドメインに参加しているマシンから、インストールされたバイナリを使用してドメインを列挙することができます:

bash
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

tip

FreeIPAadminユーザーは、ADdomain adminsに相当します。

ハッシュ

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

  • ユーザーのパスワードハッシュは、“userPassword属性base64として保存されています。このハッシュはSSHA512(古いバージョンのFreeIPA)またはPBKDF2_SHA256である可能性があります。
  • システムがAD統合されている場合、パスワードのNthashは“ipaNTHash”にbase64として保存されます。

これらのハッシュをクラックするには:

• FreeIPAがADと統合されている場合、ipaNTHashは簡単にクラックできます:base64デコードして、ASCIIの16進数に再エンコードし、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ルール

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

bash
# 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 permissions に対する中央集権的な制御を sudo-rules を通じて可能にします。これらのルールは、ドメイン内のホストで sudo を使用してコマンドを実行することを許可または制限します。攻撃者は、これらのルールセットを調べることで、適用可能なホスト、ユーザー、および許可されたコマンドを特定する可能性があります。

bash
# 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

ロールベースアクセス制御

A role is comprised of various privileges, each of which encompasses a collection of permissions. These roles can be assigned to Users, User Groups, Hosts, Host Groups, and Services. For instance, consider the default “User Administrator” role in FreeIPA to exemplify this structure.

The role User Administrator has these privileges:

  • User Administrators
  • Group Administrators
  • Stage User Administrators

With the following commands it's possibel to enumerate the roles, privileges and permissions:

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

warning

rootという名前の新しいユーザーを作成できる場合、 彼を偽装することができ、rootとして任意のマシンにSSH接続できるようになります。

これはパッチされています。

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

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする