macOS Sandbox
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Basic Information
O macOS Sandbox (inicialmente chamado de Seatbelt) limita as aplicações que estão rodando dentro do sandbox às ações permitidas especificadas no perfil do Sandbox com o qual o aplicativo está rodando. Isso ajuda a garantir que a aplicação estará acessando apenas os recursos esperados.
Qualquer aplicativo com a entitlement com.apple.security.app-sandbox
será executado dentro do sandbox. Binários da Apple geralmente são executados dentro de um Sandbox e, para ser publicado na App Store, essa entitlement é obrigatória. Portanto, a maioria das aplicações será executada dentro do sandbox.
Para controlar o que um processo pode ou não fazer, o Sandbox possui hooks em todas as syscalls ao longo do kernel. Dependendo das entitlements do aplicativo, o Sandbox 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 rodando em userland
/usr/libexec/sandboxd
Os containers
~/Library/Containers
Dentro da pasta de containers, você pode encontrar uma pasta para cada aplicativo executado em sandbox com o nome do bundle id:
Dentro de cada pasta de id de pacote, você pode encontrar o plist e o diretório de Dados do App:
Observe que, mesmo que os symlinks estejam lá para "escapar" do Sandbox e acessar outras pastas, o App ainda precisa ter permissões para acessá-las. Essas permissões estão dentro do .plist
.
Tudo criado/modificado por um aplicativo em Sandbox receberá o atributo de quarentena. Isso impedirá um espaço de sandbox ao acionar o Gatekeeper se o aplicativo em 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 nesse Sandbox. Ele usa a Linguagem de Perfil de Sandbox (SBPL), que utiliza a linguagem de programação Scheme.
Aqui você pode encontrar um exemplo:
Verifique esta pesquisa para conferir mais ações que podem ser permitidas ou negadas.
Importantes serviços do sistema também são executados dentro de seu próprio sandbox personalizado, como o serviço mdnsresponder
. Você pode visualizar esses perfis de sandbox personalizados em:
/usr/share/sandbox
/System/Library/Sandbox/Profiles
Outros perfis de sandbox podem ser verificados em https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles.
Aplicativos da App Store usam o perfil /System/Library/Sandbox/Profiles/application.sb
. Você pode verificar neste perfil como direitos como com.apple.security.network.server
permitem que um processo use a rede.
SIP é um perfil de Sandbox chamado platform_profile em /System/Library/Sandbox/rootless.conf
Exemplos de Perfil de Sandbox
Para iniciar um aplicativo com um perfil de sandbox específico, você pode usar:
Observe que o software autorizado pela Apple que roda em Windows não possui precauções de segurança adicionais, como o sandboxing de aplicativos.
Exemplos de bypass:
https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c (eles conseguem escrever arquivos fora do sandbox cujo nome começa com
~$
).
Perfis de Sandbox do MacOS
O macOS armazena perfis de sandbox do sistema em dois locais: /usr/share/sandbox/ e /System/Library/Sandbox/Profiles.
E se um aplicativo de terceiros tiver a com.apple.security.app-sandbox entitlement, o sistema aplica 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 & Bypass Sandbox
No macOS, ao contrário do iOS, onde os processos são isolados desde o início pelo kernel, os processos devem optar por entrar no sandbox. 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 userland quando começam, se tiverem a entitlement: com.apple.security.app-sandbox
. Para uma explicação detalhada desse processo, consulte:
Verificar Privilégios de PID
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 realizar uma determinada ação:
Custom SBPL em aplicativos da App Store
Pode ser possível para as empresas fazerem seus aplicativos rodarem com perfis de Sandbox personalizados (em vez do padrão). Elas precisam usar a permissão com.apple.security.temporary-exception.sbpl
que precisa ser autorizada pela Apple.
É possível verificar a definição dessa permissão em /System/Library/Sandbox/Profiles/application.sb:
Isto irá avaliar a string após esta concessão como um perfil de Sandbox.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated