BLOG

Para hablar sobre cómo desarrollar aplicaciones seguras quiero iniciar reconociendo como autor del primer sitio web a Tim Berners-Lee, autor del protocolo HTTP Hypertext Transfer Protocol y del lenguaje de programación HTML, utilizado para producir contenido que todos los navegadores modernos interpretan como texto, imágenes, videos y herramientas que en la actualidad utilizamos diariamente. Mientras trabajaba en el European Council for Nuclear Research (CERN), Tim desarrolló un mecanismo para compartir información con otros investigadores y así nació el internet como lo conocemos. A partir de 1993, CERN hizo público y de fuente libre el código de la World Wide Web.


Al día de hoy, las aplicaciones web conforman un entorno tecnológico que permite a millones de usuarios interactuar con organizaciones en todo el mundo. 

En este artículo quiero identificar y dar mis recomendaciones de solución sobre dos grandes retos en el uso de las tecnologías de información en las organizaciones

1.Producir aplicaciones seguras

2. Administrar aplicaciones seguras

Hasta hace pocos años, los requerimientos de seguridad no eran considerados dentro del proceso para desarrollar aplicaciones seguras y esta vulnerabilidad crítica y de alto impacto ha sido aprovechada por atacantes para causar fraudes y fugas masivas de información tanto a proveedores de servicios como a usuarios finales.

La manera más eficiente y efectiva para desarrollar aplicaciones seguras es a través de un ciclo de vida para el desarrollo de aplicaciones seguras que debe tener como mínimo las siguientes etapas:

Requerimientos de seguridad para desarrollar aplicaciones seguras

Sin duda, esta es la etapa más importante en todo el ciclo de vida de desarrollo ya que las definiciones y lineamientos generados por los involucrados en esta etapa, atenderán los riesgos a los que diariamente estará expuesta nuestra aplicación.

Al considerar un nuevo desarrollo o una modificación de una aplicación actual, se deben tomar en cuenta algunos factores, tales como:

  • El tipo de información y datos que se van a procesar y almacenar (¿datos personales?, ¿datos financieros?).
  • Los usuarios que utilizarán el servicio (¿clientes?, ¿un grupo selecto de usuarios internos?).
  • Las funciones específicas y casos de uso.
  • Requerimientos legales, regulatorios y contractuales con clientes (complejidad de contraseñas, cifrado de medios de almacenamiento, segmentación de la red).

La arquitectura de seguridad utiliza un enfoque de defensa en profundidad para mitigar y contener ataques. Utilizando servidores web, balanceadores de carga y redes de distribución de contenido, bases de datos, sistemas operativos, certificados para el cifrado de transporte de datos y aplicaciones de monitoreo se debe dar cumplimiento a las características de confidencialidad, integridad y disponibilidad definidas en esta etapa.

Para desarrollos nuevos o actualizaciones mayores, se debe considerar involucrar a los equipos internos como ventas, mercadotecnia, legal y operaciones de tecnología, en conjunto con administradores de sistemas y programadores, para garantizar que el proceso de definición de requerimientos sea exhaustivo, colegiado y comprendido por todos los actores involucrados en el proceso.

Modelo de amenazas y diseño de seguridad

La seguridad de la información debe ser evaluada de manera modular, identificando todos los componentes o activos que procesan información.

Posterior a la definición de los requerimientos de seguridad, las funciones y los servicios que proporcionará la aplicación, deben ser evaluadas las amenazas que afectan cada uno de los componentes. Para realizar dicha evaluación, debemos identificar qué sistemas tendrán acceso desde internet y cuales solamente estarán restringidos a usuarios específicos dentro de la red interna e identificar el tipo de datos que serán procesados y almacenados en cada uno.

El diseño de seguridad debe atender los resultados del modelo de amenazas para evitar vulnerabilidades al programar y administrar las aplicaciones. 

En esta etapa también se diseñan algunas pruebas para evaluar la efectividad de los controles determinados y evaluar su implementación.

Desarrollo y programación segura

Los controles y mecanismos de seguridad definidos en el diseño deberán ser materializados por el equipo de desarrolladores. Se debe dar prioridad a estándares de prácticas comunes, así como rutinas de código previamente autorizadas.

Las funciones críticas para la protección de las aplicaciones que deben ser consideradas son:

  • Validación de entradas
  • Codificación y validación de salidas
  • Autenticación y manejo de contraseñas
  • Manejo de sesiones
  • Control de acceso
  • Cifrado 
  • Manejo de errores y bitácoras
  • Protección de datos
  • Protección de las comunicaciones
  • Configuración de sistemas
  • Seguridad de bases de datos
  • Administración de archivos
  • Manejo de memoria

OWASP, Open Web Security Project presenta una lista de tareas específicas para garantizar la seguridad en el desarrollo: OWASP Secure Coding Practices Quick Reference Guide

También es importante tomar en cuenta el entrenamiento y certificación de desarrolladores e implementadores de tecnología en las metodologías y lenguajes utilizados, con un enfoque práctico en la producción y revisión de código.

Pruebas en las aplicaciones

Las pruebas de seguridad y funcionamiento deben apegarse a estándares conocidos para cubrir todos los aspectos de la aplicación. En esta etapa se debe validar que los controles diseñados fueron implementados de manera correcta, así como diseñar un plan de pruebas.

Las auditorías de diagnóstico y pruebas de penetración realizadas por expertos externos permiten identificar los riesgos y vulnerabilidades que pudieran pasar desapercibidas en etapas anteriores y proporcionan información valiosa a los desarrolladores para correcciones en versiones posteriores.

Las fases de una prueba de seguridad interna o externa debe incluir como mínimo:

  • Reconocimiento e identificación de tecnología y aplicaciones
  • Análisis de vulnerabilidades en código estático 
  • Análisis de vulnerabilidades dinámico de aplicaciones
  • Diseño de ataques y confirmación de hallazgos
  • Presentación y reporte técnico

En código verde nos distinguimos por realizar las Pruebas de Penetración evaluando gente, procesos, tecnología, controles técnicos y administrativos. Nuestro método es exhaustivo y por lo tanto más certero.

Mantenimiento

Las aplicaciones que utilizan librerías y componentes de terceros deben ser actualizadas constantemente para evitar que vulnerabilidades críticas no parchadas afecten la seguridad de los datos.

Los métricos definidos en fases anteriores deben ser monitoreados de manera periódica para detectar eventos o incidentes de seguridad. Es importante considerar datos como los intentos fallidos de inicio de sesión y otras anomalías para determinar si nuestra aplicación está bajo ataque.

El ciclo de vida de desarrollo seguro de aplicaciones es una herramienta que habilita a las organizaciones a mantener a través del tiempo, la calidad de los componentes de negocio soportados por las tecnologías de información.

El entrenamiento para la certificación CSSLP de (ISC)2 te capacita para implementar las mejores prácticas de seguridad en cada fase del ciclo de vida del desarrollo de software (SDLC). Adquieres los conocimientos y las habilidades técnicas avanzadas para la autenticación, autorización y auditoría en todo el SDLC. Además, aprenderás a utilizar las mejores prácticas, políticas y procedimientos establecidos por los expertos en Ciberseguridad de (ISC)².

También puedes aprender más de este tema en el webinar Cómo desarrollar aplicaciones seguras. Conéctate.

Para referencias detalladas para el desarrollo seguro de aplicaciones visita las siguientes ligas o visita la página oficial de código verde.

Microsoft Security Development Lifecycle (SDL)

Open Source Projects for Software Security

Por David Schekaiban, Director de Seguridad de la Información en código verde

Share This