miércoles, 29 de julio de 2015

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.


martes, 28 de julio de 2015

Android Stagefright Exploit / POC (I)

Antes incluso de hablar sobre la existencia o no, de los exploits/POC correspondientes, que sin duda a estas alturas ya los hay, sería interesante saber que es exactamente "Stragefright".

Pues bien, Stragefright es básicamente el motor de reproducción de medios digitales que incorpora Android de forma nativa. Este componente software, incorpora ya una serie de codecs de-facto para la reproducción de la gran mayoría de los formatos multimedia más populares y generalizados.

En el siguiente digrama (cortesía de Google), se puede ver como interactuan las aplicaciones de reproducción o gestión de medios, con el framework multimedia nativo de Android (Stragefright).

Se distinguen las siguientes partes o capas en dicha arquitectura, a saber:

- El framework de aplicación, es donde se encontraría el codigo en si de la aplicación de usuario, la cual, haciendo uso de las APIs correspondientes (android.media) pueden interactuar con el hardware multimedia.

- Binder IPC Proxies, se trata de la capa encargada de facilitar la comunicación entre procesos. Estos proxies, se encuentran alojados en el directorio 'frameworks/av/media/libmedia' y comienzan con la letra 'I'

- Native Multimedia Framework, ya a un nivel nativo, Android proporciona un framework multimedia que hace uso del motor Stragefright para la grabación y reproducción de audio y video. Stragefright ya viene con varios codecs por software, pero además se podrían implementar nuevos codecs hardware a través del estandar de OpenMax.

- OpenMAX Integration Layer (IL), como he mencionado anteriormente, se trata de una estandarización para el uso de codecs multimedia basados en hardware. Digamos que son una especie de componentes o plugins en forma de librería compartida.

Bueno, ahora que ya tenemos una ligera idea sobre que es Stagefright, es momento de hablar sobre el/los bugs que están apareciendo recientemente en los dispositivos Android y, que pueden permitir a determinadas personas sin escrúpulos, acceder a dichos dispositivos para tomar el control de los mismos, haciendo uso de la cámara de fotos/video, el micrófono, tarjeta SD, y demás información que pulula por nuestros cacharros.

Según parece, ya hay una serie de identificadores asignados a tales vulnerabilidades:

CVE-2015-1538, CVE-2015-1539, CVE-2015-3824, CVE-2015-3826, CVE-2015-3827, CVE-2015-3828, CVE-2015-3829

Y volviendo al hilo del título, ¿cuánto pensáis que van a tardar en aparecer los correspondientes exploits?

Si como dicen con enviar un MMS manipulado adecuadamente, ya es posible conseguir la ejecución de código remoto y, como es lógico con los privilegios de ejecución de los procesos de StageFriht, parece bastante lógico pensar que los problemas estén en los codecs oportunos. ¿Será una decodificación de cabeceras? ¿Desbordamientos? o por ejemplo ¿Guardará Stagefriht algún tipo de archivo temporal con parte de los datos extraídos, para proceder posteriormente a su interpretación?

Yo por el momento, ya dispongo de un dispositivo Android listo para ser investigado.