Desde que Roman me propuso escribir el prólogo de Beginning Frida he ido interesándome día a día por este proyecto interesantísimo proyecto.
Frida es, según su propia página, un framework de instrumentación dinámica para desarrolladores, investigadores en seguridad y reversers
Puede que os preguntéis, ¿qué es la instrumentación dinámica? Para ello lo primero es entender que es la instrumentación. Según Wikipedia la instrumentación de un código tiene el objetivo de medir el rendimiento de un programa, diagnosticar errores o dar información de cómo se comporta un programa.
La instrumentación se puede llevar a cabo de dos formas, de forma dinámica o de forma estática. Si se dispone del código fuente de un programa se pueden añadir partes de código que realicen esta función. Un ejemplo sencillo para medir el tiempo de ejecución de una función en python, se puede lograr mediante este código en el que se toma un timestamp antes y después de llamar a la función que se quiere evaluar.
Esto es lo que se conoce como instrumentación estática, ya que esta embebida dentro del propio código. Es lo que muchos programadores hemos hecho cuando queremos tener información de un programa sin estar pegados al depurador. Esta instrumentación se ejecutará siempre que se ejecute el programa, con el consecuente costo computacional que implica.
Otra forma de llevar a cabo esta instrumentación es la forma dinámica. Al contrario que la instrumentación estática, que se establece en tiempo de compilación, la instrumentación dinámica se establece cuando el programa esta siendo ejecutado. La instrumentación dinámica es útil cuando no se dispone del código de un programa o cuando se quiere establecer la instrumentación en un periodo concreto, por ejemplo, en fase de pruebas y sin alterar el código del programa.
Frida es un framework portable que funciona en múltiples arquitecturas de procesadores y sistemas operativos. Se puede utilizar para instrumentar aplicaciones móviles en Android o iOS y también para instrumentar aplicaciones Windows, Linux o MAC.
Uno de los primeros usos que le podemos dar a Frida podría ser, utilizarlo para analizar un programa y detectar si utiliza funciones prohibidas u obsoletas como pueden ser strcpy, memcpy, strcat o similares. Para ello podemos empezar utilizando frida-trace indicándole la funcion o funciones que queremos monitorizar con el parámetro -i.
Al lanzar este comando, Frida nos genera el esqueleto de los scripts que llevan a cabo la instrumentacion dinámica. A partir de estos scripts podemos ir añadiendo código que se incorporará de forma dinámica al programa que estemos instrumentando.
Gracias a esta instrumentación podemos obtener, por ejemplo, cuales son los argumentos con los que se llaman a estas funciones. Además Frida también nos permite modificar el valor de los argumentos con los que se llama a esa función en tiempo de ejecución. Ambos ejemplos pueden ser útiles a la hora de estudiar si un programa es explotable o no.
Esto es algo que trabajaremos en el curso de Exploiting que impartiré el próximo 10 de Diciembre en RootedMalaga. Durante el curso exploraremos algunos usos que nos puede permitir Frida a la hora de explotar programas. Apuntaros pronto dado que las plazas son limitadas
Gracias por leer esta entrada y nos vemos en la red.