Temario del curso
Día 1
Seguridad de IT y codificación segura
- Naturaleza de la seguridad
- Términos relacionados con la seguridad de IT
- Definición de riesgo
- Diferentes aspectos de la seguridad de IT
- Requisitos de diferentes áreas de aplicación
- Seguridad de IT vs. codificación segura
-
De las vulnerabilidades a los botnets y el cibercrimen
- Naturaleza de los fallos de seguridad
- Razones de la dificultad
- De una computadora infectada a ataques dirigidos
-
Clasificación de los fallos de seguridad
- Taxonomía de Landwehr
- Los Siete Reinos Perniciosos
- OWASP Top Ten 2013
- Comparación OWASP Top Ten 2003 – 2013
Introducción al Microsoft® Security Development Lifecycle (SDL)
- Agenda
-
Aplicaciones bajo ataque...
- Evolución del cibercrimen
- Los ataques se centran en las aplicaciones
- La mayoría de las vulnerabilidades están en aplicaciones de ISV más pequeñas
-
Origenes del Microsoft SDL...
- Línea temporal de seguridad en Microsoft...
- ¿Qué aplicaciones están obligadas a seguir el SDL?
-
Microsoft Security Development Lifecycle (SDL)
- Microsoft Security Development Lifecycle (SDL)
- Requisitos previos al SDL: Formación en seguridad
- Fase Uno: Requisitos
- Fase Dos: Diseño
- Fase Tres: Implementación
- Fase Cuatro: Verificación
- Fase Cinco: Lanzamiento – Plan de respuesta
- Fase Cinco: Lanzamiento – Revisión final de seguridad
- Fase Cinco: Lanzamiento – Archivo
- Requisito post-SDL: Respuesta
- Guía de proceso SDL para aplicaciones LOB
- Guía de SDL para metodologías ágiles
- El desarrollo seguro de software requiere mejora del proceso
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 de ataque – ejemplos
-
Privacidad
- Privacidad
- Comprensión de los comportamientos y preocupaciones de la aplicación
-
Defensa en profundidad
- Principio principal del SDL: Defensa en profundidad
- Defensa en profundidad – ejemplo
-
Principio de menor privilegio
- Menor privilegio – ejemplo
-
Configuraciones seguras por defecto
- Configuraciones seguras por defecto – ejemplos
Principios de implementación segura
- Agenda
- Microsoft Security Development Lifecycle (SDL)
-
Conceptos básicos de desbordamiento de búferes
- Procesadores Intel 80x86 – registros principales
- El diseño de direcciones de memoria
- El mecanismo de llamada a funciones 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
- Desbordamiento de enteros
- Desbordamiento aritmético – ¡adivina el resultado!
- Ejercicio IntOverflow
- ¿Cuál es el valor de Math.Abs(int.MinValue)?
-
Mitigación de problemas con enteros
- Mitigación de problemas con enteros
- Evitar el desbordamiento aritmético – suma
- Evitar el desbordamiento aritmético – multiplicación
- Detectar desbordamientos con la palabra clave checked en C#
- Ejercicio – Usando la palabra clave checked en C#
- Excepciones desencadenadas por desbordamientos en C#
-
Estudio de caso – Desbordamiento de enteros en .NET
- Una vulnerabilidad real de desbordamiento de enteros
- Explotación de la vulnerabilidad de desbordamiento de enteros
-
Vulnerabilidad de navegación de ruta
- Mitigación de la vulnerabilidad de navegación de ruta
Día 2
Principios de implementación segura
-
Inyección
- Métodos típicos de ataque por inyección SQL
- Inyección SQL ciega y basada en tiempo
- Métodos de protección contra inyección SQL
- Inyección de comandos
-
Autenticación rota - gestión de contraseñas
- Ejercicio – Debilidad de las contraseñas cifradas
- Gestión y almacenamiento de contraseñas
- Algoritmos hash específicos para el almacenamiento de contraseñas
-
Cross-Site Scripting (XSS)
- Cross-Site Scripting (XSS)
- Inyección de CSS
- Explotación: inyección a través de otras etiquetas HTML
- Prevención de XSS
-
Falta de control de acceso por función
- Filtrado de subidas de archivos
-
Criptografía práctica
- Proporcionar confidencialidad con criptografía simétrica
- Algoritmos de cifrado simétrico
- Cifrado por bloques – modos de operación
- Hash o resumen de mensaje
- Algoritmos hash
- Código de autenticación de mensaje (MAC)
- Proporcionar integridad y autenticidad con una clave simétrica
- Proporcionar confidencialidad con cifrado de clave pública
- Regla general – posesión de la clave privada
- Errores típicos en la gestión de contraseñas
- Ejercicio – Contraseñas codificadas
- Conclusión
Principios de verificación segura
- Pruebas funcionales vs. pruebas de seguridad
- Vulnerabilidades de seguridad
- Priorización
- Pruebas de seguridad en el SDLC
- Pasos para la planificación de pruebas (análisis de riesgo)
-
Alcance y recolección de información
- Partes interesadas
- Activos
- La superficie de ataque
- Objetivos de seguridad para las pruebas
-
Modelado de amenazas
- Modelado de amenazas
- Perfiles de atacantes
- Modelado de amenazas basado en árboles de ataque
- Modelado de amenazas basado en casos de uso malintencionados/abuso
- Casos de uso malintencionados/abuso – un ejemplo simple de una 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 – STRIDE y elementos DFD del MS SDL
- Análisis de riesgo – clasificación de amenazas
- El modelo de clasificación de amenazas/riesgos DREAD
-
Técnicas y herramientas de prueba de seguridad
- Enfoques generales de pruebas
- Técnicas para diferentes etapas del SDLC
-
Revisión de código
- Revisión de código para la seguridad del software
- Análisis de taint
- Heurísticas
-
Análisis estático de código
- Análisis estático de código
- Ejercicio – Usando herramientas de análisis estático de código
-
Prueba de la implementación
- Verificación manual en tiempo de ejecución
- Pruebas manuales vs. pruebas automatizadas de seguridad
- Prueba de penetración
- Pruebas de estrés
-
Fuzzing
- Pruebas automatizadas de seguridad - fuzzing
- Desafíos del fuzzing
-
Escáneres de vulnerabilidades web
- Ejercicio – Usando un escáner de vulnerabilidades
-
Verificación y endurecimiento del entorno
- Sistema de puntuación de vulnerabilidad común – CVSS
- Escáneres de vulnerabilidades
- Bases de datos públicas
-
Estudio de caso – Bypass de autenticación de formularios
- Vulnerabilidad de terminación de byte nulo
- La vulnerabilidad de bypass de autenticación de formularios en el código
- Explotación del bypass de autenticación de formularios
Fuentes de conocimiento
- Fuentes de codificación segura – un kit inicial
- Bases de datos de vulnerabilidades
- Directrices de codificación segura .NET en MSDN
- Hojas de trucos de codificación segura .NET
- Libros recomendados – .NET y ASP.NET
Testimonios (5)
Múltiples ejemplos para cada módulo y gran conocimiento del formador.
Sebastian - BRD
Curso - Secure Developer Java (Inc OWASP)
Traducción Automática
Module3 Applications Attacks and Exploits, XSS, SQL inyección Ataques y exploits de servidores Module4, DOS, BOF
Tshifhiwa - Vodacom
Curso - How to Write Secure Code
Traducción Automática
El conocimiento del tema del entrenador fue excelente, y la forma en que se estructuraron las sesiones para que el público pudiera seguir las demostraciones realmente ayudó a consolidar ese conocimiento, en comparación con solo sentarse y escuchar.
Jack Allan - RSM UK Management Ltd.
Curso - Secure Developer .NET (Inc OWASP)
Traducción Automática
El excelente nivel de conocimientos del instructor, la disposición y su amabilidad.
Luis Antonio Salazar Rivero - Banco de Mexico
Curso - C/C++ Secure Coding
Nada fue perfecto.
Zola Madolo - Vodacom
Curso - Android Security
Traducción Automática