macOS Sandbox
Basic Information
MacOS Sandbox (początkowo nazywany Seatbelt) ogranicza aplikacje działające w piaskownicy do dozwolonych działań określonych w profilu Sandbox, z którym działa aplikacja. Pomaga to zapewnić, że aplikacja będzie miała dostęp tylko do oczekiwanych zasobów.
Każda aplikacja z uprawnieniem com.apple.security.app-sandbox
będzie uruchamiana w piaskownicy. Binarne pliki Apple są zazwyczaj uruchamiane w piaskownicy, a aby opublikować w App Store, to uprawnienie jest obowiązkowe. Dlatego większość aplikacji będzie uruchamiana w piaskownicy.
Aby kontrolować, co proces może lub nie może robić, Sandbox ma haki we wszystkich wywołaniach systemowych w jądrze. W zależności od uprawnień aplikacji, Sandbox zezwoli na określone działania.
Niektóre ważne komponenty Sandbox to:
rozszerzenie jądra
/System/Library/Extensions/Sandbox.kext
prywatny framework
/System/Library/PrivateFrameworks/AppSandbox.framework
demon działający w przestrzeni użytkownika
/usr/libexec/sandboxd
kontenery
~/Library/Containers
W folderze kontenerów można znaleźć folder dla każdej aplikacji uruchamianej w piaskownicy o nazwie identyfikatora pakietu:
Wewnątrz każdego folderu identyfikatora pakietu możesz znaleźć plist i katalog danych aplikacji:
Zauważ, że nawet jeśli symlinki są tam, aby "uciec" z Sandbox i uzyskać dostęp do innych folderów, aplikacja nadal musi mieć uprawnienia do ich dostępu. Te uprawnienia znajdują się w .plist
.
Wszystko stworzone/zmodyfikowane przez aplikację w piaskownicy otrzyma atrybut kwarantanny. To zapobiegnie przestrzeni piaskownicy, uruchamiając Gatekeeper, jeśli aplikacja w piaskownicy spróbuje wykonać coś za pomocą open
.
Profile Piaskownicy
Profile piaskownicy to pliki konfiguracyjne, które wskazują, co będzie dozwolone/zabronione w tej piaskownicy. Używa Języka Profilu Piaskownicy (SBPL), który wykorzystuje język programowania Scheme.
Tutaj możesz znaleźć przykład:
Sprawdź to badanie aby sprawdzić więcej działań, które mogą być dozwolone lub zabronione.
Ważne usługi systemowe również działają w swoim własnym niestandardowym sandboxie, takim jak usługa mdnsresponder
. Możesz zobaczyć te niestandardowe profile sandbox w:
/usr/share/sandbox
/System/Library/Sandbox/Profiles
Inne profile sandbox można sprawdzić w https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles.
Aplikacje z App Store używają profilu /System/Library/Sandbox/Profiles/application.sb
. Możesz sprawdzić w tym profilu, jak uprawnienia takie jak com.apple.security.network.server
pozwalają procesowi na korzystanie z sieci.
SIP to profil Sandbox o nazwie platform_profile w /System/Library/Sandbox/rootless.conf
Przykłady profili Sandbox
Aby uruchomić aplikację z konkretnym profilem sandbox, możesz użyć:
Zauważ, że oprogramowanie napisane przez Apple, które działa na Windows, nie ma dodatkowych środków bezpieczeństwa, takich jak piaskownica aplikacji.
Przykłady obejścia:
https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c (są w stanie zapisywać pliki poza piaskownicą, których nazwa zaczyna się od
~$
).
Profile piaskownicy MacOS
macOS przechowuje profile piaskownicy systemu w dwóch lokalizacjach: /usr/share/sandbox/ i /System/Library/Sandbox/Profiles.
A jeśli aplikacja firm trzecich posiada uprawnienie com.apple.security.app-sandbox, system stosuje profil /System/Library/Sandbox/Profiles/application.sb do tego procesu.
Profil piaskownicy iOS
Domyślny profil nazywa się container i nie mamy tekstowej reprezentacji SBPL. W pamięci ta piaskownica jest reprezentowana jako drzewo binarne Allow/Deny dla każdego uprawnienia z piaskownicy.
Debugowanie i obejście piaskownicy
Na macOS, w przeciwieństwie do iOS, gdzie procesy są od początku piaskowane przez jądro, procesy muszą same zdecydować o wejściu do piaskownicy. Oznacza to, że na macOS proces nie jest ograniczany przez piaskownicę, dopóki aktywnie nie zdecyduje się do niej wejść.
Procesy są automatycznie piaskowane z przestrzeni użytkownika, gdy się uruchamiają, jeśli mają uprawnienie: com.apple.security.app-sandbox
. Aby uzyskać szczegółowe wyjaśnienie tego procesu, sprawdź:
Sprawdź uprawnienia PID
Zgodnie z tym, sandbox_check
(to jest __mac_syscall
), może sprawdzić czy operacja jest dozwolona, czy nie przez piaskownicę w danym PID.
Narzędzie sbtool może sprawdzić, czy PID może wykonać określoną akcję:
Custom SBPL w aplikacjach App Store
Możliwe jest, aby firmy uruchamiały swoje aplikacje z niestandardowymi profilami Sandbox (zamiast z domyślnym). Muszą użyć uprawnienia com.apple.security.temporary-exception.sbpl
, które musi być autoryzowane przez Apple.
Można sprawdzić definicję tego uprawnienia w /System/Library/Sandbox/Profiles/application.sb:
To będzie eval string po tym uprawnieniu jako profil Sandbox.
Last updated