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

  1. Identificar vulnerabilidades en una aplicación web.
  2. Implementar controles de seguridad para mitigar las vulnerabilidades identificadas.
  3. 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:

  1. Inyección SQL: La aplicación no valida ni escapa adecuadamente las entradas del usuario.
  2. Cross-Site Scripting (XSS): La aplicación no escapa adecuadamente las salidas.
  3. 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
<?php
echo "Bienvenido, " . $_GET['name'];
?>
Código Mejorado
<?php
echo "Bienvenido, " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
?>

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

  1. Identificación de Vulnerabilidades:

    • Utiliza OWASP ZAP para escanear la aplicación web de ejemplo y documenta las vulnerabilidades encontradas.
  2. Implementación de Controles:

    • Aplica los controles de seguridad discutidos anteriormente en el código fuente de la aplicación.
  3. 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

Módulo 3: OWASP Top Ten

Módulo 4: OWASP ASVS (Application Security Verification Standard)

Módulo 5: OWASP SAMM (Software Assurance Maturity Model)

Módulo 6: OWASP ZAP (Zed Attack Proxy)

Módulo 7: Buenas Prácticas y Recomendaciones

Módulo 8: Ejercicios Prácticos y Casos de Estudio

Módulo 9: Evaluación y Certificación

© Copyright 2024. Todos los derechos reservados