macOS Gatekeeper / Quarantine / XProtect
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fpentest.eu%2FRENDER_WebSec_10fps_21sec_9MB_29042024.gif&width=768&dpr=4&quality=100&sign=bc0743d1&sv=1)
Gatekeeper
Gatekeeper - це функція безпеки, розроблена для операційних систем Mac, призначена для забезпечення того, щоб користувачі використовували лише надійне програмне забезпечення на своїх системах. Вона функціонує, перевіряючи програмне забезпечення, яке користувач завантажує та намагається відкрити з джерел, що не є App Store, таких як додаток, плагін або пакет установника.
Ключовий механізм Gatekeeper полягає в її процесі перевірки. Вона перевіряє, чи є завантажене програмне забезпечення підписаним визнаним розробником, що забезпечує автентичність програмного забезпечення. Додатково, вона підтверджує, чи є програмне забезпечення нотаризованим Apple, що підтверджує, що воно не містить відомого шкідливого вмісту і не було змінено після нотаризації.
Крім того, Gatekeeper посилює контроль і безпеку користувача, запитуючи користувачів підтвердити відкриття завантаженого програмного забезпечення вперше. Ця запобіжна міра допомагає запобігти випадковому запуску користувачами потенційно шкідливого виконуваного коду, який вони могли помилково прийняти за безпечний файл даних.
Application Signatures
Підписи додатків, також відомі як підписи коду, є критично важливим компонентом інфраструктури безпеки Apple. Вони використовуються для перевірки особи автора програмного забезпечення (розробника) та для забезпечення того, що код не був змінений з моменту останнього підписання.
Ось як це працює:
Підписання додатка: Коли розробник готовий розповсюдити свій додаток, він підписує додаток за допомогою приватного ключа. Цей приватний ключ пов'язаний з сертифікатом, який Apple видає розробнику під час реєстрації в програмі Apple Developer Program. Процес підписання включає створення криптографічного хешу всіх частин додатка та шифрування цього хешу за допомогою приватного ключа розробника.
Розповсюдження додатка: Підписаний додаток потім розповсюджується користувачам разом із сертифікатом розробника, який містить відповідний публічний ключ.
Перевірка додатка: Коли користувач завантажує та намагається запустити додаток, його операційна система Mac використовує публічний ключ з сертифіката розробника для розшифрування хешу. Потім вона перераховує хеш на основі поточного стану додатка та порівнює його з розшифрованим хешем. Якщо вони збігаються, це означає, що додаток не був змінений з моменту підписання розробником, і система дозволяє запуск додатка.
Підписи додатків є важливою частиною технології Gatekeeper Apple. Коли користувач намагається відкрити додаток, завантажений з Інтернету, Gatekeeper перевіряє підпис додатка. Якщо він підписаний сертифікатом, виданим Apple відомому розробнику, і код не був змінений, Gatekeeper дозволяє запуск додатка. В іншому випадку, він блокує додаток і сповіщає користувача.
Починаючи з macOS Catalina, Gatekeeper також перевіряє, чи був додаток нотаризований Apple, що додає додатковий рівень безпеки. Процес нотаризації перевіряє додаток на наявність відомих проблем безпеки та шкідливого коду, і якщо ці перевірки проходять, Apple додає квиток до додатка, який може перевірити Gatekeeper.
Check Signatures
Коли ви перевіряєте деякі зразки шкідливого ПЗ, ви завжди повинні перевіряти підпис бінарного файлу, оскільки розробник, який його підписав, може вже бути пов'язаний з шкідливим ПЗ.
Нотаризація
Процес нотаризації Apple слугує додатковим захистом для користувачів від потенційно шкідливого програмного забезпечення. Він передбачає, що розробник подає свою програму на перевірку до Служби нотаризації Apple, яку не слід плутати з перевіркою додатків. Ця служба є автоматизованою системою, яка ретельно перевіряє подане програмне забезпечення на наявність шкідливого контенту та будь-яких потенційних проблем з підписуванням коду.
Якщо програмне забезпечення проходить цю перевірку без жодних зауважень, Служба нотаризації генерує квиток нотаризації. Розробник зобов'язаний додати цей квиток до свого програмного забезпечення, процес, відомий як 'стаплінг'. Крім того, квиток нотаризації також публікується в Інтернеті, де Gatekeeper, технологія безпеки Apple, може отримати до нього доступ.
Під час першої установки або виконання програмного забезпечення користувачем, наявність квитка нотаризації - чи то прикріпленого до виконуваного файлу, чи знайденого в Інтернеті - інформує Gatekeeper, що програмне забезпечення було нотаризовано Apple. В результаті Gatekeeper відображає описове повідомлення в початковому діалоговому вікні запуску, вказуючи на те, що програмне забезпечення пройшло перевірки на наявність шкідливого контенту від Apple. Цей процес таким чином підвищує довіру користувачів до безпеки програмного забезпечення, яке вони встановлюють або запускають на своїх системах.
Перерахування GateKeeper
GateKeeper є як кількома компонентами безпеки, які запобігають виконанню ненадійних додатків, так і одним з компонентів.
Можна побачити статус GateKeeper за допомогою:
Зверніть увагу, що перевірки підпису GateKeeper виконуються лише для файлів з атрибутом Quarantine, а не для кожного файлу.
GateKeeper перевірить, чи може бінарний файл бути виконаний відповідно до налаштувань та підпису:
База даних, яка зберігає цю конфігурацію, знаходиться в /var/db/SystemPolicy
. Ви можете перевірити цю базу даних як root за допомогою:
Зверніть увагу, як перше правило закінчується на "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, щоб дозволити виконання певних додатків за допомогою:
Quarantine Files
При завантаженні програми або файлу, певні програми 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 у створеному файлі, але він не застосовується):
Last updated