Paulatinamente, las empresas de software comprenden la importancia de incluir mecanismos de seguridad en sus creaciones. No obstante, dada la falta de personal especializado o debido al desconocimiento de los riesgos a los que pueden estar exponiendo a sus sistemas y usuarios, muchas veces esos controles quedan excluidos del proceso de diseño.

Este escenario hace trastabillar la seguridad no solo de usuarios hogareños, sino también de compañías, indicando que el malware no es la única problemática en lo que a protección digital refiere.

A lo largo de este artículo repasaremos los escenarios problemáticos y te daremos 6 consejos prácticos para evitarlos.

Un universo de vulnerabilidades

apps seguras podrían volverse vulnerables si no se realizan controles de seguridad periódicos

Cuando hablamos de programación en Android, existen muchas vulnerabilidades que frecuentemente terminan afectando a las aplicaciones publicadas. De hecho, Gartner nos advierte que el 75% de las apps móviles no pasaría pruebas básicas de seguridad. Además, predice que, para este año, el foco en las brechas rotará hacia las tabletas y teléfonos móviles.

Aún más, investigaciones probaron cómo aplicaciones vulnerables podían permitir fácilmente la explotación de los dispositivos IoT que controlaban, y cómo a medida que dejan de ser mantenidas podrían convertirse en una puerta abierta para cibercriminales gracias a librerías de publicidad obsoletas. Esto refuerza la idea de que incluso apps seguras podrían volverse vulnerables con el pasar del tiempo si no se realizan controles de seguridad de manera periódica.

En su manual de pentesting para apps móviles, OWASP presenta una serie de categorías de vulnerabilidades usuales que los programadores debiesen tener en cuenta al momento de asegurar los datos de sus usuarios. El top 10 de vulnerabilidades móviles en 2016 nos dibuja el panorama de la inseguridad móvil a la que usuarios y programadores se enfrentan.

Dentro del top 3 en el ranking de vulnerabilidades móviles podemos ver el uso de comunicaciones inseguras para transmitir archivos críticos, es decir, la manera en que desarrolladores utilizan protocolos no seguros como HTTP.

Transmisiones inseguras con HTTP

Los procesos de verificación de actualizaciones y descarga de componentes nunca debiesen realizarse mediante tráfico no seguro, ya que podrían tener consecuencias catastróficas para la seguridad del usuario.

debiese utilizarse un mecanismo para asegurar que el archivo descargado no fue alterado

De hacerlo, como mínimo debiese utilizarse un mecanismo que permita chequear la integridad del archivo que se ha descargado para asegurar que el contenido no ha sido alterado y que proviene de una entidad confiable. Por desgracia, pocos programadores tienen esto en mente al momento de publicar software.

En los últimos años, hemos podido observar este peligroso comportamiento reiteradas veces a través de diferentes sistemas operativos y aplicaciones. En lo que a entornos móviles refiere, podemos recordar la vulnerabilidad de iOS expuesta por Raul Siles (@raulsiles) de DinoSec en 2014, durante su charla iOS: Back to the Future. Allí demostró cómo se interfería el proceso de descarga de las actualizaciones debido a que se realizaba vía HTTP.

Al año siguiente, este mismo investigador presentó una vulnerabilidad similar pero para Android. En Android: Back to the Future (Too? Or Two?), Siles nos cuenta cómo es posible congelar las actualizaciones de un equipo también en este sistema operativo.

Ese mismo año en Black Hat Londres, Ryan Welton (@fuzion24) demostró cómo era posible vulnerar Vungle, una librería de anuncios que –entre otras aplicaciones– era utilizada por My Talking Tom, con más de 100.000.000 de usuarios. Combinando la mala utilización de HTTP, la falta de controles de integridad, la vulnerabilidad de directory traversal en archivos ZIP y la utilización de APK con múltiples DEX, Welton mostró cómo era posible ejecutar código de manera remota.

Durante la misma conferencia, también demostró cómo otra aplicación con permisos elevados hacía un mal uso de archivos ZIP descargados mediante HTTP: la vulnerabilidad de SwiftKey presente en dispositivos Samsung Galaxy, que permitía abrir una shell con privilegios y ganar control remoto del sistema, exponiendo a más de 600 millones de usuarios de Samsung.

Finalmente, cabe mencionar el caso de AirDroid: una aplicación capaz que controlar de manera remota equipos móviles que utilizaba HTTP para chequear la existencia de actualizaciones y descargar sus plugins. Aunque los desarrolladores intentaron cifrar las comunicaciones, olvidaron el pequeño detalle de nunca hardcodear las claves de cifrado en la aplicación. Así, cualquiera que lograse hacer un ataque MITM podría forzar a la aplicación a instalar malware.

¿Qué es importante que recuerdes?

Antes de terminar este artículo, vale resumir rápidamente lo que debiese haberte quedado claro:

  1. Las vulnerabilidades causan grandes estragos a los usuarios, pudiendo exponer datos verdaderamente sensibles. Invertir en servicios de pentesting móvil es algo que todas las compañías de software debiesen realizar antes de publicar aplicaciones con huecos de seguridad.
  2. Nunca utilices HTTP para descargar archivos críticos ni negociar procesos de actualizaciones.
  3. Utiliza HTTPS y certificate pinning siempre que sea posible.
  4. Valida la integridad de los archivos que descarga tu aplicación.
  5. Ten mucho cuidado con cómo negocias y guardas las claves de cifrado.
  6. Si descargas archivos ZIP, chequea que los nombres de los archivos que estás extrayendo no incluyan cadenas como “../” –claro que con el chequeo de integridad debiese ser suficiente, pero como dice el refrán, "más vale prevenir que curar"–.

Listo. ¿Lo has entendido? ¡Perfecto!

Ahora bien, si por esas casualidades estás interesado en saber cómo inyectar archivos ZIP trasferidos mediante HTTP, no te pierdas el próximo artículo. ¡Hasta la próxima!

Sigue leyendo: 10 consejos para el desarrollo seguro de aplicaciones

Créditos imagen: ©mendhak/Flickr