1 Funcionamiento servidor web - cifrado SSL
El protocolo SSL / TLS utiliza un par de claves, una privada y otra publicación, para autenticar, proteger y administrar conexiones seguras. Estas claves son un par de archivos de texto vinculados y se crean juntas como un par cuando crea su Solicitud de firma de certificado (CSR)
El protocolo usado cerca de los atraves del rojo y del puerto 80 y toda la información pasa por el pecado cifrar. Mientras que por el puerto 443 pasa el típico Https Una vez que se puede establecer una conexión, en el primer procedimiento de apretón de manos se cita con forma asimétrica, para establecer no solo herramientas de cifrado, sino una especificación comprensible una.
En esta práctica, se quiere recrear una sesión que se puede encontrar entre el servidor donde se aloja un servicio web y el cliente, que puede servir un através de un navegador. Veremos como actor de tercer no autorizado, vé el trágico y veremos las diferencias con un protocolo y con otro.
1.1 Servidor Instalo Web
En la máquina Servidor, procedo a instalar apache2
• listo el archivo de configuración de apache para comprobar que existe
ls -l apache2.conf
Compruebo además que está activo:
systemclt status apache2
1.2 Creación de las páginas web
• Creo las dos páginas dentro de los directorios /var/www/html/webinsegura y en /var/www/html/websegura, dentro de cada uno creo un index.html
<html>
<head>
<title>
Página Insegura
</title>
</head>
<body>
<h1>Pagina Insegura</h1>
<p>Esta página es insegura</p>
</body>
</html>
<html>
<head>
<title>
Página Segura
</title>
</head>
<body>
<h1>Pagina Segura</h1>
<p>Esta página es segura</p>
</body>
</html>
1.3 configuro los sites
Me posiciono en el directorio /etc/apache2/stes-available
Visulalizo los ficheros 000-default.conf lo copio, cambiandole el nombre a webinsegura.conf y el archivo default-ssl.conf lo copio en websegura.conf
-rw-r--r-- 1 root root 1332 nov 5 17:10 webinsegura.conf -rw-r--r-- 1 root root 6336 nov 5 17:11 websegura.conf
Modifico el fichero webinsegura.conf para que escuche por el puerto 80 Le pongo al servername el valor de webinsegura.edu y cambio la ruta
<VirtualHost *:80>
ServerName www.webinsegura.edu
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/webinsegura
Modifico el fichero websegura.conf para que escuche por el puerto 443. Le pongo al servername el valor de websegura.edu
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
SeverName websegura.edu
ServerAdmin webmaster@localhost
DocumentRoot /var/www/websegura/
1.4 Activo los sites
habilito el servidor apache para que la webinsegura funcione.
a2ensite webinsegura.conf
systemctl reload apache2
1.5 Verifico los puertos
• En el directorio /etc/apache2/ miro el archivo de configuracion ports.conf
• Verifico que esta escuchando por el puerto 80 y 443 por defecto
listen 80
<IfMOdule ssl_module>
Listen 443
</IfModule>
1.6 Modificación del /etc/hosts
• Entro a editar el /etc/hosts y apunto estas dos direcciones para que me redirija a ellas
1.7 Genero certificado SSL
Antes de poder levantar el servidor apache en relacion a la websegura que estamos creando, hay que generar los certificados, si no no funcionara, ya que todo el quit de la practica que estamos haciendo, reside en esto mismo, qué al usar SSL estamos empleando una capa más de seguridad. Utilizaremos Openssl herramienta que viene instalada por defecto, aun asi lo comprobamos haciendo un sudo apt install openssl, y nos devuelve un mensaje diciendo que ya se encuentra instalado en la última versión.
• instalacion de openssl
apt install openssl
Creamos unas carpetas(todo en una línea) dentro de las cueles se guardará rl certificado generado
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout etc/apache2/sslcerts/miweb.key -out /etc/apache2/sslcerts/miweb.cert
Le damos permisos de ejecución y lectura a root
chmod 600 /etc/apache2/sslcerts/miweb.key
chmod 600 /etc/apache2/ssilcerts/miweb.crt
Volvemos a levantar apache
a2enmod ssl
Volvemos a levantar los sitios creados
a2ensite websegura.conf
systemctl reload apache2
1.8 Visito la web desde máquina cliente
Desde ub navegador accedo a la web insegura, vemos que el mismo navegador nos indica que no va cifrada como mostrará el dibujo del candado tachado
1.9 snifar trafico con Wireshark
• Desde la máquina atacante, en mi caso parrot, que está en la misma red que el servidor y que la maquina cliente, comienzo a snifar el trafico con Wireshark, que genera la víctima por el puerto 80. En la barra para especificar que filtro usamos escribimos lo siguiente:
host 192.168.10.1
pero no veo nada, es mas compruebo haciendole un nmap y en efecto veo que tengo el puerto 80 de la máquina victima cerrado
PORT STATE SERVICE VERSION 80/tcp closed http
Reviso el /etc/hosts y veo que lo tengo en escucha, solo puede ser el firewall
sudo ufw allow 80/tcp
sudo ufw status
Hago la regla persistente:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo apt install iptables-persistent
1.10 capturo tráfico con Wireshark
Abro una captura para ver el detalle
Veo que se estáhaciendo un handshake, veo además el protocolo de transmision y el puerto origen es el 80
Repito los mismos pasos con la web segura
Puedo ver desde el navegador la web segura.
Intento capturar con wireshark desde la ip origen, en el espacio para poner por el protocolo que quieres filtrar escribo:
ip.src==192.168.10.1
Veo el detalle de la captura y que se esta usando el puerto 443 destinado a https, es decir http con una capa extra que aporta seguridad cracias al protocolo ssl.
Conclusión: las diferencias de usar una web con protocolo inseguro en relación con una web que usa certificados, no significa que estemos seguros, solo que proviene de una fuente legitima.
2 Descifrado de SSL
2.1 Desencriptado de paquetes TLS
Procedemos a abrir un web browser y abrimos websegura.edu, como hemos visto antes ha cifrado, utiliza una llaves TLS, en cada nueva sesión, se generan nuevas llaves TLS y las guarda en local en un archivo para las claves TSL.
Ya que el trafico que más usado a dia de hoy va cifrado con el protocolo TLS/SSL, para poder desencriptar el tráfico entre dos equipos, por ejemplo en un Man in the middle attack, deberiamos de desencriptar lo que capturemos. Necesitamos los paquetes y el keylog generado para esa conversación específica.
Para ello necesitaremos importar el SSLKEYLOGFILE mientras se produce el hadshake y guardarlo en local. Con el objetivo de tener acceso a ellas y poder desencriptar el trafico que se intercambia en la sesión.
Visito el sitio desde el browser. una web que utilice hhtps, puede ser cualquiera.
Comienzo a capturar el tráfico con Wireshark
(ip.addr eq 192.168.1.15) and (tcp.port eq 443)
Veo que se establece una conexíon y se procede al hadshake
En Transmision control protocol veo que esta conexión se hace por el puerto 443
Despliego el Transport Layer Security y veo los detalles de lo que está pasando
Transport Layer Security TLSv1.3 Record Layer: Hadshake Protocol: Client Hello Content type: Hadshake (22) Version: TLS 1.0 (0x0313) Length: 512
En este punto no pedemos ver nada por que todo va cifrado, tenemos que conseguir las claves TLS.
• Inicio del hadshake
Desde mi terminal de Parrot exporto el archivo keylog y me lo guardo en local, Listo las variables del sistema para comprobar que existe
export SSLKEYLOGFILE=~/.ssl-key.log
echo $SSLKEYLOGFILE
/home/h4nna/.ssl-key.log
SSLKEYLOGFILE=/home/h4nna/.ssl-key.log
En preferencias elijo el protocolo TLS
Subi el keylog que me he descargado en mi máquina
Ahora ya puedo ver el contenido gracias al keyLogfile y a la derecha vemos en texto claro lo que antes solo veiamos cifrado.