El bloqueo de webs aprovechando SNI es una de las formas de bloquear webs más sofisticados que existen ahora mismo a nivel de operadora. Conozco una web desde la que se pueden descargar libros y …

El bloqueo de webs aprovechando SNI es una de las formas de bloquear webs más sofisticados que existen ahora mismo a nivel de operadora. Conozco una web desde la que se pueden descargar libros y que desde hace unos días al entrar se puede leer:

«Contenido bloqueado por requerimiento de la Autoridad Competente, comunicado a esta Operadora«

Este mensaje es curioso porque yo sí he visto cómo se bloquean webs y se cambia el DNS y sale una página de la Guardia Civil, ni más ni menos, pero un mensaje cutre como el que he visto no me parece normal.

Ahí quedó la cosa, pero al cabo de unos días, no recuerdo la razón estaba conectado a la VPN del trabajo y vi que esa web funcionaba, así que desde mi conexión a Internet no y desde la vpn del trabajo sí.

Lo primero que pensé es que eran los DNS, de hecho llegué a pensar que la culpa era de nextdns, incluso lo llegué a dar por hecho, pero no, no era eso.

Así que no se me ocurría qué podía ser y lo comenté en el grupo y ahí comentaron que seguro que era el SNI y sí, efectivamente, por ahí iban los tiros.

Antes de nada vamos a hablar de certificados.

Los certificados para una web tienen una limitación, o tenían una limitación, y es que el certificado iba asociado a la dirección IP, lo cual a lo mejor no parece un problema, pero en un servidor se pueden poner muchas páginas web, de hecho lo normal es que en un servidor tenga muchas páginas web sirviéndose en la misma IP.

Para solucionar este problema se inventó una extensión que se llama SNI (Server Name Indication), esta extensión permite que se pueda instalar un certificado en un dominio que comparte la IP con otros dominios.

Gracias a SNI a día de hoy podemos tener certificados para todas las webs sin necesitar usar una IP por web y esto es un gran avance sin duda.

El funcionamiento de SNI tiene sin embargo un detallito que hace que aquí tengamos un problema bastante serio.

En HTTPS antes de iniciarse la conversación HTTP se realiza el handshake de TLS y una vez realizado el handshake se inicia la conversación HTTP, la cual se encripta, por eso es HTTPS, pero el handshake de TLS se ha realizado antes.

Es en ese punto, entre el handshake de TLS y la conversación HTTP en el que se puede saber cual es el hostname con el que queremos conectarnos sin encriptar y ahí es donde todo el problema radica.

En nuestro caso abrimos la web en cuestión con https y se inicia la conexión contra la IP que indica correctamente el DNS, en ese momento el tráfico llega al servidor destino y pide el certificado del dominio que sea y ahí, aún sin encriptar es cuando el operador de turno nos captura el tráfico y nos devuelve un certificado invalido y un contenido que nada tiene que ver con el que queremos.

Si nos fijamos en el certificado que nos devuelve nuestra operadora favorita Sparrow Telecom nos damos cuenta que es un certificado generador por alguien llamado allot.com, un fabricante de equipos de deep inspection muy muy caros.

Conclusión, Sparrow Telecom se ha gastado una pasta para hacer deep inspection de nuestro tráfico y así poder bloquear nuestro tráfico, en este caso una web de descarga, en otros podrá ser otra cosa por ejemplo una web de temas políticos, de la competencia, vete a saber, las posibilidades son inmensas.

Esto se podrá solucionar con una nueva versión de SNI llamada ESNI (Encrypted SNI) o utilizando un servicio de VPN, como por ejemplo el de Neodigit.

Actualización

Tras publicara el audio y el post me comenta un compi del grupo (no se si puedo poner aquí el nombre) que se puede habilitar el firefox tanto el esni como el secure DNS porque por defecto, al menos en Ubuntu 20.04 con Firefox 81, tendremos esto:

Y me comenta lo siguiente:

en Firefox, podemos activar el Encrypted SNI entrando en about:config y marcando como true la opción network.security.esni.enabled, igual que activar el Secure DNS estableciendo el valor «2» a la opción network.trr.mode.

Compañero en el grupo de Telegram

Y al aplicar estos cambios el resultado es este:

Con estos cambios ya no tenemos el problema del Allot en Sparrow Telecom, una solución bastante sencilla, pero como todo, hay que saberla.

Muchísimas gracias por la información!!!!