Interceptar el trafico de seguro por TLS/SSL no es cosa fácil, pero Kazajstán va a intentarlo.
¿ Como va a hacerlo ?
Con un tipo de SslStrip pero profesional, obligara a sus ciudadanos a a instalar un certificado de autoridad en sus computadoras y de esta forma teniendo la llave privada del certificado puede descifrar el contenido sin mayor problema. Este certificado al ser de autoridad puede firmar cualquier otro certificado para cualquier dominio incluyendo los bancarios. La única posible defensa contra esto seria los PINeados de certificados en el navegador.
Uno de los usos legítimos para este tipo de acción es un proxy transparente para control y listas de acceso
Requerimientos
Generar un certificado de autoridad
0 Generar llave privada
openssl genrsa -out private.key 4096
Generar certificado de autoridad
openssl req -new -x509 -days 10000 -key private.key -subj ‘/C=MX/ST=DF/L=CDMX/CN=GNU Linux Network Firewall CA’ -out ca.crt
Al igual que el gobierno de Kazajstán que obligara a sus ISP a instalar un certificado en cada computadora como el que se ha generado, esto es muy necesario de lo contrario el navegador mandaría una alerta de conexión insegura.
Configurando el Squid Proxy como transparente para SSL
1 Preparar el directorio donde se almacenaran los certificados de los sitios WEB y darles permisos al usuario Squid
/usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_db
chown squid.squid -R /var/lib/ssl_db/
2 Crear carpeta para certificado CA del proxy, es el certificado que firmara todo y el que hemos instalado en cada maquina como autoridad.
mkdir /etc/squid/ssl_cert/
2.1 El certificado debe estar en formato PEM, debe incluir su llave privada
cp ca.crt proxyca.pem
cat private.key >> proxyca.pem
3 Configurar Squid para ser proxy transparente tanto para trafico cifrado como para standart
acl clientes src 10.10.0.0/16
http_access allow localhost
http_access allow clientes
http_access deny allhttp_port 3128 intercept
https_port 3129 intercept ssl-bump cert=/etc/squid/ssl_cert/proxyca.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MBsslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all
4 Finalmente se redirecciona cualquier paquete que vaya por el puerto 80 y 443 al puerto 3128 o 3129 donde squid esta escuchando para que interceptarlos, firmarlos, según las necesidades de la configuración de la red.
iptables -t nat -A PREROUTING -p tcp –dport 443 -j DNAT –to 192.168.10.254:3129
iptables -t nat -A PREROUTING -p tcp –dport 80 -j DNAT –to 192.168.10.254:3128
Conclusión
con estos 5 pasos ya se tiene un proxy transparente que puede interceptar trafico cifrado y con el certificado en cada maquina como autoridad esta lo aceptara, aunque el uso legitimo de esto seria para un sysadmin para el control del trafico de la red como listas de acceso, es obvio que manipulando el codigo fuente de squid y otras configuraciones se podria almacenar el contenido cifrado para una posterior auditoria perdiendo por completo la protección del cifrado
Ejemplo.
Así es como se veria algunos sitios web que han sido manipulados y que salvo uno vea directamente el certificado en el navegador no habria advertencia de que ha sido manipulada la conexión que se considera segura e inquebrantable y realmente no se ha quebrado esto funciona por que los clientes consideran una autoridad el certificado que se le ha creado, si ese certificado no se instala en cada computadora no seria efectivo.