O Sandblaster é uma ferramenta para reverter (descompilar) perfis de sandbox de maçã binários. Os perfis da Sandbox da Apple são escritos no SBPL ( Sandbox Profile Language ), uma linguagem semelhante a um esquema, e são compilados em um formato binário sem documentos e enviados. Usados principalmente no iOS, os perfis de sandbox também estão presentes no macOS. Sandblaster é, até onde sabemos, a primeira ferramenta que reverte os perfis binários da Sandbox para o formato SBPL original. Sandblaster trabalha no iOS a partir da versão 7, incluindo o iOS 11.
O Relatório Técnico Sandblaster: Revertendo a caixa de areia Apple apresenta informações extensas (embora um pouco desatualizadas) sobre os internos do Sandblaster.
Sandblaster confiou em trabalhos anteriores de Dionysus Blazakis e o código e os slides de Stefan Esser.
O reversor (na reverse-sandbox/ ) e a ferramenta ajudante (na helpers/ pasta) são executadas em qualquer plataforma de execução do Python.
O Sandblaster pode ser instalado e executado independente, embora recomendemos instalá -lo e executá -lo de dentro do IEXTRATOR. Verifique a documentação do iExtractor para obter informações.
O iExtractor é um software de código aberto lançado sob a licença BSD de 3 cláusulas.
O Sandblaster requer Python2 para o reversor (na reverse-sandbox/ ), Python3 com a biblioteca lief para script auxiliar (em helpers/ ).
Depois de clonar o repositório de Sandblaster, você deve instalar lief para Python3:
pip3 install lief
Se a instalação do lief falhar, você precisará compilar. Mais informações sobre como compilá -lo podem ser encontradas na página do Wiki.
Para usar o Sandblaster, você precisa acessar os perfis binários da caixa de areia e as operações da caixa de areia, um conjunto de strings que definem ações específicas de sandbox. As operações de sandbox e os perfis de sandbox são extraídos usando o script helpers/extract_sandbox_data.py . Os perfis de sandbox são extraídos da extensão da caixa de areia do kernel (como um pacote para iOS 4 e 9-11) ou do cache do kernel (como um pacote para iOS 12) ou do arquivo sandboxd no sistema de arquivos iOS (para iOS 5-8). As operações de sandbox são extraídas da extensão do kernel (para iOS 4-11) ou do cache do kernel (para iOS 12).
Assim, como dados de entrada, o Sandblaster requer o Kernelcache, a extensão do Kernel Sandbox e o arquivo sandboxd . Informações e scripts para extraí -los de um arquivo IPSW ( iPhone Software ) disponíveis ao público são apresentados pelo iExtractor.
Abaixo estão as etapas e comandos para reverter os perfis de sandbox para iOS 8.4.1, assumindo a extensão do kernel da caixa de areia ( com.apple.security.sandbox.kext ) e o arquivo sandboxd está disponível:
# Extract sandbox operations from kernelcache.
cd helpers/
./extract_sandbox_data.py -o iPad2,1_8.4.1_12H321.sb_ops iPad2,1_8.4.1_12H321.com.apple.security.sandox.kext 8.4.1
# Extract binary sandbox profile files from sandboxd.
mkdir iPad2,1_8.4.1_12H321.sandbox_profiles
./extract_sandbox_data.py -O iPad2,1_8.4.1_12H321.sandbox_profiles/ iPad2,1_8.4.1_12H321.sandboxd 8.4.1
# Reverse all binary sandbox profiles.
cd ../reverse-sandbox/
mkdir iPad2,1_8.4.1_12H321.reversed_profiles
for i in ../helpers/iPad2,1_8.4.1_12H321.sandbox_profiles/*; do python reverse_sandbox.py -r 8.4.1 -o ../helpers/iPad2,1_8.4.1_12H321.sb_ops -d iPad2,1_8.4.1_12H321.reversed_profiles/ "$i"; done
Abaixo estão as etapas e comandos para reverter os perfis de sandbox para iOS 9.3, assumindo que a extensão do kernel da caixa de areia ( com.apple.security.sandbox.kext ) está disponível:
# Extract sandbox operations from kernelcache.
cd helpers/
./extract_sandbox_data.py -o iPhone5,1_9.3_13E237.sb_ops iPhone5,1_9.3_13E237.com.apple.security.sandox.kext 9.3
# Extract sandbox profile bundle from kernel sandbox extension.
./extract_sandbox_data.py -O . iPhone5,1_9.3_13E237.com.apple.security.sandox.kext 9.3
cd ../reverse-sandbox/
# Reverse all binary sandbox profiles in sandbox bundle.
mkdir iPhone5,1_9.3_13E237.reversed_profiles
# Print all sandbox profiles in bundle.
python reverse_sandbox.py -r 9.3 -o ../helpers/iPhone5,1_9.3_13E237.sb_ops -d iPhone5,1_9.3_13E237.reversed_profiles/ ../helpers/sandbox_bundle -psb
# Do actual reversing.
python reverse_sandbox.py -r 9.3 -o ../helpers/iPhone5,1_9.3_13E237.sb_ops -d iPhone5,1_9.3_13E237.reversed_profiles/ ../helpers/sandbox_bundle
A extração dos perfis binários da caixa de areia difere entre iOS <= 8 e iOS> = 9. Como iOS> = 9 Os perfis binários da caixa de areia são armazenados em um pacote de caixa de areia na extensão da caixa de areia. O script helpers/extract_sandbox_data.py os extrai adequadamente, dependendo da versão iOS.
A opção -psb para reverse_sandbox.py imprime os perfis de sandbox parte de um pacote de sandbox sem fazer a reversão real.
O script reverse_sandbox.py precisa ser executado em seu diretório ( reverse-sandbox/ ), pois precisa dos outros módulos Python e do arquivo logger.config .
Os helpers/ subpasta contém scripts auxiliares que fornecem uma interface melhor para as ferramentas externas.
O reversor real faz parte da reverse-sandbox/ . Os arquivos aqui podem ser categorizados da seguinte forma:
reverse_sandbox.py . Ele analisa os argumentos da linha de comando, faz análise básica do arquivo binário de entrada (seções extrai seções) e chama as funções apropriadas dos outros módulos.operation_node.py . Ele fornece funções para criar o gráfico de regras correspondentes ao perfil da caixa de areia e para converter o gráfico em SBPL. É chamado por reverse_sandbox.py .sandbox_filter.py e a configuração em filters.json , filter_list.py e filters.py . FILTER FUNÇÕES ESPECÍFICAS são chamadas por operation_node.py .sandbox_regex.py e regex_parse.py . regex_parse.py é o analisador de back -end que converte a representação binária em um gráfico básico. sandbox_regex.py converte a representação do gráfico (um autômato) em uma expressão regular real (ou seja, uma série de caracteres e metacaracters). É chamado por reverse_sandbox.py para analisar expressões regulares, com a lista de expressão regular resultante passada para as funções expostas por operation_node.py ; operation_node.py os passa para os arquivos de manuseio de filtro Sandbox.reverse_string.py . A classe SandboxString primária em reverse_string.py é usada em sandbox_filter.py .logger.config . Por padrão, INFO e mensagens de nível superior são impressas no console, enquanto as mensagens DEBUG e de nível superior são impressas no arquivo reverse.log . Sandblaster trabalha para o iOS versão 4, incluindo o iOS 12. A Apple vem fazendo atualizações para o formato binário dos perfis da caixa de areia: como os perfis da caixa de areia do iOS 9 são armazenados em um pacote, pois o iOS 10 strings são agregados juntos em um formato binário especializado. O iOS 11 não trouxe nenhuma mudança no formato.
Junte -se a nós na discórdia para discussões ao vivo.