MASTG-TECH-0086: Rastreamento de Métodos

A interceptação de métodos Objective-C é uma técnica útil para testes de segurança em iOS. Por exemplo, você pode estar interessado em operações de armazenamento de dados ou requisições de rede. No exemplo a seguir, escreveremos um rastreador simples para registrar requisições HTTP(S) feitas através das APIs HTTP padrão do iOS. Também mostraremos como injetar o rastreador no navegador Safari.

Nos exemplos a seguir, assumiremos que você está trabalhando em um dispositivo com jailbreak. Caso não seja este o caso, você primeiro precisa seguir os passos descritos em Injetando Frida Gadget em um IPA Automaticamente para reempacotar o aplicativo Safari com o Frida Gadget.

O Frida inclui o frida-trace, uma ferramenta de rastreamento de funções. O frida-trace aceita métodos Objective-C através da flag -m. Você pode passar wildcards também - por exemplo, dado -[NSURL *], o frida-trace instalará automaticamente hooks em todos os seletores da classe NSURL. Usaremos isso para ter uma ideia geral sobre quais funções de biblioteca o Safari chama quando o usuário abre uma URL.

Execute o Safari no dispositivo e certifique-se de que o dispositivo está conectado via USB. Em seguida, inicie o frida-trace da seguinte forma:

$ frida-trace -U -m "-[NSURL *]" Safari
Instrumenting functions...
-[NSURL isMusicStoreURL]: Loaded handler at "/Users/berndt/Desktop/__handlers__/__NSURL_isMusicStoreURL_.js"
-[NSURL isAppStoreURL]: Loaded handler at "/Users/berndt/Desktop/__handlers__/__NSURL_isAppStoreURL_.js"
(...)
Started tracing 248 functions. Press Ctrl+C to stop.

Em seguida, navegue para um novo site no Safari. Você deverá ver chamadas de funções rastreadas no console do frida-trace. Observe que o método initWithURL: é chamado para inicializar um novo objeto de requisição de URL.

           /* TID 0xc07 */
  20313 ms  -[NSURLRequest _initWithCFURLRequest:0x1043bca30 ]
 20313 ms  -[NSURLRequest URL]
(...)
 21324 ms  -[NSURLRequest initWithURL:0x106388b00 ]
 21324 ms     | -[NSURLRequest initWithURL:0x106388b00 cachePolicy:0x0 timeoutInterval:0x106388b80