Skip to content

MASTG-TECH-0082: Obter Bibliotecas Compartilhadas

Para identificar e analisar efetivamente bibliotecas compartilhadas em um aplicativo iOS, é importante distinguir entre as bibliotecas empacotadas com o aplicativo e as bibliotecas do sistema fornecidas pelo iOS. Essa distinção ajuda a focar nos componentes exclusivos do aplicativo, reduzindo assim ruídos durante as avaliações de segurança.

  • Bibliotecas do Sistema: Parte do iOS SDK, localizadas em diretórios como /System/Library/Frameworks ou /usr/lib. Essas bibliotecas são padrão para todos os aplicativos iOS e geralmente não requerem análise detalhada, a menos que haja um motivo específico.
  • Bibliotecas Empacotadas com o App: Incluídas no pacote do aplicativo, geralmente encontradas no diretório Frameworks (YourApp.app/Frameworks). Elas incluem bibliotecas de primeira parte (personalizadas) e de terceiros que o desenvolvedor incorporou intencionalmente ao aplicativo. São o foco principal das avaliações de segurança. No entanto, observe que algumas bibliotecas do sistema também podem ser empacotadas com o aplicativo para garantir compatibilidade com versões específicas do iOS SDK, sendo necessário filtrá-las.

Note que não estamos considerando bibliotecas estáticas, que, diferentemente das bibliotecas dinâmicas carregadas em tempo de execução, tornam-se parte do binário do aplicativo, resultando em um único arquivo executável.

Estratégia: Use um dos métodos abaixo, ou uma combinação deles, para identificar bibliotecas compartilhadas e, em seguida, filtre as bibliotecas do sistema para focar naquelas empacotadas com o aplicativo.

Inspecionando o Binário do Aplicativo

Navegue até o diretório Frameworks dentro do pacote do aplicativo para encontrar as bibliotecas compartilhadas. Elas geralmente estão na forma de arquivos .framework ou .dylib.

ls -1 Frameworks
App.framework
Flutter.framework
libswiftCore.dylib
libswiftCoreAudio.dylib
...

otool

Você pode usar o comando otool -L para listar as bibliotecas compartilhadas.

otool -L MASTestApp
MASTestApp:
        /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 2503.1.0)
        /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1345.120.2)
        /System/Library/Frameworks/CryptoKit.framework/CryptoKit (compatibility version 1.0.0, current version 1.0.0)
        ...

radare2 para iOS

No radare2, você pode listar as bibliotecas vinculadas usando o comando il.

r2 MASTestApp
[0x100006e9c]> il
[Linked libraries]
/System/Library/Frameworks/Foundation.framework/Foundation
/usr/lib/libobjc.A.dylib
/usr/lib/libSystem.B.dylib
/System/Library/Frameworks/CryptoKit.framework/CryptoKit
...

Objection para iOS

Você pode usar o comando list_frameworks do Objection para listar todos os pacotes do aplicativo que representam Frameworks.

...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios bundles list_frameworks
Executable      Bundle                                     Version    Path
--------------  -----------------------------------------  ---------  -------------------------------------------
Bolts           org.cocoapods.Bolts                        1.9.0      ...8/DVIA-v2.app/Frameworks/Bolts.framework
RealmSwift      org.cocoapods.RealmSwift                   4.1.1      ...A-v2.app/Frameworks/RealmSwift.framework
                                                                      ...ystem/Library/Frameworks/IOKit.framework
...

O comando list_bundles lista todos os pacotes do aplicativo que não estão relacionados a frameworks. A saída contém o nome do executável, ID do pacote, versão da biblioteca e caminho para a biblioteca.

...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios bundles list_bundles
Executable    Bundle                                       Version  Path
------------  -----------------------------------------  ---------  -------------------------------------------
DVIA-v2       com.highaltitudehacks.DVIAswiftv2.develop          2  ...-1F0C-4DB1-8C39-04ACBFFEE7C8/DVIA-v2.app
CoreGlyphs    com.apple.CoreGlyphs                               1  ...m/Library/CoreServices/CoreGlyphs.bundle

Frida para iOS

A função Process.enumerateModules() no REPL do Frida permite enumerar os módulos carregados na memória durante a execução.

[iPhone::com.iOweApp]-> Process.enumerateModules()
[
    {
        "base": "0x10008c000",
        "name": "iOweApp",
        "path": "/private/var/containers/Bundle/Application/F390A491-3524-40EA-B3F8-6C1FA105A23A/iOweApp.app/iOweApp",
        "size": 49152
    },
    {
        "base": "0x1a1c82000",
        "name": "Foundation",
        "path": "/System/Library/Frameworks/Foundation.framework/Foundation",
        "size": 2859008
    },
    {
        "base": "0x1a16f4000",
        "name": "libobjc.A.dylib",
        "path": "/usr/lib/libobjc.A.dylib",
        "size": 200704
    },

    ...