hacktricks/linux-hardening/freeipa-pentesting.md

212 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FreeIPA ペンテスト
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
- **HackTricks で企業を宣伝**したい場合や **HackTricks をPDFでダウンロード**したい場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
- [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
- **Discord グループ**に参加する 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) または [**telegram group**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live) をフォローする。
- **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリに PR を提出する。
</details>
## 基本情報
FreeIPA は、主に Unix 環境向けの Microsoft Windows Active Directory のオープンソース **代替** です。これは、Active Directory に似た管理のための MIT **Kerberos** Key Distribution Center と完全な **LDAP ディレクトリ** を組み合わせています。CARA 証明書管理のために 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 でチケットを使用する方法に関する詳細情報は、次のリンクで見つけることができます:
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md](privilege-escalation/linux-active-directory.md)
{% endcontent-ref %}
## 列挙
{% hint style="warning" %}
**ldap** や他の **バイナリ** ツールを使用した **列挙**、または FreeIPA サーバーのポート 443 に **接続する**ことによって **列挙** を実行できます。
{% endhint %}
### ホスト、ユーザー、およびグループ <a href="#4b3b" id="4b3b"></a>
**ホスト**、**ユーザー**、および **グループ** を作成することが可能です。ホストとユーザーはそれぞれ「**ホストグループ**」と「**ユーザーグループ**」と呼ばれるコンテナに分類されます。これらは **組織単位**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
```
{% hint style="info" %}
**FreeIPA**の**管理者**ユーザーは**AD**の**ドメイン管理者**に相当します。
{% endhint %}
### ハッシュ <a href="#482b" id="482b"></a>
**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を使用してクラックできます。
<figure><img src="../.gitbook/assets/image (33).png" alt=""><figcaption></figcaption></figure>
ハッシュを抽出するには、**FreeIPAサーバー**で**root**である必要があり、そこで**`dbscan`**ツールを使用してそれらを抽出できます:
<figure><img src="../.gitbook/assets/image (196).png" alt=""><figcaption></figcaption></figure>
### HBACルール <a href="#482b" id="482b"></a>
これは、特定の権限をユーザーやホストに付与するルールです(ホスト、サービス、サービスグループなどのリソースに対して)。
```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ルールを介して**sudo権限**を中央集権的に制御することを可能にします。これらのルールにより、ドメイン内のホストで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
```
### ロールベースのアクセス制御
**ロール**はさまざまな**特権**で構成され、それぞれが**権限**のコレクションを含んでいます。これらのロールは、ユーザー、ユーザー**グループ**、**ホスト**、ホストグループ、およびサービスに割り当てることができます。たとえば、この構造を示すために、FreeIPAのデフォルトの「ユーザー管理者」ロールを考えてみましょう。
`User Administrator`ロールには、次の特権があります:
- **ユーザー管理者**
- **グループ管理者**
- **ステージユーザー管理者**
次のコマンドを使用して、ロール、特権、および権限を列挙することができます:
```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](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) に、いくつかの権限を悪用してドメインを侵害する簡単な例があります。
### Linikatz/LinikatzV2
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
## 特権昇格
### ~~rootユーザーの作成~~
{% hint style="warning" %}
新しいユーザーを`root`という名前で作成できる場合、そのユーザーに成りすまして、**任意のマシンにrootとしてSSHできます。**
**これはパッチ済みです。**
{% endhint %}
詳細な説明は[https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)で確認できます。
## 参考文献
* [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
* [https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a](https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a)
* [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1)
* [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ)
<details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>こちら</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)をフォローする
* ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する
</details>