Secuestro de claves SSL

Secuestro de claves SSL

·

6 min read

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.