7 may 2021

Almacenamiento de credenciales defectuoso en las principales aplicaciones de Android

Los investigadores de Comparitech utilizaron dos herramientas de código abierto, APKLeaks y Quark Engine, para analizar 2.500 aplicaciones principales y de moda de Android en Google Play en busca de secretos filtrados. 1.057 de las 2.500 aplicaciones principales y de moda en Google Play filtran al menos una credencial secreta, como un token de acceso o una contraseña. Estos secretos podrían ser utilizados por delincuentes informáticos para atacar aplicaciones, API y usuarios finales.

A menudo pensamos en "credenciales" como la información que necesitamos para iniciar sesión en una aplicación o sitio web, como su dirección de correo electrónico y contraseña. Pero las credenciales también incluyen contraseñas y tokens utilizados por las propias aplicaciones para autenticar varias conexiones a servidores, API y otros puntos finales propios y de terceros.

Las credenciales filtradas por las aplicaciones analizadas incluyen:

  • Claves de API de Amazon Web Services
  • Tokens de Facebook
  • Tokens de Github
  • Claves de API de Google
  • Tokens de Twitter OAuth
  • Claves API de PayPal
  • Claves de la API de Twilio
  • Webhooks flojos
  • Claves API de Heroku
  • Claves de MailChimp
  • Otras claves de API genéricas
  • Secretos de la aplicación
  • Claves API personalizadas
Además de los secretos filtrados, los investigadores también encontraron direcciones IP que apuntan a servidores Firebase no seguros y depósitos de AWS. El almacenamiento de credenciales defectuoso podría ser explotado por delincuentes informáticos malintencionados para acceder de manera fraudulenta a las API de las aplicaciones y abusar de ellas, robar datos confidenciales, hacer phishing a los usuarios y difundir malware. Destacaremos algunas de las filtraciones más comunes a continuación.

API Tokens

Las interfaces de programación de aplicaciones (API) son utilizadas por muchas, si no la mayoría, de las aplicaciones de Android. Permiten que una aplicación acceda a datos o funciones de otra aplicación sin exponer todo el código fuente o los datos de la segunda aplicación. Por ejemplo, una aplicación de comparación de hoteles utiliza la API de cada hotel para buscar fechas y precios disponibles. El acceso a la API generalmente requiere autenticación a través de una clave secreta de API o un token.

Los investigadores descubrieron que las credenciales de la API a menudo se almacenan sin protección. Un ejemplo almacenó credenciales como constantes, lo que permitiría a cualquier otra aplicación leerlas y actuar sobre ellas.

Los tokens de API se utilizan cada vez más en ataques de relleno de credenciales. El relleno de credenciales generalmente implica que un bot use credenciales robadas para acceder a otras cuentas que comparten la misma contraseña, token o clave. Los puntos finales de API son objetivos frecuentes de los ataques de relleno de credenciales, especialmente en el sector financiero.

Webhooks

Los webhooks son mensajes automáticos que se envían desde aplicaciones cuando se activan, de forma similar a las notificaciones por SMS. Pueden aumentar el comportamiento de una aplicación mediante devoluciones de llamada personalizadas, que son administradas por desarrolladores y usuarios externos que pueden no estar afiliados al desarrollador de la aplicación original. Los webhooks se utilizan con frecuencia en aplicaciones de chat como Facebook Messenger y Slack, pero también para rastrear errores y automatizar el control de versiones.

Los investigadores descubrieron que podían lanzar ataques contra webhooks codificados. Slack, la popular aplicación de chat en el lugar de trabajo, utiliza un webhook codificado para aceptar comentarios de los usuarios. Los investigadores podrían enviar un gran volumen de solicitudes al gancho, sobrecargando el servidor y provocando un ataque de denegación de servicio.

Los investigadores dicen que los actores de amenazas podrían usar solicitudes similares para eliminar cargas útiles de malware en un intento de exponer una base de datos o cargar un script malicioso en el servidor de la aplicación.

El webhook de Slack también podría explotarse enviando comentarios falsos de usuarios inexistentes para engañar a los desarrolladores. O los atacantes podrían enviar mensajes de phishing con enlaces a sitios web maliciosos.

Cómo almacenar secretos de forma segura en aplicaciones de Android

Nuestros investigadores dieron los siguientes consejos de almacenamiento de credenciales para desarrolladores de Android:

  • Utilice la API de Android Keystore para implementar la mayor parte de la funcionalidad de almacenamiento de credenciales necesaria.
  • Excluya las credenciales y los webhooks durante las confirmaciones. Agréguelos a .gitignore antes de cualquier confirmación. Más tarde, los desarrolladores solo necesitan agregar todas las claves necesarias a apikey.properties y leerlo usando los métodos apropiados en la propia aplicación. Entonces, todos los valores secretos estarán dentro de la aplicación y no necesitará verificar los valores reales en su repositorio de GIT. Tenga en cuenta que es posible que esto no proteja los secretos durante la descompilación.
  • Ofuscar usando ProGuard: ProGuard es una herramienta que ayuda a ofuscar la propia aplicación. Esto no excluye los secretos, sino que los hace más difíciles de revelar mediante la descompilación.
  • Asegúrese de que las credenciales sean únicas para que no se puedan utilizar en ataques de relleno de credenciales.
  • Almacenar secretos en NDK: el NDK de Android es un conjunto de herramientas que le permite implementar partes de su aplicación en código nativo. El almacenamiento de credenciales aquí hace que la descompilación y la ingeniería inversa sean más difíciles para los atacantes. Cuando almacena credenciales en NDK, las credenciales son:
    • Ofuscado con el operador XOR para que nunca aparezcan a la vista. Esto no es más seguro, estrictamente hablando, pero puede ayudar a prevenir el robo de credenciales por parte de extractores automáticos.
    • Almacenados en un binario NDK como una matriz hexadecimal, lo que los hace más difíciles de encontrar.
    • No persistente en binario para forzar la evaluación en tiempo de ejecución.
  • Para agregar una capa de seguridad adicional, los desarrolladores pueden usar un algoritmo de codificación con el complemento NDK.
Fuente: Comparitech

Suscríbete a nuestro Boletín

0 Comments:

Publicar un comentario

Gracias por dejar un comentario en Segu-Info.

Gracias por comentar!