Estudio: Sobreexposición de credenciales de Amazon en apps

lunes, 16 de noviembre de 2015

Cada vez más frecuente el desarrollo de aplicaciones móviles que interactúan con servicios comunes en entornos de movilidad como Amazon Simple Storage Service (S3), Amazon Simple Notification Service (SNS), Amazon Simple Queue Service (SQS) o Amazon Mobile Analytics.

Para interactuar con estos servicios, las apps necesitan comunicarse con ellos y autenticarse con algún tipo de credencial (habitualmente basado en tokens). Hemos identificado prácticas de programación inseguras en forma de gestión incorrecta de credenciales de acceso, que podrían permitir a un atacante modificar el comportamiento de las apps afectadas.

Gestión de identidades en Amazon AWS

Los desarrolladores de apps móviles necesitan sus propias claves de acceso para realizar llamadas programáticas a los servicios Amazon. Pueden usar el AWS Command Line Interface (AWS CLI) , los SDKs de AWS, o llamadas HTTP directas usando las APIs para servicios individuales de AWS.

Esto último es lo más común en las comunicaciones de las apps. Desde la consola de administración de Amazon, se pueden crear, modificar, ver o rotar las claves de acceso, conocidas como access key y secret key. Estas claves de acceso son válidas para interactuar de forma programática con el contenido o servicios ofrecido por Amazon. Las apps que hagan uso de este contenido, deberán por tanto conocer las claves de acceso.

Aunque existen métodos más adecuados, algunos programadores incrustan esta información en la propia app. Si el acceso es de solamente de lectura, esto puede resultar en una mala práctica de programación, pero no en un problema de seguridad necesariamente. Sin embargo, si los permisos están mal establecidos, existe la posibilidad de controlar el contenido. Si además las contraseñas son accesibles por cualquiera que analice la aplicación, un atacante podría modificar ese contenido que más tarde será usado por la app.

Si no se toman las medidas necesarias a la hora de establecer los permisos de acceso de las API keys, cualquiera con acceso a las claves podría no solo tener acceso a la información, sino modificarla.
Las claves de acceso pueden ser introducidas en una app a través de un archivo de credenciales que se encuentra dentro del APK, en texto claro. Así, resulta más fácil la gestión y mantenimiento de la app. Este fichero se genera a través del AWS CLI. Por defecto su nombre es AWSCredentials.properties, y su formato similar al que se adjunta bajo estas líneas:
Ejemplo (falso) de credenciales

Mediante el uso de Tacyt, la herramienta de ciberinteligiencia de apps móviles de ElevenPaths, se ha buscado cuántas apps en los diferentes markets monitorizados contienen un fichero de este tipo, realizándose una comprobación posterior de la naturaleza de las credenciales asociadas.

Búsqueda en Tacyt de APKs con este tipo de ficheros

Nuestra base de datos, compuesta por 4.5 millones de apps, hemos localizado 1.635 ficheros APK que contienen un archivo de este tipo en el momento de redacción del presente informe. Esas 1.635 corresponden a apps y además versiones diferentes de esa misma app (hashes) almacenadas en nuestra base de datos. Las apps únicas (independientemente de su versión, y atendiendo a nombre de paquete único) son en realidad 478 apps diferentes repartidas en diferentes markets.

Se ha realizado un pequeño estudio comprobando en qué situación se encuentran las credenciales encontradas y qué peligro representan.

Análisis de los datos

Tras el análisis de las apps que contenían ficheros que potencialmente podrían suponer un problema de seguridad, este es el resultado obtenido:
  • De todas las apps estudiadas, 102 ya no se encuentran en el market oficial y han sido retiradas. Aunque hayan sido retiradas, siguen suponiendo un problema, puesto que las apps permanecen en los dispositivos instalados, además de que las credenciales no dejan de ser válidas por ello.
  • Hemos encontrado 478 apps diferentes que contienen credenciales válidas. 408 de ellas en Google Play.
  • Sin embargo, el número de claves de acceso diferentes encontrado en todos los markets no es excesivamente alto: 63. Esto quiere decir, que varias de esas 63 credenciales se encuentran repartidas entre las diferentes apps. En otras palabras: muchos desarrolladores supuestamente diferentes comparten cuentas de AWS válidas. En concreto, dos credenciales diferentes se comparten en 523 y 196 versiones diferentes de las apps. Solo hay 26 credenciales únicas que no son compartidas y que se encuentran en una única app.
  • De los 63 encontrados, 37 access key siguen siendo operativas, lo que significa que permiten realizar el proceso de autenticación de forma correcta. Las access key válidas compartidas siguen la siguiente distribución. De entre las válidas, una se encuentra repartida en 523 versiones diferentes de diferentes apps.
  • De ellos, hemos podido obtener los permisos (ACL) de 26 credenciales.
  • 22 claves de acceso mantenían FULL CONTROL con esas credenciales. Esto significa que se podía leer, escribir e incluso modificar algún contenido alojado en Amazon. El resto, permitían la escritura, con lo que a efectos prácticos, también supone un problema de seguridad.
  • Las credenciales encontradas en Google Play están repartidas entre 408 apps diferentes. A su vez, muchos desarrolladores aparentemente distintos comparten credenciales. Llama la atención una misma credencial presente en 74 developers diferentes, cada uno con sus respectivas apps.

De los 74 desarrolladores en Google Play que comparten credencial, cabe destacar que la mayoría parecen ser empresas de publicación de revistas y medios de comunicación en general, algunos bastante conocidos. Esto hace pensar que las apps de estas empresas han sido desarrolladas por un mismo equipo, que ha reutilizado de alguna manera parte de los recursos, entre ellos, la infraestructura en la nube y con ella las credenciales de acceso. Este cruce de credenciales compartidas entre apps diferentes que cargan contenido alojado en un tercero, abre una ventana de ataque interesante, dependiendo de los permisos de las credenciales.

Es necesario matizar que no todas las apps que contienen credenciales tienen por qué hacer uso de ellas. Puede suponer simplemente una mala práctica por disponer de los permisos adecuados, lo que implica que, aunque suponga una exposición de información sensible, en la práctica no abre ninguna brecha de seguridad ni posibilidad de ataque contra los usuarios de la app o los desarrolladores.

El informe completo está colgado aquí:



No hay comentarios:

Publicar un comentario