Buscar la privacidad total en internet es imposible. Lo que se puede hacer es complicar las cosas.
Por ejemplo y a modo de introducción… Todos hemos escuchado hablar de la red TOR… a grandes rasgos te oculta porque vas saltando varios nodos antes de llegar al destino. Te oculta del destino, eso seguro… ¿pero y durante el camino? En principio el contenido, al estar encriptado no es accesible por estos intermediarios… a lo que si tienen acceso es a los metadatos.
Veamos como funciona TOR por encima:
Client Node: Eres Tú
Entry/Guard Relay: Esta es la máquina por la que accedes a la madriguera de conejo, esta máquina conoce tu IP y a donde quieres ir. Suele renovarse cada 2-3 meses y no se cambia cuando se "resetea el circuito" en TOR (esto es así para protegerte de otro tipo de ataques según los responsables).
Midleware Relay: Aquí es donde se hace la magia… la información viaja encriptada y los nodos solo tienen información del nodo anterior y el siguiente. Los nodos que componen esta parte del circuito no pueden ser ni nodos de entrada ni de salia (Entry/Exit Relay). En principio, alguien mal intencionado aquí no puede hacer nada.
Exit Relay: Son las maquinas con las que se comunica el sitio al que quieres ir… son, básicamente, los que se comen el marrón. Saben el sitio de destino, pero no saben quien pide ir hacia el destino ni el contenido (si está cifrado, ej. HTTPS). La lista de estos relays es pública, por si no quieres que tu servidor sea accesible por la red tor: https://check.torproject.org/torbulkexitlist
Mas info en: https://community.torproject.org/relay/setup/
Os cuento esto de TOR para que veáis que ni con esta tecnología uno es 100% anónimo. La confidencialidad al usar TOR viene dada por ser una red descentralizada donde la mayoría de los nodos no se conocen entre si. Por lo que, digámoslo así, no se pueden poner de acuerdo para "rebobinar" el camino seguido por la petición en cuestión.
¿Que sucede cuando pongo en el navegador una dirección de una página?
Ya en el mundo que todos conocemos y usamos… ¿como viaja una petición a grandes rasgos?
Lo primero sería comentar que sucede cuando enciendes el ordenador conectado a un router. Lo que hará el ordenador es enviar una serie de paquetes a una dirección de "broadcast" por determinados puertos reservados para descubrir las maquinas en la red y dilucidar entre otras cosas, cual es el servidor DHCP (Dynamic Host Configuration Protocol).
Este servidor DHCP por regla general viene montado en el router. De lo que se encarga es, entre otras cosas como asignar la IP o el nombre del host (si, dentro de tu red los equipos tiene un hostname asociado, no solo una ip), asignar los servidores DNS.
Y aquí es donde empieza el viaje… cuando tu introduces una dirección URL, lo que hará el ordenador es consultar al servidor DNS a que máquina apunta. Es como un listín telefónico… donde el nombre es el dominio y el numero de teléfono la IP.
Entonces, en mi caso por ejemplo… mi router no me permite cambiar las DNS que usa, cuando yo visito una página se le consulta a este servidor que sabrá que 'yo' con la IP XXX.XXX.XXX.XXX quiere saber donde esta la web "www.webprohibidaosospechosaporsabediosque.com" y este servidor DNS me dirá que la maquina está en XXX.XXX.XXX.XXX o también me podría decir "nope, este sitio no te digo donde esta… jódete".
Por suerte, la configuración que manda el servidor DHCP se puede alterar en la configuración de red del sistema operativo… pero es un engorro tener que ir dispositivo a dispositivo cambiando la configuración :/ Por suerte existen soluciones como pi-hole para hacer de servidor DHCP y asignar a todos los equipos unas DNS distintas 😉
Existe un protocolo llamado DNSSEC que lo que hace es mejorar la seguridad a la hora de consultar a un servidor DNS cuál es la ip de un destino. Algunos proveedores de servicios DNS lo ofrecen, los que te pone tu ISP (compañia telefónica) seguro que no. Y como todo en esta vida… ¿como puedes fiarte del que el proveedor del DNSSEC no tiene otra mierda intermedia para seguir obteniendo información o adulterándola? Pues como dicen… no lo sabes 😃
** DNSSEC No aumenta la confidencialidad, aumenta la seguridad.
** DNSCrypt, DNS-over-TLS, DNS-over-HTTPS, etc.. si que encriptan el tráfico.
¿Como conoce un servidor DNS a donde apunta un dominio?
A grandes rasgos, lo que hace un servidor DNS es consultar a la IANA: https://www.iana.org/domains/root/db
Allí consulta cual es la autoridad competente si se puede, con DNSCrypt o DNS over TLS o sucedáneos (para evitar que tu ISP se entere) y está le dice donde está el recurso solicitado.
Ejemplo cutrero, como resolvería derroidos.com:
- Consulta a IANA quien maneja la zona '.com'
- Consulta a la autoridad que controla la zona '.com' donde está el recurso "derroidos"
- Llegados a este punto el servidor DNS ya conoce que derroidos.com a punta a XXX.XXX.XXX.XXX
** La realidad es más complicada, pero la idea general es esta xD
¿De que sirve HTTPS si me comunico directamente con el destino una vez que lo consulto al servidor DNS?
Básicamente para evitar ataques MITM (Man In The Middle). Lo que se ha llamado toda la vida "pinchar el teléfono". Si envías la información cifrada, te importa poco que haya ojos mirando. Esto puede venir por parte de tu ISP o por algún software malicioso que este "esnifando" el tráfico de red el ordenador. En una red WiFi se abre el abanico pudiendo ser interceptado por dispositivos "promiscuos" que hagan lo mismo que haría el software de "sniffing".
El cifrado usado en HTTPS es negociado entre el el cliente y el destino… si alguna parte implicada en el camino intenta adulterar algo, falla. Ha este proceso se le llama "handshake" (apretón de manos).
Software Recomendado
- Pi-Hole: Servidor DHCP + Filtro DNS (Más info: https://derroidos.com/d/610-pihole-bloquea-publicidad-con-tu-raspberrypi)
- unbound: DNS Resolver (Mirar: https://derroidos.com/d/610-pihole-bloquea-publicidad-con-tu-raspberrypi/16)
- uBlock: Extension para el navegador ya conocida por todos
- Privoxy: Proxy HTTP para filtrar. El soporte para HTTPS estable debería llegar en la próxima versión.
- Privaxy: Proxy HTTP local… es como lo anterior pero en formato de aplicación de escritorio y soporta la importación de reglas de uBlock. La ventaja de estos proxies es que son más veloces que las extensiones de navegador y no dependen de las idas y venidas en las api's de los mismos (como lo que parece que va a suceder en futuro próximo con manifest v3)
- Decentraleyes: Una extension para navegador que cacheara los CDN's
- Privacy Badger: Una extension para navegador que filtrara rastreadores con procesos heurísticos (No se sustenta en definiciones descargadas de internet como uBlock).
Beneficios
Al tener pi-hole + unbound lo que pasará es que nadie más que tu ISP y el servicio de destino sabrán a donde te estás conectando. Y tu ISP sabrá la IP de destino, pero no el servicio concreto… ya que en un mismo servidor pueden coexistir muchos servicios distintos. Además de acelerar las consultas lo máximo posible (igual tarda un poco más la primera vez, pero luego irán más rápido).
Al tener uBlock te aseguras de mitigar en lo posible que se pueda generar un perfil de tu actividad por terceros. Aunque con la proliferación del uso de CDN's es cada vez más complicado que otros dejen de saber donde estas o dejas de estar.
Con privoxy o privaxy tienes lo mismo que uBlock pero con mejor rendimiento.
Con Decentraleyes mitigas el tema de las CDN's
Con Privacy Badge te aseguras de quitarte rastreadores dentro de lo posible.
¿No puede mi ISP tener una especie de Proxy HTTPS como privoxy y leer la información?
Básicamente todo se sustenta en las llamadas CA (Certificate Authority). Cuando conectas a un sitio HTTPS el navegador descarga un certificado y mira si es un "root certificate"… si no lo es, descarga el certificado que valido el certificado que esta comprobando… cuando llega al "root" se dan como válidos todos los certificados. En caso de alcanzar el final sin obtener un "root certificate" se da como "no confiable".
Estos "root certificate" se descargan al ordenador cada X tiempo vía actualización del sistema.
Cuando utilizas un proxy HTTPS, debes instalar un "root certificate" en tu sistema que validará la encriptación realizada por el proxy.
¿Que puede saber mi ISP o un MITM cuando navego (HTTP/S)?
En caso de comunicaciones no encriptadas (http)… todo.
En caso de comunicaciones encriptadas (https) y teniendo en cuenta que se está usando TLS 1.3 … sabrá la máquina de destino y otros el dominio (si no cambias los servidores dns, seguramente sea también tu ISP) y nada más. En caso de tener un "DNS Resolver" como unbound, no conocerá el dominio.
** En protocolos anteriores a TLS 1.3 el ISP puede conocer el dominio (incluso usando soluciones como unbound). Esto es así porque una parte del proceso de handshake envía esta información en texto plano.
¿Si con HTTPS la información ya va 'oculta' de que sirve un VPN?
Lo que verás por internet del uso de VPN es usarlo como un proxy… las VPN son seguras porque cifran TODO el tráfico… no solo "HTTP"… cualquier paquete que lanza tu ordenador va cifrado hasta la máquina de destino que hará lo que tenga que hacer… que no siempre es actuar de proxy.
Ten en cuenta que la confidencialidad viene dada hacía terceros… tu proveedor de servicios VPN podrá obtener más o menos datos según el protocolo que estés usando "http, https, sock, …".
La seguridad (no confundir con confidencialidad) que te da una VPN viene dada porque nadie podrá alterar los paquetes.
En este escenario tu ISP solo sabrá que te estas conectando contra una única máquina. No podrá conocer el contenido, ni dominios, ni nada.
** No te fíes mucho del "no guardamos logs"… revisa bien donde están esos servidores y la legislación aplicable de esos países.
** Si la confidencialidad te importa poco y la seguridad otro tanto y lo único que quieres es "hacerte pasar por un usuario de Pekin" para visitar la web X que tiene restricción por país mira el uso de un Proxy… seguramente sea más barato.
¿Has oído hablar de las 'super cookies'?
No solo existen las cookies de toda la vida… desde tiempos de Flash, existen unas cookies denominadas "super cookies" (o también UIDH)… son llamadas así porque persisten como puercas. Las super-cookies pueden lograr esto gracias a lo que se llama "fingerprint" (huella dactilar). Lo que se quiere conseguir es un identificador único de la máquina a la que asociar información. Existen varias técnicas para lograrlo y dependiendo de tu navegador y su configuración serás más predecible o menos.
Puedes echar un vistazo a: https://coveryourtracks.eff.org/
** Esto es todo de momento… iré completando según se me ocurra o aportaciones que vayáis haciendo!