5 de julio de 2013

¿Android vulnerable?

Pues si, se ha descubierto una vulnerabilidad de Android que afecta al 99% de dispositivos y que permitiría a un atacante reemplazar ciertas APKs por un fallo en el sistema criptográfico y de actualizaciones. Pero primero para que todo el mundo entienda explicamos poco a poco las cosas. Tenemos que saber porqué las aplicaciones van firmadas y como se actualizan.


Por un lado ¿Quién puede actualizar aplicaciones?...Cualquiera mínimamente familiarizado con Android sabe que las aplicaciones están empaquetadas en archivos APK: básicamente, un archivo ZIP con el ejecutable (podríamos decir que es como si fuese un .EXE), información y recursos e imágenes de la aplicación.
Android tiene todas las aplicaciones de vuestro teléfono en archivos APK en el sistema. A la hora de actualizar una aplicación, la cosa es sencilla: reemplazamos el APK viejo con el nuevo . Puede que haga más tareas, pero esto es lo principal. Ahora bien, hay un problema potencial: ¿qué pasa si el APK nuevo no es del mismo desarrollador? Por ejemplo, ¿qué debería hacer Android si tú creas una actualización de Gmail y quieres instalarla sustituyendo la que ya tienes? La respuesta obvia es que no debería dejarte. Android sólo permite actualizaciones en las que el APK nuevo ha sido creado por el mismo que creó el APK viejo. Para ello usa un proceso llamado firma criptográfica. En qué consiste la firma de un APK


Plantearos que la firma criptográfica es como sellar un papel. Sólo tú tienes ese sello, y si alguien escribe algo más en el papel tendrá que hacerlo por encima del sello (usad la imaginación), de tal forma que sabrás que se ha modificado. El proceso más técnico, pero simplificado, es el que sigue: Obtenemos la huella digital del APK. Esta huella o hash es como tu huella dactilar: es única para ese APK y no se repite (teóricamente). Si algo cambia, el hash cambia también. Ciframos el hash con la clave privada del desarrollador. Esta clave sólo la tiene él y no la comparte con nadie más, por algo es privada. Ese hash cifrado es la firma digital.
Vayamos ahora a la parte de verificación de la firma: Recibimos la firma digital, y la desciframos con la clave pública del desarrollador. Calculamos el hash del APK que hemos recibido y comparamos con lo que hemos descifrado de la firma digital. Si coinciden, la firma es válida. Como el hash es único para cada APK, nos aseguramos de que el paquete no se ha modificado desde que lo creó el desarrollador. Por otra parte, si un mensaje se cifra con una clave privada sólo se puede descifrar con la clave pública correspondiente; y con esa clave pública no podrás descifrar mensajes de ninguna otra clave privada. De esta forma que te aseguras que sólo ha podido ser el desarrollador quien ha creado el paquete. Es decir, que tal y como está planteada la firma digital, es un certificado imposible de falsificar (como siempre, en teoría) que te asegura que el desarrollador fue el que creó esa aplicación y que nadie más la ha modificado.

A la hora de instalar la actualización, Android comprueba dos cosas: que la firma del APK sea válida y que la clave privada sea la misma con la que se firmó la versión anterior. Si el paquete se ha firmado con otra clave, el sistema lo reconocerá como una aplicación nueva y no sustituirá a la vieja.
Este método asegura que sólo el desarrollador original, y nadie más que él, puede crear actualizaciones para sus aplicaciones.

¿Y la vulnerabilidad? Una vez que ya sabemos perfectamente cómo se actualiza una aplicación de Android, veamos dónde se ha encontrado la vulnerabilidad. Bluebox no ha desvelado todos los detalles del fallo, ni cómo funciona ni cómo explotarlo. Sólo ha dicho dónde está y en qué consiste. Se trata de un fallo en el sistema de verificación de la firma de las aplicaciones. Gracias a él, alguien podría modificar un APK de tal forma que la firma digital seguiría siendo válida. Por ejemplo, podría cambiar el APK de Gmail y Android seguiría pensando que no ha sido modificado desde que lo firmó Google al crearlo. Una vez que podemos modificar los paquetes sin invalidar la firma, alguien podría introducir código malicioso en un APK conocido sin que el sistema lo detecte. Básicamente, pueden conseguir que instales una aplicación maliciosa disfrazada de aplicación conocida y confiable. Un ejemplo de escenario de ataque: te envían un enlace diciendo que ha salido una nueva actualización de Google Maps. Descargas el paquete (un APK de Google Maps firmado por Google), te aparece el aviso preguntando si quieres actualizar, aceptas y listo. Android no detecta que en realidad ese paquete ha sido modificado y tiene un troyano que permitirá a un atacante obtener acceso a tu teléfono. Al ser una actualización no necesita pedirte permisos: ya se los diste al instalar la aplicación original. Quizás no pase nada si instalas una actualización maliciosa de Angry Birds: al fin y al cabo no tendrá muchos más permisos que la aplicación original. Pero, ¿y si la actualización es para Gmail, por ejemplo? Tendrían acceso a todos tus correos, a Internet… Perfecto para montar una botnet o para robar tus cuentas.
Incluso hay un esceneario peor: una actualización de una aplicación de sistema que tenga todos los permisos posibles. El atacante tendría acceso ilimitado a tu sistema mientras tú piensas que has instalado una actualización inocente para mejorar algún ajuste del móvil.

Que hacer al respecto: Este fallo afecta a cualquier tipo de aplicación de Android. ¿Cómo puede hacerte llegar el atacante esa aplicación modificada.?  Para que te llegasen estas aplicaciones maliciosas a través de una actualización de Google Play, los hackers se tendrían que meter en los servidores de Google, y enviar la actualización manualmente. Este sistema es muy dificil, ya que está bien protegido, por ello Google Play es seguro. Por lo que la única forma que les queda es instalado desde origenes desconocidos, descargándolas de otros mercados con menos controles y seguridad, o simplemente haciendo un clic en una página web que descargue el APK.

Este fallo se notificó a Google y demás fabricantes en febrero, pero sólo Samsung ha podido preparar un parche para su S4. Como afecta a casi todos los teléfonos desde Android 1.6, y teniendo en cuenta el ritmo de actualizaciones de Android, un buen número de teléfonos se van a quedar con él para siempre. Muchos usuarios poco experimentados pueden caer en la trampa de confiar en estas actualizaciones, ya que pueden parecer totalmente legítimas y no resultar tan extrañas como un juego de pinball que pide acceso a tus SMS. Incluso podrían caer usuarios más avanzados: con distribuir enlaces de “Nueva versión filtrada de Gmail para Android” valdría para infectar un buen número de teléfonos de gente que conoce perfectamente el sistema.





No hay comentarios:

Publicar un comentario