Translated ['src/linux-hardening/privilege-escalation/nfs-no_root_squash

This commit is contained in:
Translator 2025-02-05 09:39:31 +00:00
parent 5b97932dfd
commit 2c7ac1a673
2 changed files with 27 additions and 27 deletions

View File

@ -2,9 +2,9 @@
# 基本情報の圧縮
NFSは通常特にLinuxでは、ファイルにアクセスするために接続しているクライアントによって示された`uid``gid`を信頼しますKerberosが使用されていない場合しかし、サーバーで**この動作を変更する**ために設定できるいくつかの構成があります:
NFSは通常特にLinuxでは、ファイルにアクセスするために接続しているクライアントによって示された`uid``gid`を信頼しますKerberosが使用されていない場合ただし、サーバーで**この動作を変更する**ために設定できるいくつかの構成があります:
- **`all_squash`**: すべてのアクセスを圧縮し、すべてのユーザーとグループを**`nobody`**65534 unsigned / -2 signedにマッピングします。したがって、誰も`nobody`となり、ユーザーは使用されません。
- **`all_squash`**: すべてのアクセスを圧縮し、すべてのユーザーとグループを**`nobody`**65534 unsigned / -2 signedにマッピングします。したがって、すべての人`nobody`となり、ユーザーは使用されません。
- **`root_squash`/`no_all_squash`**: これはLinuxのデフォルトであり、**uid 0rootのアクセスのみを圧縮**します。したがって、任意の`UID``GID`は信頼されますが、`0``nobody`に圧縮されるため、rootの偽装は不可能です。
- **`no_root_squash`**: この構成が有効になっている場合、rootユーザーさえも圧縮されません。これは、この構成でディレクトリをマウントすると、rootとしてアクセスできることを意味します。
@ -13,7 +13,7 @@ NFSは通常特にLinuxでは、ファイルにアクセスするために
**NFS**に関する詳細情報は、以下を確認してください:
{{#ref}}
/network-services-pentesting/nfs-service-pentesting.md
../../network-services-pentesting/nfs-service-pentesting.md
{{#endref}}
# 権限昇格
@ -21,7 +21,7 @@ NFSは通常特にLinuxでは、ファイルにアクセスするために
## リモートエクスプロイト
オプション1bashを使用して
- **クライアントマシンでそのディレクトリをマウントし、**rootとしてマウントされたフォルダ内に**/bin/bash**バイナリをコピーし、**SUID**権限を与え、**被害者**マシンからそのbashバイナリを実行します。
- **クライアントマシンでそのディレクトリをマウントし、**rootとして**マウントされたフォルダ内に**/bin/bash**バイナリをコピーし、**SUID**権限を与え、**被害者**マシンからそのbashバイナリを実行します。
- NFS共有内でrootになるためには、**`no_root_squash`**がサーバーで構成されている必要があります。
- ただし、有効になっていない場合は、バイナリをNFS共有にコピーし、昇格したいユーザーとしてSUID権限を与えることで、他のユーザーに昇格することができます。
```bash
@ -56,13 +56,13 @@ cd <SHAREDD_FOLDER>
> [!NOTE]
> あなたのマシンから被害者のマシンへの**トンネルを作成できる場合、リモートバージョンを使用してこの特権昇格を悪用することができます**。\
> 次のトリックは、ファイル`/etc/exports`が**IPを示している場合**です。この場合、**リモートエクスプロイトを使用することはできず**、**このトリックを悪用する必要があります**。\
> エクスプロイトが機能するためのもう一つの要件は、**`/etc/export`内のエクスポートが`insecure`フラグを使用している必要があることです**。\
> 次のトリックは、ファイル`/etc/exports`が**IPを示している**場合に関するものです。この場合、**リモートエクスプロイトを使用することはできず**、**このトリックを悪用する必要があります**。\
> エクスプロイトが機能するためのもう一つの要件は、**`/etc/export`内のエクスポートが`insecure`フラグを使用している必要がある**ことです。\
> --_`/etc/export`がIPアドレスを示している場合、このトリックが機能するかどうかはわかりません_--
## 基本情報
このシナリオは、ローカルマシン上のマウントされたNFS共有を悪用し、クライアントがuid/gidを指定できるNFSv3仕様の欠陥を利用して、無許可のアクセスを可能にします。悪用には、NFS RPCコールの偽造を可能にするライブラリ[libnfs](https://github.com/sahlberg/libnfs)を使用します。
このシナリオは、ローカルマシン上のマウントされたNFS共有を悪用し、クライアントがuid/gidを指定できるNFSv3仕様の欠陥を利用して、無許可のアクセスを可能にするものです。悪用には、NFS RPCコールの偽造を可能にするライブラリ[libnfs](https://github.com/sahlberg/libnfs)を使用します。
### ライブラリのコンパイル
@ -97,7 +97,7 @@ LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs:/
```
## ボーナス: NFShellによるステルスファイルアクセス
rootアクセスが取得されると、所有権を変更せずにNFS共有と対話するために、Pythonスクリプト(nfsh.py)が使用されます。このスクリプトは、アクセスされるファイルのuidを一致させることで、権限の問題なしに共有上のファイルと対話できるようにします:
rootアクセスが取得されると、所有権を変更せずにNFS共有と対話するために、Pythonスクリプト(nfsh.py)が使用されます。このスクリプトは、アクセスされるファイルのuidに一致するようにuidを調整し、権限の問題なしに共有上のファイルと対話できるようにします:
```python
#!/usr/bin/env python
# script from https://www.errno.fr/nfs_privesc.html

View File

@ -12,11 +12,11 @@
```
### 認証
このプロトコルの注目すべき点は、通常、組み込みの**認証**や**認可メカニズム**が欠如していることです。代わりに、認可は**ファイルシステム情報**に依存し、サーバーは**クライアント提供のユーザー情報**をファイルシステムが要求する**認可フォーマット**に正確に変換する役割を担っています。主に**UNIX構文**に従います。
このプロトコルの注目すべき点は、通常、組み込みの**認証**や**認可メカニズム**が欠如していることです。代わりに、認可は**ファイルシステム情報**に依存し、サーバーは**クライアント提供のユーザー情報**をファイルシステムが要求する**認可形式**に正確に変換する役割を担っています。主に**UNIX構文**に従います。
認証は一般的に**UNIX `UID`/`GID`識別子とグループメンバーシップ**に依存しています。しかし、クライアントとサーバー間の**`UID`/`GID`マッピング**の不一致が生じるため、サーバーによる追加の検証の余地がありません。さらに、これらの詳細はクライアントによって送信され、サーバーによって信頼されるため、悪意のあるクライアントがより特権のある`uid``gid`を送信して他のユーザーを**なりすます**可能性があります。
**ただし、デフォルトではNFSを使用して`UID` 0rootをなりすますことはできません。この詳細はスカッシングセクションで説明します。**
**ただし、デフォルトではNFSを使用して`UID` 0rootをなりすますことはできません。これについてはスカッシングセクションで詳しく説明します。**
#### ホスト
@ -29,26 +29,26 @@ As you can see, it allows to configure a specific **IP** or **hostname** to acce
### Versions
- **NFSv2**: このバージョンは、さまざまなシステムとの広範な互換性で認識されており、主にUDP上での初期操作によってその重要性を示しています。シリーズの中で**最も古い**ものであり、将来の開発の基礎を築きました。
- **NFSv2**: このバージョンは、さまざまなシステムとの広範な互換性で認識されており、主にUDP上での初期操作によってその重要性を示しています。このシリーズで最も**古い**ものであり、将来の開発の基礎を築きました。
- **NFSv3**: 一連の改善と共に導入されたNFSv3は、前のバージョンを拡張し、可変ファイルサイズをサポートし、改善されたエラーレポート機能を提供しました。進歩にもかかわらず、NFSv2クライアントとの完全な後方互換性には制限がありました。
- **NFSv3**: 一連の改善と共に導入され、NFSv3は前のバージョンを拡張し、可変ファイルサイズをサポートし、エラーレポート機能を改善しました。進歩にもかかわらず、NFSv2クライアントとの完全な後方互換性には制限がありました。
- **NFSv4**: NFSシリーズの画期的なバージョンであるNFSv4は、ネットワーク全体でのファイル共有を現代化するために設計された一連の機能をもたらしました。注目すべき改善点には、**高セキュリティ**のためのKerberosの統合、ファイアウォールを越えて動作し、ポートマッパーなしでインターネット上で動作する能力、アクセス制御リストACLのサポート、状態ベースの操作の導入が含まれます。そのパフォーマンスの向上と状態を持つプロトコルの採用により、NFSv4はネットワークファイル共有技術における重要な進展として際立っています。
- Linuxホストがkerberos認証をサポートするNFSを見つけるのは非常に奇妙です。
- **NFSv4**: NFSシリーズの画期的なバージョンであるNFSv4は、ネットワーク全体でのファイル共有を現代化するために設計された機能のスイートをもたらしました。注目すべき改善点には、**高セキュリティ**のためのKerberosの統合、ファイアウォールを越えて動作し、ポートマッパーなしでインターネット上で動作する能力、アクセス制御リストACLのサポート、状態ベースの操作の導入が含まれます。そのパフォーマンスの向上と状態を持つプロトコルの採用により、NFSv4はネットワークファイル共有技術における重要な進展として際立っています。
- LinuxホストでNFSがkerberos認証をサポートしているのを見つけるのは非常に奇妙です。
各NFSバージョンは、ネットワーク環境の進化するニーズに対応する意図で開発されており、セキュリティ、互換性、パフォーマンスを徐々に向上させています。
各NFSバージョンは、ネットワーク環境の進化するニーズに対応することを目的として開発されており、セキュリティ、互換性、パフォーマンスを徐々に向上させています。
### Squashing
前述のように、NFSは通常、クライアントの`uid``gid`を信頼してファイルにアクセスしますkerberosが使用されていない場合。ただし、サーバーで**この動作を変更する**ために設定できるいくつかの構成があります:
- **all_squash**: すべてのアクセスを圧縮し、すべてのユーザーとグループを**`nobody`**65534 unsigned / -2 signedにマッピングします。したがって、誰もが`nobody`となり、ユーザーは使用されません。
- **root_squash/no_all_squash**: これはLinuxのデフォルトであり、**uid 0rootのアクセスのみを圧縮します**。したがって、任意の`UID``GID`は信頼されますが、`0``nobody`に圧縮されるため、rootの偽装は不可能です。
- **all_squash**: すべてのアクセスを圧縮し、すべてのユーザーとグループを**`nobody`**65534 unsigned / -2 signedにマッピングします。したがって、すべての人が`nobody`であり、ユーザーは使用されません。
- **root_squash/no_all_squash**: これはLinuxのデフォルトであり、**uid 0rootのアクセスのみを圧縮します**。したがって、任意の`UID``GID`は信頼されますが、`0``nobody`に圧縮されるため、rootの偽装は不可能です。
- **no_root_squash**: この構成が有効になっている場合、rootユーザーさえも圧縮されません。これは、この構成でディレクトリをマウントすると、rootとしてアクセスできることを意味します。
### Subtree check
Linuxでのみ利用可能です。man(5) exportsには次のように記載されています「ファイルシステムのサブディレクトリがエクスポートされているが、全体のファイルシステムがエクスポートされていない場合、NFSリクエストが到着するたびに、サーバーはアクセスされたファイルが適切なファイルシステムにあることこれは簡単ですだけでなく、エクスポートされたツリーにあることも確認しなければなりません(これは難しいです)。このチェックはサブツリーのチェックと呼ばれます。」
Linuxでのみ利用可能です。man(5) exportsは次のように述べています「ファイルシステムのサブディレクトリがエクスポートされているが、全体のファイルシステムがエクスポートされていない場合、NFSリクエストが到着するたびに、サーバーはアクセスされたファイルが適切なファイルシステムにあることこれは簡単ですだけでなく、エクスポートされたツリーにあることも確認する必要があります(これは難しいです)。このチェックはサブツリーのチェックと呼ばれます。」
Linuxでは、**`subtree_check`機能はデフォルトで無効**になっています。
@ -56,7 +56,7 @@ Linuxでは、**`subtree_check`機能はデフォルトで無効**になって
### Showmount
これは、**NFSv3サーバーから情報を取得する**ために使用できます。たとえば、**エクスポートのリスト**、これらのエクスポートに**アクセスを許可されている**ユーザー、接続されているクライアント(クライアントがサーバーに通知せずに切断した場合、正確でない可能性があります)などです。
これは、**NFSv3サーバーから情報を取得する**ために使用できます。たとえば、**エクスポート**のリスト、これらのエクスポートに**アクセスを許可されている**ユーザー、接続されているクライアント(クライアントがサーバーに通知せずに切断した場合、正確でない可能性があります)などです。
**NFSv4クライアントは直接/ exportにアクセスし、そこからエクスポートにアクセスしようとします。無効または認可されていない理由で失敗します。**
`showmount`やMetasploitモジュールのようなツールがNFSポートから情報を表示しない場合、それはバージョン3をサポートしていないNFSv4サーバーの可能性があります。
@ -75,11 +75,11 @@ scanner/nfs/nfsmount #Scan NFS mounts and list permissions
```
### nfs_analyze
このツールは [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) から取得でき、NFSサーバーから**マウント**、サポートされているNFSバージョン、接続されたIP、さらには**エクスポートから他のフォルダーにエスケープできるか**や**`no_root_squash`が有効か**どうかなど、多くのデータを取得するために使用できます。
このツールは [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) から取得でき、NFSサーバーから**マウント**、サポートされているNFSバージョン、接続されたIP、さらには**エクスポートから他のフォルダーにエスケープできるか**や**`no_root_squash`が有効か**を確認するための多くのデータを取得するために使用できます。
## Mounting
サーバーが**マウント可能なフォルダー**を知るには、次のように尋ねることができます:
サーバーが**マウント**するために**どのフォルダー**が**利用可能**かを知るには、次のように尋ねることができます:
```bash
showmount -e <IP>
```
@ -100,7 +100,7 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
もちろん、ここでの唯一の問題は、デフォルトではroot`UID` 0を偽装することができないことです。しかし、他のユーザーを偽装することは可能であり、`no_root_squash`が有効になっている場合はrootを偽装することもできます。
- **特定のユーザー****UID**によって)にのみアクセス可能な**ファイルやフォルダ**を含むフォルダをマウントした場合、その**UID**を持つユーザーを**ローカルに作成**し、その**ユーザー**を使用することでファイル/フォルダに**アクセス**できるようになります。
- **特定のユーザー****UID**によって)にのみアクセス可能な**ファイルやフォルダ**を含むフォルダをマウントした場合、その**UID**を持つユーザーを**ローカルに作成**し、その**ユーザー**を使用することでファイル/フォルダに**アクセス**できるようになります。
- [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling)のツール**`fuse_nfs`**は、ファイルにアクセスするために必要なUIDとGIDを常に送信します。
### SUID特権昇格
@ -108,18 +108,18 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
ページを確認してください:
{{#ref}}
/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md
../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md
{{#endref}}
### エクスポートからの脱出
この[素晴らしい記事](https://www.hvs-consulting.de/en/nfs-security-identifying-and-exploiting-misconfigurations/)では、**エクスポートから脱出してファイルシステム内の他のフォルダにアクセスする**ことが可能であることが示されています。
この[素晴らしい記事](https://www.hvs-consulting.de/en/nfs-security-identifying-and-exploiting-misconfigurations/)では、**エクスポートから脱出してファイルシステム内の他のフォルダにアクセスする**ことが可能であることが示されています。
したがって、エクスポートが**ファイルシステム全体**の**サブフォルダ**をエクスポートしている場合、**`subtree_check`**が無効になっていると、エクスポートの外にあるファイルにアクセスすることが可能です。そして、これは**Linuxではデフォルトで無効**になっています。
したがって、エクスポートが**全体のファイルシステム**の**サブフォルダ**をエクスポートしている場合、**`subtree_check`**が無効になっていると、エクスポートの外にあるファイルにアクセスすることが可能です。そして、これは**Linuxではデフォルトで無効**になっています。
例えば、NFSサーバーが`/srv/`をエクスポートしていて、`/var/`が同じファイルシステムにある場合、`/var/log/`からログを読み取ったり、`/var/www/`にウェブシェルを保存したりすることが可能です。
さらに、デフォルトではroot0ユーザーのみが偽装から保護されていることに注意してくださいスカッシュセクションを確認)。ただし、ファイルが**rootによって所有されているがグループが0でない場合、アクセスすることが可能です**。例えば、ファイル`/etc/shadow`はrootによって所有されていますが、グループは`shadow`Debianではgid 42です。したがって、デフォルトで読み取ることが可能です
さらに、デフォルトではroot0ユーザーのみが偽装から保護されていることに注意してくださいSquashセクションを確認)。ただし、ファイルが**rootによって所有されているがグループが0でない場合、アクセスすることが可能です**。例えば、ファイル`/etc/shadow`はrootによって所有されていますが、グループは`shadow`Debianではgid 42です。したがって、デフォルトで読み取ることが可能です
[https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling)のツール**`nfs_analyze`**は、ファイルシステムext4、xfs、btrfsに対するこの攻撃をサポートするために構築されていますv4でも可能であるべきです
@ -140,7 +140,7 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
- **安全でないポートの使用 (`insecure`):** 有効にすると、システムは1024以上のポートを利用できるようになります。この範囲のポートのセキュリティは厳格でない場合があり、リスクが増加します。
- **ネストされたファイルシステムの可視性 (`nohide`):** この設定により、別のファイルシステムがエクスポートされたディレクトリの下にマウントされていても、ディレクトリが可視化されます。各ディレクトリは適切な管理のために独自のエクスポートエントリが必要です。
- **ネストされたファイルシステムの可視性 (`nohide`):** この設定により、別のファイルシステムがエクスポートされたディレクトリの下にマウントされていても、ディレクトリが可視化されます。各ディレクトリは適切な管理のために独自のエクスポートエントリを必要とします。
- **ルートファイルの所有権 (`no_root_squash`):** この設定では、ルートユーザーによって作成されたファイルは元のUID/GID 0を維持し、最小権限の原則を無視し、過剰な権限を付与する可能性があります。