¿Secretos de tiempo de ejecución frente a ofuscación de código?

¿Es mejor proteger las APIs mediante la ofuscación dentro de la aplicación móvil o trasladar las claves de la API a una nube segura y entregarlas a la aplicación móvil en tiempo de ejecución?

Proteger las claves API es un aspecto crítico de la seguridad de las aplicaciones móviles, y existen dos enfoques principales para salvaguardar estas claves: la obfuscación de código y los secretos en tiempo de ejecución. En este artículo, exploraremos estos dos métodos y compararemos su efectividad en la protección de las claves API. Ambos enfoques tienen sus pros y contras, y la elección depende del caso de uso específico y de los requisitos de seguridad.

Obfuscación de Código:

La obfuscación de código es el proceso de modificar el código fuente de una aplicación para dificultar que los atacantes lo descompilen y extraigan información sensible como las claves API. Este enfoque implica renombrar variables, modificar estructuras de control de flujo e insertar código falso para confundir a los atacantes. Obfuscating las claves API dentro de la aplicación móvil puede proporcionar seguridad al dificultar que los atacantes descubran y extraigan las claves utilizadas para acceder a las API, ya sean claves API regulares, tokens JWT o cualquier otra forma de secreto.

Sin embargo, aunque la obfuscación de código puede ser una forma efectiva de disuadir a los atacantes ocasionales, no es infalible. Este enfoque es vulnerable al uso de herramientas de código abierto para descompilar el binario de la aplicación móvil y encontrar y extraer las claves API. Por ejemplo, con el uso del Mobile Security Framework, incluso un no desarrollador puede extraer secretos de alto valor. Los atacantes experimentados también pueden utilizar herramientas de descompilación para analizar el código en tiempo de ejecución y descubrir claves API mejor escondidas. Por último, la obfuscación de código introducirá costos directos e indirectos en el proceso de desarrollo y el mantenimiento continuo del código subyacente, pero es indudable que es una forma efectiva de proteger la propiedad intelectual de su código (IP).

Secretos en tiempo de ejecución:

Este enfoque ofrece varias ventajas sobre la obfuscación de código. En primer lugar, las claves de API no están presentes en el código de la aplicación, lo que las hace mucho más difíciles de extraer a través de la ingeniería inversa. Además, los secretos en tiempo de ejecución facilitan la rotación de las claves de API, ya que la aplicación no necesita ser recompilada o lanzada de nuevo a través de las tiendas de aplicaciones de iOS y Android cada vez que se cambia una clave. El acceso a la API también puede restringirse a instancias genuinas (no modificadas) de la aplicación móvil, y el servidor en la nube puede configurarse para detectar y restringir el acceso desde aplicaciones que se ejecutan en un dispositivo, emulador o marco comprometido.

Sin embargo, los secretos en tiempo de ejecución tienen algunos inconvenientes potenciales. En primer lugar, la ubicación de almacenamiento externo debe estar segura, de lo contrario, un atacante podría obtener acceso a las claves de API. Además, recuperar las claves en tiempo de ejecución puede introducir cierta sobrecarga de rendimiento y los secretos en tiempo de ejecución requieren un desarrollo de software adicional tanto para la aplicación móvil como para el servicio en la nube seguro para proporcionar los secretos de API. Los secretos en tiempo de ejecución requieren esfuerzo para implementar el servicio en el servicio en la nube seguro (y mantenimiento para mantenerse al día con las últimas amenazas de seguridad). La cantidad de experiencia y esfuerzo para desarrollar una solución de seguridad así no es pequeña y lleva meses desarrollarla, años perfeccionarla y mucha investigación continua para mantenerse al día con el ritmo de las vulnerabilidades de día cero y las nuevas formas de ataque. Alternativamente, se puede adoptar este mismo enfoque con un servicio en la nube seguro subcontratado.

Más información se puede encontrar en el artículo Hands-on Mobile App and API Security - Runtime Secrets Protection.

Comparación de los Enfoques:

Al decidir entre secretos de tiempo de ejecución y obfuscación de código, se debe tener en cuenta el costo de una violación de seguridad y su impacto en el negocio y su reputación a corto y largo plazo. Tradicionalmente, el costo de una violación de datos en términos de multas, reputación, pérdida de clientes y rentabilidad reducida es mucho mayor que la inversión en soluciones de seguridad adecuadas. Todo esto debe ser considerado en el contexto, incluyendo la probabilidad de un ataque.

Entonces, ¿cuál es el enfoque mejor para proteger las claves de API? En última instancia, depende de las necesidades y limitaciones específicas de la aplicación. La obfuscación de código puede ser una opción razonable para las aplicaciones que no manejan información altamente sensible y es poco probable que sean atacadas por atacantes determinados. Sin embargo, para las aplicaciones que necesitan proteger datos sensibles o que probablemente serán atacadas, los secretos de tiempo de ejecución ofrecen una solución más sólida y segura.

Conclusión:

En primer lugar, vale la pena señalar que los dos enfoques no son mutuamente excluyentes. De hecho, muchas aplicaciones móviles utilizan tanto la obfuscación de código como los secretos de tiempo de ejecución para proteger la propiedad intelectual dentro de la aplicación y las claves de API que otorgan acceso a datos valiosos en la nube. Al combinar estos métodos, los desarrolladores pueden crear una defensa en profundidad más sólida y capas contra los atacantes.

La protección de las claves de API es crucial para garantizar la seguridad de las aplicaciones móviles. En resumen, si la seguridad es una prioridad y se acepta infraestructura adicional, mover las claves de API a un servicio de nube seguro y entregarlas a la aplicación móvil en tiempo de ejecución es la opción más segura. Si bien la obfuscación de código puede ser un enfoque razonable para disuadir a los atacantes casuales, los secretos de tiempo de ejecución ofrecen una solución más sólida y segura para proteger datos sensibles. En última instancia, el mejor enfoque dependerá de las necesidades y limitaciones específicas de la aplicación. Al considerar cuidadosamente las opciones e implementar una estrategia de defensa en capas, los desarrolladores pueden ayudar a garantizar la seguridad de sus aplicaciones móviles.

En conclusión, la obfuscación de código siempre es una buena opción para proteger y defender la propiedad intelectual de su código en sí, pero es una opción pobre si el valor que se intenta proteger se accede a través de API y se mantiene en la nube. Para proteger datos valiosos que se comparten a través de un canal y se aseguran con claves de API, el mejor enfoque es eliminar los secretos codificados en la aplicación móvil y utilizar secretos de tiempo de ejecución proporcionados por un servicio de nube seguro.