miércoles, 19 de agosto de 2015

¿Son las aplicaciones Android tan seguras como piensas?

Hace algunos días, la firma de seguridad Zimperium reveló el descubrimiento de un fallo en el sistema de Android, llamado Stagefright, que permitía a un atacante remoto ejecutar código mediante un MMS malicioso. La vulnerabilidad se encuentra en un proceso con permisos "system" que podría permitir a un atacante tomar el control del dispositivo (permitiría escuchar comunicaciones, robar datos, etc.). Esto nos hace pensar qué ocurre con las aplicaciones que descargamos. 

Para averiguarlo hemos analizado una de las aplicaciones más famosas, que cuenta con más de 1.000 millones de descargas: Facebook. Es una gran sorpresa descubrir la gran cantidad de librerías nativas usadas por esta aplicación, 67 en total. Para optimizar el tiempo de ejecución, todo el código que se encarga de comprimir imágenes, cifrar las comunicaciones, etc. está desarrollado a bajo nivel. Sin embargo, codificar a bajo nivel aumenta la superficie de ataque. Entre otras dificultades el código nativo requiere una serie de habilidades que no se encuentran en el común de los desarrolladores. Siendo la gestión de la memoria la principal característica y fuente irremediable de problemas de seguridad y estabilidad de los programas.

Librerías nativas de Facebook
Para encontrar posibles librerías vulnerables, nos hemos centrado en librerías que usan código libre como libpng, libevent, libjpegturbo, SQLite, etc. Con la ayuda de las bases de datos del MITRE y CVEDetails, hemos podido encontrar las vulnerabilidades que afectan a estas librerías desde el año 2012. ¿Por qué el 2012? Porque el compilador con que se compilaron esas librerías data de ese mismo año. Solo tomamos en cuenta las vulnerabilidades que podrían permitir ejecutar código arbitrario.
  • libevent (versión obsoleta 1.4.14b-stable): afectada por el CVE-2014-6272 que podría permitir un desbordamiento de búfer basado en heap. Sin embargo, Facebook nunca llama a las funciones perjudicadas por esa vulnerabilidad, así que esta vulnerabilidad no se puede explotar.
        
  • JPEGturbo (versión por lo menos de 2013): se encontró un importante fallo (CVE-2012-2806) en la versión de 2012, pero fue corregido el mismo año, así que esta librería tampoco está afectada.
         
  • SQLite no tiene ninguna vulnerabilidad que permita a un atacante comprometer el sistema (según CVEDetails).
        
  • libPNG (versión obsoleta 1.6.10, del 6 de marzo de 2014): tiene el CVE-2015-0973 que podría permitir a un atacante provocar un desbordamiento de búfer, que según MITRE conllevaría una denegación de servicio o a la ejecución de código arbitrario.
             
  • Facebook también usa otras librerías como libwebp, libsjni, libglog, etc. pero no se encontró ninguna vulnerabilidad en las versiones empleadas de todas ellas.


Finalmente, hemos constatado que Facebook usa librerías obsoletas, como libPNG (versión 1.6.10) que podría permitir a un atacante remoto ejecutar código arbitrario. Y con ello leer SMS, contactos, etc. (todos los permisos de Facebook). 

Aunque en algunos casos la corrupción de memoria pueda llevar al compromiso del sistema, Android tiene protecciones para hacer la explotación más difícil. Podemos destacar medidas como la randomización de las posiciones de las librerías en la memoria (ASLR), el sandboxing (con una mejora gracias a la integración de SELinux), protección contra la ejecución de la pila, etc.

Esto con una aplicación sobradamente conocida y depurada, y con un fuerte respaldo detrás como la de Facebook. ¿Qué puede ocurrir con otras aplicaciones?

Más información:

una-al-dia (28/07/2015) Drake y el codiciado tesoro del androide

How to Protect from StageFright Vulnerability

Vulnerability Summary for CVE-2015-0973

CVE-2014-6272

CVE-2012-2806

Libpng » Libpng » 1.6.10 : Vulnerability Statistics

SHA256 de la aplicación Facebook analizada 05e6f038cf145b2ed02f500c340cf2e797b5f12edeccb977fa6bfc3a486594d8


Laurent Delosieres

No hay comentarios:

Publicar un comentario en la entrada