Cerrando la brecha de seguridad de las aplicaciones: Más allá de las prácticas de seguridad básicas

Cuando hablamos con profesionales de seguridad sobre la protección de aplicaciones, recibimos una variedad de comentarios que van desde

“Hemos diseñado nuestros sistemas con separación de responsabilidades, utilizamos prácticas de codificación seguras y realizamos pruebas SAST/DAST, así que estamos bien.”

a

“A pesar de todas las demás medidas de protección que teníamos implementadas, cuando nos dimos cuenta de que las versiones modificadas de nuestras aplicaciones móviles suponían una amenaza para nuestros sistemas de back-end, implementamos nuevas medidas para mitigar esa amenaza y elevar nuestro nivel general de seguridad.”

Si sus sentimientos se acercan más a la primera afirmación, nos gustaría dirigirle a este artículo Este artículo describe cómo las aplicaciones, incluso aquellas desarrolladas y probadas de forma segura, pueden utilizarse como armas para atacar los sistemas de backend que aportan el mayor valor a sus clientes. Si ya considera que las aplicaciones requieren una protección que va más allá de las buenas prácticas necesarias, continúe leyendo aquí.

Existen varias formas principales de proteger las aplicaciones contra la ingeniería inversa y la manipulación. En este artículo, analizaremos las protecciones que se aplican una vez que las aplicaciones están compiladas y listas para su publicación en la tienda de aplicaciones correspondiente. Los métodos que consideraremos son los wrappers, los SDK y la inyección de código. Comenzaremos con una breve introducción a un marco de seguridad estándar con el que podremos comparar las técnicas.

Descripción general de la resiliencia de OWASP MASVS

El móvil de OWASP Application Security El Estándar de Verificación (MASVS) describe cuatro categorías de resiliencia Estas categorías tienen como objetivo fortalecer las aplicaciones móviles contra diversas amenazas de seguridad. Se centran en garantizar que una aplicación permanezca segura incluso ante ataques. Si bien son específicas para dispositivos móviles, constituyen un buen marco de referencia para todas las aplicaciones que se ejecutan en internet en dispositivos de usuario final. Al seguir estas directrices de resiliencia, los desarrolladores pueden crear aplicaciones más resistentes a la ingeniería inversa y mejor equipadas para proteger los datos del usuario.

  • MASVS-RESILIENCE-1: La aplicación valida la integridad de la plataforma.
  • MASVS-RESILIENCE-2: La aplicación implementa mecanismos contra la manipulación.
  • MASVS-RESILIENCE-3: La aplicación implementa mecanismos de análisis antiestático.
  • MASVS-RESILIENCE-4: La aplicación implementa técnicas de análisis anti-dinámicas.

Ahora, adentrémonos en las técnicas de protección.

Envoltorios

Los wrappers son un tipo de protección de aplicaciones que proporciona una única línea de defensa. Al aplicar un wrapper, se codifica la aplicación, se añade una rutina de decodificación correspondiente y, a continuación, se ejecuta dicha rutina antes de la aplicación original. Dado que el código se reescribe, este tipo de protección solo está disponible en plataformas que permiten código automodificable.

La ventaja de este tipo de protección radica en que impide realizar un análisis estático directo. Los desensambladores, descompiladores y los humanos no pueden comprender el código subyacente al envoltorio, ya que se ha convertido en una secuencia de bytes sin sentido. Por lo tanto, los envoltorios cumplen con el control OWASP MASVS-RESILIENCE-3. Sin embargo, las rutinas de decodificación que se activan mediante el envoltorio son en sí mismas código normal, que puede desensamblarse, descompilarse y, en general, comprenderse; su mera presencia constituye una pista para los atacantes que indica el uso de un envoltorio.

Aunque no se pueda realizar un análisis estático de la aplicación, los atacantes solo necesitan iniciarla y esperar a que se restaure el código original. Luego pueden copiarlo, desensamblarlo o descompilarlo. Por lo tanto, incluso los atacantes novatos pueden burlar fácilmente estas protecciones.

¿Por qué las empresas venden wrappers y por qué los desarrolladores de apps los usan? Los wrappers son muy fáciles de implementar y dificultan el análisis estático. Esta facilidad de implementación permite a las empresas entrar en el mercado de la protección de aplicaciones de forma rápida y económica. Así, pueden dirigirse a clientes que solo necesitan una capa mínima de seguridad para sus apps.

El tiempo necesario para proteger una aplicación es mínimo y, por lo general, no requiere configuración. Sin embargo, estas protecciones suelen ser vulnerables a ataques BORE (Break Once Run Everywhere) debido a que todas utilizan la misma rutina de decodificación.

Algo de protección es mejor que ninguna, pero podemos hacerlo mejor.

SDK

A medida que avanzamos desde las soluciones menos seguras a las más seguras, el siguiente paso en la evolución de la seguridad de las aplicaciones es el modelo de SDK de protección. En este contexto, un SDK es un módulo de código independiente que contiene protecciones y detecciones contra una o más amenazas. Por ejemplo, un SDK de protección podría incluir lógica para garantizar la integridad de la plataforma mediante la detección de dispositivos rooteados o con jailbreak y la prevención del análisis dinámico mediante la detección de depuradores o herramientas de análisis como Frida.

Durante la compilación y protección, se vincula un SDK de protección a la aplicación. Al igual que la solución de envoltura, el SDK se inserta en el punto de entrada de la aplicación para iniciar uno o más hilos que realizan las detecciones en segundo plano. Posteriormente, el código original se ejecuta sin interacción con el SDK.

En general, no se realizan modificaciones al código original durante la ejecución, por lo que esta solución puede utilizarse en cualquier plataforma. Sin embargo, dado que el código original no se modifica, es susceptible al análisis estático por parte de desensambladores y descompiladores, aunque pueda ser resistente al análisis dinámico. La vulnerabilidad radica en que, si se elimina el SDK de protección, el resto de la aplicación puede ejecutarse sin ningún mecanismo de protección.

Dado que el desarrollo de productos de protección basados ​​en SDK implica una lógica más compleja, las empresas suelen invertir más tiempo y dinero en su desarrollo, aunque no tanto como en el caso de los productos de inyección de código. En este último caso, el proceso de protección es sencillo y, por lo general, no requiere configuración.

Los SDK, por lo tanto, cumplen con MASVS-RESILIENCE-1, 2 y 4. Sin embargo, al igual que los wrappers, los SDK de protección también suelen ser vulnerables a los ataques BORE. Si bien es posible integrar el SDK a la aplicación mediante mecanismos adicionales, esto generalmente requiere un análisis de la aplicación, lo que dificulta el desarrollo del producto e introduce la posibilidad de errores de integración.

Inyección de código

Los productos de seguridad contra la inyección de código representan la cúspide de este trío de técnicas. Cabe destacar que, en ambos casos anteriores, el código de protección se ejecuta al inicio de la aplicación, lo que facilita su detección, análisis y vulneración.

La idea principal en el escenario de inyección de código no es solo encapsular o agregar un SDK, sino analizar la aplicación para comprender completamente el flujo de control y luego agregar mecanismos de protección en toda la aplicación para que se ejecuten en segundo plano mientras la aplicación protegida está en ejecución. mecanismos de protección Puede incluir comprobaciones de integridad de la plataforma para evitar que el código se ejecute en dispositivos con jailbreak o rooteados, mecanismos anti-análisis estático como ofuscaciones, mecanismos anti-análisis dinámico para detectar depuradores y kits de herramientas de instrumentación dinámica, y mecanismos anti-manipulación para garantizar que la aplicación en ejecución sea la misma que la aplicación distribuida.

Y dado que estas técnicas están dispersas por todo el código, son mucho más difíciles de encontrar, lo que garantiza que los actores maliciosos deban invertir mucho más tiempo y esfuerzo, a menudo en vano, para intentar contrarrestarlas.

Otra ventaja de esta técnica es que, una vez que los mecanismos de protección se integran en el código, pueden protegerse repetidamente con la profundidad que se desee. Al crear una red suficientemente amplia de mecanismos de protección, los propietarios de aplicaciones pueden reforzar significativamente la seguridad de sus apps mediante la creación de un rompecabezas autoconsciente que reacciona con acciones visibles e invisibles para frustrar a los posibles atacantes.

Además, debido a que el código de protección está disperso por toda la aplicación, queda efectivamente oculto, lo que significa que algunas detecciones pueden tomar medidas sigilosas y personalizadas —si el producto de seguridad lo permite— para que se puedan realizar cambios sutiles en el comportamiento de la aplicación que los atacantes pueden pasar completamente por alto, lo que aumenta su frustración y los aleja de su objetivo.

Generar frustración en los atacantes puede alejarlos de las aplicaciones fuertemente protegidas y llevarlos a buscar aplicaciones desprotegidas o con menor protección. No es necesario darles jaque mate; solo se necesita que se rindan y busquen otra alternativa.

Para completar el análisis comparativo, las herramientas de protección contra inyección de código proporcionan las protecciones más completas, protecciones que resisten el análisis estático Y dinámico, cumpliendo así con los 4 requisitos de resiliencia de MASVS.

El Digital.ai Comparación

Al comparar estas técnicas de protección, queda claro que ningún método por sí solo ofrece una protección completa. Para lograr una verdadera resiliencia de las aplicaciones, se requieren defensas coordinadas y automatización a lo largo de todo el ciclo de vida del software. Digital.ai Application Security ofrece esa solución.

  • Una plataforma que automatiza los procesos de lanzamiento e integra cadenas de herramientas complejas. Unifica la entrega de aplicaciones, integra las herramientas existentes y escala en cualquier entorno.
  • Pruebas y seguridad automatizadas para aplicaciones móviles diseñadas para escalar. Ofrecemos aplicaciones seguras y de alta calidad mediante mejores técnicas de pruebas automatizadas y protección de aplicaciones.
  • Inteligencia artificial, cumplimiento y gobernanza integradas en todos los flujos de trabajo de entrega de software. Centralice los datos, optimice los procesos y obtenga información ampliada para una mayor rapidez. safeEntrega de software r

También puede interesarle