Ir al contenido principal

Android Stagefright Exploit / POC (II)

Pero ¿Qué vectores podemos/debemos seguir para localizar este tipo de vulnerabilidades?


A priori, yo me decantaría principalmente por dos vectores muy distintos y, para los cuales se tendrán que emplear técnicas muy diferentes.


VECTOR de búsqueda 1


Ante todo hay que tener en cuenta que Android es un proyecto Open Source, lo que significa que tenemos acceso a su código fuente. Así, un claro vector de búsqueda sería por esta vía, es decir, analizando el código fuente en busca de aquellos 'Bugs', descuidos y metodologías, técnicas y funciones inseguras utilizadas por los ingenieros del software.

Por tanto, un poco para empezar a buscar es el repositorio del código fuente de Android, el cual podemos encontrar en la siguiente URL:


Como podemos ver en dicho repositorio, la cantidad de código fuente con la que tendremos que lidiar es claramente INMENSA, entonces ¿por qué camino debemos ir? En el caso que nos ocupa sobre StageFright, una vía clara de búsqueda, es la ruta que nos lleva directamente al framework de audio y video nativo del StageFright, el cual está ubicado aquí (para android-5.1.1 r8):


En caso de querer tener acceso al framework de otra reléase, podemos entrar desde esta otra URL:


Por ejemplo, para ir directos al código fuente en C++ de parte de Stagefright podríamos comenzar por aquí:



VECTOR de búsqueda 2

En este caso, como digo, las cosas serán muy diferentes. Ahora no se trata de analizar el código fuente en búsqueda de funciones 'sensibles' o estructuras mal definidas, etc. Aquí de lo que se trata es de utilizar un dispositivo "vivo", es decir, actuar sobre un dispositivo Android en tiempo real.

Nuevamente, en el caso que nos ocupa de StageFright y, en concreto en las vulnerabilidades que hacen referencia a la recepción de MMS, la técnica que se utilizará será la "Fuzzy Data Mining", básicamente el envío de datos mal-formados al dispositivo, con el fin de provocar algún tipo de error.

Está claro que el envío/recepción de mensajes de tipo MMS debe regirse por algún tipo de estándar con su correspondiente especificación, la cual se encarga de definir entre otras cosas las características, formatos de los datos, de las cabeceras, etc. que deben tener dichos mensajes.

Y entre otras cosas, algo que diferencia a un MMS de un SMS común, es que el MMS precisamente soporta el envío/recepción de archivos multimedia (audio y video). Archivos que pueden ser de diversos formatos y, los cuales nuevamente se deben regir por una especificación de formato, en la mayoría de los casos claramente definida.

Por ejemplo, para que os hagáis una idea StageFright, a priori es capaz de identificar las siguientes extensiones de archivos:

".mp3", ".mp4", ".m4a", ".3gp", ".3gpp", ".3g2", ".3gpp2", ".mpeg", ".ogg", ".mid", ".smf", ".imy", ".wma", ".aac", ".wav", ".amr", ".midi", ".xmf", ".rtttl", ".rtx", ".ota", ".mkv", ".mka", ".webm", ".ts", ".fl", ".flac", ".mxmf", ".avi", ".mpeg", ".mpg", ".awb", ".mpga"

Esto, que de entrada podría no significar gran cosa, ya nos está dando una idea aproximada de la cantidad de CODECs con los que tiene que lidiar Android y su complejo framework multimedia.

Por lo tanto y dicho esto, ¿qué pasaría si en lugar de enviar un MMS como el dispositivo Android espera recibir, le enviamos un MMS mal-formado o erróneo? Pues la respuesta es sencilla, si el software no está correctamente diseñado para la detección de este tipo de situaciones tipo excepciones no controladas y demás, se producirá algún error.

Esos errores serán precisamente los que convertirán en vulnerable al dispositivo, pudiendo permitir la ejecución de código remoto no deseado o mal intencionado.


Comentarios

Entradas populares de este blog

Como usar el TL431 (muy facil)

En este artículo, no vamos a entrar en el funcionamiento interno de este IC, ni tampoco en sus características técnicas, puesto que para esos fines ya existe su hoja de datos correspondiente. Más bien, lo que pretendo aquí es dejar constancia de como podemos utilizar este IC desde un punto de vista práctico, útil y sobre todo de una manera sencilla, con el objetivo de que cualquiera pueda utilizarlo. Si has llegado hasta aquí, probablemente ya sabes que por internet hay mucha información sobre este IC, pero también bastante confusa o excesivamente técnica, sin mostrar tan siquiera un ejemplo de funcionamiento, o como calcular sus pasivos. Pues se acabó, a partir de hoy y después de leer este post, ya te quedará claro como utilizar el TL431 para obtener una tensión de referencia estable y precisa. Vamos al grano y que mejor que empezar aclarando que el TL431 NO ES EXACTAMENTE UN ZENER como se empeñan en decir en muchos sitios, es verdad que se le conoce como el Zener Progra

Árbol binario de expresión y Notación Posfija (II)

En una publicación anterior, hablaba sobre que es la notación posfija, para que puede ser útil y mostraba un pequeño ejemplo con una expresión aritmética simple: (9 - (5 + 2)) * 3 Pues bien, hoy voy a mostraros como podemos crear el árbol binario correspondiente para analizar o evaluar esta expresión, haciendo uso del recorrido en postorden. Lo primero que debemos hacer es crear el árbol, respetando las siguientes reglas: ⦁ Los nodos con hijos (padres) representarán los operadores de la expresión. ⦁ Las hojas (terminales sin hijos) representarán los operandos. ⦁ Los paréntesis generan sub-árboles. A continuación podemos ver cómo queda el árbol para la expresión del ejemplo (9 - (5 + 2)) * 3: Si queremos obtener la notación postfija a partir de este árbol de expresión, debemos recorrerlo en postorden (nodo izquierdo – nodo derecho – nodo central), obteniendo la expresión: 952+-3x Así, si quisiéramos evaluar la expresión, podemos hacer uso de un algoritmo

Expresiones Aritméticas en Notación Postfija (I)

La Notación Polaca Inversa, Notación Posfija o RPN (Reverse Polish Notation) no es más que una forma de representación de expresiones aritméticas. Se trata de una notación que permite omitir los paréntesis en las expresiones, pero manteniendo el orden o prioridad de los distintos operadores y los cálculos se van realizando de forma secuencial en el momento en que se introduce un operador. Si quieres programar una calculadora, un interprete, un evaluador de expresiones, un compilador, etc., sin duda te resultará muy interesante. A modo de ejemplo, consideremos la siguiente expresión aritmética simple para obtener su notación en postfijo: (9 - (5 + 2)) * 3 En primer lugar evaluamos el paréntesis interior, obteniendo la siguiente expresión: (9 - (52+)) * 3 Ahora evualuamos el paréntesis exterior: (952+-) y finalmente el producto: 952+-3* Con lo que finalmente hemos obtenido la notación posfija 952+-3* correspondiente a la expresión (9 - (5 + 2)) * 3 Ni que de