macOS Gatekeeper / Quarantine / XProtect
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gatekeeper — це функція безпеки, розроблена для операційних систем Mac, призначена для забезпечення того, щоб користувачі використовували лише надійне програмне забезпечення на своїх системах. Вона функціонує шляхом перевірки програмного забезпечення, яке користувач завантажує та намагається відкрити з джерел, що не є App Store, таких як додаток, плагін або пакет установника.
Ключовий механізм Gatekeeper полягає в її процесі перевірки. Вона перевіряє, чи є завантажене програмне забезпечення підписаним визнаним розробником, що забезпечує автентичність програмного забезпечення. Додатково, вона підтверджує, чи є програмне забезпечення нотаризованим Apple, що підтверджує, що воно не містить відомого шкідливого вмісту і не було змінено після нотаризації.
Крім того, Gatekeeper посилює контроль і безпеку користувача, запитуючи користувачів підтвердити відкриття завантаженого програмного забезпечення вперше. Ця запобіжна міра допомагає запобігти випадковому запуску потенційно шкідливого виконуваного коду, який користувач міг помилково прийняти за безпечний файл даних.
Підписи додатків, також відомі як підписи коду, є критично важливим компонентом інфраструктури безпеки Apple. Вони використовуються для перевірки особи автора програмного забезпечення (розробника) та для забезпечення того, що код не був змінений з моменту останнього підписання.
Ось як це працює:
Підписання додатка: Коли розробник готовий розповсюдити свій додаток, він підписує додаток за допомогою приватного ключа. Цей приватний ключ пов'язаний з сертифікатом, який Apple видає розробнику під час реєстрації в програмі Apple Developer Program. Процес підписання включає створення криптографічного хешу всіх частин додатка та шифрування цього хешу за допомогою приватного ключа розробника.
Розповсюдження додатка: Підписаний додаток потім розповсюджується користувачам разом із сертифікатом розробника, який містить відповідний публічний ключ.
Перевірка додатка: Коли користувач завантажує та намагається запустити додаток, його операційна система Mac використовує публічний ключ з сертифіката розробника для розшифрування хешу. Потім вона перераховує хеш на основі поточного стану додатка та порівнює його з розшифрованим хешем. Якщо вони збігаються, це означає, що додаток не був змінений з моменту підписання розробником, і система дозволяє запуск додатка.
Підписи додатків є важливою частиною технології Gatekeeper Apple. Коли користувач намагається відкрити додаток, завантажений з Інтернету, Gatekeeper перевіряє підпис додатка. Якщо він підписаний сертифікатом, виданим Apple відомому розробнику, і код не був змінений, Gatekeeper дозволяє запуск додатка. В іншому випадку, він блокує додаток і сповіщає користувача.
Починаючи з macOS Catalina, Gatekeeper також перевіряє, чи був додаток нотаризований Apple, що додає додатковий рівень безпеки. Процес нотаризації перевіряє додаток на наявність відомих проблем безпеки та шкідливого коду, і якщо ці перевірки проходять, Apple додає квиток до додатка, який Gatekeeper може перевірити.
При перевірці деяких зразків шкідливого програмного забезпечення ви завжди повинні перевіряти підпис бінарного файлу, оскільки розробник, який його підписав, може вже бути пов'язаний зі шкідливим програмним забезпеченням.
Процес нотаризації Apple слугує додатковим захистом для користувачів від потенційно шкідливого програмного забезпечення. Він передбачає, що розробник подає свою програму на перевірку до Служби нотаризації Apple, яку не слід плутати з перевіркою додатків. Ця служба є автоматизованою системою, яка ретельно перевіряє подане програмне забезпечення на наявність шкідливого контенту та будь-які потенційні проблеми з підписуванням коду.
Якщо програмне забезпечення проходить цю перевірку без жодних зауважень, Служба нотаризації генерує квиток нотаризації. Розробник зобов'язаний додати цей квиток до свого програмного забезпечення, процес, відомий як 'стаплінг'. Крім того, квиток нотаризації також публікується в Інтернеті, де Gatekeeper, технологія безпеки Apple, може отримати до нього доступ.
Під час першої установки або виконання програмного забезпечення користувачем, наявність квитка нотаризації - чи то прикріпленого до виконуваного файлу, чи знайденого в Інтернеті - інформує Gatekeeper, що програмне забезпечення було нотаризовано Apple. В результаті Gatekeeper відображає описове повідомлення в початковому діалоговому вікні запуску, вказуючи на те, що програмне забезпечення пройшло перевірки на наявність шкідливого контенту від Apple. Цей процес таким чином підвищує довіру користувачів до безпеки програмного забезпечення, яке вони встановлюють або запускають на своїх системах.
Зверніть увагу, що з версії Sequoia, spctl
більше не дозволяє змінювати конфігурацію Gatekeeper.
spctl
- це інструмент CLI для перерахунку та взаємодії з Gatekeeper (через демон syspolicyd
за допомогою XPC повідомлень). Наприклад, можна побачити статус GateKeeper за допомогою:
Зверніть увагу, що перевірки підписів GateKeeper виконуються лише для файлів з атрибутом Quarantine, а не для кожного файлу.
GateKeeper перевірить, чи може бінарний файл бути виконаний відповідно до налаштувань та підпису:
syspolicyd
є основним демон, відповідальним за забезпечення роботи Gatekeeper. Він підтримує базу даних, розташовану в /var/db/SystemPolicy
, і ви можете знайти код для підтримки бази даних тут та SQL шаблон тут. Зверніть увагу, що база даних не обмежена SIP і доступна для запису root, а база даних /var/db/.SystemPolicy-default
використовується як оригінальна резервна копія на випадок, якщо інша буде пошкоджена.
Більше того, пакунки /var/db/gke.bundle
та /var/db/gkopaque.bundle
містять файли з правилами, які вставляються в базу даних. Ви можете перевірити цю базу даних як root за допомогою:
syspolicyd
також відкриває XPC сервер з різними операціями, такими як assess
, update
, record
та cancel
, які також доступні за допомогою Security.framework
's SecAssessment*
API, а xpctl
насправді спілкується з syspolicyd
через XPC.
Зверніть увагу, як перше правило закінчується на "App Store", а друге на "Developer ID", і що в попередньому зображенні було дозволено виконувати програми з App Store та ідентифікованих розробників. Якщо ви зміните це налаштування на App Store, то правила "Notarized Developer ID" зникнуть.
Існує також тисячі правил типу GKE:
Це хеші, які з:
/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
/var/db/gke.bundle/Contents/Resources/gk.db
/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
Або ви можете перерахувати попередню інформацію за допомогою:
Опції --master-disable
та --global-disable
команди spctl
повністю відключать ці перевірки підписів:
Коли повністю увімкнено, з'явиться нова опція:
Можна перевірити, чи буде додаток дозволено GateKeeper за допомогою:
Можливо додати нові правила в GateKeeper, щоб дозволити виконання певних додатків за допомогою:
Щодо розширень ядра, папка /var/db/SystemPolicyConfiguration
містить файли зі списками kext, які дозволено завантажувати. Більше того, spctl
має право com.apple.private.iokit.nvram-csr
, оскільки здатен додавати нові попередньо схвалені розширення ядра, які також потрібно зберігати в NVRAM у ключі kext-allowed-teams
.
Після завантаження програми або файлу, певні програми macOS, такі як веб-браузери або поштові клієнти, додають розширений атрибут файлу, відомий як "прапор карантину", до завантаженого файлу. Цей атрибут діє як захисний захід, щоб позначити файл як такий, що походить з ненадійного джерела (інтернету), і потенційно несе ризики. Однак не всі програми додають цей атрибут, наприклад, звичайне програмне забезпечення клієнта BitTorrent зазвичай обходить цей процес.
Наявність прапора карантину сигналізує про функцію безпеки Gatekeeper macOS, коли користувач намагається виконати файл.
У випадку, якщо прапор карантину відсутній (як у випадку з файлами, завантаженими через деякі клієнти BitTorrent), перевірки Gatekeeper можуть не виконуватись. Тому користувачі повинні бути обережними при відкритті файлів, завантажених з менш безпечних або невідомих джерел.
Перевірка дійсності підписів коду є ресурсоємним процесом, який включає в себе генерацію криптографічних хешів коду та всіх його упакованих ресурсів. Крім того, перевірка дійсності сертифіката передбачає проведення онлайн-перевірки на серверах Apple, щоб дізнатися, чи був він відкликаний після його видачі. З цих причин повна перевірка підпису коду та нотаризації є недоцільною для виконання щоразу при запуску програми.
Отже, ці перевірки виконуються лише при виконанні програм з атрибутом карантину.
Цей атрибут повинен бути встановлений програмою, що створює/завантажує файл.
Однак файли, які знаходяться в пісочниці, матимуть цей атрибут, встановлений для кожного файлу, який вони створюють. А непісочні програми можуть встановити його самостійно або вказати ключ LSFileQuarantineEnabled у Info.plist, що змусить систему встановити розширений атрибут com.apple.quarantine
на створені файли,
Більше того, всі файли, створені процесом, що викликає qtn_proc_apply_to_self
, підлягають карантину. А API qtn_file_apply_to_path
додає атрибут карантину до вказаного шляху файлу.
Можна перевірити його статус і увімкнути/вимкнути (потрібні права root) за допомогою:
Ви також можете знайти, чи має файл розширений атрибут карантину за допомогою:
Перевірте значення розширених атрибутів і знайдіть додаток, який записав атрибут карантину за допомогою:
Насправді, процес "може встановити прапори карантину для файлів, які він створює" (я вже намагався застосувати прапор USER_APPROVED у створеному файлі, але він не застосовується):
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)