Skip to content

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_autorelease ou objc_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
...