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 1ae4867c7b
commit 91fbef409c
2 changed files with 26 additions and 26 deletions

View File

@ -5,15 +5,15 @@
NFS зазвичай (особливо в linux) довіряє вказаним `uid` та `gid`, які надає клієнт, що підключається для доступу до файлів (якщо не використовується kerberos). Однак є деякі конфігурації, які можна налаштувати на сервері, щоб **змінити цю поведінку**: NFS зазвичай (особливо в linux) довіряє вказаним `uid` та `gid`, які надає клієнт, що підключається для доступу до файлів (якщо не використовується kerberos). Однак є деякі конфігурації, які можна налаштувати на сервері, щоб **змінити цю поведінку**:
- **`all_squash`**: Він зменшує всі доступи, відображаючи кожного користувача та групу на **`nobody`** (65534 беззнаковий / -2 знаковий). Таким чином, всі є `nobody`, і жоден користувач не використовується. - **`all_squash`**: Він зменшує всі доступи, відображаючи кожного користувача та групу на **`nobody`** (65534 беззнаковий / -2 знаковий). Таким чином, всі є `nobody`, і жоден користувач не використовується.
- **`root_squash`/`no_all_squash`**: Це за замовчуванням в Linux і **лише зменшує доступ з uid 0 (root)**. Таким чином, будь-який `UID` та `GID` довіряються, але `0` зменшується до `nobody` (тому жодна імперсонація root не можлива). - **`root_squash`/`no_all_squash`**: Це за замовчуванням в Linux і **зменшує доступ лише з uid 0 (root)**. Таким чином, будь-який `UID` та `GID` довіряються, але `0` зменшується до `nobody` (тому жодна імперсонація root не можлива).
- **``no_root_squash`**: Ця конфігурація, якщо увімкнена, навіть не зменшує користувача root. Це означає, що якщо ви змонтуєте каталог з цією конфігурацією, ви зможете отримати до нього доступ як root. - **``no_root_squash`**: Ця конфігурація, якщо увімкнена, навіть не зменшує користувача root. Це означає, що якщо ви змонтуєте каталог з цією конфігурацією, ви зможете отримати до нього доступ як root.
У файлі **/etc/exports**, якщо ви знайдете якийсь каталог, який налаштований як **no_root_squash**, тоді ви можете **доступитися** до нього **як клієнт** і **записувати всередині** цього каталогу **так, ніби** ви були локальним **root** машини. У файлі **/etc/exports**, якщо ви знайдете якийсь каталог, налаштований як **no_root_squash**, тоді ви можете **доступитися** до нього **як клієнт** і **записувати всередині** цього каталогу **так, ніби** ви були локальним **root** машини.
Для отримання додаткової інформації про **NFS** перевірте: Для отримання додаткової інформації про **NFS** перевірте:
{{#ref}} {{#ref}}
/network-services-pentesting/nfs-service-pentesting.md ../../network-services-pentesting/nfs-service-pentesting.md
{{#endref}} {{#endref}}
# Privilege Escalation # Privilege Escalation
@ -21,7 +21,7 @@ NFS зазвичай (особливо в linux) довіряє вказаним
## Remote Exploit ## Remote Exploit
Опція 1, використовуючи bash: Опція 1, використовуючи bash:
- **Монтування цього каталогу** на клієнтській машині, і **як root копіювання** всередину змонтованої папки бінарного файлу **/bin/bash** та надання йому **SUID** прав, і **виконання з жертви** цього бінарного файлу bash. - **Монтування цього каталогу** на клієнтській машині та **як root копіювання** всередину змонтованої папки бінарного файлу **/bin/bash** та надання йому **SUID** прав, а також **виконання з жертви** машини цього бінарного файлу bash.
- Зверніть увагу, що для того, щоб бути root всередині NFS спільного доступу, **`no_root_squash`** має бути налаштовано на сервері. - Зверніть увагу, що для того, щоб бути root всередині NFS спільного доступу, **`no_root_squash`** має бути налаштовано на сервері.
- Однак, якщо не увімкнено, ви можете підвищити привілеї до іншого користувача, скопіювавши бінарний файл до NFS спільного доступу та надавши йому дозвіл SUID як користувачу, до якого ви хочете підвищити привілеї. - Однак, якщо не увімкнено, ви можете підвищити привілеї до іншого користувача, скопіювавши бінарний файл до NFS спільного доступу та надавши йому дозвіл SUID як користувачу, до якого ви хочете підвищити привілеї.
```bash ```bash
@ -37,8 +37,8 @@ cd <SHAREDD_FOLDER>
./bash -p #ROOT shell ./bash -p #ROOT shell
``` ```
Опція 2 з використанням скомпільованого коду на C: Опція 2 з використанням скомпільованого коду на C:
- **Монтування цього каталогу** на клієнтській машині, і **як root копіювання** всередину змонтованої папки нашого скомпільованого вантажу, який зловживає правами SUID, надання йому **прав SUID**, і **виконання з жертви** машини цього бінарного файлу (ви можете знайти тут деякі [C SUID вантажі](payloads-to-execute.md#c)). - **Монтування цього каталогу** на клієнтській машині, і **як root копіювання** всередину змонтованої папки нашого скомпільованого корисного навантаження, яке зловживає правами SUID, надання йому **прав SUID**, і **виконання з жертви** машини цього бінарного файлу (ви можете знайти тут деякі [C SUID payloads](payloads-to-execute.md#c)).
- Ті ж обмеження, що й раніше - Ті ж обмеження, що й раніше.
```bash ```bash
#Attacker, as root user #Attacker, as root user
gcc payload.c -o payload gcc payload.c -o payload
@ -57,12 +57,12 @@ cd <SHAREDD_FOLDER>
> [!NOTE] > [!NOTE]
> Зверніть увагу, що якщо ви можете створити **тунель з вашої машини до машини жертви, ви все ще можете використовувати віддалену версію для експлуатації цього підвищення привілеїв, тунелюючи необхідні порти**.\ > Зверніть увагу, що якщо ви можете створити **тунель з вашої машини до машини жертви, ви все ще можете використовувати віддалену версію для експлуатації цього підвищення привілеїв, тунелюючи необхідні порти**.\
> Наступний трюк стосується випадку, коли файл `/etc/exports` **вказує на IP**. У цьому випадку ви **не зможете використовувати** в жодному випадку **віддалену експлуатацію** і вам потрібно буде **зловживати цим трюком**.\ > Наступний трюк стосується випадку, коли файл `/etc/exports` **вказує на IP**. У цьому випадку ви **не зможете використовувати** в жодному випадку **віддалену експлуатацію** і вам потрібно буде **зловживати цим трюком**.\
> Інша необхідна умова для роботи експлуатації полягає в тому, що **експорт всередині `/etc/export`** **повинен використовувати прапор `insecure`**.\ > Ще однією необхідною умовою для роботи експлуатації є те, що **експорт всередині `/etc/export`** **повинен використовувати прапор `insecure`**.\
> --_Я не впевнений, що якщо `/etc/export` вказує на IP-адресу, цей трюк спрацює_-- > --_Я не впевнений, що якщо `/etc/export` вказує на IP-адресу, цей трюк спрацює_--
## Basic Information ## Basic Information
Сценарій передбачає експлуатацію змонтованого NFS-спільного ресурсу на локальній машині, використовуючи недолік у специфікації NFSv3, який дозволяє клієнту вказувати свій uid/gid, що потенційно дозволяє несанкціонований доступ. Експлуатація передбачає використання [libnfs](https://github.com/sahlberg/libnfs), бібліотеки, яка дозволяє підробляти виклики NFS RPC. Сценарій передбачає експлуатацію змонтованого NFS-спільного ресурсу на локальній машині, використовуючи недолік у специфікації NFSv3, який дозволяє клієнту вказувати свій uid/gid, що потенційно дозволяє несанкціонований доступ. Експлуатація передбачає використання [libnfs](https://github.com/sahlberg/libnfs), бібліотеки, яка дозволяє підробляти NFS RPC виклики.
### Compiling the Library ### Compiling the Library
@ -95,7 +95,7 @@ LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs:/
/mnt/share/a.out /mnt/share/a.out
#root #root
``` ```
## Bonus: NFShell для прихованого доступу до файлів ## Бонус: NFShell для прихованого доступу до файлів
Once root access is obtained, to interact with the NFS share without changing ownership (to avoid leaving traces), a Python script (nfsh.py) is used. This script adjusts the uid to match that of the file being accessed, allowing for interaction with files on the share without permission issues: Once root access is obtained, to interact with the NFS share without changing ownership (to avoid leaving traces), a Python script (nfsh.py) is used. This script adjusts the uid to match that of the file being accessed, allowing for interaction with files on the share without permission issues:
```python ```python

View File

@ -12,7 +12,7 @@
``` ```
### Аутентифікація ### Аутентифікація
Помітним аспектом цього протоколу є його звичайна відсутність вбудованих **механізмів аутентифікації** або **авторизації**. Натомість авторизація покладається на **інформацію файлової системи**, при цьому сервер відповідає за точний переклад **інформації про користувача, наданої клієнтом**, у необхідний для файлової системи **формат авторизації**, переважно слідуючи **синтаксису UNIX**. Помітним аспектом цього протоколу є його звичайна відсутність вбудованих **механізмів аутентифікації** або **авторизації**. Натомість авторизація покладається на **інформацію файлової системи**, при цьому серверу доручено точно перетворювати **інформацію про користувача, надану клієнтом**, у необхідний **формат авторизації** файлової системи, переважно дотримуючись **синтаксису UNIX**.
Аутентифікація зазвичай покладається на **ідентифікатори `UID`/`GID` UNIX та членство в групах**. Однак виникає проблема через потенційне невідповідність у **відображеннях `UID`/`GID`** між клієнтами та серверами, що не залишає місця для додаткової перевірки з боку сервера. Більше того, ці дані надсилаються клієнтом і довіряються сервером, тому зловмисний клієнт може потенційно **вдаватися до іншого користувача, надсилаючи більш привілейовані `uid` та `gid`**. Аутентифікація зазвичай покладається на **ідентифікатори `UID`/`GID` UNIX та членство в групах**. Однак виникає проблема через потенційне невідповідність у **відображеннях `UID`/`GID`** між клієнтами та серверами, що не залишає місця для додаткової перевірки з боку сервера. Більше того, ці дані надсилаються клієнтом і довіряються сервером, тому зловмисний клієнт може потенційно **вдаватися до іншого користувача, надсилаючи більш привілейовані `uid` та `gid`**.
@ -29,14 +29,14 @@
### Версії ### Версії
- **NFSv2**: Цю версію визнано за її широку сумісність з різними системами, що підкреслює її значення з початковими операціями, переважно через UDP. Будучи **найстарішою** у серії, вона заклала основу для майбутніх розробок. - **NFSv2**: Цю версію визнано за її широку сумісність з різними системами, що підкреслює її значущість з початковими операціями, переважно через UDP. Будучи **найстарішою** у серії, вона заклала основу для майбутніх розробок.
- **NFSv3**: Введена з рядом покращень, NFSv3 розширила можливості свого попередника, підтримуючи змінні розміри файлів і пропонуючи покращені механізми звітності про помилки. Незважаючи на свої досягнення, вона стикалася з обмеженнями в повній зворотній сумісності з клієнтами NFSv2. - **NFSv3**: Введена з рядом покращень, NFSv3 розширила можливості свого попередника, підтримуючи змінні розміри файлів і пропонуючи покращені механізми звітності про помилки. Незважаючи на свої досягнення, вона стикалася з обмеженнями в повній зворотній сумісності з клієнтами NFSv2.
- **NFSv4**: Важлива версія в серії NFS, NFSv4 представила набір функцій, призначених для модернізації обміну файлами через мережі. Помітні покращення включають інтеграцію Kerberos для **високої безпеки**, можливість проходження через брандмауери та роботи через Інтернет без необхідності в портмапперах, підтримку списків контролю доступу (ACL) та впровадження операцій на основі стану. Її покращення продуктивності та впровадження станового протоколу відрізняють NFSv4 як важливий крок вперед у технологіях обміну файлами в мережі. - **NFSv4**: Важлива версія в серії NFS, NFSv4 представила набір функцій, розроблених для модернізації обміну файлами через мережі. Помітні покращення включають інтеграцію Kerberos для **високої безпеки**, можливість проходження через брандмауери та роботи через Інтернет без необхідності в портмапперах, підтримку списків контролю доступу (ACL) та впровадження операцій на основі стану. Її покращення продуктивності та впровадження станового протоколу відрізняють NFSv4 як важливий крок вперед у технологіях обміну файлами в мережі.
- Зверніть увагу, що дуже дивно знайти хост Linux NFS, що підтримує аутентифікацію kerberos. - Зверніть увагу, що дуже дивно знайти хост Linux NFS, що підтримує аутентифікацію kerberos.
Кожна версія NFS була розроблена з метою задовольнити еволюціонуючі потреби мережевих середовищ, поступово покращуючи безпеку, сумісність і продуктивність. Кожна версія NFS була розроблена з наміром задовольнити еволюційні потреби мережевих середовищ, поступово покращуючи безпеку, сумісність і продуктивність.
### Стискання ### Стискання
@ -75,7 +75,7 @@ scanner/nfs/nfsmount #Scan NFS mounts and list permissions
``` ```
### nfs_analyze ### nfs_analyze
Цей інструмент з [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) може бути використаний для отримання великої кількості даних з NFS сервера, таких як **монтажі**, підтримувані версії NFS, підключені IP-адреси, і навіть чи можливо **вийти з експорту** в інші папки в FS або **чи увімкнено `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 ## Mounting
@ -98,9 +98,9 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
### Довіра до UID та GID ### Довіра до UID та GID
Звичайно, єдина проблема полягає в тому, що за замовчуванням неможливо видавати себе за root (`UID` 0). Однак можливо видавати себе за будь-якого іншого користувача або, якщо увімкнено `no_root_squash`, ви також можете видавати себе за root. Звісно, єдина проблема полягає в тому, що за замовчуванням неможливо видавати себе за root (`UID` 0). Однак, можливо видавати себе за будь-якого іншого користувача або, якщо увімкнено `no_root_squash`, ви також можете видавати себе за root.
- Якщо ви монтуєте папку, яка містить **файли або папки, доступні лише деякому користувачу** (за **UID**). Ви можете **створити** **локально** користувача з цим **UID** і, використовуючи цього **користувача**, ви зможете **отримати доступ** до файлу/папки. - Якщо ви монтуєте папку, яка містить **файли або папки, доступні лише деяким користувачам** (за **UID**). Ви можете **створити** **локально** користувача з цим **UID** і, використовуючи цього **користувача**, ви зможете **отримати доступ** до файлу/папки.
- Інструмент **`fuse_nfs`** з [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) завжди надсилатиме необхідні UID та GID для доступу до файлів. - Інструмент **`fuse_nfs`** з [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) завжди надсилатиме необхідні UID та GID для доступу до файлів.
### Підвищення привілеїв SUID ### Підвищення привілеїв SUID
@ -108,16 +108,16 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
Перевірте сторінку: Перевірте сторінку:
{{#ref}} {{#ref}}
/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md ../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md
{{#endref}} {{#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/`. Наприклад, якщо NFS сервер експортує `/srv/`, а `/var/` знаходиться в тій же файловій системі, можливо читати журнали з `/var/log/` або зберігати веб-шелл у `/var/www/`.
Більше того, зверніть увагу, що за замовчуванням лише користувач root (0) захищений від видавання себе (перевірте розділ Squash). Однак, якщо файл **належить root, але група не 0, до нього можна отримати доступ**. Наприклад, файл `/etc/shadow` належить root, але група `shadow` (gid 42 на Debian). Отже, до нього можна отримати доступ за замовчуванням! Більше того, зверніть увагу, що за замовчуванням лише користувач root (0) захищений від видавання себе (перевірте розділ Squash). Однак, якщо файл **належить root, але група не 0, до нього можна отримати доступ**. Наприклад, файл `/etc/shadow` належить root, але група `shadow` (gid 42 на Debian). Отже, до нього можна отримати доступ за замовчуванням!
@ -125,9 +125,9 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
### NSFShell ### NSFShell
Щоб легко перерахувати, змонтувати та змінити UID і GID для отримання доступу до файлів, ви можете використовувати [nfsshell](https://github.com/NetDirect/nfsshell). Щоб легко перерахувати, монтувати та змінювати UID і GID для доступу до файлів, ви можете використовувати [nfsshell](https://github.com/NetDirect/nfsshell).
[Чудовий туторіал по NFSShell.](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/) [Гарний туторіал по NFSShell.](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/)
## Конфігураційні файли ## Конфігураційні файли
``` ```
@ -136,19 +136,19 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
``` ```
## Небезпечні налаштування ## Небезпечні налаштування
- **Дозволи на читання та запис (`rw`):** Це налаштування дозволяє як читання, так і запис у файлову систему. Важливо враховувати наслідки надання такого широкого доступу. - **Читання та запис прав (`rw`):** Це налаштування дозволяє як читати з, так і записувати в файлову систему. Важливо враховувати наслідки надання такого широкого доступу.
- **Використання небезпечних портів (`insecure`):** Коли це увімкнено, система може використовувати порти вище 1024. Безпека портів вище цього діапазону може бути менш суворою, що збільшує ризик. - **Використання небезпечних портів (`insecure`):** Коли це увімкнено, система може використовувати порти вище 1024. Безпека портів вище цього діапазону може бути менш суворою, що збільшує ризик.
- **Видимість вкладених файлових систем (`nohide`):** Це налаштування робить каталоги видимими, навіть якщо інша файлова система змонтована нижче експортованого каталогу. Кожен каталог потребує власного запису експорту для належного управління. - **Видимість вкладених файлових систем (`nohide`):** Це налаштування робить каталоги видимими, навіть якщо інша файлова система змонтована нижче експортованого каталогу. Кожен каталог потребує власного запису експорту для належного управління.
- **Власність файлів root (`no_root_squash`):** З цим налаштуванням файли, створені користувачем root, зберігають свій оригінальний UID/GID 0, ігноруючи принцип найменших привілеїв і потенційно надаючи надмірні дозволи. - **Власність файлів root (`no_root_squash`):** З цим налаштуванням файли, створені користувачем root, зберігають свій оригінальний UID/GID 0, ігноруючи принцип найменших привілеїв і потенційно надаючи надмірні права.
- **Не стиснення всіх користувачів (`no_all_squash`):** Ця опція забезпечує збереження ідентичностей користувачів по всій системі, що може призвести до проблем з дозволами та контролем доступу, якщо не буде правильно оброблено. - **Несквашування всіх користувачів (`no_all_squash`):** Ця опція забезпечує збереження ідентичностей користувачів по всій системі, що може призвести до проблем з правами доступу та контролем, якщо не буде належним чином оброблено.
## Підвищення привілеїв за допомогою неправильних налаштувань NFS ## Підвищення привілеїв за допомогою неправильних налаштувань NFS
[NFS no_root_squash and no_all_squash privilege escalation](../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md) [NFS no_root_squash та no_all_squash підвищення привілеїв](../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md)
## HackTricks Автоматичні команди ## HackTricks Автоматичні команди
``` ```