MacOS Sandbox (초기 이름: Seatbelt) 는 샌드박스 내에서 실행되는 애플리케이션의허용된 작업을 샌드박스 프로필에 지정된 대로 제한합니다. 이는 애플리케이션이 예상된 리소스만 접근하도록 보장하는 데 도움이 됩니다.
com.apple.security.app-sandbox 권한을 가진 모든 앱은 샌드박스 내에서 실행됩니다. Apple 바이너리는 일반적으로 샌드박스 내에서 실행되며, App Store에 배포하기 위해서는 이 권한이 필수적입니다. 따라서 대부분의 애플리케이션은 샌드박스 내에서 실행됩니다.
프로세스가 할 수 있는 것과 할 수 없는 것을 제어하기 위해 샌드박스는 커널 전역의 모든syscalls에 후크를 가지고 있습니다. 앱의 권한에 따라 샌드박스는 특정 작업을 허용합니다.
주의: 심볼릭 링크가 Sandbox에서 "탈출"하여 다른 폴더에 접근하기 위해 존재하더라도, 앱은 여전히 접근할 수 있는 권한이 필요합니다. 이러한 권한은 .plist 안에 있습니다.
# Get permissionsplutil-convertxml1.com.apple.containermanagerd.metadata.plist-o-# Binary sandbox profile<key>SandboxProfileData</key><data>AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...# In this file you can find the entitlements:<key>Entitlements</key><dict><key>com.apple.MobileAsset.PhishingImageClassifier2</key><true/><key>com.apple.accounts.appleaccount.fullaccess</key><true/><key>com.apple.appattest.spi</key><true/><key>keychain-access-groups</key><array><string>6N38VWS5BX.ru.keepcoder.Telegram</string><string>6N38VWS5BX.ru.keepcoder.TelegramShare</string></array>[...]# Some parameters<key>Parameters</key><dict><key>_HOME</key><string>/Users/username</string><key>_UID</key><string>501</string><key>_USER</key><string>username</string>[...]# The paths it can access<key>RedirectablePaths</key><array><string>/Users/username/Downloads</string><string>/Users/username/Documents</string><string>/Users/username/Library/Calendars</string><string>/Users/username/Desktop</string><key>RedirectedPaths</key><array/>[...]
Sandboxed 애플리케이션에 의해 생성/수정된 모든 항목은 격리 속성을 갖게 됩니다. 이는 샌드박스 앱이 **open**으로 무언가를 실행하려고 할 때 Gatekeeper를 트리거하여 샌드박스 공간을 방지합니다.
샌드박스 프로필
샌드박스 프로필은 해당 샌드박스에서 허용/금지될 항목을 나타내는 구성 파일입니다. 이는 Scheme 프로그래밍 언어를 사용하는 **샌드박스 프로필 언어(SBPL)**를 사용합니다.
여기 예시를 찾을 수 있습니다:
(version 1) ; First you get the version(deny default) ; Then you shuold indicate the default action when no rule applies(allow network*) ; You can use wildcards and allow everything(allow file-read* ; You can specify where to apply the rule(subpath "/Users/username/")(literal "/tmp/afile")(regex #"^/private/etc/.*"))(allow mach-lookup(global-name "com.apple.analyticsd"))
App Store 앱은 프로필 **/System/Library/Sandbox/Profiles/application.sb**를 사용합니다. 이 프로필에서 **com.apple.security.network.server**와 같은 권한이 프로세스가 네트워크를 사용할 수 있도록 허용하는 방법을 확인할 수 있습니다.
SIP는 /System/Library/Sandbox/rootless.conf에 있는 platform_profile이라는 샌드박스 프로필입니다.
(version 1)(deny default)(allow file* (literal "/private/tmp/hacktricks.txt"))(allow process* (literal "/usr/bin/touch"))(allow file-read-data (literal "/")); This one will work
Apple이 작성한소프트웨어는 Windows에서 추가적인 보안 조치가 없으며, 애플리케이션 샌드박싱과 같은 기능이 없습니다.
sbtool<pid>mach#Check mac-ports (got from launchd with an api)sbtool<pid>file/tmp#Check file accesssbtool<pid>inspect#Gives you an explaination of the sandbox profilesbtool<pid>all
Custom SBPL in App Store apps
회사가 사용자 정의 샌드박스 프로필로 앱을 실행할 수 있을 가능성이 있습니다 (기본 프로필 대신). 그들은 Apple에 의해 승인되어야 하는 권한 **com.apple.security.temporary-exception.sbpl**을 사용해야 합니다.
이 권한의 정의는 **/System/Library/Sandbox/Profiles/application.sb:**에서 확인할 수 있습니다.