Application Security BUENAS PRÁCTICAS
Desde que existen aplicaciones, existen ciberdelincuentes con licencias para eludir restricciones y propiedad intelectual que robar.
datos para robar y acciones para subvertir. Los propietarios de las aplicaciones desarrollaron medidas de mitigación contra estas amenazas y
Entonces, los ciberdelincuentes respondieron con nuevas herramientas y procesos para eludir las medidas de mitigación. Un juego del gato y el ratón.
Este ciclo continúa hasta el día de hoy. Y si bien algunas técnicas específicas ya no funcionan, existen otras generales.
principios que siguen siendo válidos en la lucha constante por proteger las aplicaciones del uso no intencionado.
Llevamos más de dos décadas desarrollando y perfeccionando estas buenas prácticas. Y aunque son
En general, son aplicables, pero algunas se contradicen entre sí y otras solo tienen sentido en determinados escenarios.
Lo más importante a recordar es ser intencional, considerando las amenazas y luego aplicándolas.
mitigaciones pertinentes. Después, observe qué sucede y luego realice cambios, porque la variación es una de las
los principios fundamentales. Así pues, tanto si practicas OODA (Observar, Orientar, Decidir, Actuar) como PDCA
(Planificar, Hacer, Verificar, Actuar), no dejes que tu protección se estanque. Has invertido en obtener tu
La aplicación debe tener como objetivo lograr algo valioso; no escatime esfuerzos para mantener la integridad de su funcionamiento.
A continuación se presenta una lista de principios e ideas. Elige los que te funcionen, pero hazlo con plena consciencia. Si tú
Si quieres ignorar una idea, está bien. Solo asegúrate de tener una razón válida para hacerlo.
Siga los estándares
En primer lugar, si existen estándares generales como OWASP MASVS (https://mas.owasp.org/MASVS/11-MASVSRESILIENCE/) o directrices que se apliquen a su sector o modelo de distribución, utilícelos.
Crear y priorizar amenazas para no pasar por alto inadvertidamente nada en esas listas de verificación. Aquí
Existen algunos tipos de guardias específicos que se corresponden con las categorías de resiliencia de OWASP MASVS.
Principios de mentalidad
Piensa como un psicólogo
A continuación, recuerde que los actores que representan una amenaza son seres humanos con las mismas tendencias y prejuicios que todos compartimos.
Al pensar en proteger tu solicitud, presta atención a las posibles motivaciones y a los deseos contrapuestos.
comportamientos típicos y cualquier otra característica humana que influya en el deseo de una persona de atacarte
aplicación. Considere el modelo de motivación de Maslow, los sesgos cognitivos y otros factores que influyen en las formas de actuar.
Piensa en ellas y úsalas a tu favor.
Conoce a tu adversario
Saber qué busca un atacante y por qué lo busca puede ayudarle a diseñar la protección adecuada para su empresa.
En relación con el modelo de motivación de Maslow, un actor malicioso podría querer monetizar un ataque para ayudar a...
satisfacer sus necesidades más básicas. Otro actor malicioso podría buscar “credibilidad en la calle” y, por lo tanto, estar buscando
estima cerca de la cima de la jerarquía. El primero puede ser convencido de dejar de atacar su solicitud si
Existe una aplicación similar de otra organización que es más fácil de atacar con éxito. En esta última,
En este caso, el actor de la amenaza puede prosperar atacando el mayor desafío conocido, de modo que si/cuando tenga éxito,
Pueden reclamar un estatus de élite. Cada uno tiene un concepto diferente de "retorno" e "inversión". Así pues,
Comprender el modelo de retorno de la inversión (ROI) de su adversario puede ayudarle a planificar su protección.
Frustra a tu adversario
En general, cuanto más logren frustrar tus medidas de protección a los actores de amenazas, más probable será que desistan.
su ataque. Golpear la cabeza contra la pared demasiadas veces acaba provocando que uno se cuestione el
beneficio de continuar.
Principios preparatorios
Modele sus amenazas
Comienza enumerando las amenazas contra tu aplicación y luego clasifícalas por orden de prioridad. Necesitarás esto.
Una clasificación permite saber qué amenazas abordar primero o qué medida de mitigación debe prevalecer si dos amenazas compiten entre sí.
mitigaciones. Esta lista también será útil si necesita realizar algún ajuste de rendimiento. La solidez de la seguridad puede ser
Ajustado para proporcionar más ciclos a la lógica de tu aplicación, pero no a costa de ignorar lo más importante.
Amenazas impactantes.
Investigar herramientas de ataque
Si quieres entender lo fácil que es atacar una aplicación, mira el siguiente ejemplo. OWASP MASTG (Móvil
Application Security Guía de pruebas). En ella se enumeran varias herramientas de detección de amenazas y ejemplos de cómo utilizarlas para realizar pruebas.
Resiliencia de la aplicación. Realizar análisis antes y después de la protección le dará la seguridad de que está
Abordar las amenazas más importantes. [Nota: Tenga cuidado con los jailbreaks, los rootkits y los frameworks de ataque.]
¡ya que requieren desactivar los controles de seguridad y pueden contener código malicioso!
Sé el villano
Antes de desarrollar una protección, analiza tu aplicación (al menos mentalmente) para comprender la amenaza.
El actor podría intentarlo. Desarrollar una mentalidad adversarial es importante para crear protecciones efectivas.
Las medidas de seguridad y protección no tendrán sentido hasta que se comprenda el vector de ataque contra el que protegen.
Haz tu parte antes de proteger
Los productos de protección de aplicaciones pueden mejorar la seguridad de su aplicación, pero comience con una configuración segura.
prácticas de codificación y usar todas las demás herramientas aplicables (SAST, DAST, SCA, etc.) para buscar otros
Detecte las vulnerabilidades de forma temprana y frecuente. Aproveche las herramientas OWASP MASTG y OWASP MASVS para
Información sobre prácticas de codificación segura, buen uso de la plataforma, etc.
Principios básicos de protección
Multiplica las opciones
Al igual que muchas personas, es probable que los actores maliciosos opten por el camino de menor resistencia cuando se enfrentan a múltiples amenazas.
posibilidades. Por lo tanto, cree muchos caminos utilizando muchos guardias con diferentes reacciones para guiar a los actores de amenazas.
hacia callejones sin salida, trampas de miel o «un laberinto de pasadizos sinuosos, todos iguales». Incluso sin añadir miel.
Ollas, etc., añadir más heno al pajar siempre dificulta encontrar la aguja.
Ruptura: Causa y efecto
La relación causa-efecto son herramientas valiosas para el actor de amenazas. Cada vez que realizan un cambio y observan un
En respuesta a esta reacción, aprenden más sobre cuándo su aplicación realiza sus comprobaciones y cómo responde a la misma.
manipular los eventos que observa. Romper el vínculo entre causa y efecto —o al menos flexibilizarlo un poco— es un
contramedida eficaz. Por lo tanto, aunque resulte tentador —y tenga cierto sentido— estrellarse o salir inmediatamente
Cuando se detecta un ataque a una aplicación, un mejor enfoque es interrumpir sutilmente la aplicación en ejecución. Si
Los atacantes activan una detección sin saberlo, y probablemente intentarán lo siguiente. Si lo hacen,
Tras varios pasos en una cadena de acontecimientos que conforman su ataque, se dan cuenta de que han sido atrapados.
Su tarea de aislar el único punto de fallo se vuelve mucho más difícil. Eso dificulta que los atacantes...
Encuentra y desactiva a tus guardias.
Eliminar los puntos únicos de fallo
Los puntos únicos de fallo hacen que su protección sea frágil, por lo que debe conectar varias protecciones entre sí y establecer una
umbral de detección de manipulación. Esto es especialmente cierto cuando los guardias utilizan heurísticas.
Por ejemplo, la detección de control virtual utiliza técnicas heurísticas para identificar si existe interacción con el
Es probable que el dispositivo sea una persona o no. Al igual que con cualquier decisión basada en heurística, la detección de control virtual es
Son aproximados y podrían no reflejar siempre la verdadera fuente de la interacción. Combinar control virtual
Detección junto con otras entradas al determinar cómo reaccionar.
Imita al mosquito
Es preferible un mayor número de guardias pequeños a un menor número de guardias grandes. Los guardias pequeños son
Son más difíciles de encontrar que los guardias más grandes, además de que ofrecen una mayor capacidad de superposición, lo que proporciona una mayor protección.
medida de defensa en profundidad. Además, pequeñas acciones de manipulación ocultas que se acumulan pueden usarse para eliminar una
ataque de mil picaduras.
Utilice redes de protección
Las redes de vigilancia son grupos de vigilantes que trabajan juntos para proteger la aplicación y los demás vigilantes.
la red. Al crear una maraña de protecciones, se dificulta enormemente la eliminación de cualquier protección individual.
guardia. En este caso, cuanto mayor sea el enredo, mejor, hasta el punto en que guardias adicionales serían innecesarias.
un efecto adverso en el rendimiento.
Utilizar guardias específicos
Implemente medidas de seguridad para proteger sus activos más importantes y considere los vectores de ataque más frecuentes.
peligroso. Por ejemplo, si le preocupa la revocación de su licencia, sus medidas de protección deberían centrarse en su licencia.
lógica, rutas de código de licencia, validación de argumentos de licencia y valores de retorno de la rutina de licencia.
Cambiar y agitar regularmente
Las protecciones son semi-aleatorias y se basan en su código, su especificación de protección o plano, la versión del producto y
la semilla de protección. Cambia tu semilla para cada lanzamiento (y guárdala) para que puedas estar seguro de que
Tu protección es diferente cada vez. Hacer esto desconcertará al atacante, obligándolo a empezar desde cero.
para cada lanzamiento. No hay razón para facilitarle el trabajo al atacante más de lo necesario.
No ofrezcas obsequios gratuitos.
Nunca publiques una aplicación en producción con ninguna de las protecciones u otras funciones configuradas en modo de depuración.
Los mensajes de depuración pueden revelar qué tipo de protección se aplica y dónde se inyecta. Estás intentando
Dificúltale la tarea al atacante, así que no bajes la guardia.
Empieza con algo simple e itera.
Al integrar por primera vez la protección en su aplicación, aproveche las opciones de protección automática disponibles.
(configuraciones predeterminadas, configuración cero, etc.) para realizar la integración inicial de la protección en su canalización de CI.
Esto le permitirá integrar la protección más rápidamente en su ciclo de vida de desarrollo de software.
Posteriormente podrá personalizar la protección según sus necesidades específicas de seguridad y rendimiento. Recuerde venir
Vuelva atrás y personalice su protección al nivel adecuado, según lo identificado en su evaluación inicial de amenazas.
Principios de protección avanzada
Introducir comportamiento no determinista
Además de asegurarte de que muchos de tus guardias solo reaccionen de forma invisible, considera también a los guardias que solo
desencadenar en algunos casos. Utilizando probabilidades de ejecución, umbrales de tiempo real o combinaciones de
Las salidas de protección pueden generar cierta incertidumbre sobre el funcionamiento de tu aplicación. Utiliza acciones de manipulación que
Modifica tu código de forma sutil, pero manteniendo tu intención original.
Denuncie todo
Si utiliza alguna de estas técnicas de reacción sutiles, sigue siendo importante informar de cada incidente de manipulación a
Conciencia de la aplicación. Estos valiosos datos pueden estudiarse para detectar patrones que pueden ayudarte a mejorar tu futuro.
Medidas de protección, especialmente para ayudar a distinguir entre usuarios normales, desarrolladores de exploits y usuarios de exploits.
Redes de vigilancia separadas
Lleva el concepto de red de guarda al siguiente nivel. Utiliza múltiples redes de guarda independientes.
de forma que, si un atacante identifica una red de seguridad, existen otras preparadas.
en las alas para detectar el ataque.
Utilizar guardias no dirigidos
Además de las protecciones específicas, agregue algunas protecciones en partes inusuales o poco importantes de su aplicación.
Evita que tu código más importante y mejor protegido destaque demasiado. También puede
Detecta ataques que no habías previsto al diseñar tu protección. Este es otro caso donde la defensa en profundidad demuestra su eficacia.
Incluir casos de fallo previstos
Si tienes una función que evalúa alguna condición y luego elige entre el camino feliz y el
En un escenario infeliz, un atacante podría intentar reemplazar la función de evaluación con una función que siempre devuelva un valor.
Es cierto. Si añades una llamada a esa función con argumentos que deberían provocar un fallo, pero aun así funciona, entonces...
Si algo va mal, tenga en cuenta que esta práctica de programación segura no requiere aplicación.
La protección funciona. Sin embargo, agregar este código y protegerlo mejora la seguridad general de su aplicación.
Se recomienda una postura de defensa en profundidad, por lo que ambas son recomendables.
Utilizar los hilos estratégicamente
Considera ejecutar algunas de tus medidas de seguridad en hilos en segundo plano. Hacer todo en un solo hilo.
Simplifica la tarea del atacante. Obligar al atacante a vigilar varios hilos dificulta su tarea.
Cuidado con los problemas de subprocesos
Al instalar protecciones u otras medidas de seguridad en código multihilo (¡recomendado!), asegúrese de que
Las características que estás utilizando son hilos. safeSi un tipo de guarda no es de hilo safe Considerar de forma innovadora
Colocar todas las guardas de un mismo tipo en un solo hilo o agregar un mutex para sincronizar varios hilos.
Haga coincidir los patrones cuidadosamente
Al utilizar expresiones regulares para identificar ubicaciones de invocación o rangos protegidos, revise cuidadosamente su
Los registros de protección se actualizan periódicamente para garantizar que coincidan con lo esperado. Información no intencionada
El exceso de coincidencias puede tener consecuencias como una grave degradación del rendimiento, un aumento extremo del código y puede
incluso introducir fallos. Utiliza las capacidades de coincidencia para hacerte la vida más fácil, no más difícil cuando lo necesites.
Depurar errores ocultos.
Variedad de funciones de reacción a la manipulación personalizadas
Utilizar varias funciones de reacción ante manipulaciones en lugar de una sola es otra forma de eliminar puntos únicos de fallo.
Dale más trabajo al atacante, no menos.
Utilice reacciones no manipuladas para hacer cosas importantes.
Si solo se utilizan reacciones de manipulación, es más fácil para un atacante eliminar protecciones completas. Implementar medidas significativas
Las operaciones en reacciones sin manipulación provocan que no ocurran cosas buenas si un atacante elimina una protección.
En cada punto, lo que se busca es que el atacante utilice un bisturí, no un hacha.
Utilizar código y datos dañados y reparados donde
Posibles
Algunas plataformas, como Windows, permiten dañar, reparar y volver a dañar el código para crear código estático y
El análisis dinámico es más complejo. Si tu plataforma lo permite, ¡hazlo! Otras plataformas, como iOS, no lo permiten.
Si bien se puede modificar el código, aún se pueden modificar los datos. En plataformas restrictivas, considere dañar, reparar y
Datos que vuelven a dañarse y que impulsan la ejecución de tu código. Una instrucción switch que contiene datos reales y ficticios.
El código seleccionado por un valor de datos puede proporcionar parte del valor de protección que se ofrece en versiones menos restrictivas.
plataformas.
Elija ubicaciones de invocación adecuadas siempre que sea posible.
Cuando uses productos de protección que permitan especificar ubicaciones de invocación, varía su uso. No actives todas tus invocaciones.
Colocar las guardias en un solo lugar. Colocar algunas invocaciones al inicio de las funciones. Colocar algunas invocaciones dentro de las funciones.
Algunas invocaciones se realizan al inicio. Otras se realizan a intervalos regulares. La variación puede aumentar la confusión.
Principios de mantenimiento
Depuración más inteligente
Nuestros productos de protección incluyen funciones que ayudan a depurar problemas durante la protección y la ejecución.
Consulte la documentación para obtener más detalles.
Ayuda, soporte, ayuda
Al solicitar ayuda al servicio de atención al cliente, proporcione toda la información posible, incluidos los registros.
especificaciones/planos de protección, aplicaciones no protegidas, información de depuración, archivos de mapa, comandos de protección,
versiones de productos de protección utilizados, etc. Tener todo lo necesario para reproducir un problema siempre lleva
a la resolución más rápida.
Principios de criptografía
Utilice criptomonedas de caja blanca
Finalmente, si su aplicación procesa datos confidenciales, es de esperar que ya utilice criptografía. Aunque, si
Si incluyes claves en tu aplicación, a menudo se pueden encontrar y copiar utilizando alguna de las muchas herramientas de ataque.
creado para ese propósito. Utilizando una solución criptográfica de caja blanca como Digital.ai La protección de claves y datos puede
Asegúrese de que sus claves nunca existan en la memoria, al tiempo que permite que su aplicación realice las operaciones necesarias.
operaciones criptográficas.
La criptografía de caja blanca reemplaza las claves canónicas con código para que no puedan ser encontradas y extraídas fácilmente.
Y aunque tus claves tengan un formato diferente, siguen permitiendo que tu aplicación interactúe con
puntos de conexión que utilizan implementaciones criptográficas normales como OpenSSL.
La criptografía de caja blanca protege sus claves porque el código equivalente no es reversible a la clave clásica.
formato. Al mismo tiempo, Digital.ai Las claves de criptografía de caja blanca de Key & Data están efectivamente vinculadas estrechamente
a la implementación del algoritmo de caja blanca con enlace estático. Dado que estas claves criptográficas de caja blanca pueden
Al poder rotarse fácilmente mediante la vinculación de una biblioteca de reemplazo, sus aplicaciones obtienen mayor resistencia frente a las amenazas.
actores
¡Avanza con seguridad!
Recuerda que proteger las aplicaciones de las amenazas en constante evolución es un desafío permanente.
El continuo juego del gato y el ratón entre los propietarios de aplicaciones y los actores maliciosos exige que usted
Mantener una actitud proactiva y adaptable ante las amenazas en constante evolución. Digital.ai es tu pareja en este ciclo, y
Le animamos a utilizar las herramientas que proporcionamos dentro del marco de los consejos descritos en este documento.
Para proteger su patrimonio. Si tiene alguna duda, ¡contáctenos! Estamos para ayudarle.