MASTG-KNOW-0061: Mecanismos de Proteção Binária
A detecção da presença de mecanismos de proteção binária depende fortemente da linguagem utilizada para desenvolver o aplicativo.
Embora o Xcode habilite todos os recursos de segurança binária por padrão, pode ser relevante verificar isso em aplicativos antigos ou para verificar configurações incorretas de flags do compilador. Os seguintes recursos são aplicáveis:
- PIE (Executável Independente de Posição):
- PIE aplica-se a binários executáveis (tipo Mach-O
MH_EXECUTE) fonte. - No entanto, não é aplicável para bibliotecas (tipo Mach-O
MH_DYLIB).
- PIE aplica-se a binários executáveis (tipo Mach-O
- Gerenciamento de memória:
- Tanto binários puros em Objective-C, Swift quanto híbridos devem ter ARC (Contagem Automática de Referência) habilitado.
- Para bibliotecas em C/C++, o desenvolvedor é responsável por fazer o gerenciamento manual de memória adequado. Veja "Bugs de Corrupção de Memória".
- Proteção contra Stack Smashing: Para binários puros em Objective-C, isso deve estar sempre habilitado. Como o Swift foi projetado para ser seguro em termos de memória, se uma biblioteca for escrita puramente em Swift e os canários de pilha não estiverem habilitados, o risco será mínimo.
Saiba mais:
- Referência de Formato de Arquivo OS X ABI Mach-O
- Sobre Proteções Binárias no iOS
- Segurança do processo de runtime no iOS e iPadOS
- Tópicos de Programação Mach-O - Código Independente de Posição
Testes para detectar a presença desses mecanismos de proteção dependem fortemente da linguagem utilizada para desenvolver o aplicativo. Por exemplo, técnicas existentes para detectar a presença de canários de pilha não funcionam para aplicativos puros em Swift.
Configurações do Projeto no Xcode¶
Proteção com Canários de Pilha (Stack Canary)¶
Passos para habilitar a proteção com canários de pilha em um aplicativo iOS:
- No Xcode, selecione seu target na seção "Targets", depois clique na aba "Build Settings" para visualizar as configurações do target.
- Certifique-se de que a opção "-fstack-protector-all" está selecionada na seção "Other C Flags".
- Certifique-se de que o suporte a Executáveis Independentes de Posição (PIE) está habilitado.
Proteção PIE¶
Passos para compilar um aplicativo iOS como PIE:
- No Xcode, selecione seu target na seção "Targets", depois clique na aba "Build Settings" para visualizar as configurações do target.
- Defina o iOS Deployment Target para iOS 4.3 ou posterior.
- Certifique-se de que "Generate Position-Dependent Code" (seção "Apple Clang - Code Generation") está definido como seu valor padrão ("NO").
- Certifique-se de que "Generate Position-Dependent Executable" (seção "Linking") está definido como seu valor padrão ("NO").
Proteção ARC¶
O ARC é habilitado automaticamente para aplicativos Swift pelo compilador swiftc. No entanto, para aplicativos Objective-C, você precisará garantir que esteja habilitado seguindo estes passos:
- No Xcode, selecione seu target na seção "Targets", depois clique na aba "Build Settings" para visualizar as configurações do target.
- Certifique-se de que "Objective-C Automatic Reference Counting" está definido como seu valor padrão ("YES").
Consulte o Technical Q&A QA1788 Building a Position Independent Executable.