Operación Faro — primera investigación con Kali Linux

El Centro Faro estrena una pequeña web de avisos. El equipo de seguridad sospecha que se ha publicado un documento interno y que alguien ha cambiado la página de inicio.

Tu misión consiste en crear un pequeño laboratorio en Kali Linux, investigarlo, guardar pruebas y corregir los problemas encontrados. Todos los archivos y datos de esta práctica son ficticios.

Duración: dos sesiones de 60–75 minutos.
Modalidad: individual o en pareja.
Entrega: carpeta del proyecto comprimida en ZIP, con un README.md y las evidencias solicitadas.

Qué aprenderás

  • Descubrir un servicio con Nmap.
  • Examinar respuestas HTTP con curl.
  • Observar tu propio tráfico con Wireshark.
  • Comprobar cambios en archivos mediante SHA-256.
  • Documentar un hallazgo y verificar su corrección.

Reglas del laboratorio

Todas las pruebas de red se realizan exclusivamente contra 127.0.0.1 en tu propio Kali. No sustituyas esta dirección por la IP de un compañero, de la red del centro o de una web pública.

Cuando se indique «terminal 2», abre otra pestaña o ventana. Mantén abierta la terminal del servidor hasta que se te indique detenerlo.


Fase 0. Preparar el laboratorio

Paso 1. Identifica tu sistema

cat /etc/os-release | head -n 5
whoami
pwd

Anota en tu README.md qué sistema utilizas y cuál es tu nombre de usuario.

Paso 2. Comprueba las herramientas

command -v python3
command -v nmap
command -v curl
command -v wireshark
command -v sha256sum

Si falta nmap, curl o wireshark, instala la herramienta que necesites. Por ejemplo:

sudo apt update
sudo apt install nmap curl wireshark

Si falta python3 o sha256sum, consulta con el profesor antes de continuar.

Paso 3. Crea las carpetas

mkdir -p ~/operacion-faro/{publico,evidencias,privado}
cd ~/operacion-faro

Importante: ejecuta los siguientes comandos desde ~/operacion-faro, salvo que se indique otra cosa.

Paso 4. Crea la página web pública

Copia el bloque completo, incluidas las dos líneas que contienen EOF:

cat > publico/index.html <<'EOF'
<!doctype html>
<html lang="es">
<meta charset="utf-8">
<title>Centro Faro</title>
<h1>Centro Faro</h1>
<p>Avisos públicos del centro.</p>
EOF

Paso 5. Crea un documento interno ficticio

Por error, este archivo quedará dentro de la carpeta publicada:

cat > publico/inventario_interno.txt <<'EOF'
CENTRO FARO - INVENTARIO FICTICIO
Equipo: faro-lab-01
Responsable: Equipo de pruebas
Sala: Laboratorio A
Nota: estos datos han sido inventados para esta práctica.
EOF

Comprueba los archivos:

ls -l publico

Evidencia 0: indica en el README.md para qué crees que sirven Nmap, curl, Wireshark y sha256sum.


Misión 1. Descubrir la puerta abierta

Paso 1. Arranca el servidor

En la terminal 1, dentro de ~/operacion-faro, ejecuta:

python3 -m http.server 8765 --bind 127.0.0.1 --directory publico

Deja abierta esa terminal. El servidor debe indicar que escucha en 127.0.0.1, puerto 8765.

Paso 2. Abre otra terminal

En la terminal 2, entra en el proyecto:

cd ~/operacion-faro

Comprueba que puedes leer la página:

curl http://127.0.0.1:8765/

Resultado esperado: aparece el HTML de «Centro Faro».

Paso 3. Examina los puertos

nmap -sT -p 8765,8766 127.0.0.1 | tee evidencias/puertos.txt

Resultado esperado: el puerto 8765 aparece como open. El 8766 normalmente aparecerá como closed; si está abierto, puede estar utilizándolo otro programa.

Responde en el README.md:

  • ¿Qué significa que el puerto 8765 esté abierto?
  • ¿Qué programa lo está utilizando?
  • ¿Qué representa la dirección 127.0.0.1?

Evidencia 1: archivo evidencias/puertos.txt y una captura del resultado.


Misión 2. Encontrar un archivo publicado por error

Paso 1. Consulta las cabeceras HTTP

curl -I http://127.0.0.1:8765/

Localiza el código de estado y el campo Content-Type.

Paso 2. Solicita el documento interno

curl -i http://127.0.0.1:8765/inventario_interno.txt | tee evidencias/exposicion.txt

Resultado esperado: 200 OK y el contenido del inventario ficticio.

El código 200 indica que el servidor ha entregado el archivo. No significa que publicarlo haya sido una buena decisión.

Paso 3. Busca la causa

ls -l publico/inventario_interno.txt

Observa que el documento está dentro de publico, la carpeta desde la que sirve archivos el servidor.

Escribe en el README.md una explicación con este esquema:

Hallazgo → prueba → posible consecuencia → corrección propuesta.

Evidencia 2: archivo evidencias/exposicion.txt y tu explicación. Guarda esta prueba antes de corregir el problema.


Misión 3. Observar una petición con Wireshark

Vas a capturar tu propia comunicación local, entre Kali y el servidor que acabas de iniciar.

Paso 1. Abre Wireshark

Ábrelo desde el menú de Kali o ejecuta wireshark en otra terminal. Selecciona la interfaz lo o Loopback e inicia la captura.

Si no tienes permiso para capturar, comunica el mensaje al profesor. No cambies los permisos del sistema por tu cuenta.

Paso 2. Genera una petición

En la terminal 2, ejecuta:

curl http://127.0.0.1:8765/index.html

Paso 3. Filtra la captura

Detén la captura. En el campo de filtro de visualización de Wireshark escribe:

tcp.port == 8765

Localiza la petición GET /index.html y la respuesta 200 OK. Si aparecen demasiados paquetes, prueba también este filtro:

http

Guarda la captura como evidencias/trafico-local.pcapng y haz una captura de pantalla donde se vean la petición y la respuesta. Antes de entregarla, comprueba que contiene únicamente el tráfico de esta prueba.

Responde en el README.md:

  • ¿Qué archivo se pidió?
  • ¿Qué respondió el servidor?
  • ¿Por qué puedes leer el nombre del archivo solicitado en esta comunicación HTTP?

Evidencia 3: archivo .pcapng, captura de pantalla y respuestas.


Misión 4. Detectar un cambio en la web

Una huella SHA-256 permite comprobar si los bytes de un archivo siguen siendo los mismos.

Paso 1. Guarda una copia y calcula la huella

En la terminal 2, ejecuta:

cd ~/operacion-faro
cp publico/index.html privado/index_original.html
sha256sum publico/index.html | tee evidencias/huella_original.txt
sha256sum publico/index.html > comprobacion.sha256
sha256sum -c comprobacion.sha256

Resultado esperado: publico/index.html: OK.

Paso 2. Simula una modificación

printf '\n<!-- Cambio de prueba realizado en clase -->\n' >> publico/index.html
sha256sum -c comprobacion.sha256 | tee evidencias/comprobacion_cambio.txt

Resultado esperado: FAILED. El archivo ya no coincide con la huella guardada.

Importante: una huella diferente demuestra que el contenido cambió. Por sí sola no indica quién lo cambió ni demuestra que hubiera un ataque.

Paso 3. Restaura y vuelve a comprobar

cp privado/index_original.html publico/index.html
sha256sum -c comprobacion.sha256 | tee evidencias/comprobacion_restaurada.txt

Resultado esperado: OK.

Evidencia 4: los archivos huella_original.txt, comprobacion_cambio.txt y comprobacion_restaurada.txt. Explica brevemente qué ha demostrado cada comprobación.


Misión 5. Corregir el problema y verificarlo

Paso 1. Retira el documento de la carpeta pública

mv publico/inventario_interno.txt privado/inventario_interno.txt

Conservamos el archivo como parte del ejercicio, pero ya no está en la carpeta que publica el servidor.

Paso 2. Repite la petición original

curl -i http://127.0.0.1:8765/inventario_interno.txt | tee evidencias/despues_correccion.txt

Resultado esperado: 404 File not found. La ruta ya no entrega el documento.

Paso 3. Comprueba que la web sigue funcionando

curl -I http://127.0.0.1:8765/index.html
sha256sum -c comprobacion.sha256

Resultado esperado: 200 OK para la página y OK para la huella.

Paso 4. Detén el servidor

Vuelve a la terminal 1 y pulsa Ctrl+C. En la terminal 2 comprueba el estado del puerto:

nmap -sT -p 8765 127.0.0.1 | tee evidencias/puerto_cerrado.txt

Resultado esperado: closed, siempre que ningún otro programa haya empezado a utilizar el puerto.

Evidencia 5: archivos despues_correccion.txt y puerto_cerrado.txt. Explica cómo verificaste la corrección.


Entrega

Comprime y entrega la carpeta operacion-faro con esta estructura:

operacion-faro/
├── README.md
├── comprobacion.sha256
├── publico/
│   └── index.html
├── privado/
│   ├── index_original.html
│   └── inventario_interno.txt
└── evidencias/
    ├── puertos.txt
    ├── exposicion.txt
    ├── trafico-local.pcapng
    ├── huella_original.txt
    ├── comprobacion_cambio.txt
    ├── comprobacion_restaurada.txt
    ├── despues_correccion.txt
    ├── puerto_cerrado.txt
    └── capturas_de_pantalla...

En el README.md, organiza tu trabajo en estos apartados:

  1. Entorno y herramientas utilizadas.
  2. Servicio y puerto descubierto.
  3. Archivo publicado por error.
  4. Tráfico observado en Wireshark.
  5. Comprobación de integridad.
  6. Corrección y verificación.
  7. Tres cosas que has aprendido y una duda que te queda.

Si alguna herramienta falla, documenta el comando, el error y lo que intentaste. Una incidencia bien explicada también forma parte del trabajo.

Referencias para el profesor