jueves, 18 de junio de 2015

Cajas rotas, arena derramada

Un grupo de investigadores de varias universidades estadounidenses y chinas, ha publicado un interesante estudio en el que muestran los resultados de las pruebas a las que han sometido el modelo de aislamiento de procesos de Apple. Los resultados son cuanto menos inquietantes, no solo por el hecho de la demostración en la que pudieron acceder al llavero del sistema y llevarse un buen botín, sino que fueron capaces de evadir el estricto proceso de aprobación de la App Store, publicando una aplicación que era capaz de romper el aislamiento entre aplicaciones y acceder, o abusar del acceso, a recursos privilegiados.

El modelo de seguridad basado en "sandbox" no es nuevo ni exclusivo de Apple, obviamente. Desde hace ya bastante tiempo se intuyó la necesidad de separar, más aun, los procesos, incluso aquellos que compartían privilegios y propietario. De esta forma se protegen de manera más granular los recursos propios de cada aplicación. El sistema, pensado en principio para limitar programas en etapas experimentales que pudieran desestabilizar el sistema, servía también para contener y aislar el impacto de un proceso malicioso, impidiendo o dificultando su "onda expansiva".

Existen múltiples aproximaciones y diferentes implementaciones del modelo de sandboxing ("¿Cajarenización?"). Android, por ejemplo, asigna un UID de usuario distinto a cada aplicación y corre esa aplicación bajo ese usuario. Un uso curioso, quizás perverso en cuanto a costumbres, del modelo de permisos basado en usuario de Unix donde es habitual que ciertos procesos tengan usuario propio, pero solo unos pocos. Los recursos compartidos del sistema, esos que requieren permisos del usuario al instalar la aplicación, se administran a través de grupos. Toda aplicación o librería por encima del kernel Linux de un sistema Android corre bajo esta premisa. El componente que permite el sandboxing de procesos corre en espacio del kernel, por lo que muchas técnicas de evasión pasan por explotar una debilidad o vulnerabilidad en dicho espacio. No podemos evitar mencionar la utilidad de esta clase de arquitectura en el análisis dinámico de malware, apoyado en la virtualización de sistemas completos, dotando al analista de una herramienta sin par cuando necesita evaluar un conjunto de muestras de manera masiva.

Como todo sistema, como todo producto que lleve la consigna de la seguridad va a ser objeto de revisión por parte de la comunidad. La evasión de sandboxes no es noticia. En cada edición de Pwn2Own podemos ver como caen sistemáticamente las sandbox de los navegadores, la de Android ha sido desencajada varias veces a través de múltiples tipos de vulnerabilidades. Pon una puerta acorazada con una cerradura de última tecnología y cuando te des la vuelta tendrás a un señor en camiseta negra con un PowerPoint explicándote como la abrió de manera trivial. Nada nuevo bajo el sol.

En esta ocasión, no solo ha sido la evasión de este modelo en los sistemas operativos, cada vez más convergentes, de Apple. Ya de por sí, el hecho de que una aplicación consiga acceder a los recursos de otra aplicación resulta grave, ver esa aplicación publicada en el App Store es un hecho que deshace el componente diferenciador de Apple respecto a los mercados de aplicaciones. El control de aquello que se publica. Esa es la confianza que deposita el usuario cuando se decide a descargar e instalar una aplicación.

En palabras de los propios investigadores:

"Our research leads to the discovery of a series of high-impact security weaknesses, which enable a sandboxed malicious app, approved by the Apple Stores, to gain unauthorized access to other apps’ sensitive data"

y más adelante:

"Note that all our attack
apps were uploaded to
the Apple App Stores
"
Han demostrado que es posible subir una aplicación a la App Store capaz de acceder a recursos para la cual no estaba autorizada. Recursos que no deberían ser compartidos entre la aplicación gestora y el resto.

Bien, ya tenemos una aplicación maliciosa en el sistema ¿Cómo lo hace?

No se trata de explotación de vulnerabilidades al estilo de desbordamientos o punteros caídos en desgracia. Son fallos de diseño, de un diseño quizás excesivamente despreocupado, quizás por la presencia de componentes de seguridad como la sandbox. Creer que el sistema va a asumir el rol de guardaespaldas de todos los procesos es una temeridad. Es como desarrollar una aplicación en C pretendiendo que un hipotético sistema antiexploits cubra el riesgo de una gestión de memoria deficiente.

Acceso a los ítem de otra aplicación del llavero del sistema

El llavero del sistema, aunque no forma parte estrictamente de la sandbox, se comporta de manera similar, incluso desde el punto de vista de las aplicaciones la gestión de los recursos allí almacenados es parecida. En principio el llavero del sistema solo da acceso a las entradas guardadas por una misma aplicación, sin embargo es posible, cuando se crea una entrada, agregar otras aplicaciones al estilo de una lista de control de acceso.

Si una entrada en concreto no está creada cuando la aplicación legítima solicita su uso se consulta su existencia y si no existe se procede a su creación. El ataque se basa en la posibilidad de crear esta entrada por una aplicación maliciosa ANTES de que esta sea creada por la legítima. Cuando la aplicación maliciosa crea la entrada agrega a la legítima a la lista de aplicaciones autorizadas para acceder a ese llavero. Posteriormente, si el usuario instala dicha aplicación legítima, su entrada ya habrá sido creada adrede. Cuando se introduzca, por ejemplo, una contraseña, esa entrada seguirá siendo propiedad de la aplicación maliciosa y podrá acceder al contenido para robarla. La aplicación legítima seguirá creyendo que la entrada es suya, debido a que el sistema le permite el acceso al haber sido agregada por la maliciosa. Ingenioso.

BID conflictivos

Las aplicaciones en un Mac se presentan en un paquete de aspecto homogéneo pero en realidad son carpetas que contienen una jerarquía de archivos con sus recursos, ejecutables y bibliotecas. Cuando se genera una aplicación se asigna un identificador denominado BID. Este identificador ha de ser único a ojos de la App Store para que la aplicación sea aprobada, requisito, uno de muchos, indispensable.

Este BID también lo poseen los recursos integrados y portados por la aplicación, por ejemplo, ciertos ejecutables o conjunto de bibliotecas (denominados "frameworks" en Mac) necesarios para la aplicación principal, este tipo de recursos se denominan ‘sub-targets’.

Como dijimos, Apple inspecciona el BID de la aplicación principal, pero no efectúa esta comprobación en los mencionados 'sub-targets'. Esto permite a un atacante asignar el BID de un 'sub-target' de otra aplicación sin que esta incongruencia sea detectada. Cuando la aplicación maliciosa es ejecutada gana acceso a los recursos de la aplicación legítima. Por ejemplo, los investigadores ganaron acceso a los recursos de programas como Evernote, WeChat, QQ, etc.

Secuestro de WebSockets locales

Otro ataque que se basa en el esquema de pillería lazarillesca. Determinadas aplicaciones poseen un esquema cliente-servidor usando WebSockets a modo de comunicación IPC, desde una extensión en el navegador web a un servidor local ejecutado por la aplicación.

En las pruebas realizadas sobre la aplicación 1Password (gestor de contraseñas con integración en el navegador), pudieron constatar que no se efectúa una identificación del servidor a la escucha, la extensión de 1Password del navegador creía estar hablando con su contraparte en el sistema.

El resultado fue que todas las contraseñas se enviaban a una aplicación maliciosa que se encontraba a la escucha. Es decir, si se consigue ejecutar antes la aplicación maliciosa, esta se anticipa tomando el control del puerto acordado entre extensión-servidor. No hay forma de que la extensión compruebe si el servidor a la escucha es o no legítimo. No se trata de un fallo exclusivo de 1Password, el ataque es extensible a toda aplicación que use un esquema similar.

Secuestro de esquemas URL

Como sabemos, ciertas aplicaciones registran un 'handler' o esquema URL para facilitar la gestión de ciertos tipos de recursos. Así por ejemplo, si en el sistema, el esquema 'ftp://' está registrado por una determinada aplicación, cuando abramos una URL el sistema ejecutará la aplicación responsable de gestionar ese recurso y le pasará la URL.

En este caso _y visto lo visto_ el ataque se basa de nuevo en la anticipación en la toma de un recurso, en este caso las pruebas se hicieron registrando el esquema URL "wunderlist://" con el objeto de ser gestionado por una aplicación maliciosa. Wunderlist es una aplicación para la gestión de listas de tareas.

Cuando el usuario se autentifica es redirigido a través de una URL del tipo "wunderlist://". El problema es que esta URL contendrá un token secreto con la sesión del usuario, susceptible de ser interceptado para secuestrar la sesión activa del usuario.

Este mismo ataque es extensivo a aplicaciones como Pinterest o Facebook, las cuales usan un concepto similar de integración en el sistema.

XARA

Con el propósito de determinar qué tipos de aplicaciones contienen esquemas de funcionamiento similares a los descritos, los investigadores crearon una serie de herramientas para señalar aquellas que podrían ser objeto de alguno de estos ataques. El resultado fue demoledor: De 1.612 aplicaciones, el 88.6% es vulnerable a alguno de los ataques de este tipo.

El conjunto de ataques es denominado por los investigadores como XARA. (Unauthorized Cross-App Resource Access). En el documento publicado detallan las contramedidas y una propuesta de mitigación para solucionar posibles abusos mientras el fabricante toma medidas para paliar estas debilidades

Cajas rotas, arena derramada

Como hemos podido comprobar, no se trata de vulnerabilidades o fallos de programación. Son fallos de diseño, debilidades, excesos de confianza y la temible falsa sensación de seguridad. El hecho de que tu aplicación se ejecute en un entorno protegido, aislado o confinado no significa que un vecino listo no sepa arreglárselas para saltar la valla y fisgonear en tus dominios. Programación defensiva y pesimista. En desarrollo cobra valor la máxima: Si algo puede salir mal, no va a salir mal, probablemente saldrá bastante peor de lo que imaginas.

Más información:

Unauthorized Cross-App Resource Access on Mac OS X and iOS




David García
Twitter: @dgn1729

1 comentario: