En este ejercicio, vamos a aplicar los conocimientos adquiridos sobre la implementación de controles de seguridad en una aplicación web. El objetivo es identificar las áreas vulnerables y aplicar las medidas necesarias para mitigar los riesgos.
Objetivos del Ejercicio
- Identificar vulnerabilidades en una aplicación web.
- Implementar controles de seguridad para mitigar las vulnerabilidades identificadas.
- Verificar la efectividad de los controles implementados.
Escenario
Tienes acceso a una aplicación web de ejemplo que contiene varias vulnerabilidades comunes. Tu tarea es identificar estas vulnerabilidades y aplicar los controles de seguridad adecuados para mitigarlas.
Paso 1: Identificación de Vulnerabilidades
Primero, revisa el código fuente de la aplicación y utiliza herramientas de escaneo de seguridad para identificar las vulnerabilidades presentes.
Herramientas Sugeridas:
- OWASP ZAP
- Burp Suite
- SonarQube
Código Fuente de Ejemplo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Aplicación Web de Ejemplo</title> </head> <body> <h1>Bienvenido a la Aplicación Web de Ejemplo</h1> <form action="login.php" method="post"> <label for="username">Usuario:</label> <input type="text" id="username" name="username"> <label for="password">Contraseña:</label> <input type="password" id="password" name="password"> <button type="submit">Iniciar Sesión</button> </form> </body> </html>
Posibles Vulnerabilidades:
- Inyección SQL: La aplicación no valida ni escapa adecuadamente las entradas del usuario.
- Cross-Site Scripting (XSS): La aplicación no escapa adecuadamente las salidas.
- Autenticación Débil: La aplicación no implementa controles de autenticación robustos.
Paso 2: Implementación de Controles de Seguridad
1. Mitigación de Inyección SQL
Utiliza consultas preparadas para evitar la inyección SQL.
Código Original (login.php)
<?php $username = $_POST['username']; $password = $_POST['password']; $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; $result = mysqli_query($conn, $query); if (mysqli_num_rows($result) > 0) { echo "Inicio de sesión exitoso."; } else { echo "Usuario o contraseña incorrectos."; } ?>
Código Mejorado
<?php $username = $_POST['username']; $password = $_POST['password']; $stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->bind_param("ss", $username, $password); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { echo "Inicio de sesión exitoso."; } else { echo "Usuario o contraseña incorrectos."; } ?>
2. Mitigación de Cross-Site Scripting (XSS)
Escapa adecuadamente las salidas para evitar XSS.
Código Original
Código Mejorado
3. Mejora de la Autenticación
Implementa controles de autenticación robustos, como el uso de hashing seguro para contraseñas.
Código Original
<?php $password = $_POST['password']; $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
Código Mejorado
<?php $password = $_POST['password']; $hashed_password = password_hash($password, PASSWORD_BCRYPT); $query = "SELECT * FROM users WHERE username = '$username' AND password = '$hashed_password'";
Paso 3: Verificación de la Efectividad de los Controles
Después de implementar los controles de seguridad, utiliza las herramientas de escaneo de seguridad nuevamente para verificar que las vulnerabilidades han sido mitigadas.
Herramientas Sugeridas:
- OWASP ZAP
- Burp Suite
- SonarQube
Ejercicio Práctico
-
Identificación de Vulnerabilidades:
- Utiliza OWASP ZAP para escanear la aplicación web de ejemplo y documenta las vulnerabilidades encontradas.
-
Implementación de Controles:
- Aplica los controles de seguridad discutidos anteriormente en el código fuente de la aplicación.
-
Verificación:
- Realiza un nuevo escaneo con OWASP ZAP para asegurarte de que las vulnerabilidades han sido mitigadas.
Soluciones
Identificación de Vulnerabilidades
- Inyección SQL: Detectada en el archivo
login.php
. - XSS: Detectada en la salida de
$_GET['name']
. - Autenticación Débil: Uso de contraseñas en texto plano.
Implementación de Controles
- Inyección SQL: Uso de consultas preparadas.
- XSS: Uso de
htmlspecialchars
para escapar las salidas. - Autenticación Débil: Uso de hashing seguro con
password_hash
.
Verificación
- Realiza un nuevo escaneo y verifica que las vulnerabilidades han sido mitigadas.
Conclusión
En este ejercicio, hemos aprendido a identificar y mitigar vulnerabilidades comunes en aplicaciones web mediante la implementación de controles de seguridad adecuados. La práctica continua y el uso de herramientas de escaneo de seguridad son esenciales para mantener la seguridad de las aplicaciones web.
Resumen del Ejercicio:
- Identificamos vulnerabilidades comunes en una aplicación web.
- Implementamos controles de seguridad para mitigar estas vulnerabilidades.
- Verificamos la efectividad de los controles implementados.
Este ejercicio te prepara para enfrentar y resolver problemas de seguridad en aplicaciones web, asegurando que las prácticas de desarrollo seguro se integren en tu flujo de trabajo.
Curso de OWASP: Directrices y Estándares para la Seguridad en Aplicaciones Web
Módulo 1: Introducción a OWASP
Módulo 2: Principales Proyectos de OWASP
- OWASP Top Ten
- OWASP ASVS (Application Security Verification Standard)
- OWASP SAMM (Software Assurance Maturity Model)
- OWASP ZAP (Zed Attack Proxy)
Módulo 3: OWASP Top Ten
- A1: Inyección
- A2: Pérdida de Autenticación
- A3: Exposición de Datos Sensibles
- A4: Entidades Externas XML (XXE)
- A5: Control de Acceso Roto
- A6: Configuración Incorrecta de Seguridad
- A7: Cross-Site Scripting (XSS)
- A8: Deserialización Insegura
- A9: Uso de Componentes con Vulnerabilidades Conocidas
- A10: Registro y Monitoreo Insuficientes
Módulo 4: OWASP ASVS (Application Security Verification Standard)
- Introducción a ASVS
- Niveles de Verificación
- Requisitos de Seguridad
- Implementación de ASVS en Proyectos
Módulo 5: OWASP SAMM (Software Assurance Maturity Model)
Módulo 6: OWASP ZAP (Zed Attack Proxy)
- Introducción a ZAP
- Instalación y Configuración
- Escaneo de Vulnerabilidades
- Automatización de Pruebas de Seguridad
Módulo 7: Buenas Prácticas y Recomendaciones
- Ciclo de Vida de Desarrollo Seguro (SDLC)
- Integración de Seguridad en DevOps
- Capacitación y Concienciación en Seguridad
- Herramientas y Recursos Adicionales
Módulo 8: Ejercicios Prácticos y Casos de Estudio
- Ejercicio 1: Identificación de Vulnerabilidades
- Ejercicio 2: Implementación de Controles de Seguridad
- Caso de Estudio 1: Análisis de un Incidente de Seguridad
- Caso de Estudio 2: Mejora de la Seguridad en una Aplicación Web