Compartilhe seus truques de hacking enviando PRs para osHackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
O Sandbox do macOS (inicialmente chamado Seatbelt) limita as aplicações em execução dentro do sandbox às ações permitidas especificadas no perfil do Sandbox com o qual o aplicativo está sendo executado. Isso ajuda a garantir que o aplicativo acesse apenas os recursos esperados.
Qualquer aplicativo com a permissãocom.apple.security.app-sandbox será executado dentro do sandbox. Binários da Apple geralmente são executados dentro de um Sandbox e para publicar na App Store, essa permissão é obrigatória. Portanto, a maioria dos aplicativos será executada dentro do sandbox.
Para controlar o que um processo pode ou não fazer, o Sandbox possui ganchos em todas as chamadas de sistema em todo o kernel. Dependendo das permissões do aplicativo, o Sandbox irá permitir certas ações.
Alguns componentes importantes do Sandbox são:
A extensão do kernel/System/Library/Extensions/Sandbox.kext
O framework privado/System/Library/PrivateFrameworks/AppSandbox.framework
Um daemon em execução no espaço do usuário /usr/libexec/sandboxd
Os containers~/Library/Containers
Dentro da pasta containers, você pode encontrar uma pasta para cada aplicativo executado em sandbox com o nome do identificador do pacote:
Note que mesmo que os links simbólicos estejam lá para "escapar" do Sandbox e acessar outras pastas, o aplicativo ainda precisa ter permissões para acessá-las. Essas permissões estão dentro do arquivo .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/>[...]
Tudo criado/modificado por um aplicativo Sandboxed receberá o atributo de quarentena. Isso impedirá um espaço de sandbox ao acionar o Gatekeeper se o aplicativo sandbox tentar executar algo com open.
Perfis de Sandbox
Os perfis de Sandbox são arquivos de configuração que indicam o que será permitido/proibido naquele Sandbox. Ele utiliza a Linguagem de Perfil de Sandbox (SBPL), que usa a linguagem de programação Scheme.
Aqui você pode encontrar um exemplo:
(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"))
Verifique esta pesquisapara verificar mais ações que podem ser permitidas ou negadas.
Serviços importantes do sistema também são executados dentro de seus próprios perfis de sandbox personalizados, como o serviço mdnsresponder. Você pode visualizar esses perfis de sandbox personalizados em:
Os aplicativos da App Store usam o perfil/System/Library/Sandbox/Profiles/application.sb. Você pode verificar neste perfil como as autorizações, como com.apple.security.network.server, permitem que um processo use a rede.
O SIP é um perfil de Sandbox chamado platform_profile em /System/Library/Sandbox/rootless.conf
Exemplos de Perfis de Sandbox
Para iniciar um aplicativo com um perfil de sandbox específico, você pode usar:
(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
Note que o softwaredesenvolvido pela Apple que roda no Windowsnão possui precauções de segurança adicionais, como o isolamento de aplicativos.
O macOS armazena os perfis de sandbox do sistema em dois locais: /usr/share/sandbox/ e /System/Library/Sandbox/Profiles.
E se um aplicativo de terceiros possuir a concessão com.apple.security.app-sandbox, o sistema aplicará o perfil /System/Library/Sandbox/Profiles/application.sb a esse processo.
Perfil de Sandbox do iOS
O perfil padrão é chamado container e não temos a representação de texto SBPL. Na memória, esse sandbox é representado como uma árvore binária de Permitir/Negar para cada permissão do sandbox.
Depurar e Bypass de Sandbox
No macOS, ao contrário do iOS, onde os processos são isolados desde o início pelo kernel, os processos devem optar pelo sandbox por conta própria. Isso significa que no macOS, um processo não é restrito pelo sandbox até que decida ativamente entrar nele.
Os processos são automaticamente isolados do espaço do usuário quando iniciam se possuírem a concessão: com.apple.security.app-sandbox. Para uma explicação detalhada desse processo, verifique:
De acordo com isso, o sandbox_check (é um __mac_syscall), pode verificar se uma operação é permitida ou não pelo sandbox em um determinado PID.
A ferramenta sbtool pode verificar se um PID pode executar uma determinada ação:
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
SBPL personalizado em aplicativos da App Store
Pode ser possível para empresas fazer seus aplicativos rodarem com perfis de Sandbox personalizados (em vez do padrão). Elas precisam usar o direito com.apple.security.temporary-exception.sbpl que precisa ser autorizado pela Apple.
É possível verificar a definição desse direito em /System/Library/Sandbox/Profiles/application.sb: