MASTG-TEST-0087: Certifique-se de que os recursos de segurança gratuitos estão ativados
Deprecated Test
This test is deprecated and should not be used anymore. Reason: Nova versão disponível no MASTG V2.
Please check the following MASTG v2 tests that cover this v1 test:
Visão Geral¶
Análise Estática¶
Você pode usar o radare2 para verificar os recursos de segurança do binário.
Vamos usar o Damn Vulnerable iOS App DVIA v1 como exemplo. Abra seu binário principal com o radare2:
r2 DamnVulnerableIOSApp
E execute os seguintes comandos:
[0x1000180c8]> i~pic,canary
canary true
pic true
[0x1000180c8]> is~release,retain
124 0x002951e0 0x1000891e0 LOCAL FUNC 0 imp.dispatch_release
149 0x00294e80 0x100088e80 LOCAL FUNC 0 imp.objc_autorelease
150 0x00294e8c 0x100088e8c LOCAL FUNC 0 imp.objc_autoreleasePoolPop
151 0x00294e98 0x100088e98 LOCAL FUNC 0 imp.objc_autoreleasePoolPush
152 0x00294ea4 0x100088ea4 LOCAL FUNC 0 imp.objc_autoreleaseReturnValue
165 0x00294f40 0x100088f40 LOCAL FUNC 0 imp.objc_release
167 0x00294f58 0x100088f58 LOCAL FUNC 0 imp.objc_retainAutorelease
168 0x00294f64 0x100088f64 LOCAL FUNC 0 imp.objc_retainAutoreleaseReturnValue
169 0x00294f70 0x100088f70 LOCAL FUNC 0 imp.objc_retainAutoreleasedReturnValue
Todos os recursos estão habilitados nestes exemplos:
-
PIE (Position Independent Executable): indicado pela flag
pic true.- Aplica-se a todos os aplicativos independentemente da linguagem utilizada.
- Aplica-se apenas ao executável principal (
MH_EXECUTE), não às bibliotecas dinâmicas (MH_DYLIB).
-
Stack Canary: indicado pela flag
canary true.- Aplica-se a aplicativos que contenham código Objective-C.
- Não é necessariamente obrigatório para aplicativos puramente em Swift (Swift é memory safe por design).
- Especialmente importante para aplicativos que contenham código C/C++, pois eles fornecem acesso direto à memória e ponteiros, tornando-os mais vulneráveis a buffer overflows.
-
ARC (Automatic Reference Counting): indicado por símbolos como
objc_autoreleaseouobjc_retainAutorelease.- Importante para binários que contenham código Objective-C.
- Para binários escritos puramente em Swift, o ARC está habilitado por padrão.
- ARC não é relevante para binários escritos puramente em C/C++, pois é um recurso de gerenciamento de memória específico para Objective-C e Swift.
Análise Dinâmica¶
Essas verificações podem ser realizadas dinamicamente usando objection. Aqui está um exemplo:
com.yourcompany.PPClient on (iPhone: 13.2.3) [usb] # ios info binary
Name Type Encrypted PIE ARC Canary Stack Exec RootSafe
-------------------- ------- ----------- ----- ----- -------- ------------ ----------
PayPal execute True True True True False False
CardinalMobile dylib False False True True False False
FraudForce dylib False False True True False False
...