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
014c96ae21
commit
25f572dd18
@ -6,9 +6,9 @@
|
||||
|
||||
**Gatekeeper** - це функція безпеки, розроблена для операційних систем Mac, призначена для забезпечення того, щоб користувачі **використовували лише надійне програмне забезпечення** на своїх системах. Вона функціонує шляхом **перевірки програмного забезпечення**, яке користувач завантажує та намагається відкрити з **джерел поза App Store**, таких як додаток, плагін або пакет установника.
|
||||
|
||||
Ключовий механізм Gatekeeper полягає в її **процесі перевірки**. Вона перевіряє, чи підписане завантажене програмне забезпечення **визнаним розробником**, що забезпечує автентичність програмного забезпечення. Додатково, вона підтверджує, чи програмне забезпечення **нотаризоване Apple**, що підтверджує, що воно не містить відомого шкідливого вмісту і не було змінено після нотаризації.
|
||||
Ключовий механізм Gatekeeper полягає в її **процесі перевірки**. Вона перевіряє, чи є завантажене програмне забезпечення **підписаним визнаним розробником**, що забезпечує автентичність програмного забезпечення. Крім того, вона визначає, чи є програмне забезпечення **нотаризованим Apple**, підтверджуючи, що воно не містить відомого шкідливого вмісту і не було змінено після нотаризації.
|
||||
|
||||
Крім того, Gatekeeper посилює контроль користувача та безпеку, **запитуючи користувачів підтвердити відкриття** завантаженого програмного забезпечення вперше. Ця запобіжна міра допомагає запобігти випадковому запуску потенційно шкідливого виконуваного коду, який користувач міг помилково прийняти за безпечний файл даних.
|
||||
Додатково, Gatekeeper зміцнює контроль користувача та безпеку, **запитуючи користувачів підтвердити відкриття** завантаженого програмного забезпечення вперше. Ця запобіжна міра допомагає запобігти випадковому запуску користувачами потенційно шкідливого виконуваного коду, який вони могли помилково прийняти за безпечний файл даних.
|
||||
|
||||
### Application Signatures
|
||||
|
||||
@ -16,13 +16,13 @@
|
||||
|
||||
Ось як це працює:
|
||||
|
||||
1. **Підписання додатка:** Коли розробник готовий розповсюдити свій додаток, він **підписує додаток за допомогою приватного ключа**. Цей приватний ключ пов'язаний з **сертифікатом, який Apple видає розробнику** під час його реєстрації в програмі Apple Developer Program. Процес підписання включає створення криптографічного хешу всіх частин додатка та шифрування цього хешу за допомогою приватного ключа розробника.
|
||||
2. **Розповсюдження додатка:** Підписаний додаток потім розповсюджується користувачам разом із сертифікатом розробника, який містить відповідний публічний ключ.
|
||||
3. **Перевірка додатка:** Коли користувач завантажує та намагається запустити додаток, його операційна система Mac використовує публічний ключ з сертифіката розробника для розшифрування хешу. Потім вона повторно обчислює хеш на основі поточного стану додатка та порівнює його з розшифрованим хешем. Якщо вони збігаються, це означає, що **додаток не був змінений** з моменту його підписання розробником, і система дозволяє запуск додатка.
|
||||
1. **Підписання додатку:** Коли розробник готовий розповсюдити свій додаток, він **підписує додаток за допомогою приватного ключа**. Цей приватний ключ пов'язаний з **сертифікатом, який Apple видає розробнику** під час його реєстрації в програмі Apple Developer Program. Процес підписання включає створення криптографічного хешу всіх частин додатку та шифрування цього хешу за допомогою приватного ключа розробника.
|
||||
2. **Розповсюдження додатку:** Підписаний додаток потім розповсюджується користувачам разом із сертифікатом розробника, який містить відповідний публічний ключ.
|
||||
3. **Перевірка додатку:** Коли користувач завантажує та намагається запустити додаток, його операційна система Mac використовує публічний ключ з сертифіката розробника для розшифрування хешу. Потім вона перераховує хеш на основі поточного стану додатку та порівнює його з розшифрованим хешем. Якщо вони збігаються, це означає, що **додаток не був змінений** з моменту його підписання розробником, і система дозволяє запуск додатку.
|
||||
|
||||
Підписи додатків є важливою частиною технології Gatekeeper Apple. Коли користувач намагається **відкрити додаток, завантажений з Інтернету**, Gatekeeper перевіряє підпис додатка. Якщо він підписаний сертифікатом, виданим Apple відомому розробнику, і код не був змінений, Gatekeeper дозволяє запуск додатка. В іншому випадку, він блокує додаток і сповіщає користувача.
|
||||
Підписи додатків є важливою частиною технології Gatekeeper Apple. Коли користувач намагається **відкрити додаток, завантажений з інтернету**, Gatekeeper перевіряє підпис додатку. Якщо він підписаний сертифікатом, виданим Apple відомому розробнику, і код не був змінений, Gatekeeper дозволяє запуск додатку. В іншому випадку, він блокує додаток і сповіщає користувача.
|
||||
|
||||
Починаючи з macOS Catalina, **Gatekeeper також перевіряє, чи був додаток нотаризований** Apple, додаючи додатковий рівень безпеки. Процес нотаризації перевіряє додаток на наявність відомих проблем безпеки та шкідливого коду, і якщо ці перевірки проходять, Apple додає квиток до додатка, який може перевірити Gatekeeper.
|
||||
Починаючи з macOS Catalina, **Gatekeeper також перевіряє, чи був додаток нотаризований** Apple, додаючи додатковий рівень безпеки. Процес нотаризації перевіряє додаток на наявність відомих проблем безпеки та шкідливого коду, і якщо ці перевірки проходять, Apple додає квиток до додатку, який може перевірити Gatekeeper.
|
||||
|
||||
#### Check Signatures
|
||||
|
||||
@ -45,7 +45,7 @@ codesign -s <cert-name-keychain> toolsdemo
|
||||
```
|
||||
### Нотаризація
|
||||
|
||||
Процес нотаризації Apple слугує додатковим захистом для користувачів від потенційно шкідливого програмного забезпечення. Він передбачає, що **розробник подає свою програму на перевірку** до **Служби нотаризації Apple**, яку не слід плутати з перевіркою додатків. Ця служба є **автоматизованою системою**, яка ретельно перевіряє подане програмне забезпечення на наявність **шкідливого контенту** та будь-яких потенційних проблем з підписуванням коду.
|
||||
Процес нотаризації Apple слугує додатковим захистом для користувачів від потенційно шкідливого програмного забезпечення. Він передбачає **подання розробником свого додатку на перевірку** до **Служби нотаризації Apple**, яку не слід плутати з перевіркою додатків. Ця служба є **автоматизованою системою**, яка ретельно перевіряє подане програмне забезпечення на наявність **шкідливого контенту** та будь-яких потенційних проблем з підписуванням коду.
|
||||
|
||||
Якщо програмне забезпечення **проходить** цю перевірку без жодних зауважень, Служба нотаризації генерує квиток нотаризації. Розробник зобов'язаний **додати цей квиток до свого програмного забезпечення**, процес, відомий як 'стаплінг'. Крім того, квиток нотаризації також публікується в Інтернеті, де Gatekeeper, технологія безпеки Apple, може отримати до нього доступ.
|
||||
|
||||
@ -54,7 +54,7 @@ codesign -s <cert-name-keychain> toolsdemo
|
||||
### spctl & syspolicyd
|
||||
|
||||
> [!CAUTION]
|
||||
> Зверніть увагу, що з версії Sequoia **`spctl`** більше не дозволяє змінювати конфігурацію Gatekeeper.
|
||||
> Зверніть увагу, що з версії Sequoia, **`spctl`** більше не дозволяє змінювати конфігурацію Gatekeeper.
|
||||
|
||||
**`spctl`** - це інструмент CLI для перерахунку та взаємодії з Gatekeeper (через демон `syspolicyd` за допомогою повідомлень XPC). Наприклад, можна побачити **статус** GateKeeper за допомогою:
|
||||
```bash
|
||||
@ -68,7 +68,7 @@ GateKeeper перевірить, чи може бінарний файл бут
|
||||
|
||||
<figure><img src="../../../images/image (1150).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**`syspolicyd`** є основним демон, відповідальним за забезпечення роботи Gatekeeper. Він підтримує базу даних, розташовану в `/var/db/SystemPolicy`, і ви можете знайти код для підтримки [бази даних тут](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/policydb.cpp) та [SQL шаблон тут](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/syspolicy.sql). Зверніть увагу, що база даних не обмежена SIP і доступна для запису root, а база даних `/var/db/.SystemPolicy-default` використовується як оригінальна резервна копія на випадок, якщо інша буде пошкоджена.
|
||||
**`syspolicyd`** є основним демон, відповідальним за забезпечення Gatekeeper. Він підтримує базу даних, розташовану в `/var/db/SystemPolicy`, і ви можете знайти код для підтримки [бази даних тут](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/policydb.cpp) та [SQL шаблон тут](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/syspolicy.sql). Зверніть увагу, що база даних не обмежена SIP і доступна для запису root, а база даних `/var/db/.SystemPolicy-default` використовується як оригінальна резервна копія на випадок, якщо інша буде пошкоджена.
|
||||
|
||||
Більше того, пакети **`/var/db/gke.bundle`** та **`/var/db/gkopaque.bundle`** містять файли з правилами, які вставляються в базу даних. Ви можете перевірити цю базу даних як root за допомогою:
|
||||
```bash
|
||||
@ -84,10 +84,10 @@ anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists
|
||||
anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
|
||||
[...]
|
||||
```
|
||||
**`syspolicyd`** також надає XPC сервер з різними операціями, такими як `assess`, `update`, `record` та `cancel`, які також доступні через **`Security.framework`'s `SecAssessment*`** API, а **`xpctl`** насправді спілкується з **`syspolicyd`** через XPC.
|
||||
**`syspolicyd`** також надає XPC сервер з різними операціями, такими як `assess`, `update`, `record` та `cancel`, які також доступні через **`Security.framework`'s `SecAssessment*`** API, а **`spctl`** насправді спілкується з **`syspolicyd`** через XPC.
|
||||
|
||||
Зверніть увагу, що перше правило закінчується на "**App Store**", а друге на "**Developer ID**", і що в попередньому зображенні було **дозволено виконувати програми з App Store та від ідентифікованих розробників**.\
|
||||
Якщо ви **зміните** це налаштування на App Store, то правила "**Notarized Developer ID" зникнуть**.
|
||||
Зверніть увагу, що перше правило закінчується на "**App Store**", а друге на "**Developer ID**", і що в попередньому зображенні було **дозволено виконувати програми з App Store та ідентифікованих розробників**.\
|
||||
Якщо ви **зміните** це налаштування на App Store, то "**Правила Notarized Developer ID" зникнуть**.
|
||||
|
||||
Існує також тисячі правил **типу GKE**:
|
||||
```bash
|
||||
@ -141,26 +141,62 @@ sudo spctl --enable --label "whitelist"
|
||||
spctl --assess -v /Applications/App.app
|
||||
/Applications/App.app: accepted
|
||||
```
|
||||
Щодо **розширень ядра**, папка `/var/db/SystemPolicyConfiguration` містить файли зі списками kext, які дозволено завантажувати. Більше того, `spctl` має право `com.apple.private.iokit.nvram-csr`, оскільки здатний додавати нові попередньо схвалені розширення ядра, які також потрібно зберігати в NVRAM у ключі `kext-allowed-teams`.
|
||||
Щодо **розширень ядра**, папка `/var/db/SystemPolicyConfiguration` містить файли зі списками kext, які дозволено завантажувати. Більше того, `spctl` має право `com.apple.private.iokit.nvram-csr`, оскільки він здатний додавати нові попередньо схвалені розширення ядра, які також потрібно зберігати в NVRAM у ключі `kext-allowed-teams`.
|
||||
|
||||
### Файли карантину
|
||||
#### Керування Gatekeeper на macOS 15 (Sequoia) та пізніше
|
||||
|
||||
Після **завантаження** програми або файлу, певні програми macOS, такі як веб-браузери або поштові клієнти, **додають розширений атрибут файлу**, відомий як "**прапор карантину**", до завантаженого файлу. Цей атрибут діє як захисний захід, щоб **позначити файл** як такий, що походить з ненадійного джерела (інтернету), і потенційно несе ризики. Однак не всі програми додають цей атрибут, наприклад, звичайне програмне забезпечення клієнтів BitTorrent зазвичай обходить цей процес.
|
||||
Починаючи з macOS 15 Sequoia, кінцеві користувачі більше не можуть змінювати політику Gatekeeper з `spctl`. Керування здійснюється через Налаштування системи або шляхом розгортання профілю конфігурації MDM з корисним навантаженням `com.apple.systempolicy.control`. Приклад фрагмента профілю для дозволу App Store та ідентифікованих розробників (але не "Де завгодно"):
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PayloadContent</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>PayloadType</key>
|
||||
<string>com.apple.systempolicy.control</string>
|
||||
<key>PayloadVersion</key>
|
||||
<integer>1</integer>
|
||||
<key>PayloadIdentifier</key>
|
||||
<string>com.example.gatekeeper</string>
|
||||
<key>EnableAssessment</key>
|
||||
<true/>
|
||||
<key>AllowIdentifiedDevelopers</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>PayloadType</key>
|
||||
<string>Configuration</string>
|
||||
<key>PayloadIdentifier</key>
|
||||
<string>com.example.profile.gatekeeper</string>
|
||||
<key>PayloadUUID</key>
|
||||
<string>00000000-0000-0000-0000-000000000000</string>
|
||||
<key>PayloadVersion</key>
|
||||
<integer>1</integer>
|
||||
<key>PayloadDisplayName</key>
|
||||
<string>Gatekeeper</string>
|
||||
</dict>
|
||||
</plist>
|
||||
```
|
||||
### Quarantine Files
|
||||
|
||||
При **завантаженні** програми або файлу, певні програми macOS, такі як веб-браузери або поштові клієнти, **додають розширений атрибут файлу**, відомий як "**прапор карантину**," до завантаженого файлу. Цей атрибут діє як захисний захід, щоб **позначити файл** як такий, що походить з ненадійного джерела (інтернету), і потенційно несе ризики. Однак не всі програми додають цей атрибут, наприклад, звичайне програмне забезпечення клієнта BitTorrent зазвичай обходить цей процес.
|
||||
|
||||
**Наявність прапора карантину сигналізує про функцію безпеки Gatekeeper macOS, коли користувач намагається виконати файл**.
|
||||
|
||||
У випадку, якщо **прапор карантину відсутній** (як у випадку з файлами, завантаженими через деякі клієнти BitTorrent), **перевірки Gatekeeper можуть не виконуватись**. Тому користувачі повинні бути обережними при відкритті файлів, завантажених з менш безпечних або невідомих джерел.
|
||||
У випадку, коли **прапор карантину відсутній** (як у випадку з файлами, завантаженими через деякі клієнти BitTorrent), **перевірки Gatekeeper можуть не виконуватись**. Таким чином, користувачі повинні бути обережними при відкритті файлів, завантажених з менш безпечних або невідомих джерел.
|
||||
|
||||
> [!NOTE] > **Перевірка** **дійсності** підписів коду є **ресурсоємним** процесом, який включає в себе генерацію криптографічних **хешів** коду та всіх його упакованих ресурсів. Крім того, перевірка дійсності сертифіката передбачає проведення **онлайн-перевірки** на серверах Apple, щоб дізнатися, чи був він відкликаний після його видачі. З цих причин повна перевірка підпису коду та нотаризації є **недоцільною для виконання щоразу при запуску програми**.
|
||||
> [!NOTE] > **Перевірка** **дійсності** підписів коду є **ресурсомістким** процесом, який включає в себе генерацію криптографічних **хешів** коду та всіх його упакованих ресурсів. Крім того, перевірка дійсності сертифіката передбачає проведення **онлайн-перевірки** на серверах Apple, щоб дізнатися, чи був він відкликаний після його видачі. З цих причин повна перевірка підпису коду та нотаризації є **недоцільною для виконання щоразу при запуску програми**.
|
||||
>
|
||||
> Тому ці перевірки **виконуються лише при виконанні програм з атрибутом карантину.**
|
||||
|
||||
> [!WARNING]
|
||||
> Цей атрибут повинен бути **встановлений програмою, що створює/завантажує** файл.
|
||||
>
|
||||
> Однак файли, які знаходяться в пісочниці, матимуть цей атрибут, встановлений для кожного файлу, який вони створюють. А програми без пісочниці можуть встановити його самостійно або вказати ключ [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc) у **Info.plist**, що змусить систему встановити розширений атрибут `com.apple.quarantine` на створені файли,
|
||||
> Однак файли, які знаходяться в пісочниці, матимуть цей атрибут, встановлений для кожного файлу, який вони створюють. А програми без пісочниці можуть встановити його самостійно або вказати ключ [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc) в **Info.plist**, що змусить систему встановити розширений атрибут `com.apple.quarantine` на створені файли.
|
||||
|
||||
Більше того, всі файли, створені процесом, що викликає **`qtn_proc_apply_to_self`**, підлягають карантину. Або API **`qtn_file_apply_to_path`** додає атрибут карантину до вказаного шляху файлу.
|
||||
Більше того, всі файли, створені процесом, що викликає **`qtn_proc_apply_to_self`**, підлягають карантину. А API **`qtn_file_apply_to_path`** додає атрибут карантину до вказаного шляху файлу.
|
||||
|
||||
Можна **перевірити його статус і увімкнути/вимкнути** (потрібні права root) за допомогою:
|
||||
```bash
|
||||
@ -177,7 +213,7 @@ xattr file.png
|
||||
com.apple.macl
|
||||
com.apple.quarantine
|
||||
```
|
||||
Перевірте **значення** **розширених** **атрибутів** та знайдіть додаток, який записав атрибут карантину за допомогою:
|
||||
Перевірте **значення** **розширених** **атрибутів** і знайдіть додаток, який записав атрибут карантину за допомогою:
|
||||
```bash
|
||||
xattr -l portada.png
|
||||
com.apple.macl:
|
||||
@ -193,7 +229,7 @@ com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
|
||||
# Brave -- App
|
||||
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
|
||||
```
|
||||
Насправді процес "може встановити прапори карантину для файлів, які він створює" (я вже намагався застосувати прапор USER_APPROVED у створеному файлі, але він не застосовується):
|
||||
Насправді, процес "може встановити прапори карантину для файлів, які він створює" (я вже намагався застосувати прапор USER_APPROVED у створеному файлі, але він не застосовується):
|
||||
|
||||
<details>
|
||||
|
||||
@ -269,17 +305,17 @@ find . -iname '*' -print0 | xargs -0 xattr -d com.apple.quarantine
|
||||
```bash
|
||||
find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.quarantine"
|
||||
```
|
||||
Інформація про карантин також зберігається в центральній базі даних, керованій LaunchServices у **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**, що дозволяє графічному інтерфейсу отримувати дані про походження файлів. Більше того, це може бути перезаписано додатками, які можуть бути зацікавлені в приховуванні своїх походжень. Це також можна зробити з API LaunchServices.
|
||||
Quarantine information is also stored in a central database managed by LaunchServices in **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`** which allows the GUI to obtain data about the file origins. Moreover this can be overwritten by applications which might be interested in hiding its origins. Moreover, this can be done from LaunchServices APIS.
|
||||
|
||||
#### **libquarantine.dylb**
|
||||
#### **libquarantine.dylib**
|
||||
|
||||
Ця бібліотека експортує кілька функцій, які дозволяють маніпулювати полями розширених атрибутів.
|
||||
|
||||
API `qtn_file_*` стосуються політик карантину файлів, API `qtn_proc_*` застосовуються до процесів (файлів, створених процесом). Невиведені функції `__qtn_syscall_quarantine*` є тими, які застосовують політики, які викликають `mac_syscall` з "Quarantine" як першим аргументом, що надсилає запити до `Quarantine.kext`.
|
||||
API `qtn_file_*` займаються політиками карантину файлів, API `qtn_proc_*` застосовуються до процесів (файлів, створених процесом). Невиведені функції `__qtn_syscall_quarantine*` є тими, які застосовують політики, які викликають `mac_syscall` з "Quarantine" як першим аргументом, що надсилає запити до `Quarantine.kext`.
|
||||
|
||||
#### **Quarantine.kext**
|
||||
|
||||
Розширення ядра доступне лише через **кеш ядра на системі**; однак ви _можете_ завантажити **Kernel Debug Kit з** [**https://developer.apple.com/**](https://developer.apple.com/), який міститиме символізовану версію розширення.
|
||||
Розширення ядра доступне лише через **кеш ядра на системі**; однак, ви _можете_ завантажити **Kernel Debug Kit з** [**https://developer.apple.com/**](https://developer.apple.com/), який міститиме символізовану версію розширення.
|
||||
|
||||
Цей Kext буде перехоплювати через MACF кілька викликів, щоб захопити всі події життєвого циклу файлів: створення, відкриття, перейменування, жорстке посилання... навіть `setxattr`, щоб запобігти встановленню розширеного атрибута `com.apple.quarantine`.
|
||||
|
||||
@ -288,13 +324,31 @@ API `qtn_file_*` стосуються політик карантину файл
|
||||
- `security.mac.qtn.sandbox_enforce`: Застосування карантину разом із Sandbox
|
||||
- `security.mac.qtn.user_approved_exec`: Карантиновані процеси можуть виконувати лише затверджені файли
|
||||
|
||||
#### Provenance xattr (Ventura і пізніше)
|
||||
|
||||
macOS 13 Ventura представила окремий механізм походження, який заповнюється перший раз, коли карантинований додаток дозволено запустити. Створюються два артефакти:
|
||||
|
||||
- Розширений атрибут `com.apple.provenance` у каталозі `.app` (бінарне значення фіксованого розміру, що містить первинний ключ і прапори).
|
||||
- Рядок у таблиці `provenance_tracking` всередині бази даних ExecPolicy за адресою `/var/db/SystemPolicyConfiguration/ExecPolicy/`, що зберігає cdhash додатка та метадані.
|
||||
|
||||
Practical usage:
|
||||
```bash
|
||||
# Inspect provenance xattr (if present)
|
||||
xattr -p com.apple.provenance /Applications/Some.app | hexdump -C
|
||||
|
||||
# Observe Gatekeeper/provenance events in real time
|
||||
log stream --style syslog --predicate 'process == "syspolicyd"'
|
||||
|
||||
# Retrieve historical Gatekeeper decisions for a specific bundle
|
||||
log show --last 2d --style syslog --predicate 'process == "syspolicyd" && eventMessage CONTAINS[cd] "GK scan"'
|
||||
```
|
||||
### XProtect
|
||||
|
||||
XProtect - це вбудована **антивірусна** функція в macOS. XProtect **перевіряє будь-який додаток, коли він вперше запускається або модифікується, проти своєї бази даних** відомих шкідливих програм і небезпечних типів файлів. Коли ви завантажуєте файл через певні додатки, такі як Safari, Mail або Messages, XProtect автоматично сканує файл. Якщо він відповідає будь-якій відомій шкідливій програмі в його базі даних, XProtect **запобіжить виконанню файлу** і сповістить вас про загрозу.
|
||||
XProtect - це вбудована **антивірусна** функція в macOS. XProtect **перевіряє будь-яку програму при першому запуску або модифікації на відповідність своїй базі даних** відомих шкідливих програм та небезпечних типів файлів. Коли ви завантажуєте файл через певні програми, такі як Safari, Mail або Messages, XProtect автоматично сканує файл. Якщо він відповідає будь-якій відомій шкідливій програмі в його базі даних, XProtect **запобіжить виконанню файлу** та сповістить вас про загрозу.
|
||||
|
||||
База даних XProtect **регулярно оновлюється** Apple новими визначеннями шкідливих програм, і ці оновлення автоматично завантажуються та встановлюються на ваш Mac. Це забезпечує, що XProtect завжди актуальний з останніми відомими загрозами.
|
||||
|
||||
Однак варто зазначити, що **XProtect не є повнофункціональним антивірусним рішенням**. Він лише перевіряє конкретний список відомих загроз і не виконує сканування при доступі, як більшість антивірусного програмного забезпечення.
|
||||
Однак варто зазначити, що **XProtect не є повнофункціональним антивірусним рішенням**. Він перевіряє лише конкретний список відомих загроз і не виконує сканування при доступі, як більшість антивірусних програм.
|
||||
|
||||
Ви можете отримати інформацію про останнє оновлення XProtect, запустивши:
|
||||
```bash
|
||||
@ -309,14 +363,20 @@ XProtect розташований у захищеному місці SIP за а
|
||||
|
||||
Зверніть увагу, що є ще один додаток у **`/Library/Apple/System/Library/CoreServices/XProtect.app`**, пов'язаний з XProtect, який не бере участі в процесі Gatekeeper.
|
||||
|
||||
> XProtect Remediator: У сучасному macOS Apple постачає сканери за запитом (XProtect Remediator), які періодично запускаються через launchd для виявлення та усунення сімей шкідливого ПЗ. Ви можете спостерігати ці сканування в об'єднаних журналах:
|
||||
>
|
||||
> ```bash
|
||||
> log show --last 2h --predicate 'subsystem == "com.apple.XProtectFramework" || category CONTAINS "XProtect"' --style syslog
|
||||
> ```
|
||||
|
||||
### Не Gatekeeper
|
||||
|
||||
> [!CAUTION]
|
||||
> Зверніть увагу, що Gatekeeper **не виконується щоразу**, коли ви запускаєте додаток, лише _**AppleMobileFileIntegrity**_ (AMFI) **перевіряє підписи виконуваного коду** лише тоді, коли ви запускаєте додаток, який вже був виконаний і перевірений Gatekeeper.
|
||||
|
||||
Отже, раніше було можливо виконати додаток, щоб кешувати його з Gatekeeper, а потім **модифікувати не виконувані файли додатка** (як-от Electron asar або NIB файли), і якщо не було інших захистів, додаток **виконувався** з **шкідливими** доповненнями.
|
||||
Отже, раніше було можливо виконати додаток, щоб кешувати його з Gatekeeper, а потім **модифікувати не виконувані файли програми** (як файли Electron asar або NIB), і якщо не було інших захистів, програма була **виконана** з **шкідливими** доповненнями.
|
||||
|
||||
Однак тепер це неможливо, оскільки macOS **запобігає модифікації файлів** всередині пакетів додатків. Тож, якщо ви спробуєте атаку [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), ви виявите, що більше не можна зловживати цим, оскільки після виконання додатка для кешування з Gatekeeper ви не зможете модифікувати пакет. І якщо ви, наприклад, зміните назву каталогу Contents на NotCon (як вказано в експлойті), а потім виконаєте основний бінарний файл додатка для кешування з Gatekeeper, це викличе помилку і не виконається.
|
||||
Однак тепер це неможливо, оскільки macOS **запобігає модифікації файлів** всередині пакетів додатків. Тож, якщо ви спробуєте атаку [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), ви виявите, що більше не можна зловживати цим, оскільки після виконання додатка для кешування з Gatekeeper ви не зможете модифікувати пакет. І якщо ви, наприклад, зміните назву каталогу Contents на NotCon (як вказано в експлойті), а потім виконаєте основний бінарний файл програми для кешування з Gatekeeper, це викличе помилку і не буде виконано.
|
||||
|
||||
## Обходи Gatekeeper
|
||||
|
||||
@ -330,9 +390,9 @@ XProtect розташований у захищеному місці SIP за а
|
||||
|
||||
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
|
||||
|
||||
Коли додаток створюється за допомогою **Automator**, інформація про те, що йому потрібно для виконання, знаходиться всередині `application.app/Contents/document.wflow`, а не в виконуваному файлі. Виконуваний файл - це просто загальний бінарний файл Automator, званий **Automator Application Stub**.
|
||||
Коли додаток створюється за допомогою **Automator**, інформація про те, що йому потрібно для виконання, знаходиться всередині `application.app/Contents/document.wflow`, а не в виконуваному файлі. Виконуваний файл є просто загальним бінарним файлом Automator, званим **Automator Application Stub**.
|
||||
|
||||
Отже, ви могли б зробити так, щоб `application.app/Contents/MacOS/Automator\ Application\ Stub` **вказував за допомогою символічного посилання на інший Automator Application Stub всередині системи**, і він виконає те, що знаходиться в `document.wflow` (ваш скрипт) **без активації Gatekeeper**, оскільки фактичний виконуваний файл не має атрибута карантину.
|
||||
Отже, ви могли б зробити `application.app/Contents/MacOS/Automator\ Application\ Stub` **вказувати за допомогою символічного посилання на інший Automator Application Stub всередині системи** і він виконає те, що знаходиться в `document.wflow` (ваш скрипт) **без спрацьовування Gatekeeper**, оскільки фактичний виконуваний файл не має атрибута карантину.
|
||||
|
||||
Приклад очікуваного місця: `/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`
|
||||
|
||||
@ -340,7 +400,7 @@ XProtect розташований у захищеному місці SIP за а
|
||||
|
||||
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
|
||||
|
||||
У цьому обході був створений zip-файл з додатком, який починався з компресії з `application.app/Contents`, а не з `application.app`. Отже, **атрибут карантину** був застосований до всіх **файлів з `application.app/Contents`**, але **не до `application.app`**, що перевіряв Gatekeeper, тому Gatekeeper був обійдений, оскільки коли `application.app` був активований, він **не мав атрибута карантину.**
|
||||
У цьому обході був створений zip-файл з додатком, що починає стиснення з `application.app/Contents`, а не з `application.app`. Отже, **атрибут карантину** був застосований до всіх **файлів з `application.app/Contents`**, але **не до `application.app`**, що перевіряв Gatekeeper, тому Gatekeeper був обійдений, оскільки, коли `application.app` був запущений, він **не мав атрибута карантину.**
|
||||
```bash
|
||||
zip -r test.app/Contents test.zip
|
||||
```
|
||||
@ -363,7 +423,7 @@ chmod +a "everyone deny writeextattr" /tmp/no-attr
|
||||
xattr -w attrname vale /tmp/no-attr
|
||||
xattr: [Errno 13] Permission denied: '/tmp/no-attr'
|
||||
```
|
||||
Крім того, формат файлу **AppleDouble** копіює файл, включаючи його ACE.
|
||||
Крім того, **AppleDouble** формат файлу копіює файл, включаючи його ACE.
|
||||
|
||||
У [**джерельному коді**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) можна побачити, що текстове представлення ACL, збережене всередині xattr під назвою **`com.apple.acl.text`**, буде встановлено як ACL у розпакованому файлі. Отже, якщо ви стиснули додаток у zip-файл з форматом файлу **AppleDouble** з ACL, який заважає запису інших xattrs у нього... xattr карантину не було встановлено в додатку:
|
||||
```bash
|
||||
@ -372,7 +432,7 @@ ditto -c -k test test.zip
|
||||
python3 -m http.server
|
||||
# Download the zip from the browser and decompress it, the file should be without a quarantine xattr
|
||||
```
|
||||
Перегляньте [**оригінальний звіт**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) для отримання додаткової інформації.
|
||||
Перевірте [**оригінальний звіт**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) для отримання додаткової інформації.
|
||||
|
||||
Зверніть увагу, що це також може бути використано з AppleArchives:
|
||||
```bash
|
||||
@ -387,7 +447,7 @@ aa archive -d app -o test.aar
|
||||
|
||||
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
||||
|
||||
Формати файлів AppleDouble зберігають атрибути файлу в окремому файлі, що починається з `._`, це допомагає копіювати атрибути файлів **між машинами macOS**. Однак було помічено, що після розпакування файлу AppleDouble файл, що починається з `._`, **не отримав атрибут карантину**.
|
||||
Формати файлів AppleDouble зберігають атрибути файлу в окремому файлі, що починається з `._`, це допомагає копіювати атрибути файлів **між macOS машинами**. Однак було помічено, що після розпакування файлу AppleDouble, файл, що починається з `._`, **не отримав атрибут карантину**.
|
||||
```bash
|
||||
mkdir test
|
||||
echo a > test/a
|
||||
@ -397,7 +457,7 @@ aa archive -d test/ -o test.aar
|
||||
|
||||
# If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute
|
||||
```
|
||||
Можливість створити файл, який не матиме атрибуту карантину, дозволила **обійти Gatekeeper.** Трюк полягав у тому, щоб **створити DMG файл додатку** за допомогою конвенції імен AppleDouble (почати з `._`) і створити **видимий файл як символьне посилання на цей прихований** файл без атрибуту карантину.\
|
||||
Можливість створити файл, який не матиме атрибуту карантину, дозволила **обійти Gatekeeper.** Трюк полягав у тому, щоб **створити DMG файл додатку** за допомогою конвенції іменування AppleDouble (почати з `._`) і створити **видимий файл як символьне посилання на цей прихований** файл без атрибуту карантину.\
|
||||
Коли **файл dmg виконується**, оскільки він не має атрибуту карантину, він **обійде Gatekeeper.**
|
||||
```bash
|
||||
# Create an app bundle with the backdoor an call it app.app
|
||||
@ -414,18 +474,35 @@ ln -s ._app.dmg s/app/app.dmg
|
||||
echo "[+] compressing files"
|
||||
aa archive -d s/ -o app.aar
|
||||
```
|
||||
### uchg (з цього [докладу](https://codeblue.jp/2023/result/pdf/cb23-bypassing-macos-security-and-privacy-mechanisms-from-gatekeeper-to-system-integrity-protection-by-koh-nakagawa.pdf))
|
||||
### [CVE-2023-41067]
|
||||
|
||||
- Створіть каталог, що містить додаток.
|
||||
- Додайте uchg до додатку.
|
||||
- Стисніть додаток у файл tar.gz.
|
||||
Обхід Gatekeeper, виправлений у macOS Sonoma 14.0, дозволив запускати підготовлені програми без запиту. Деталі були оприлюднені після виправлення, і проблема активно експлуатувалася в природі до виправлення. Переконайтеся, що встановлено Sonoma 14.0 або новішу версію.
|
||||
|
||||
### [CVE-2024-27853]
|
||||
|
||||
Обхід Gatekeeper у macOS 14.4 (випущений у березні 2024 року), що виник через обробку шкідливих ZIP-файлів у `libarchive`, дозволив програмам уникати оцінки. Оновіть до 14.4 або новішої версії, де Apple вирішила цю проблему.
|
||||
|
||||
### Треті сторони-розархіватори, що неправильно поширюють карантин (2023–2024)
|
||||
|
||||
Кілька вразливостей у популярних інструментах для розархівації (наприклад, The Unarchiver) призвели до того, що файли, витягнуті з архівів, не отримали атрибут `com.apple.quarantine`, що відкриває можливості для обходу Gatekeeper. Завжди покладайтеся на macOS Archive Utility або виправлені інструменти під час тестування та перевіряйте xattrs після розархівації.
|
||||
|
||||
### uchg (з цього [talk](https://codeblue.jp/2023/result/pdf/cb23-bypassing-macos-security-and-privacy-mechanisms-from-gatekeeper-to-system-integrity-protection-by-koh-nakagawa.pdf))
|
||||
|
||||
- Створіть каталог, що містить програму.
|
||||
- Додайте uchg до програми.
|
||||
- Стисніть програму в файл tar.gz.
|
||||
- Відправте файл tar.gz жертві.
|
||||
- Жертва відкриває файл tar.gz і запускає додаток.
|
||||
- Gatekeeper не перевіряє додаток.
|
||||
- Жертва відкриває файл tar.gz і запускає програму.
|
||||
- Gatekeeper не перевіряє програму.
|
||||
|
||||
### Запобігання Quarantine xattr
|
||||
### Запобігти xattr карантину
|
||||
|
||||
У пакеті ".app", якщо xattr карантину не додано, при виконанні **Gatekeeper не буде активовано**.
|
||||
У пакеті ".app", якщо атрибут карантину не додано до нього, при виконанні **Gatekeeper не буде активовано**.
|
||||
|
||||
|
||||
## References
|
||||
|
||||
- Apple Platform Security: About the security content of macOS Sonoma 14.4 (includes CVE-2024-27853) – [https://support.apple.com/en-us/HT214084](https://support.apple.com/en-us/HT214084)
|
||||
- Eclectic Light: How macOS now tracks the provenance of apps – [https://eclecticlight.co/2023/05/10/how-macos-now-tracks-the-provenance-of-apps/](https://eclecticlight.co/2023/05/10/how-macos-now-tracks-the-provenance-of-apps/)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user