Skip to content

MASTG-TECH-0118: Obtenção de Recursos de Segurança Fornecidos pelo Compilador

O compilador do iOS oferece vários recursos de segurança que podem ser habilitados durante a compilação)). Esses recursos ajudam a proteger o aplicativo contra vulnerabilidades comuns, como buffer overflows e memory leaks. Esta técnica fornece orientações sobre como verificar se esses recursos estão habilitados no binário compilado.

radare2 para iOS

No radare2, a presença desses recursos de segurança fornecidos pelo compilador pode ser verificada usando os comandos i e is.

Verificar PIC e Canaries: Usando o comando i, você pode verificar se o binário tem Position Independent Code (PIC) habilitado (pic) e se possui stack canaries (canary).

r2 MASTestApp
[0x100007408]> i~canary,pic
canary   true
pic      true

A saída mostra que o binário possui stack canaries e PIE habilitados.

Verificar ARC: Usando o comando is, você pode listar os símbolos no binário e verificar se há símbolos que indicam o uso do Automatic Reference Counting (ARC). Os símbolos comuns do ARC incluem:

  • objc_autorelease
  • objc_retainAutorelease
  • objc_release
  • objc_retain
  • objc_retainAutoreleasedReturnValue
  • swift_release
  • swift_retain

Um binário do iOS não precisa ter todos esses símbolos para ser considerado habilitado para ARC, mas a presença de alguns deles indica que o ARC está sendo usado.

[0x100007408]> is~release,retain
80  0x0000790c 0x10000790c LOCAL  FUNC 0        imp.objc_release_x20
81  0x00007918 0x100007918 LOCAL  FUNC 0        imp.objc_release_x24
82  0x00007924 0x100007924 LOCAL  FUNC 0        imp.objc_release_x25
83  0x00007930 0x100007930 LOCAL  FUNC 0        imp.objc_release_x27
84  0x0000793c 0x10000793c LOCAL  FUNC 0        imp.objc_release_x8
85  0x00007948 0x100007948 LOCAL  FUNC 0        imp.objc_retainAutoreleasedReturnValue
86  0x00007954 0x100007954 LOCAL  FUNC 0        imp.objc_retain_x23
101 0x00007a08 0x100007a08 LOCAL  FUNC 0        imp.swift_release
102 0x00007a14 0x100007a14 LOCAL  FUNC 0        imp.swift_retain

A saída mostra que o binário contém símbolos que indicam o uso do ARC.

Objection para iOS

O Objection possui um comando ios info binary que pode ser usado para obter informações sobre o binário, incluindo se stack canaries e PIE estão habilitados.

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
...

A saída mostra PIE, ARC e Canary com um valor de True ou False.