macOS Sandbox
Basic Information
MacOS Sandbox (спочатку називався Seatbelt) обмежує програми, що працюють всередині пісочниці, до дозволених дій, зазначених у профілі пісочниці, з яким працює програма. Це допомагає забезпечити, що програма буде отримувати доступ лише до очікуваних ресурсів.
Будь-яка програма з правом com.apple.security.app-sandbox
буде виконуватися всередині пісочниці. Бінарні файли Apple зазвичай виконуються всередині пісочниці, і для публікації в App Store це право є обов'язковим. Тому більшість програм буде виконуватися всередині пісочниці.
Щоб контролювати, що процес може або не може робити, пісочниця має хуки у всіх системних викликах по всьому ядру. Залежно від прав програми пісочниця дозволить певні дії.
Деякі важливі компоненти пісочниці:
Розширення ядра
/System/Library/Extensions/Sandbox.kext
Приватна бібліотека
/System/Library/PrivateFrameworks/AppSandbox.framework
Демон, що працює в користувацькому просторі
/usr/libexec/sandboxd
Контейнери
~/Library/Containers
Всередині папки контейнерів ви можете знайти папку для кожної програми, виконуваної в пісочниці, з назвою ідентифікатора пакета:
Всередині кожної папки з ідентифікатором пакету ви можете знайти plist та каталог даних програми:
Зверніть увагу, що навіть якщо символічні посилання існують для "втечі" з пісочниці та доступу до інших папок, додаток все ще повинен мати дозволи для їх доступу. Ці дозволи знаходяться всередині .plist
.
Все, що створюється/модифікується пісочницею, отримає атрибут карантину. Це запобігатиме простору пісочниці, активуючи Gatekeeper, якщо пісочна програма намагатиметься виконати щось за допомогою open
.
Профілі пісочниці
Профілі пісочниці - це конфігураційні файли, які вказують, що буде дозволено/заборонено в цій пісочниці. Вони використовують Мову профілів пісочниці (SBPL), яка базується на Scheme мові програмування.
Ось приклад:
Перевірте це дослідження щоб дізнатися більше про дії, які можуть бути дозволені або заборонені.
Важливі системні служби також працюють у своїх власних кастомних пісочницях, таких як служба mdnsresponder
. Ви можете переглянути ці кастомні профілі пісочниці у:
/usr/share/sandbox
/System/Library/Sandbox/Profiles
Інші профілі пісочниці можна перевірити на https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles.
Додатки з App Store використовують профіль /System/Library/Sandbox/Profiles/application.sb
. Ви можете перевірити в цьому профілі, як права, такі як com.apple.security.network.server
, дозволяють процесу використовувати мережу.
SIP - це профіль пісочниці, названий platform_profile у /System/Library/Sandbox/rootless.conf
Приклади профілів пісочниці
Щоб запустити додаток з конкретним профілем пісочниці, ви можете використовувати:
Зверніть увагу, що програмне забезпечення, написане Apple, яке працює на Windows, не має додаткових заходів безпеки, таких як пісочниця для додатків.
Приклади обходу:
https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c (вони можуть записувати файли за межами пісочниці, назва яких починається з
~$
).
Профілі пісочниці MacOS
macOS зберігає профілі системної пісочниці у двох місцях: /usr/share/sandbox/ та /System/Library/Sandbox/Profiles.
І якщо сторонній додаток має право com.apple.security.app-sandbox, система застосовує профіль /System/Library/Sandbox/Profiles/application.sb до цього процесу.
Профіль пісочниці iOS
За замовчуванням профіль називається container, і у нас немає текстового представлення SBPL. У пам'яті ця пісочниця представлена як бінарне дерево Allow/Deny для кожного дозволу з пісочниці.
Налагодження та обход пісочниці
На macOS, на відміну від iOS, де процеси з самого початку ізольовані ядром, процеси повинні самостійно вибрати пісочницю. Це означає, що на macOS процес не обмежений пісочницею, поки він активно не вирішить увійти в неї.
Процеси автоматично потрапляють у пісочницю з користувацького простору, коли вони запускаються, якщо у них є право: com.apple.security.app-sandbox
. Для детального пояснення цього процесу дивіться:
Перевірка привілеїв PID
Згідно з цим, sandbox_check
(це __mac_syscall
), може перевірити, чи дозволена операція чи ні пісочницею для певного PID.
Інструмент sbtool може перевірити, чи може PID виконати певну дію:
Custom SBPL in App Store apps
Можливо, що компанії можуть змусити свої додатки працювати з кастомними профілями пісочниці (замість за замовчуванням). Вони повинні використовувати право com.apple.security.temporary-exception.sbpl
, яке потрібно авторизувати Apple.
Можна перевірити визначення цього права в /System/Library/Sandbox/Profiles/application.sb:
Це оцінить рядок після цього права як профіль Sandbox.
Last updated