FreeIPA Pentesting
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
FreeIPAは、主にUnix環境向けのMicrosoft Windows Active Directoryのオープンソースの代替です。これは、Active Directoryに類似した管理のために、完全なLDAPディレクトリとMIT Kerberosキー配布センターを組み合わせています。CAおよびRA証明書管理のためにDogtag 証明書システムを利用し、スマートカードを含む多要素認証をサポートしています。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**の権限で保存され、Kerberos資格情報を保存するためのバイナリ形式であり、ユーザーの平文パスワードなしで認証を行うために重要です。CCACHEチケットの解析はklist
コマンドを使用して行うことができ、有効なCCACHEチケットを再利用するには、KRB5CCNAME
をチケットファイルのパスにエクスポートします。
代わりに、CCACHEチケットはLinuxキーレングに保存でき、チケット管理に対するより多くの制御を提供します。チケットストレージの範囲は(KEYRING:name
、KEYRING:process:name
、KEYRING:thread:name
、KEYRING:session:name
、KEYRING:persistent:uidnumber
)異なり、klist
はユーザーのためにこの情報を解析できます。しかし、UnixキーレングからCCACHEチケットを再利用することは課題を伴う場合があり、Kerberosチケットを抽出するためのTickeyのようなツールが利用可能です。
Kerberosプリンシパルと暗号化されたキーを含むキータブファイルは、プリンシパルのパスワードを必要とせずに有効なチケット付与チケット(TGT)を取得するために重要です。キータブファイルからの資格情報の解析と再利用は、klist
のようなユーティリティやKeytabParserのようなスクリプトを使用して簡単に行えます。
Linuxでのチケットの使用方法についての詳細は、以下のリンクで確認できます:
Linux Active Directoryldapや他のバイナリツールを使用して列挙を行うことができるか、FreeIPAサーバーのポート443に接続することができます。
ホスト、ユーザー、およびグループを作成することが可能です。ホストとユーザーはそれぞれ「ホストグループ」および「ユーザーグループ」と呼ばれるコンテナに整理されます。これらは組織単位(OU)に似ています。
FreeIPAではデフォルトで、LDAPサーバーは匿名バインドを許可しており、大量のデータが認証なしで列挙可能です。これにより、認証なしで利用可能なすべてのデータを列挙できます:
詳細情報を取得するには、認証されたセッションを使用する必要があります(認証セクションを確認して、認証されたセッションを準備する方法を学んでください)。
ドメインに参加しているマシンから、インストールされたバイナリを使用してドメインを列挙することができます:
FreeIPAのadminユーザーは、ADのdomain 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
**を使用してそれらを抽出できます:
これは、リソース(ホスト、サービス、サービスグループなど)に対してユーザーまたはホストに特定の権限を付与するルールです。
FreeIPAは、sudo-rulesを介してsudo権限の集中管理を可能にします。これらのルールは、ドメイン内のホストでsudoを使用してコマンドを実行することを許可または制限します。攻撃者は、これらのルールセットを調査することで、適用可能なホスト、ユーザー、および許可されたコマンドを特定する可能性があります。
ロールは、さまざまな特権で構成されており、それぞれが権限のコレクションを含んでいます。これらのロールは、ユーザー、ユーザーグループ、ホスト、ホストグループ、およびサービスに割り当てることができます。たとえば、FreeIPAのデフォルトの「ユーザー管理者」ロールを考えて、この構造を例示します。
ロールUser Administrator
には、次の特権があります:
ユーザー管理者
グループ管理者
ステージユーザー管理者
次のコマンドを使用すると、ロール、特権、および権限を列挙することができます:
https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e では、ドメインを侵害するためにいくつかの権限を悪用する簡単な例を見つけることができます。
もし root
という名前の新しいユーザーを作成できるなら、彼になりすますことができ、rootとして任意のマシンにSSH接続することができます。
これはパッチが当てられました。
詳細な説明は https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b で確認できます。
AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、練習する:HackTricks Training GCP Red Team Expert (GRTE)