Día 1
Seguridad informática y codificación segura
Naturaleza de la seguridad
Términos relacionados con la seguridad informática
Definición de riesgo
Diferentes aspectos de la seguridad informática
Requisitos de las diferentes áreas de aplicación
Seguridad informática frente a codificación segura
De las vulnerabilidades a las botnets y la ciberdelincuencia
Naturaleza de las fallas de seguridad
Razones de dificultad
De un ordenador infectado a ataques dirigidos
Clasificación de los fallos de seguridad
Taxonomía de Landwehr
Los Siete Reinos Perniciosos
OWASP Top Ten 2013
OWASP Comparación de los diez mejores entre 2003 y 2013
Introducción al Microsoft ® Ciclo de vida de desarrollo de seguridad (SDL)
Agenda
Aplicaciones bajo ataque...
Evolución de la ciberdelincuencia
Los ataques se centran en las aplicaciones
La mayoría de las vulnerabilidades se encuentran en aplicaciones de ISV más pequeñas
Orígenes de la Microsoft SDL...
Cronología de seguridad en Microsoft...
¿Qué aplicaciones son necesarias para seguir SDL?
Microsoft Ciclo de vida de desarrollo de seguridad (SDL)
Microsoft Ciclo de vida de desarrollo de seguridad (SDL)
Requisitos previos a SDL: formación en seguridad
Primera fase: Requisitos
Segunda fase: Diseño
Fase tres: Implementación
Fase cuatro: Verificación
Fase Cinco: Liberación – Plan de Respuesta
Fase cinco: Lanzamiento – Revisión de seguridad final
Fase Cinco: Lanzamiento – Archivo
Requisito posterior a SDL: Respuesta
Guía de procesos de SDL para aplicaciones de línea de negocio
Guía de SDL para Agile metodologías
El desarrollo seguro de software requiere la mejora de los procesos
Principios de diseño seguro
Superficie de ataque
Reducción de la superficie de ataque
Superficie de ataque: un ejemplo
Análisis de la superficie de ataque
Reducción de la superficie expuesta a ataques: ejemplos
Privacidad
Privacidad
Comprender los comportamientos y las preocupaciones de las aplicaciones
Defensa en profundidad
Principio básico de SDL: Defensa en profundidad
Defensa en profundidad – ejemplo
Principio de privilegios mínimos
Privilegio mínimo: ejemplo
Valores predeterminados seguros
Valores predeterminados seguros: ejemplos
Principios de implementación segura
Agenda
Microsoft Ciclo de vida de desarrollo de seguridad (SDL)
Conceptos básicos sobre el desbordamiento de búfer
Procesadores Intel 80x86 – registros principales
El diseño de la dirección de memoria
El mecanismo de llamada a la función en C/C++ en x86
Las variables locales y el marco de pila
Desbordamiento de pila
Desbordamiento de búfer en la pila
Ejercicios – introducción
Ejercicio BOFIntro
Ejercicio BOFIntro: determinar el diseño de la pila
Ejercicio BOFIntro: un simple exploit
Validación de entrada
Conceptos de validación de entrada
Problemas con enteros
Representación de enteros negativos
Desbordamientos de enteros
Desbordamiento aritmético: ¡adivina el resultado!
Ejercicio IntOverflow
¿Cuál es el valor de Math.Abs(int. MinValue)?
Mitigación de problemas enteros
Mitigación de problemas enteros
Evitar el desbordamiento aritmético – suma
Evitar el desbordamiento aritmético – multiplicación
Detección de desbordamiento con la palabra clave checked en C#
Ejercicio: uso de la palabra clave checked en C#
Excepciones activadas por desbordamientos en C#
Caso práctico: Desbordamiento de enteros en .NET
Una vulnerabilidad de desbordamiento de enteros en el mundo real
Explotación de la vulnerabilidad de desbordamiento de enteros
Vulnerabilidad de recorrido de ruta
Mitigación del recorrido de la ruta
Día 2
Principios de implementación segura
Inyección
Métodos típicos SQL de ataque por inyección
Inyección ciega y basada en el tiempo SQL
SQL Métodos de protección contra inyecciones
Inyección de comandos
Autenticación rota: gestión de contraseñas
Ejercicio – Debilidad de las contraseñas con hash
Gestión y almacenamiento de contraseñas
Algoritmos hash de propósito especial para el almacenamiento de contraseñas
Secuencias de comandos entre sitios (XSS)
Secuencias de comandos entre sitios (XSS)
CSS Inyección
Explotación: inyección a través de otras etiquetas HTML
Prevención de XSS
Falta el control de acceso a nivel de función
Filtrado de cargas de archivos
Criptografía práctica
Proporcionar confidencialidad con criptografía simétrica
Los ims de Symede
Cifrados de bloques: modos de funcionamiento
Hash o resumen de mensajes
Algoritmos hash
Código de autenticación de mensajes (MAC)
Proporcionar integridad y autenticidad con una clave simétrica
Proporcionar confidencialidad con cifrado de clave pública
Regla general: posesión de una clave privada
Errores típicos en la gestión de contraseñas
Ejercicio – Contraseñas codificadas de forma rígida
Conclusión
Principios de verificación segura
Pruebas funcionales frente a pruebas de seguridad
Vulnerabilidades de seguridad
Priorización
Pruebas de seguridad en el SDLC
Pasos de la planificación de pruebas (análisis de riesgos)
Determinación del alcance y recopilación de información
Participantes
Activo
La superficie de ataque
Objetivos de seguridad para las pruebas
Modelado de amenazas
Modelado de amenazas
Perfiles de los atacantes
Modelado de amenazas basado en árboles de ataque
Modelado de amenazas basado en casos de uso indebido/abuso
Casos de uso indebido/abuso: un ejemplo sencillo de tienda web
Enfoque STRIDE por elemento para el modelado de amenazas: MS SDL
Identificación de objetivos de seguridad
Diagramación: ejemplos de elementos DFD
Diagrama de flujo de datos: ejemplo
Enumeración de amenazas: elementos STRIDE y DFD de MS SDL
Análisis de riesgos: clasificación de amenazas
El modelo de clasificación de amenazas/riesgos DREAD
Técnicas y herramientas de pruebas de seguridad
Enfoques generales de las pruebas
Técnicas para varios pasos del SDLC
Revisión de código
Revisión de código para la seguridad del software
Análisis de la contaminación
Heurística
Análisis de código estático
Análisis de código estático
Análisis de código estático
Ejercicio: uso de herramientas de análisis de código estático
Prueba de la implementación
Verificación manual en tiempo de ejecución
Pruebas de seguridad manuales vs. automatizadas
Pruebas de penetración
Pruebas de estrés
Fuzzing
Pruebas de seguridad automatizadas: fuzzing
Desafíos del fuzzing
Escáneres de vulnerabilidades web
Ejercicio: uso de un escáner de vulnerabilidades
Comprobación y endurecimiento del entorno
Sistema Común de Puntuación de Vulnerabilidades – CVSS
Escáneres de vulnerabilidades
Bases de datos públicas
Caso práctico: omisión de autenticación de formularios
Vulnerabilidad de terminación de bytes NULL
La vulnerabilidad de omisión de autenticación de formularios en el código
Explotación de la omisión de autenticación de formularios
Fuentes de conocimiento
Fuentes de codificación seguras: un kit de inicio
Bases de datos de vulnerabilidades
Directrices de codificación segura de .NET en MSDN
Hojas de referencia rápida de codificación segura de .NET
Libros recomendados: .NET y ASP.NET