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