9.8 KiB
Зловживання установниками macOS
{% hint style="success" %}
Вивчайте та вправляйтеся в хакінгу AWS: Навчання AWS Red Team Expert (ARTE) від HackTricks
Вивчайте та вправляйтеся в хакінгу GCP: Навчання GCP Red Team Expert (GRTE) від HackTricks
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами на Twitter 🐦 @hacktricks_live.
- Поширюйте хакерські трюки, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Основна інформація про Pkg
Установочний пакет macOS (також відомий як файл .pkg
) - це формат файлу, який використовується macOS для розподілу програмного забезпечення. Ці файли схожі на коробку, яка містить все необхідне для встановлення та правильної роботи програми.
Сам файл пакету є архівом, який містить ієрархію файлів та каталогів, які будуть встановлені на цільовий комп'ютер. Він також може включати сценарії для виконання завдань до та після встановлення, наприклад, налаштування файлів конфігурації або очищення старих версій програмного забезпечення.
Ієрархія
- Distribution (xml): Налаштування (назва, текст вітання...) та сценарії/перевірки встановлення
- PackageInfo (xml): Інформація, вимоги до встановлення, місце встановлення, шляхи до сценаріїв для виконання
- Bill of materials (bom): Список файлів для встановлення, оновлення або видалення з правами доступу до файлів
- Payload (CPIO архів зі стисненням gzip): Файли для встановлення в
install-location
з PackageInfo - Scripts (CPIO архів зі стисненням gzip): Сценарії до та після встановлення та інші ресурси, розпаковані в тимчасовий каталог для виконання.
# Tool to directly get the files inside a package
pkgutil —expand "/path/to/package.pkg" "/path/to/out/dir"
# Get the files ina. more manual way
mkdir -p "/path/to/out/dir"
cd "/path/to/out/dir"
xar -xf "/path/to/package.pkg"
# Decompress also the CPIO gzip compressed ones
cat Scripts | gzip -dc | cpio -i
cpio -i < Scripts
Для візуалізації вмісту установника без ручного розпакування ви також можете використовувати безкоштовний інструмент Suspicious Package.
Основна інформація про DMG
Файли DMG, або образи диска Apple, - це формат файлу, який використовується macOS від Apple для образів дисків. Файл DMG суттєво є монтуємим образом диска (він містить власну файлову систему), який містить сирі блочні дані, які зазвичай стиснуті, а іноді зашифровані. Коли ви відкриваєте файл DMG, macOS монтує його, ніби це фізичний диск, що дозволяє вам отримати доступ до його вмісту.
{% hint style="danger" %}
Зверніть увагу, що установники .dmg
підтримують так багато форматів, що у минулому деякі з них, що містять вразливості, були використані для отримання виконання коду ядра.
{% endhint %}
Ієрархія
Ієрархія файлу DMG може бути різною в залежності від вмісту. Однак для DMG-файлів програм зазвичай слідує така структура:
- Верхній рівень: Це корінь образу диска. Він часто містить програму та, можливо, посилання на папку Applications.
- Додаток (.app): Це справжня програма. В macOS програма зазвичай є пакетом, який містить багато окремих файлів та папок, що складають програму.
- Посилання на додатки: Це ярлик до папки Applications в macOS. Мета полягає в тому, щоб зробити встановлення програми легким. Ви можете перетягнути файл .app на цей ярлик, щоб встановити додаток.
Підвищення привілеїв через зловживання pkg
Виконання з публічних каталогів
Якщо передустановочний або післяустановочний скрипт, наприклад, виконується з /var/tmp/Installerutil
, і зловмисник може контролювати цей скрипт, він може підвищити привілеї кожного разу, коли він виконується. Або інший схожий приклад:
AuthorizationExecuteWithPrivileges
Це публічна функція, яку викликають кілька установників та оновлювачів для виконання чогось як root. Ця функція приймає шлях до файлу, який виконується як параметр, однак, якщо зловмисник може змінити цей файл, він зможе зловживати його виконанням з правами root для підвищення привілеїв.
# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig
Виконання шляхом монтування
Якщо програмний інсталятор записує дані до /tmp/fixedname/bla/bla
, можливо створити монтування над /tmp/fixedname
без власників, тому ви зможете змінювати будь-який файл під час установки для зловживання процесом установки.
Прикладом цього є CVE-2021-26089, який зміг перезаписати періодичний скрипт, щоб отримати виконання як root. Для отримання додаткової інформації перегляньте доповідь: OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl
pkg як шкідливе ПЗ
Порожній навантаження
Можливо просто створити файл .pkg
з перед та після-інсталяційними скриптами без будь-якого навантаження.
JS у файлі Distribution xml
Можливо додати теги <script>
у файл distribution xml пакету, і цей код буде виконаний, і він може виконувати команди за допомогою system.run
: