MASTG-TECH-0095: Interceptação de Métodos
Frida¶
Em Rastreamento de Execução, utilizamos o frida-trace ao navegar para um site no Safari e descobrimos que o método initWithURL: é chamado para inicializar um novo objeto de solicitação de URL. Podemos consultar a declaração desse método no Apple Developer Website:
- (instancetype)initWithURL:(NSURL *)url;
Usando essa informação, podemos escrever um script do Frida que intercepta o método initWithURL: e imprime o URL passado para o método. O script completo está abaixo. Certifique-se de ler o código e os comentários inline para entender o que está acontecendo.
import sys
import frida
# JavaScript a ser injetado
frida_code = """
// Obtém uma referência ao método initWithURL: da classe NSURLRequest
var URL = ObjC.classes.NSURLRequest["- initWithURL:"];
// Intercepta o método
Interceptor.attach(URL.implementation, {
onEnter: function(args) {
// Obtém um handle para NSString
var NSString = ObjC.classes.NSString;
// Obtém uma referência à função NSLog e a usa para imprimir o valor do URL
// args[2] refere-se ao primeiro argumento do método (NSURL *url)
var NSLog = new NativeFunction(Module.findExportByName('Foundation', 'NSLog'), 'void', ['pointer', '...']);
// Devemos sempre inicializar um pool de autorelease antes de interagir com APIs Objective-C
var pool = ObjC.classes.NSAutoreleasePool.alloc().init();
try {
// Cria um binding JS a partir de um NativePointer.
var myNSURL = new ObjC.Object(args[2]);
// Cria um objeto de string ObjC imutável a partir de um objeto de string JS.
var str_url = NSString.stringWithString_(myNSURL.toString());
// Chama a função NSLog do iOS para imprimir o URL nos logs do dispositivo iOS
NSLog(str_url);
// Usa o console.log do Frida para imprimir o URL no seu terminal
console.log(str_url);
} finally {
pool.release();
}
}
});
"""
process = frida.get_usb_device().attach("Safari")
script = process.create_script(frida_code)
script.load()
sys.stdin.read()
Inicie o Safari no dispositivo iOS. Execute o script Python acima no seu host conectado e abra o log do dispositivo (conforme explicado na seção "Monitoring System Logs" do capítulo "iOS Basic Security Testing"). Tente abrir um novo URL no Safari, por exemplo, https://github.com/OWASP/mastg; você deverá ver a saída do Frida nos logs, assim como no seu terminal.

Claro, este exemplo ilustra apenas uma das coisas que você pode fazer com o Frida. Para desbloquear todo o potencial da ferramenta, você deve aprender a usar sua JavaScript API. A seção de documentação do site do Frida possui um tutorial e exemplos para usar o Frida no iOS.