FreeIPA Pentesting
基本情報
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
ファイルを持っている必要があります。様々な環境変数(
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 の権限で保存される CCACHE ファイルは、Kerberos 資格情報を保存するためのバイナリ形式であり、ユーザーの平文パスワードなしでの認証に重要です。CCACHE チケットの解析は klist
コマンドを使用して行い、有効な CCACHE チケットを再利用するには、KRB5CCNAME
をチケットファイルのパスにエクスポートする必要があります。
Unix キーリング
代わりに、CCACHE チケットを Linux キーリングに保存することで、チケットの管理についてより多くの制御が可能になります。チケットの保存範囲は異なります(KEYRING:name
、KEYRING:process:name
、KEYRING:thread:name
、KEYRING:session:name
、KEYRING:persistent:uidnumber
)、klist
はこれをユーザーのために解析することができます。ただし、Unix キーリングから CCACHE チケットを再利用することは課題があり、Tickey のようなツールが Kerberos チケットを抽出するために利用できます。
Keytab
Kerberos プリンシパルと暗号化キーを含む Keytab ファイルは、プリンシパルのパスワードを必要とせずに有効なチケット発行チケット(TGT)を取得するために重要です。Keytab ファイルからの資格情報の解析と再利用は、klist
のようなユーティリティや KeytabParser などのスクリプトを使用して簡単に実行できます。
チートシート
Linux でチケットを使用する方法に関する詳細情報は、以下のリンクで見つけることができます:
pageLinux Active Directory列挙
ldap や他の バイナリ ツールを使用した 列挙、または FreeIPA サーバーのポート 443 に 接続することによって 列挙 を実行できます。
ホスト、ユーザー、およびグループ
ホスト、ユーザー、および グループ を作成することが可能です。ホストとユーザーはそれぞれ「ホストグループ」と「ユーザーグループ」と呼ばれるコンテナに分類されます。これらは 組織単位(OU)に類似しています。
FreeIPA では、LDAP サーバーは 匿名バインド を許可しており、多くのデータが 未認証 で列挙可能です。これにより、未認証で利用可能なすべてのデータを列挙できます。
さらに情報を得るには、認証済みセッションを使用する必要があります(認証済みセッションの準備方法については、認証セクションを確認してください)。
ドメインに参加したマシンから、インストールされたバイナリを使用してドメインを列挙できます:
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
これは、特定の権限をユーザーやホストに付与するルールです(ホスト、サービス、サービスグループなどのリソースに対して)。
Sudo-Rules
FreeIPAは、sudoルールを介してsudo権限に対する集中制御を可能にします。これらのルールにより、ドメイン内のホストでsudoを使用してコマンドを実行することを許可または制限することができます。攻撃者は、これらのルールセットを調査することで、適用されるホスト、ユーザー、および許可されたコマンドを特定する可能性があります。
ロールベースアクセス制御
ロールはさまざまな特権で構成され、それぞれが一連の権限を含んでいます。これらのロールは、ユーザー、ユーザーグループ、ホスト、ホストグループ、およびサービスに割り当てることができます。たとえば、この構造を示すために、FreeIPAのデフォルトの「ユーザー管理者」ロールを考えてみましょう。
ユーザー管理者
ロールには、次の特権があります:
ユーザー管理者
グループ管理者
ステージユーザー管理者
次のコマンドを使用すると、ロール、特権、および権限を列挙できます:
攻撃シナリオの例
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で確認できます。
参考文献
Last updated