Skip to main content

Desarrollo de software seguro: cómo implementar los 10 controles proactivos principales de OWASP

Escrito por

5 de noviembre de 2020

0 minutos de lectura

Hace poco recordé una excelente sesión inaugural de la comunidad DevSecCon que tuvimos el año pasado, con nada menos que Jim Manico.

En esta sesión, Jim nos guio por la lista de los 10 controles proactivos principales de OWASP y cómo incorporarlos en nuestras aplicaciones web. El documento sobre controles proactivos, escrito por el propio Manico junto con Katy Anton y Jim Bird, ofrece una descripción general de seguridad para desarrolladores que quieren iniciarse en la seguridad web, comprender las distintas capas de riesgos de seguridad y saber cómo protegerse frente a ellos.

Si te parece interesante, sigue leyendo mientras analizamos uno por uno los 10 controles proactivos principales de OWASP.

10 controles proactivos principales de OWASP 2020

  1. Definir los requisitos de seguridad

  2. Aprovechar los frameworks y las bibliotecas de seguridad

  3. Proteger el acceso a las bases de datos

  4. Codificar y escapar los datos

  5. Validar todas las entradas

  6. Implementar la identidad digital

  7. Aplicar controles de acceso

  8. Proteger los datos en todas partes

  9. Implementar el registro y la supervisión de seguridad

  10. Manejar todos los errores y las excepciones

Control proactivo 1 de OWASP: definir los requisitos de seguridad

Crear un producto seguro comienza por definir qué requisitos de seguridad debemos tener en cuenta. Así como los requisitos comerciales nos ayudan a dar forma al producto, los requisitos de seguridad nos permiten considerar la seguridad desde el inicio.

Un destacado proyecto de OWASP llamado Estándar de verificación de seguridad de aplicaciones —conocido como OWASP ASVS— ofrece más de doscientos requisitos distintos para crear software seguro para aplicaciones web.

Incluye requisitos de seguridad como protocolos de autenticación, administración de sesiones y estándares de seguridad criptográfica. Lo más importante es que ASVS ofrece un enfoque por etapas para implementar gradualmente los requisitos de seguridad a medida que das tus primeros pasos.

Matriz ASVS codificada por colores que muestra las actividades de aplicabilidad, desarrollo, implementación y aseguramiento en los niveles 1, 2 y 3.

Fuente: GitHub

Control proactivo 2 de OWASP: aprovechar los frameworks y las bibliotecas de seguridad

¿Qué herramientas necesitas para crear software seguro?

La lista abarca desde la protección contra ataques de inyección hasta la autenticación, las API criptográficas seguras y el almacenamiento de datos confidenciales, entre otras cosas. Para abordar estos problemas, usa bibliotecas de seguridad diseñadas específicamente para ese fin.

Asegúrate de dar seguimiento al uso de bibliotecas de código abierto y mantener un inventario de sus versiones, licencias y vulnerabilidades, como las 10 vulnerabilidades principales de OWASP, mediante herramientas como OWASP Dependency Check o Snyk.

Control proactivo 3 de OWASP: proteger el acceso a las bases de datos

Las bases de datos suelen ser componentes clave para crear aplicaciones web completas, ya que estas necesitan conservar el estado y persistir los datos.

La seguridad de las bases de datos abarca muchas áreas, entre ellas:

  • la protección contra inyecciones SQL mediante técnicas como la vinculación de parámetros. También es muy importante supervisar las vulnerabilidades en las bibliotecas de ORM y SQL que usas, como vimos en el reciente incidente en el que se descubrió que la biblioteca npm Sequelize ORM era vulnerable a ataques de inyección SQL.

  • la autenticación segura y sólida de la base de datos, así como su configuración general.

  • la comunicación segura entre la base de datos y su cliente.

¿Te interesa leer más sobre los ataques de inyección SQL y por qué representan un riesgo de seguridad? Jim compartió algunos consejos en bobby-tables.com.

Control proactivo 4 de OWASP: codificar y escapar los datos

Considera siempre que los datos no son confiables, ya que pueden provenir de distintas fuentes sobre las que quizá no tengas información.

Las vulnerabilidades de secuencias de comandos entre sitios (XSS) son un excelente ejemplo de cómo los datos pueden recorrer el sistema y terminar ejecutando código malicioso en el contexto de un navegador, como JavaScript, lo que puede comprometerlo.

Otros casos que requieren escapar los datos son las inyecciones de comandos en el sistema operativo (SO), en las que un componente puede ejecutar comandos del sistema provenientes de la entrada del usuario y, por lo tanto, existe el riesgo de ejecutar comandos maliciosos.

Estoy obteniendo datos de la base de datos. ¿Debería escaparlos? Un desarrollador seguro, sin duda. No es práctico determinar y etiquetar si una cadena de una base de datos está contaminada o no. En su lugar, implementa controles adecuados en la capa de presentación, como el navegador, para escapar cualquier dato que reciba.

Una excepción extrema a esa regla es cuando decides crear uno o más elementos DOM de una página web a partir de datos de la base de datos. En ese caso, te adentras en terreno peligroso y debes analizar detenidamente tu modelo y qué controles pueden ayudarte a mitigar los riesgos asociados.

Estas son algunas bibliotecas que pueden ayudarte a sanitizar los datos:

Es importante tener en cuenta que el proyecto OWASP ESAPI ya no recibe mantenimiento activo; te conviene buscar otras soluciones.

Por último, escribimos sobre la inyección de comandos: cómo funciona, cuáles son los riesgos y cómo prevenirla. Te recomiendo leerlo a continuación.

Control proactivo 5 de OWASP: validar todas las entradas

Así como sueles aprovechar el sistema de tipos, como TypeScript, para asegurarte de que el código use variables válidas y esperadas, también debes validar que las entradas recibidas coincidan con tus expectativas o con los modelos de esos datos.

Pautas generales:

  • No confíes en la validación como medida para escapar los datos, ya que no son controles de seguridad intercambiables.

  • Al validar los datos de entrada, procura establecer límites de tamaño para todos los tipos de entradas.

Control proactivo 6 de OWASP: implementar la identidad digital

¿Cómo identificas la identidad de un usuario? Con controles de seguridad como la autenticación, la comprobación de identidad, la administración de sesiones y otros.

Para tomar estas decisiones, puedes desarrollar tu propia solución: administrar el registro de usuarios y dar seguimiento a sus contraseñas o métodos de autenticación. Como alternativa, puedes optar por servicios administrados y aprovechar la arquitectura sin servidor de la nube con servicios como Auth0.

Este es un tema amplio. Si necesitas verificar y confirmar que una capa de identidad digital se gestione de forma segura, consulta las pautas de identidad digital NIST 800-63-3B. El documento de NIST ayuda a definir cómo abordar la seguridad de las contraseñas.

Control proactivo 7 de OWASP: aplicar el control de acceso

Es muy probable que los requisitos de control de acceso se definan en varias capas de tu aplicación. Por ejemplo, al obtener datos de la base de datos en una aplicación SaaS multiusuario, debes asegurarte de que los datos no queden expuestos accidentalmente a otros usuarios. Otro ejemplo es determinar quién tiene autorización para acceder a las API que ofrece tu aplicación web.

Un consejo de Jim es evitar hacer referencia en el código a los datos de acceso asociados con los roles, ya que eso lleva a codificar directamente la política de acceso. Por ejemplo, considera comprobaciones en el código como if (user.role === 'admin'). En su lugar, un enfoque basado en capacidades, como el control de acceso basado en permisos, no impone la política en sí. Un ejemplo sería if (user.canDelete(blogPostId).

Control proactivo 8 de OWASP: proteger los datos en todas partes

En la aplicación de Snyk, manejamos datos de nuestros usuarios y propios, por lo que es fundamental cuidar al máximo la seguridad y privacidad de nuestra aplicación, protegiéndola en todos los puntos necesarios.

Ten en cuenta estas acciones al manejar datos:

  • Protege los datos durante la transmisión usando HTTPS con una configuración adecuada y protocolos de seguridad actualizados, como TLS 1.3, además de algoritmos criptográficos sólidos.

  • Usa encabezados HTTP seguros que aprovechen las funciones de seguridad del navegador, como HTTP Strict Transport Security (HSTS), y establece una política de seguridad de contenido (CSP) para confiar en los datos.

  • Al realizar tareas relacionadas con la criptografía, usa siempre bibliotecas reconocidas y no desarrolles tus propias implementaciones.

Control proactivo 9 de OWASP: implementar el registro y la supervisión de seguridad

Como desarrolladores de aplicaciones, solemos registrar datos que nos ayudan a depurar y rastrear problemas relacionados con flujos de negocio incorrectos o excepciones. Los registros enfocados en la seguridad son otro tipo de datos que debemos procurar mantener para crear un rastro de auditoría que luego ayude a investigar las brechas y otros problemas de seguridad.

Estas son algunas sugerencias para el registro de seguridad:

  • todas las fallas de validación de entradas

  • todos los eventos de autenticación, las contraseñas correctas e incorrectas, los inicios de sesión y los datos relacionados con las sesiones

  • todas las fallas de control de acceso, como los intentos de escalar privilegios

Control proactivo 10 de OWASP: manejar todos los errores y las excepciones

Manejar correctamente los errores y las excepciones de las aplicaciones web no solo es bueno para su funcionamiento, sino que también evita la filtración de datos confidenciales.

Sigue estas pautas:

  • Administra todas las excepciones de forma centralizada.

  • Asegúrate de detectar y manejar correctamente los comportamientos no controlados mediante una metodología estandarizada en toda la aplicación.

  • Asegúrate de que los datos registrados no incluyan información confidencial, como seguimientos de pila o códigos de error criptográficos.

Únete a la comunidad DevSecCon

Te invito a unirte a la comunidad DevSecCon y aprender más mediante nuestros webinars y la comunidad en línea de usuarios de Snyk, que ayudan a los desarrolladores a iniciarse en la seguridad y escribir código seguro.

Empieza con Capture the Flag

Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.

Leer más

blog feature snyk container custom base recommendations
Blog

Presentamos Evo Agentic AppSec: seguridad al ritmo del desarrollo con IA

El desarrollo impulsado por IA supera el ritmo de los flujos de trabajo de seguridad tradicionales. Agentic AppSec de Snyk usa agentes de seguridad para encontrar, corregir y verificar vulnerabilidades de forma continua, mientras las personas definen el estándar.

blog feature ai violet
Blog

VulnBump: ¿Pueden los agentes de IA corregir dependencias vulnerables sin romper la compilación?

VulnBump prueba agentes de IA en 307 actualizaciones reales de dependencias. Una corrección cuenta solo si elimina la vulnerabilidad y mantiene en verde la compilación y las pruebas.

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.