Archivo de la categoría ‘Seguridad’

DNS Over HTTPS/TLS: Encriptado del tráfico DNS

 

A lo largo de los años, la mayoría de los protocolos “base” con los que se constituyó el Internet que hoy conocemos han ido evolucionando, algunos más algunos menos. Es cierto que la base en la que se sostiene es a groso modo la misma, pero no así los protocolos que están encima de la mesa. El mejor ejemplo es el propio protocolo HTTP, que aunque parezca muy antiguo, realmente su primera especificación es de 1991. Vale, son 27 años, pero Internet podemos datarla más o menos por 1980. Sí, a día de hoy el protocolo HTTP es la base de toda la Internet navegable, pero muy poco queda de esa primera especificación de 1991. En 1996 aparecería la especificación HTTP/1.0, en 1999 HTTP/1.1 (la más usada a día de hoy) y en 2015 HTTP/2.0. HTTP ha evolucionado y es posible que continúe haciéndolo, y HTTP/2.0 ofrece grandes mejoras en todos los aspectos frente a especificaciones más viejas.

HTTPS apareció en 1992, un modo ingenioso, práctico y seguro de poder enviar/recibir la información HTTP de forma cifrada punto a punto, es decir, se cifra y descifra en origen, permitiendo conocer si ha existido manipulación en medio y además añadiendo identificación de las partes por medio de certificados digitales. Ahora, en 2018, HTTPS lo vemos como imprescindible, y con los certificados digitales más a mano que nunca hemos visto como el % de webs que lo han implementado se han disparado. ¿Por qué? Porque después de años de hartazgo de las propias instituciones gubernamentales, de fallos de seguridad, de robos de datos… ahora somos más desconfiados que nunca, y nos gusta pensar que, aunque lo que estemos mirando en Internet sea donde comprar un colchón, nadie va a poder saberlo (Bueno, todo tiene sus limitaciones, claro). Realmente su importancia principal fue y ha sido y será, debido al intercambio de datos privados entre usuario y servidores. Desde usuarios y contraseñas, direcciones postales, tarjetas de crédito, expedientes médicos… todo. Cualquier información que no vaya cifrada punto a punto corre el riesgo de ser leída… y ya no solo por posibles “cucarachas” que se conecten a nuestra red interna, sino (y siendo un poco conspiranoicos), gobiernos, entidades, los mismos ISP…

Pero si existe otro protocolo de igual importancia en Internet, o incluso más, es sin duda el protocolo DNS (siempre por supuesto hablando de protocolos a nivel de aplicación).

 

DNS

Lo primero que debemos de tener en Internet es, como todo el mundo sabe, una IP. Una IP es un identificador numérico que no solo nos hace accesible desde el exterior, sino también poder ir a cualquier rincón de Internet. Las IPs son las verdaderas direcciones en Internet, pero en cambio rara vez tenemos que usarlas. El 99% del tiempo que estamos en Internet, nos valemos de un sistema de nombres (aka dominios) para poder acceder a un servicio/sitio u otro. ¿Por qué? Porque nuestra mente, nuestro cerebro, se le da infinitamente mejor recordar nombres o cadenas de caracteres que una sucesión de números. Para nosotros es infinitamente más sencillo recordar “google.es” que “216.58.201.163”. Basados en esta premisa fundamentalmente, se creó un sistema de nombres (de dominios), llamado DNS (Domain Name System).

Posiblemente el protocolo DNS es de los más sencillos de entender. DNS funciona como un “traductor”, algo así como unas páginas amarillas gigantes. Cuando introducimos un nombre de dominio en cualquier navegador o aplicación, esta envía la solicitud al servidor DNS que tenga especificado, y este será el encargado de resolver la dirección correspondiente al nombre de domino especificado, y el tipo de registro solicitado. En este artículo de hace tiempo puede verse mejor como funciona DNS. Es un poco más complejo debido a que el sistema DNS es distribuido e incluso jerárquico, pero en lo que nos atañe, es tan simple como eso.

El protocolo DNS no ha evolucionado en nada. Es cierto que se ha expandido con los años con la inclusión de nuevos tipos de registros DNS, e incluso mejoró notablemente la seguridad con la inclusión de DNSSec, pero el protocolo en sí mismo es el mismo que el que se empezó a desplegar en 1983. Eso no es malo, cuando algo ha evolucionado tan poco y aun así es usado tan extensamente, es que funciona realmente bien. No obstante, la sociedad ha cambiado, y tal como sucedió con HTTP, DNS no se creó con la privacidad en mente, por entonces había mejor voluntad y posiblemente mejores ideales. A día de hoy sería impensable crear un protocolo sin que la encriptación y autentificación no estuviesen desde el comienzo del desarrollo.

DNSSec ha dotado a DNS de un sistema de “autentificación”, de modo que las peticiones DNS resueltas por los servidores DNS pueden verificarse/autentificarse, que proceden realmente del servidor DNS raíz a quien pertenecen. Sin DNSSec, se podría envenenar la caché de un cliente DNS, de modo que peticiones realizadas de dicho cliente fuesen respondidas con una IP falsa. Este tipo de ataques ha sido muy efectivo en el pasado… los mismos resolvers tienen que escalar la petición DNS a los servidores DNS, y en ese proceso puede ser bombardeado con respuestas DNS falsas, con lo que el resolver creer que la IP falsa es la real, y ser la IP que al final devolvería al equipo en cuestión. Cuando DNSSec es usado, el servidor DNS firmará la respuesta DNS con cifrado asimétrico, y las enviará en otro registro DNS conjunto a la petición original, y dicha firma el resolver/cliente puede verificarla con los registros del servidor DNS, que contienen a su vez la clave pública con la que se firmaron. De este modo el cliente puede saber con exactitud si la respuesta que hemos recibido proviene realmente del servidor DNS legítimo.

DNSSec es importante, añade autentificación, pero… ¿que pasa con la encriptación?

 

DNS Over HTTPS/TLS

Los datos que se transfieren por DNS son muy importantes. Vale, no van a contener datos confidenciales de tipo contraseñas, usuarios y otros, pero todo el tráfico DNS que generamos indica perfectamente nuestra actividad en la red. Es por medio de DNS que se filtran contenidos (controles parentales por ejemplo), se bloquean contenidos (autoridades/entidades), los ISP pueden crear enormes bases de datos con nuestras costumbres… simplemente mirando el tráfico DNS podemos saber de una persona una cantidad de información que ni imaginamos!! Pues imaginar eso aplicado a una red local entera, o a una red de una empresa, o, por qué no, toda la red de un ISP.

El protocolo DNS se transmite en formato plano, “legible”. Desde hace muchos años han existido varias técnicas para “camuflar” o enmascarar el tráfico DNS, esto no es para nada nuevo. Estas técnicas han sido en su mayoría el uso de servidores VPN por ejemplo, donde las peticiones DNS se enviaban a través del mismo túnel, o usando el conocido DNSCrypt, una solución presentada hace tiempo por OpenDNS, unos servidores DNS independientes y gratuitos que ofrecen una buena tanda de opciones y filtrados para los hogares. No obstante este tipo de técnicas siempre ha tenido un impacto muy pequeño, y un poco por las razones de siempre: Soporte y estandarización.

Ya han pasado muchos años desde que Microsoft no dejase de implementar en su navegador Internet Explorer características propias. A día de hoy intentamos basarnos lo más posible en estándares, protocolos y técnicas que pueden ser usadas en cualquier sitio, que todos los dispositivos puedan entender y poder interaccionar unos con otros obteniendo resultados similares. Puede que DNSCrypt sea/fuese un sistema muy inteligente, pero sin ser un estándar ¿qué servidores DNS o que clientes iban a implementarlo? Por supuesto, era posible usando su servidor DNS y otros software, pero no es una solución real.

Por suerte, y aunque ha costado mucho mucho trabajo, se ve el final del problema gracias a DNS Over HTTPS/TLS (DoH). Me gustaría pensar que los retrasos se han debido al tiempo necesario para crear un estándar sólido, pero honestamente lo que creo es que a la gran mayoría de empresas, gobiernos y otros, cifrar el tráfico DNS es poner fin a un negocio multimillonario, a bloqueos, filtros… es una de esas cosas que públicamente nadie puede estar en contra, pero por detrás es raro encontrar quien esté de acuerdo. Sea como sea, y después de muchos tiros y afloja, DNS Over HTPS ya está “terminando” su camino para ser ratificado por la IETF como estándar, mientras que DNS Over TLS ya está estandarizado. Pero… ¿no son iguales? Bueno, en realidad no, son muy similares. Al igual que el protocolo DNS se usa mediante el puerto 53, DNS Over TLS usa un puerto específico para ello, el 853, y por él envía de forma serializada y ya bajo TLS las peticiones DNS. DNS Over HTTPS en cambio se basa en peticiones HTTPs estándares, usando por ello por defecto el puerto 443, y las peticiones son serializadas dentro de la propia petición HTTPS, creando una pequeña sobrecarga de protocolo inicial.

Aunque ambos sistemas encriptan por igual las peticiones DNS, realmente la diferencia de ellas desde un punto de vista práctico es que usar DNS Over TLS implica usar un puerto dedicado para ello, de modo que resulta mucho más sencillo bloquearlo, filtrarlo, discriminarlo o incluso como veremos luego obtener información de los dominios visitados de forma más sencilla… dicho de otro modo, es más fácil que terceros vuelvan a las andadas, aunque por otro lado es lógico que use un puerto propio. Por otro lado, DNS Over HTTPS usa el mismo puerto 443 que cualquier web HTTPS, con lo que el tráfico no solo pasa mucho más desapercibido, sino que además bloquearlo por puerto/servicio no sería una opción, a todos los efectos la conexión se vería como una conexión HTTPS más.

Usando por tanto DNS Over HTTPS enmascara todas nuestras peticiones DNS de forma doble. Por un lado encripta todo el tráfico DNS de modo que no pueda ser visible para terceros, y por otro lado “engaña” a cualquiera que pueda estar espiando el tráfico, a todos los efectos como si se tratase de tráfico HTTPS convencional.

Esto tiene infinidad de aplicaciones prácticas. Las más evidentes, nos blindan frente al exterior, impidiendo en la medida de lo posible que terceros puedan saber que Webs estamos o no visitando. Por otro lado este sistema permite “pasar por alto” innumerables filtros impuestos por gobiernos/ISP/entidades. Estos no pueden hacer filtros IPs por lo general, así que se filtran a nivel de DNS. Las primeras soluciones a esto eran usar servidores DNS alternativos, pero nada impide a un ISP interceptar las peticiones DNS a otros servidores. Con DoH no pueden evitarlo, las resoluciones nos son devueltas cifradas y bajo un tráfico que podría ser cualquier cosa.

 

Inconvenientes

Visto así, todo parecen grandes ventajas. No obstante el sistema no es perfecto, y además añade algunos “problemas” que no están presentes en las resoluciones DNS estándares.

El primer y posiblemente el mayor inconveniente es el retardo, la latencia. Negociar una conexión HTTPS completa con el resolver DoH, enviar la petición, y obtener la respuesta, consume sensiblemente más tiempo que una resolución DNS estándar. Este tiempo puede reducirse de diversas formas, por ejemplo manteniendo la conexión abierta con el resolver para futuras peticiones DNS o haciendo uso de HTTPS/2.0. Pero aun con todo, no podemos suprimir la negociación requerida para establecer una conexión HTTPS, que es la que se llevará la mayor parte del tiempo. Muchos creen que la mejor forma de evaluar un servidor DNS es ver la latencia hacia ellos, pero eso solo es un % del tiempo, lo que nos importa no es la latencia hacia el servidor DNS, sino el tiempo que va a tardar en respondernos con la dirección.

¿Cuanto es esta aportación a la latencia? Bueno, el mejor modo de comprobarlo es con pruebas reales. Para esta prueba se ha usado el servidor DNS de Google convencional 8.8.8.8, y por otro lado un resolver usando también el servicio DoH de Google, “https://dns.google.com/experimental”, en ambos casos deshabilitando todo tipo de cache

URL Servidor DNS 8.8.8.8 DoH https://dns.google.com/experimental
wikipedia.com 35ms 37ms
nic.es 31ms 39ms
facebook.com 11ms 38ms
google.es 32ms 42ms
theliel.es 32ms 38ms
twitter.com 12ms 38ms
elpais.com 38ms 40ms
microsoft.com 12ms 40ms
github.com 30ms 43ms
instagram.com 10ms 36ms

Los datos no son demasiado malos. Para dominios bien conocidos como Facebook, Twitter y otros, la latencia para resoluciones convencionales es mínima, ronda siempre los 10ms, mientras que el resto de hosts ronda una media de 33-34ms. Por contra, las resoluciones a través de DoH muestran un incremento claro, haciendo una media de 40-42ms. Estos resultados son simplificados y realizando medias entre 10 pruebas cada uno. En algunos casos existiendo gran variabilidad entre prueba y prueba.

 

El segundo inconveniente, es su soporte, su implementación. Mientras que el sistema DNS convencional está totalmente integrado en la propia estructura de Internet y podemos lanzar peticiones DNS desde nuestros equipos hacia cualquier servidor DNS, DoH es algo más complejo. Tal es así que actualmente requiere por un lado tener resolvers DoH, “servidores DNS” que sean compatibles con DNS Over HTTPS, que puedan traducir esas peticiones DNS encriptadas, resolverlas y devolvernos la dirección IP. Como es obvio, esos resolvers no elevan la petición DNS a servidores raíces por medio de DoH, sino por el modo convencional, pero esto no nos afecta, a menos que el resolver DoH fuese hackeado y guardase un registro de todas las peticiones realizadas. En todas las pruebas, en mi caso, he usado el servidor/resolver de Google DNS Over HTTPS que tienen habilitado: https:/dns.google.com/experimental.

Pero esto no es todo, así mismo requiere que los dispositivos sean compatibles también con DoH, ya sea a nivel integral en el propio OS, ya sea a nivel de aplicación. Esto es importante, porque como debemos de usar otro modo para realizar las peticiones DNS, requerimos de un software específico para ello, o que la aplicación esté preparada. En nuestro caso, por ejemplo, si usamos las últimas versiones de Firefox podemos habilitar el soporte para DoH de este, o podemos instalar un proxy en nuestro OS para que sea capaz de gestionar todas las peticiones DNS directamente de nuestra red.

En ambos casos, vemos que no es una opción que tengamos que habilitar si/no, requiere más que eso.

 

El tercer problema, y no menos importante, sea llama SNI. La idea detrás de DoH es cifrar las peticiones DNS, entre otras cosas para ocultar completamente los dominios que queremos visitar. El problema es que el uso de DoH no impida totalmente el “escape” de información que podemos tener referidos a los dominios visitados cuando son páginas webs HTTPS. Esto no es un problema de DoH realmente, sino del propio uso de los certificados digitales. Cuando realizamos una conexión HTTPS a cualquier host, el servidor remoto nos enviará en plano su certificado digital en el handbrake TLS. Los certificados digitales poseen una extensión llamada SNI, un campo que permite especificar los diferentes dominios para los cuales se aplica dicho certificado. Este campo no es obligado, es solo una extensión. Antes los certificados se emitían directamente para direcciones IPs específicas, pero con el agotamiento de estas ha sido cada vez más habitual que los servidores webs alojen bajo la misma IP muchas webs diferentes. Esto provoca que la emisión de certificados para una sola IP no sea viable, y se comenzó a usar SNI. Con SNI podemos especificar en el certificado los diferentes dominios, aun cuando todos ellos están bajo la misma IP.

El problema se ve claro, si un certificado que nos envía un servidor especifica el dominio para el cual ha sido emitido (el mismo), esa información también es potencialmente interceptable y usarla para conocer que hemos visitado dicho servidor. Eso no quiere decir que DoH sea inservible ni mucho menos. Para empezar un mismo certificado se emite muchas veces para diferentes dominios, así como consiguientes conexiones al mismo dominio tampoco requerirían de nuevo el certificado del servidor remoto. Otros servidores no usan siquiera SNI, y dentro de poco con la llegada de IPv6 es posible que en un futuro incluso sea común volver a certificados pre SNI, donde lo normal era su emisión para IPs.

Si un servidor nos responde con su certificado donde se especifica en SNI el/los dominios, nada evita que de nuevo se use software que rastree cada certificado que nos respondan los servidores remotos para hacer un perfil de nosotros de las webs visitadas. Pero estos sistemas al margen de ser más raros, tienen muchas limitaciones que de otro modo sería extremadamente sencillo tener un mapa completo del uso que hacemos en Internet, simplemente mirando las peticiones DNS.

 

El cuarto y último problema es que a veces falla. El software actual es limitado y tiene aun fallos que podemos encontrarnos, sin contar los problemas que pueden tener los resolvers actuales. Repito, todo esto es bastante nuevo, con lo que es de esperar algunos problemas, los más normales son resoluciones DNS que no son respondidas correctamente. Para atenuar esto, la mayoría de software cliente que existe permite configurar un servidor DNS convencional como fallover, en caso que DoH nos falle en alguna petición.

 

Como configurarlo

Bueno, por desgracia, y lo hemos visto en sus inconvenientes, no es algo que sea ejecutar y listo. Vamos a depender primero de un resolver DoH que actuará a modo de “proxy” entre DoH y peticiones de resolución DNS estándares. Cuando a estos resolvers les llegue una petición por DoH, la resolverán y nos la devolverán. Obviamente la confianza es esencial, a fin de cuentas que pasaría si dicho Resolver igualmente guardase una base de datos con las IPs originarias de las peticiones y una lista de los dominios accedidos.

Por otro lado como decíamos, requerimos de software o aplicaciones que sean capaz y compatibles con DoH. Ahora que es un estándar es de suponer que el soporte será ampliado enormemente, sobre todo en aplicaciones que nos gustan que sean seguras. Actualmente hay que decir que quedan cosas por pulir, el estándar DoH aun no ha sido alcanzado y algunas cosillas pueden cambiar. Algunos proveedores conocidos ya han lanzado resolvers DoH para poder ser usados de forma pública y gratuita, como Google o CloudFlare. Así mismo existen actualmente también la otra parte, software cliente para que podamos hacer uso de dichos resolvers. En este caso, quizás los dos casos más importantes en este punto sería el propio Navegador Web Firefox y DNSCrypt-Proxy. Al margen de ello, Google ya implementó DoH en Android también.

 

Firefox

El caso más básico y más sencillo de todos vamos a verlo con Firefox. Para ello necesitamos al menos Firefox 62, que si la memoria no me falla debería de estar ahora mismo en el canal Beta, Firefox 63 en Alpha. A partir de aquí es muy sencillo. Por defecto el soporte para DoH viene deshabilitado, ya que es un cambio importante. Básicamente necesitamos sólo realizar un par de ajustes en el editor de configuración. Para quien no lo conozca, el editor de configuración de Firefox se accede desde la barra de direcciones accediendo a: about:config.

 

network.trr.mode: (el modo de funcionamiento de DoH)

0: Deshabilitado
1: Usa ambos modos, DoH y resoluciones convencionales, el navegador usará la que resuelva antes
2: Usa DoH de forma predeterminada, y DNS convencionales como fallover
3: Usa solo DoH
4: Lanza ambas peticiones, pero solo usa las resoluciones convencionales.

network.trr.uri: (URL del resolver a usar)

Google: https://dns.google.com/experimental
CloudFlare: https://cloudflare-dns.com/dns-query
Mozilla/CloudFlare: https://mozilla.cloudflare-dns.com/dns-query

network.trr.bootstrapAddress: (opcional)

Si forzamos el uso del modo 3, como en mi captura, es necesario especificar la dirección IP del resolver. No podemos usar DoH sin conectarnos al resolver, con lo que necesitamos su IP, pero si forzamos usar solo DoH entramos en un bucle del que no salimos. De este modo preestablecemos la IP del resolver. No se requiere para el resto de los modos.

 

Hay muchos modos para conocer si DoH está funcionando en nuestro equipo. Un modo sería consultar la página de estado de Firefox sobre las peticiones DNS:

about:networking#dns

Podemos localizar la columna TRR y ver si para dicha resolución se está usando DoH o no.

Otra opción es usar un analizador de paquetes, y comprobar que no aparece tráfico DNS, al menos generado por el navegador web.

 

DNSCrypt-Proxy

DNSCrypt-Proxy es un proyecto de código abierto y multiplataforma. Actúa básicamente como un proxy que toma las peticiones DNS convencionales y las envía a un resolver por DoH. El proyecto lo tenemos en Github.

DNSCrypt-Proxy no es para nada nuevo, pero si ha sido recientemente cuando han añadido soporte para DoH. Anteriormente funcionaba con DNSCrypt de OpenDNS, de ahí su nombre, pero actualmente es compatible también con resolvers DoH. Este software es muy interesante porque nos permite pasar por ejemplo todas nuestras peticiones DNS (de todo el equipo, con independencia de que aplicación se use) a DoH. O mejor aun, si lo instalamos y configuramos en un Router, podemos asegurar directamente toda la red local, haciendo que absolutamente todas las peticiones DNS pasen por él. Esta última alternativa sería la ideal en entornos domésticos, pero ojo, de hacerse así no nos protegería de terceros conectados a nuestra red local, ya que las peticiones que se enviasen de nuestros equipos al Router si serían resoluciones DNS convencionales, sería el Router quien las convertiría en peticiones DoH y las enviaría hacia fuera.

En mi caso he optado por este último esquema, configurarlo directamente en el Router y no tener que tocar absolutamente ningún equipo ni dispositivo de mi red. El como hacer esto, es algo ya más complejo y que excede el artículo original. Para poder instalarlo en un Router se debería de descargar los binarios precompilados (o compilarlos) para nuestro dispositivo, crear la configuración necesaria, crear scripts para levantar los servicios… y como último paso decidir si queremos añadir reglas en iptables para forzar las peticiones DNS enviadas a servidores externos ser tratadas también de forma interna. En mi caso, y por cuestiones varias, prefiero no forzar las peticiones DNS externas. Es decir, que si alguna aplicación lanza una resolución DNS hacia un servidor DNS específico que no sea mi Router, serán convencionales, si usa las DNS del sistema, usará el Router y por ende irán bajo DoH.

La mejor forma de ver si funciona en este caso, es colocar un analizador de paquetes en la interfaz WAN PPPoE del Router, y capturar las peticiones DNS.

Esta primera prueba lanza una petición DNS a los servidores convencionales de google, 8.8.8.8. Dig es lanzado desde cualquier equipo de la red, tcpdump desde el Router:

dig theliel.es +noall +answer +stats @8.8.8.8

theliel.es. 599 IN A 188.121.46.128
;; Query time: 50 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Jul 20 18:19:02 Hora de verano romance 2018

tcpdump -i ppp0 udp port 53

16:19:02.137737 IP xxx.red-xxx-xxx-xxx.dynamicip.rima-tde.net.57185 > google-public-dns-a.google.com.domain: 14372+ [1au] A? theliel.es. (51)
16:19:02.384289 IP google-public-dns-a.google.com.domain > xxx.red-xxx-xxx-xxx.dynamicip.rima-tde.net.57185: 14372 1/0/1 A 188.121.46.128 (55)

Esto es el comportamiento normal, tcpdump está escuchando el tráfico en el puerto 53 que es por donde se realizan las peticiones DNS, y por tanto no solo registra la petición DNS realizada con Dig, sino que además incluso nos muestra directamente tanto la petición como la respuesta del servidor de Google.

Esta segunda prueba lanza la misma petición, pero esta vez usando los servidores DNS predefinidos por el servidor DHCP del Router (el mismo Router), que a su vez enviará las peticiones hacia el resolver configurado en DNSCrypt-Proxy:

dig theliel.es +noall +answer +stats

theliel.es. 573 IN A 188.121.46.128
;; Query time: 43 msec
;; SERVER: 192.168.2.1#53(192.168.2.1)
;; WHEN: Fri Jul 20 18:25:49 Hora de verano romance 2018

tcpdump -i ppp0 udp port 53

tcpdump -i ppp0 tcp port 443

16:28:41.849811 IP xxx.red-xxx-xxx-xxx.dynamicip.rima-tde.net.57197 > mad07s09-in-f14.1e100.net.https: Flags [P.], seq 8119:8303, ack 48627, win 4006, options [nop,nop,TS val 16309141 ecr 1452692457], length 184
16:28:41.859322 IP mad07s09-in-f14.1e100.net.https > xxx.red-xxx-xxx-xxx.dynamicip.rima-tde.net.57197: Flags [.], ack 8303, win 1050, options [nop,nop,TS val 1452694899 ecr 16309141], length 0
16:28:41.881146 IP mad07s09-in-f14.1e100.net.https > xxx.red-xxx-xxx-xxx.dynamicip.rima-tde.net.57197: Flags [P.], seq 48627:48721, ack 8303, win 1050, options [nop,nop,TS val 1452694921 ecr 16309141], length 94
16:28:41.881295 IP mad07s09-in-f14.1e100.net.https > xxx.red-xxx-xxx-xxx.dynamicip.rima-tde.net.57197: Flags [P.], seq 48721:48811, ack 8303, win 1050, options [nop,nop,TS val 1452694921 ecr 16309141], length 90

En este caso, a pesar de que Dig lanzó la petición DNS y quedó resuelta correctamente, tcpdump no es capaz de detectar tráfico por el puerto udp 53. Para poder “capturar” el tráfico, tendríamos que escuchar con tcpdump en el puerto TCP 443, como podemos ver… o no ver, porque el tráfico va encriptado, como mucho podemos saber que se está lanzando tráfico https a un servidor de google, pero imposible saber de que se trata, y menos aun pensar que es tráfico DNS.

 

Conclusiones

Es muy interesante que por fin tengamos un sistema fiable (y más importante, usable) para el cifrado DNS, y que por supuesto esté siendo estandarizado. Mozilla se ha puesto a trabajar duro en ello, Google está dando pasos agigantados también en la misma dirección, con lo que es de esperar que el resto se vayan uniendo a la fiesta. Esto no quiere decir que en dos días, un mes o un año todo el tráfico DNS irá cifrado, ni muchísimo menos. Del mismo modo que desde hace años disponemos de DNSSec, lo cierto es que solo un % pequeño lo usa, la mayoría de las Webs tampoco están adaptados para esto. DNS no se puede sustituir, pero si podemos imaginar que cada vez más servidores DNS convencionales permitirán su uso como resolvers DoH. Esto, sumado a que puede ser incorporado de forma transparente en las aplicaciones que se requieran, hace previsible su uso en muchos campos.

De los modos sistemas mostrados aquí, posiblemente para el usuario normal el que puede empezar a usar si así lo quiere es a través de Mozilla Firefox. Que yo sepa, a día de hoy Chrome no puede configurarse de un modo similar, pero es solo cuestión de tiempo, si es que no se puede ya. Esto no nos protegerá la red de nuestra casa, pero si todo el tráfico que generemos desde el navegador.

Para quien quiera aventurarse un poco más, puede instalar en local DNSCrypt-Proxy y configurarlo en su equipo para aplicarlo de un modo integral a su propio equipo, y por último, los más osados, pueden hacerlo en el Router, y afectar a todo el tráfico que genere nuestra red local.

Esto no va a saltarse de golpe todos los bloqueos existentes, no va a hacer que nadie bajo ningún concepto pueda saber las direcciones que visitamos, pero sin duda alguna es un plus muy importante a nuestra privacidad, sobre todo si tenemos un portatil o un dispositivo móvil el cual usamos en redes de datos de los ISP o en redes WIFIs públicas o que no controlamos, es aquí donde la configuración por aplicación es igualmente importante. Es decir, ya se use en el Router o en las propias aplicaciones, un uso no sustituye el otro.

Los problemas de rendimiento están presentes, no podemos engañarnos, pero es cierto que la inmensa mayoría de las veces son imperceptibles, y solo de cuando en cuando notamos realmente un “parón” en la resolución DNS y tarda algo más de lo habitual. Pero el 99% del tiempo no notaremos ninguna degradación.

Hay que entender que de cualquier modo todo es muy experimental, el estándar no se ha terminado de aprobar y algunas cosas aun cambiarán, por suerte para mejor con seguridad.

Saludos.

¿Un fallo de seguridad en High Sierra (MacOS) permite acceso Root a cualquiera? Sí, y más simple imposible

Generalmente no suelo hacer eco de estas noticias a menos que el fallo de seguridad (o el exploit) tenga una relevancia/peligrosidad tan elevada. Y es que creo que a estas alturas el que más o el que menos (y si tiene High Sierra espero que seguro) que esté en el “mundillo” habrá escuchado las noticias por todos lados. Sinceramente, creo que nos tenemos que remontar a la famosa “Cadena de la Muerte“, en 2013, para encontrar algo tan flagrante, y en esta ocasión Apple se ha superado, lo ha logrado, nadie lo sabe bien pero lo ha conseguido, basta invocar la cuenta Root en el sistema para que este la cree en ese momento y le asigne una contraseña en blanco. Dicho de otro modo, si cualquiera se pone delante del sistema tenga la cuenta que tenga e intenta entrar/usar el usuario “root”, sin especificar ninguna contraseña, al segundo intento generalmente entra (El primero la crea, el segundo accede).

Bien, no hace falta decir que el usuario root es por lo general la cuenta/usuario maestro en casi todos los sistemas UNIX/Linux, el super administrador. Es decir, que como tal usuario tendremos acceso total al sistema. La cosa es aun peor, porque si el equipo tiene habilitados servicios de acceso remoto, la gracia se puede mascar en el aire.

No es un exploit remoto que permita ejecución arbitraria de código, es un bug en principio con alcance local, y como tal requiere acceso físico al equipo. No obstante a nadie se le escapa la gravedad del asunto. Para usuarios particulares que usen el equipo en entornos digamos de confianza o familiares o… generalmente no va a suponer un gran problema si los que nos rodean tenían acceso igualmente al equipo de forma indiscriminada, pero en entornos más empresariales, equipos portátiles que en cualquier momento puede ser “dejado” en cualquier lugar, el problema no tiene parangón.

La cosa es aun peor, y es posiblemente una de esas políticas que tanto tiempo llevo recriminando a Apple con más intensidad. La falta de actuación y transparencia. Este fallo no ha sido descubierto hoy, Apple lleva tiempo con conocimiento de ello. Es más, hace más de dos semanas se comentaba abiertamente en los foros de soporte, e incluso por lo que dicen, se daba como solución a usuarios que necesitaban acceder a sus propios equipos como Root. En cambio, como siempre, silencio. Hoy, por el motivo que sea a saltado a la prensa, y nos hemos enterado la mayoría (personalmente no tenía constancia de ello), y como Apple hace siempre, es cuando lanza un comunicado diciendo que tendrán la actualización lista para solucionarlo “pronto”. No dudo en absoluto que lo solucionen pronto, eso no me preocupa, ni siquiera en realidad este bug por grave que sea, lo que me preocupa es la falta de inacción por parte de Apple, y que sólo se pone las pilas cuando el problema se escala a los medios de comunicación. La “cadena de la muerte” estuvo funcionando durante semanas sin que se solucionase incluso siendo ya un “vox populi”. Dicho de otro modo… si algo tan sencillo y tan absurdo como este bug (y tan grave) lleva semanas rondando por los foros oficiales de Apple y no han hecho nada, ¿qué exploits/bugs habrá en la trastienda (con conocimientos o sin ellos por parte de Apple) que no conocemos?

Siempre he dicho y “defendido” el error humano. Nadie es perfecto y todas las empresas cometen errores, y de todos los tamaños por cierto. A veces esos errores son tan tontos como es este caso y otras veces la gran genialidad de expertos de seguridad logran meterse en los resquicios más insospechados para hacer saltar un sistema. Esto sucede constantemente y no pasa nada, lo asumimos y lo aceptamos porque en cierto modo nos fiamos de los desarrolladores que, en función de la gravedad y la importancia, tal como los problemas vayan apareciendo, se irán solucionando de igual modo. Puedo perdonar a Apple de que alguno de sus programadores haya metido la pata hasta donde la ha metido, lo que no puedo perdonar es que la vulnerabilidad lleve circulando semanas por su propio foro, y no haya dicho ni hecho absolutamente nada. Eso sí, hoy que salta la noticia a la prensa es cuando se mojan. Deleznable.

HTTPS no añade legitimidad o credibilidad a una Web, brinda seguridad

Llevo ya días que al despertarme me topo con alguna noticia relativa a HTTPS, supongo que los responsables son Mozilla y Google, que desde primeros de años decidieron aplicar algunas medidas coercitivas en sus navegadores, lo que sucede es que como siempre si el usuario medio no entiende lo que quiere decirle un cartel de advertencia, al final da igual.

 

Brevemente, sobre el mensaje “nuevo” que estas dos compañías han instaurado. Es un ejemplo más que muestra el trabajo que cuesta a veces a los usuarios de perfil medio la diferencia entre seguridad y legitimidad de una página. Muchos empezaron a decir incluso que Google iba a advertir con mensajes a los usuarios sobre que una web no era segura… no tiene nada que ver con eso, de echo tanto Firefox como Chrome muestran exactamente lo que tienen que mostrar, la lectura que otros le quieran dar es diferente:

La primera es el mensaje que muestra Firefox, el segundo Chrome, este último también traslada un mensaje en la URL. En esencia dicen exactamente lo mismo. Ambas compañías simplemente muestran en pantalla ese mensaje cuando se dan dos circunstancias: La primera, estamos en un formulario que se reconoce un campo de contraseña donde vamos a introducirla. La segunda es que la Web en cuestión en la que vamos a introducir dicha contraseña no está bajo HTTPS con un certificado válido. Dicho de otro modo, al no estar la web bajo HTTPS, los datos que pongamos tanto en la contraseña como en el nombre de usuario, es posible que sean enviados en “texto plano”, es decir, tal como los introducimos, y por ende podrían ser potencialmente interceptados por alguien que “pinchase” la conexión en cualquier punto de esta.

Hay que entenderlo, no significa que la web sea insegura realmente, o que no sea legítimas. Lo que nos avisa es que si nuestra red no es segura (nos están robando WIFI, tenemos un familiar/amigo travieso conectado a ella, usamos una red pública…), alguien podría potencialmente leer ese tráfico, y claro… a lo mejor no importa tanto saber que visitas una web concreta o incluso el contenido de ella, pero si importa y mucho si lo que capturan es la contraseña de tu correo electrónico, de acceso a un servicio. Pero repito, nada tiene que ver con legitimidad o fiabilidad, y es más, esa advertencia puede no ser importante si sabemos perfectamente desde donde nos conectamos.

 

Volviendo al asunto original del artículo, estoy aburrido de leer “noticias” sobre HTTPS, Certificados TLS/SSL, “seguridad”… y casi todos ellos sesgados. El último ha sido esta tarde… no me gusta tirar tierra a nadie y respeto el trabajo de cualquiera, pero creo que hay que ser más riguroso en lo que se escribe, y por citarlos, hablo de un artículo en Xataka. A veces una coma o el modo de decir las cosas no importa y se sobre entiende, pero otras veces el significado es muy diferente sólo con que falte un acento. En este caso, y cito textualmente encontramos el problema de siempre, algunas frases muy poco afortunadas:

“Esto quiere decir, que una dirección web en la que tengas que empezar escribiendo https:// en vez del clásico http:// será siempre mucho más segura, ya que certifica que la web visitada es legítima…”

“Chrome están empezando a señalar como inseguras todas las páginas que no lo utilicen”

No voy a valorar el resto del artículo, por supuesto dice cosas totalmente ciertas, el problema es que hay otras que no lo son.

Por un lado, sobre el comentario que se hace de Chrome, es falso, siempre he dicho que una media verdad no deja de ser una mentira, intencionada o no. Chrome NO SEÑALA las webs como inseguras cuando no están bajo HTTPS, Chrome, al igual que Firefox, lo que hacen es mostrar un aviso en el campo contraseña (y Chrome también en la URL) cuando existe un campo contraseña, y ese aviso, aunque pueda usar la palabra “insegura”, especifica bien claro a que se refiere, al envío de información cuando se rellena un formulario o cualquier otra cosa. Este aviso no aparece si dicha web carece de cualquier campo de este tipo, esté en HTTPS o no.

Sobre la primera frase, realmente es lo que me llevó a volver al blog, no por Xataka realmente, lo de ellos ha sido una noticia más haciendo alusión a eso de dar legitimidad a una web o no.

 

¿Qué es y qué no es HTTPS?

HTTPS se basa en autentificación y cifrado entre el equipo de origen, y el servidor destino, de forma bilateral (por lo general la autentificación la realiza sólo el cliente, no el servidor). Que un servidor use HTTPS para servir sus webs, poco o nada tiene que ver con que esa Web sea más segura, o que dicha web sea quien dice ser, con la única excepción de que use certificados tipo EV en todo caso (en lo relativo con la identidad, es decir legitimidad).

La necesidad de HTTPS nace precisamente de los cartelitos que ahora muestran Firefox o Chrome. Cada vez más usamos las conexiones inalámbricas, cada vez más hay desconfianza de los ISP (proveedores de internet) e incluso de los propios estados!! Quien no conoce a día de hoy los casos de Wikileaks y tantos otros. El cifrado no es algo nuevo, y creo que todos lo entendemos bien… algo que no esté cifrado no significa que no sea seguro, significa que si alguien lo intercepta lo va a poder leer.

No veamos HTTPS como un ente tan extraño, se puede simplificar enormemente, pensemos en vez de HTTPS y páginas web en una carta, en que quiero hacer llegar una carta a mi amada, y para ello no tengo más opción que dársela a un amigo para que a su vez se la entregue a ella. A nadie se le escapa el problema, incluso si pusiésemos un lacre sellado, mi amigo podría abrirla y leer el contenido, y si el contenido de la carta no usa un código secreto que sólo entendiese ella y yo, pues mi amigo se enteraría de todo. En función de la relevancia de las letras que ponga en esa carta, usar un código secreto entre los dos puede ser simplemente un juego, a ser totalmente necesario.

En Internet, el amigo puede ser tu hermano conectado a tu misma red, puede ser un vecino que te roba WIFI, puede ser un desconocido conectado a la misma red pública (WIFI o cable), puede ser incluso si quisiese tu ISP, por supuesto el gobierno… y eso sin contar absolutamente cualquier punto por el que tus datos son transferidos hasta llegar al servidor final. Al margen de conspiraónicos y que los gobiernos y los ISP nos espíen, el principal problema no son ellos, son las redes en las que nos conectamos. Puede que no me haga gracia que, en caso de hacerlo, un gobierno quiera interceptar mis comunicaciones, pero a fin de cuentas tampoco tengo nada que considere “personal” para ellos, más me preocupa que desconocidos puedan conocer mis datos personales, cuentas y otros.

 Sí, el cifrado puede ser algo positivo, pero desde luego desde mi punto de vista indispensable cuando manejamos información personal o evidentemente confidencial, y HTTPS soluciona esto. Ya hablé en su día largo y tendido sobre ello en uno de mis artículos, y recientemente también en el de Let’s Encrypt, donde por encima explicaba todo esto, aunque en menor medida.

Inicialmente hablaba de legitimidad… HTTPS trata sobre cifrado de datos, no sobre legitimidad. Sí, el servidor se autentifica/identifica de cara al usuario, pero no para certificar que el contenido de la página es legítimo, ni siquiera que la propia web lo sea!! Lo que certifica en todo caso (de tener un certificado digital reconocido y excluyendo los certificados EV que veremos luego) es que dicho certificado fue emitido para dicho dominio específicamente, nada más. Dicho de otro modo, que el certificado que nos llegue a nuestro equipo, poder ser validado para estar seguros que quien nos los mandó es la web que tenemos delante.

Y en ese párrafo está toda la madre del cordero. Xataka dice que certifica que la web que tenemos delante es legítima… no es cierto, la web puede decir que es Paypal, la web puede ser un calco perfecto de cualquier página de un banco, e incluso podrían tener un dominio similar!! y por supuesto, podrían usar perfectamente un certificado digital (y usar HTTPS) validado. Evidentemente a mi modo de ver las cosas, no considero eso como una web legítima. Esto es algo que se está empezando a hacer de forma masiva, por la falsa creencia precisamente del usuario de creer que si ve el candado verde la web es fiable, y es un error de base. Sí, la comunicación con dicha web se hace de forma cifrada y ningún vecino nos intercepta la comunicación, pero los datos que enviamos llegan igualmente al servidor, y si esa web la hace una persona malintencionada, evidentemente tiene acceso a dichos datos, datos que nos acaba de robar por creer nosotros que por tener candadito verde la web era legítima de fiar.

Pero por supuesto, que son unas letras sin una buena imagen. Ni siquiera he tenido que invertir tiempo en hacer una prueba propia sobre esto, simplemente me ha bastado con  mirar en cualquiera de los servidores usados para los registros de transparencia de certificados (por ejemplo https://crt.sh), que registran los certificados emitidos por las diferentes agencias CA que los usan, y mirar los dominios para los cuales se registran. Yo he buscado por Paypal, que contengan los dominios “Paypal”, por ejemplo, y el primer certificado que he encontrado que contenía su nombre ha sido el que pongo ahora en la imagen:

Antes de terminar de escribir este artículo, habré reportado dicha web, con lo que es posible que si alguien intenta acceder Google SafeBrowser la esté ya indicando como página de Phising, pero ahora mismo esta totalmente operativa. Como podemos ver perfectamente, la web está protegida por HTTPS, con su candadito verde, su “Es seguro”, con una URL similar a alguna que pueda tener una página real de Paypal, y por supuesto su contenido un calco. Bien, este es un ejemplo sencillo, poco o nada tiene que ver con que esté bajo HTTPS y el certificado sea válido, el contenido puede ser totalmente fraudulento. Ni que decir tiene que posiblemente de meter ahí los datos, se los enviaríamos a una personal mal intencionada, pero muchos creerían que como la URL parece ser “buena”, y que pone “es seguro”, es de fiar. ERROR!!

 

Let’s Encrypt, el CA del que ya hemos hablado en otra ocasión, está siendo foco de grandes críticas por muchos (no hace falta ser un genio para saber que la mayoría de todas ellas por no decir todas vienen de los otros CA). Se les acusa de emitir certificados fraudulentos. Bien, primero tendríamos que matizar que es un certificado fraudulento, porque el ejemplo que he puesto anterior de Paypal, no es un certificado fraudulento, es un certificado totalmente legítimo, lo que no es legítimo y lo que es fraudulento es el contenido de la web mostrada, así como el uso evidentemente de la propiedad intelectual de Paypal y la suplantación de identidad. El certificado es legítimo siempre y cuando quien lo solicitó demostrase que era el dueño de dicho dominio, y recordemos que el dominio no es Paypal.com, el dominio comprado en este caso es “paypal-secure-info.gq”. Dado que las normativas sobre dominio permiten el registro de dicho dominio (lo cual es normal, no pueden vetar un dominio simplemente porque contenga una palabra que es marca comercial), sería totalmente injusto vetar la emisión de un certificado para dicho dominio. El problema no es el dominio, el problema no es el certificado… el problema es el uso que se haga de ello.

Algunos dicen que Let’s Encrypt en la “poca” vida que llevan, ya ha emitido muchísimos más certificados de este tipo que llaman “fraudulentos” que el resto de CA juntos. No lo dudo, es muy posible, pero por una razón sencilla… con los otros CA tienes que rascarte el bolsillo, 50-100€, pero te los emitirían igualmente por mucho que digan algunos que no permitirían certificados en dichos dominios, a fin de cuentas si el dominio está registrado correctamente, la emisión de un certificado estándar (de tipo DV, validación de Dominio) solo requiere para cumplir con las estrictas normas de seguridad la validación del propio dominio, nada más.

Ante esto Let’s Encrypt ya ha dicho más de una vez lo mismo. Ellos no son la policía ni el organismo competente para censurar el uso que puedan o no dar otros a las web, eso será cuestión de otros, y que por suerte herramientas como Google SafeBrowser o Internet SmartScreen, están para eso. Repito, lo mismo sucede con cualquier otro CA. De echo, para curarse en salud, Let’s Encrypt tan solo emite certificados DV.

Muy diferente es el caso cuando se desea un certificado EV, esos certificados que añaden antes de la URL el nombre de la compañía. Esos certificados emitidos por un CA requieren una serie de verificaciones y burocracia muy superior, que precisamente buscan eso, que se pueda tener cierta confianza de que la web visitada corresponde al contenido que tienen. En el caso de la web de paypal fraudulenta puesta arriba, les sería imposible lograr que pusiese delante de la URL lo que realmente veríamos en una web de Paypal:


El contenido es exactamente el mismo, y al margen de que la URL sean diferentes, evidentemente, en esta vemos el “sello” del certificado EV “Paypal, Inc. US”. La anterior sería imposible que lo lograse, incuso lograr algo similar sería casi imposible, a caso iban a crear una empresa llamada Paypal Secure bla bla bla y lograr todo lo que se requiere?? No, no lo lograría. Pero eso no invalida el certificado DV, ni tampoco le quita la gran importancia/necesidad que estos certificados (DV) tienen. De echo, como explicaba en el artículo de Let’s Encrypt, los certificados EV son muy caros, y la mayoría de entidades no los usan por no ser necesarios, mucho más importante que mirar el sello EV es mirar la URL, que ojo… puede engañar también (otro día hablaré de ello), pero pensar que si tomásemos una empresa no conocida podría tener legítimamente su sello EV y ser igualmente fraudulenta por el contenido que tiene.

 

Hace unos días apareció la noticia de que Google castigaba duramente a los certificados EV de Symantec (uno de los grandes CA) por detectar durante años la emisión de EVs de estos sin las necesarias y más estrictas condiciones. Recordar que un CA es fiable sólo en la medida que los navegadores Web y otros software se fían de ellos y añaden en sus productos los certificados raíces de estos. Dicho de otro modo, en cualquier momento tanto Google, Mozilla, Microsoft… podrían bloquear/anular los certificados raíces del CA que quisieran, dejando los miles o millones de certificados emitidos por ellas totalmente inservibles. Es por eso que son aquellos que crean el software que nos conecta los que deciden que certificados añadir y que normas y condiciones tienen que cumplir para permitirles estar dentro de su software, y si no lo cumplen o detectan irregularidades, no tienen problemas en eliminarlos o castigarlos del modo que estimen. Y sí, han caído empresas grandes cuyo principal volumen de ingresos era la emisión de certificados porque los navegadores los bloquearon por emitir certificados fraudulentos.

Vale, pero he dicho que los certificados fraudulentos no son tales… en que quedamos. Bueno, he dicho que el ejemplo anterior no es un certificado fraudulento, pero claro que se pueden emitir certificados fraudulento. El ejemplo más sencillo, si mañana me pongo en contacto con un CA y les pido que me emitan un certificado para google.es, y me lo mandan, es un certificado fraudulento, y no porque ya exista uno legítimo, eso es indiferente, es fraudulento porque el dominio google.es no es mío, e incluso un certificado DV se debe de emitir sólo si se puede verificar la propiedad de dicho dominio. Peor aun si hablamos de certificados OV o EV.

En el caso de Google y Symantec, según se ha dicho en la nota de prensa, Google detectó irregularidades en la emisión de certificados tipo EVs, y ha optado por medidas bastante serias, y durante un año irá invalidando dependiendo de las fechas de emisión de estos, los certificados EVs de Symantec (si leí bien). Y esto no es poca cosa, eso causa un daño enorme a Symantec. Es en una de esas pocas cosas que vemos el tremendo poder que puede tener una empresa que desarrolla una navegador Web para con otras multinacionales de gran peso e importancia.. bueno, google es un gigante, pero pensemos en Google como desarrollador de Chrome. Por supuesto Symantec les ha respondido, que han exagerado los datos, que les parece un “castigo” desmedido, que en el peor de los casos que Google lo lleve a cabo re-emitirá certificados nuevos para todos los afectos para que no se vean afectos… etc etc etc.

 

Conclusión

Por supuesto la credibilidad y fiabilidad de un sitio es o debería de ser muy importante, el problema es que no existe un sistema para ello. La mejor forma de legitimar una web es conociéndola, mirando siempre muy bien las URL, usar tecnologías como Google SafeBrowser (usada en Firefox o Chrome) o Smart-Screen usada en Internet Explorer. Tener siempre la seguridad, sobre todo cuando vamos a introducir cualquier dato sensible que la web que tenemos delante ES la web que dice ser, y no fiarnos de si usa HTTPS para eso o no. HTTPS nos asegura un cifrado, no la identidad que pueda parecer decir ya sea por el contenido o por la URL. Eso no invalida para nada la necesidad de HTTPS, puesto que incluso aunque una web sea fraudulenta, puestos a escoger, dentro de los males el menos malo sería que usase HTTPS, al menos tendremos la seguridad de que los datos sólo nos lo roba quien hizo la web fraudulenta, y no además otro que nos espíe la conexión por no usar HTTPS.

Con la aparición de Let’s Encrytp la web ha dado un buen giro, y donde antes nadie usaría certificados, ahora el uso se está expandiendo enormemente, ya sea un blog personal (ya, lo sé, no se lo tengo puesto al blog, en casa del herrero cuchillo de palo), ya sean empresas, tiendas online… y eso es bueno, con independencia de que algunos los quieran usar para otros fines.

Pero no nos equivoquemos, la culpa no la tienen esos desalmados, ellos simplemente se aprovechan como siempre del desconocimiento de los usuarios, las empresas de CA se han empeñado durante años a decir que los certificados son necesario para la confianza, para la fiabilidad… y muchas campañas se han hecho acerca de esto, así que el usuario normal ha tomado por válido ciertas cuestiones, como que si la web tiene un certificado seguro, la página es segura = fiable = de_confianza.

HTTPS sí, siempre que sea posible y el certificado sea válido, pero por favor… no dejéis nunca de revisar bien y mucho ante la duda la web que los use.

¿Son realmente necesarios los Antivirus? ¿Causan más mal que bien?

Buenas compañeros.

Es de estas veces que… digamos que estás haciendo alguna cosa sin demasiada importancia y sin necesidad de atención, mientras lees algunas publicaciones aquí o allí. Y de pronto me he topado con un artículo publicado por Robert O’Callahan, persona bien conocida (en el mundillo) y que sigo desde hace tiempo, con un gran talento como ingeniero de software, y un poco siempre controvertido. Robert O’Callahan ha sido Ingeniero de Mozilla durante muchos años, siendo una pieza fundamental de ellos, un gran programador, experto en seguridad y bueno… creerme, es cierto que siempre ha sido políticamente incorrecto, pero sabe de lo que habla.

El artículo no tenía desperdicio, animo a todos a leerlo: “ Disable Your Antivirus Software (Except Microsoft’s)“. Cuando cualquiera escribe sobre temas que conoce (o cree conocer), sus palabras pueden ser más o menos escuchadas y tenidas en cuenta por un grupo de seguidores o lectores, pero cuando personas de cierto y conocidas por su trabajo hacen comentarios tan tajantes, se arma un revuelo… y no es para menos.

Para quien no quiera leerse el artículo o vaya regular en Ingles, se lo resumo de forma sencilla:

En primer lugar, O’Callahan aprovecha para recordar que al no estar de momento en Mozilla (espero sinceramente que vuelva), tiene “libertad” en poder expresarse de forma abierta ya que a fin de cuenta no representa ni la opinión ni palabras de Mozilla y está desvinculado de ellos. Esto nos dice que muy posiblemente Mozilla piensa igual en general, sólo que como es normal no puede hacer afirmaciones tales por las repercusiones que tiene, como veremos luego.

A continuación, hace un pequeño resumen exponiendo que los Antivirus, lejos de hacer nuestros sistemas más seguros, por lo general lo que logran es hacerlo más inseguros, crearle agujeros de seguridad, son invasivos, matan el rendimiento y generalmente por raro que parezca no cumplen las normativas básicas de seguridad de software, con un código mal optimizado y problemático. Y desde el punto de vista de ellos como desarrolladores de software, específicamente navegadores Webs, afirma también que una parte muy importante del tiempo dedicado por los desarrolladores es precisamente tener que lidiar con los fallos de seguridad y otros de los propios antivirus, por supuesto da ejemplos de ello.

Muchos han visto esto como un guiño a Microsoft, por Windows Defender, pero en lo personal no creo que sea así, y en parte lo explica. La gran diferencia entre Windows Defender (En Windows) y cualquier otro AV como pueda ser Symantec, Avira, Avast… (pongo 3, pero en general cualquiera), es que Defender en primer lugar está integrado en el sistema y mucho más optimizado, en segundo lugar Microsoft por política somete a todo su software a estrictos controles de seguridad y estándares que deben de seguir, cosa que la mayoría de empresas de software no hacen, y en tercer lugar porque para lo que sirve un AV, Defender cumple con lo que necesita cualquiera. Dicho de otro modo… Windows ya tiene su propio AV/AntiMalware que funciona bien, para que usar software de terceros que puede provocar todo tipo de problemas.

Bien… cualquier que me conozca, sabrá lo que pienso al respecto: Estoy totalmente de acuerdo con sus palabras.

Es complicado hacer este tipo de afirmaciones y más para ellos, como bien dice. los desarrolladores de Software tienen que trabajar a fin de cuenta codo con codo con los desarrolladores de AV, y es evidente por qué… creéis que a cualquier desarrollador de software le gustaría que un AV salte una advertencia de seguridad o que hagan un comunicado diciendo que el software de X no es seguro?? Es indiferente si dicha afirmación o dicha alarma es cierta o no, el daño lo hacen, porque son compañías que tienen mucho peso. Yo puedo hacer los comentarios que quiera, puedo dar mi opinión y ninguna empresa de AV puede “influenciarme” de ningún modo, pero la mayoría no puede hacer eso.

Las empresas de AV se aprovechan de la historia y del desconocimiento de los usuarios, intentando venderte no su software, sino la idea de que si no usas un AV, tu equipo está desprotegido, y que el suyo es el mejor. Y esto es falso… al menos de un punto de vista global, y he hablado de ello muchas otras veces. Los AV tienen su utilidad, pero es limitada en el mejor de los casos, y por lo general causan un mal mucho peor que la posibilidad de coger algún tipo de malware. El desconocimiento es tal, que por paradójico que sea, la mayoría deshabilita las actualizaciones de Windows para mantener su equipo en buena forma y seguridad, mientras que usan AV para “protegerlo”, cuando es exactamente al contrario!! Lo más importante para la lucha contra CUALQUIER tipo de malware, es TENER ACTUALIZADO EL SOFTWARE empezando evidentemente por el OS.

Pues han pasado unos días desde que el señor O’Callahan escribiese dicho artículo, y al margen de lo polémico que ha sido muchas veces (que no es sinónimo de no tener razón), esta vez se le ha unido incluso algunos Ingenieros de Google, que aunque han sido algo más suaves, han venido a darle la razón, aludiendo que al margen de las estadísticas y otros que sacan las propias empresas de AV, ellos tienen sus propios datos que muestran que tales afirmaciones son ciertas, y que duela a quien duela, Defender es digamos mucho menos problemático que el resto de los AV.

No es normal que expertos de cierto calibre hagan afirmaciones tales: “Deshabilita/Desinstala tu Antivirus”, pero me alegra que por fin algunas voces se atrevan a decirlo. Como queda dicho, hay demasiados intereses económicos, y luchar contra empresas de importante tamaño te puede pasar factura, sobre todo si tu producto puede verse afectado por el producto de otro.

 

Mi opinión personal es bien conocida para todos mis círculos, y alguna vez la he expresado aquí. Cualquier tipo de Malware es introducido en el equipo o por interacción directa del usuario o por algún agujero de seguridad. Lo primero se evita con una educación mínima de como usar Internet y otros, a fin de cuenta repito entra porque el usuario instala o ejecuta algo que no debía. Lo segundo se evita actualizando el Software, sobre todo cualquier programa de cara a Internet, como navegadores Web, Sistema operativo y otros. Y no, en ninguna de esas dos luchas contra el malware aparece un AV. Sí, en algunos momentos específicos puede ser bueno poder disponer de un AV para analizar un archivo del cual no estamos seguro o dudamos… pero para eso tenemos una herramienta mejor a todo ello:

http://virustotal.com/

Tengo que decir que siempre que tengo que recomendar configurar un equipo, software a instalar… o incluso a amigos/familiares que soy quien se encarga de ello, el AV lo tengo vetado. Por lo general, es cierto que les dejo habilitado Defender, aunque en mi círculo más cercano, también lo tengo deshabilitado. Esto no es una recomendación ni lo deja de ser, porque al final como dice también O’Callahan, si recomiendas algo y alguien termina con problemas por ello, se contará siempre la negativa y no la positiva, sólo digo que a todo en lo que tengo o pueda tener mano, los AV de terceros están totalmente vetados, y en mis círculos más cercanos, todos.

Por supuesto… cada cual es libre de creer, hacer 🙂

Let’s Encrypt

le-logo-wide

Llevo ya un tiempo queriendo escribir algunas palabras sobre esto por dos motivos. El primero, debido a la gran importancia que a día de hoy debería de ser mantener las comunicaciones seguras entre los equipos de los usuarios y los servidores remotos, y en segundo lugar por lo que, desde mi opinión claro está, es la gran labor que han llevado a cabo y están realizando todos los que están detrás del proyecto de “Let’s Encrypt”.

Como es costumbre, vamos a hacer una pequeña introducción para explicar en primer lugar un poquito de todo esto para quienes no sepan de ello, y para los que sepan y aun estén recelosos clarar algunas dudas.

 

¿Que es Let’s Encrypt?

La versión corta y reducida es la que podemos encontrar en su propia web: https://letsencrypt.org/:

“Let’s Encrypt is a new Certificate Authority: It’s free, automated, and open” (Let’s Encyrpt es una nueva Autoridad de Certificación. es gratuito, automatizado y abierto).

Internet no se construyó en su origen para ser seguro, de tal modo que en su versión simplista se trataba de poder enviar información desde un punto a otro. Los años, y más los tiempos que corren, demostraron que eso está muy bien, pero se hacía necesario algún sistema de cifrado punto-a-punto que asegurase dicha comunicación. Los cifrados punto-a-punto se denominan así (ahora de moda con las aplicaciones de mensajería instantánea) porque el contenido se cifra/descifra en los extremos, es decir… se cifra en nuestros dispositivos y circula de ese modo hasta llegar al destino, haciendo que sea, en teoría siempre, poder “leer” dicho tráfico si alguien intercepta la comunicación en cualquier punto de dicha travesía. De este modo tan solo el origen y el destino de dicha comunicación podrían entender lo que están enviando/recibiendo. Esto fue vital para Internet, y así nació HTTPS, que todos estamos hartos de ver.

HTTPS se fundamenta en el uso de los protocolos TLS y SSL, los cuales a su vez su funcionamiento radica en el uso de lo que llamamos certificados digitales para poder crear un entorno de cifrado asimétrico (ya sea RSA, ECC…). Esto ya hablé bastante en su día, así que no voy a repetir el grueso de todo aquello, quien le interese, creo que estaba en el artículo de Seguridad: Encriptación y Autentificación (cap 4). Abreviando mucho, digamos que, al menos, el servidor al cual los usuarios se conectan para iniciar su comunicación de forma segura debe de poseer un certificado digital que será enviado al cliente al iniciar la conexión y que le dará a este toda la información necesaria para realizar esa conexión, como la clave pública que usará el cliente para cifrar la clave simétrica de sesión, los algoritmos a usar para el cifrado… e igualmente importante, los datos necesarios para que el usuario PUEDA VERIFICAR LA CORRECTA IDENTIDAD DEL SERVIDOR AL QUE SE CONECTA, empezando por el CA (Autoridad de Certificación) que emite dicho certificado.

El cifrado es esencial si queremos que nuestras comunicaciones no puedan ser leídas en ningún punto hasta su destino (evidentemente sobre todo cuando estamos transmitiendo información que pueda ser confidencial o importante como usuarios/contraseñas, tarjetas de créditos, datos personales..). Esto no es un problema para TLS/SSL, y a día de hoy si la implementación TLS/SSL es buena y usando las versiones más actuales y otros, el cifrado es, en la práctica, imposible de romper (no vamos a entrar en teoría de computación cuántica, errores de implementación, ataques de tiempo y otros). Pero el cifrado es solo la mitad del problema, porque nada podría impedir igualmente a quien quisiese interceptar la comunicación, suplantar el servidor destino haciendo de “hombre en medio” y mandar su propio certificado al usuario, creyendo este que es legítimo, y por otro lado este atacante se comunicaría hacia el servidor real, y como el es en ambos casos extremo de la comunicación, podría leer perfectamente toda la información cifrada tanto por uno como por otro. Incluso como muestra la siguiente imagen, se podría hacer uso de esto con fines igualmente legítimos: (Nota: La imagen está sacada de otro sitio, no tenía ganas de hacer una similar)

interceptionproxy

Este esquema muestra el problema que indicaba. Un cliente podría querer comunicarse con el servidor remoto www.example.com, pero un tercero que quisiese interceptar la comunicación (aka SSL Interception proxy) podría enviar su propio certificado (emitidio por Corporate CA) al cliente, recibir la comunicación por parte de este, y a su vez conectarse al servidor remoto real, que le enviaría su certificado real (emitido por Real Public CA) para reenviar lo que el cliente le mandase a él. Todo iría cifrado, desde el Cliente al intermediario, y del intermediario al servidor final. Problema?? Que realmente no sería un cifrado punto-a-punto, ya que en medio se habría colocado un tercero que podría estar leyendo absolutamente todo el tráfico que pasase por él.

¿Como se soluciona esto? Aquí es donde radica todo. La solución es que los clientes, cuando usan cualquier aplicación para conectarse a servidores remotos por conexiones seguras TLS/SSL (ya sea un navegador web, un gestor de correos, una aplicación de mensajería instantánea, un juego, un…) posee una “base de datos” propia que puede venir con el sistema operativo o con la propia aplicación, en la que se especifica claramente que Autoridades Certificadoras se aceptan como seguras. Realmente lo que contiene dicha base de datos son los certificados públicos de todos los CA válidos.

Así pues, si nuestro navegador web solo tuviese en su base de datos como CA a la FNMT (por poner un ejemplo), tan sólo los certificados emitidos por el certificado Raiz de la FNMT (o los secundarios que dependan de este si lo tienen permitido), serán validados y dados por bueno por el navegador del usuario, de lo contrario el navegador directamente nos pondrá en aviso, denegando por defecto la conexión. En el ejemplo anterior, el cliente quiere acceder al servidor www.example.com y lo que recibe es un certificado emitido por un tal “Corporate CA)” que dice ser el certificado de www.example.com. Si el cliente posee dicho CA en su base de datos como autoridad válida, no habrá problemas porque el cliente confía en que los certificados emitidos por dicho CA se pude confiar en ellos, y la comunicación se hará sin problemas. PERO!! Si la base de datos del cliente no tiene ninguna constancia del CA en cuestión, o el certificado que posee la base de datos del cliente del CA difiere al que el emite… la conexión muy probablemente no se realizará.

Eso significa que al final, además del cifrado hace falta la cuestión de confianza, que en última instancia viene dada por el CA que emite dicho certificado.

¿¿Que es Let’s Encrypt?? Un CA, ni más ni menos. Actualmente actúa como CA “intermedio”, no posee un certificado Raiz que sea “universalmente” aceptado, y depende de la generosidad en este caso de IdenTrust, que es el certificado Raiz, que a su vez emitió el Certificado CA de Let’s Encrypt que permite a estos emitir certificados. Por poner un ejemplo de si esta práctica es habitual o no, todos los certificados que usa Google usan esta misma política, Google no tiene certificado raiz propio, sino que su certificado CA intermedio está emitido/firmado a su vez por GeoTrust.

Pero hay cientos o miles de CA, ¿cual es su importancia?

 

El principal problema con los certificados digitales

Lo ideal es que el 100% de todas las comunicaciones fuesen cifradas punto a punto, en cambio el uso por servicios/webs es muy bajo en comparación al tráfico sin cifrar. ¿Por qué?

Bueno es simple. Cualquiera puede crear en cuestión de segundos un certificado digital para su empresa, para firmar código, para un servidor web… se tardan segundos, pero dicho certificado sólo será creíble de puertas para fuera si está emitido por un CA de confianza. Así que eso sólo deja dos opciones:

A) Convertirnos nosotros mismos en un CA de confianza y emitir los certificados que queramos.
B) Obtener el certificado que queremos usar de un CA de confianza

La opción A se antoja cuanto menos casi imposible. Llamamos un CA de confianza, básicamente a un CA que es universalmente reconocido por la gran mayoría de todos los desarrolladores, empresas y otros que hacen uso de certificados, evidentemente empezando por las empresas que están detrás de los navegadores Webs, de los Sistemas operativos… Es decir, que si cualquiera quisiera crear una empresa que se dedicase a actuar como CA, además de toda la infraestructura de emisión, revocación… tendría que ir solicitando prácticamente uno a uno la inclusión de su CA en el software/hardware del desarrollador/fabricante que fuese, y estos a su vez aplicarían y obligarían a cumplir con las normas más estrictas de privacidad y seguridad que estimen. Es un proceso muy largo (años perfectamente), y como digo no existe una base de datos oficial universal, sino que cada desarrollador/compañía mantiene aquellos CA que estima.

Como sencillo ejemplo, pongo por caso el problema que tenemos aquí en España con el DNI electrónico o los certificados CERES. Ni la FNMT que lleva muuuuchos años emitiendo certificados (y hablamos de una entidad totalmente seria, respetable y a nivel nacional) ha logrado ser incluido como un CA de confianza. Sólo hace unos días precisamente, han logrado por fin la inclusión en Mozilla, y después de al menos de 2 años de trabajo y ajustes de todo tipo en sus infraestructuras para tener la luz verde de Mozilla. Y eso tan solo se aplica a Mozilla (Firefox, Thunderbird…), porque si la FNMT quiere que Google o Microsoft incluyan su certificado, deben de solicitar su inclusión de forma similar a la que hicieron con Mozilla, y de nuevo someterse a todos los controles de estos. Como actualmente ese CA no está en nuestros navegadores, todos hemos sufrido aquí montones de veces lo que sucedía cuando accedíamos a páginas de las propias instituciones Españolas: Certificado no válido, error de comunicación… por qué?? Porque los certificados que usan son emitidos por CA que no están por así decirlo universalmente aceptos, así que es necesario instalar manualmente los certificados de dichos CA, especificando que dichos CA serán válidos para nosotros.

Actualmente, Let’s Encrypt tiene ya el visto bueno a su vez de la gran Mozilla, lo cual es un inmenso salto, y en conversaciones con Google/MS para sus respectivos navegadores/plataformas/software. Como he dicho actualmente actúa como CA intermedio, ahora busca independencia total, pero eso, aun teniendo ya luz verde por Mozilla, será un camino largo. Aun con todo, para tener en cuenta lo complicado que es esto, ni siquiera aquellos que incluyen tu CA como CA Raíz te dan un cheque en blanco, son necesarias auditorias externas cada X, especificar bien claro el uso que se le va a dar y que limitaciones, que tipo de certificados va a emitir… y aun con todo en cualquier momento, si de detecta cualquier fallo que los desarrolladores/compañías estimen, ni que decir tiene que la supresión del CA Raiz sería inmediata.

Pero es que la importancia es capital. Tener un certificado CA, ya sea Raiz reconocido (cosa muy muy compleja) o tener un CA intermedio firmado por un CA raíz, implica poder, en teoría claro está, emitir los certificados que se quisiesen para la tarea que se quisiese y para los dominios que se quisiese. Es decir… el sueño de cualquier Hacker, ya que con uno en su poder cualquier ataque de interceptación de tráfico por ejemplo, sería extremadamente efectivo y sencillo, y también simplificaría mucho los engaños y sitios fraudulentos. Así que es normal que las grandes no se tomen eso de admitir un CA Raíz así como así.

 

La opción B es la que a día de hoy hace uso el 99% de todos. En realidad tan solo las grandes instituciones, multinacionales o empresas que se dedican precisamente a la emisión de certificados, optan o pueden optar por la opción A, todos los demás lo que hacemos es obtener certificados emitidos por los CA de confianza, o en el caso de grandes empresas en todo caso lograr un CA intermedio (auditado y vigilado) por lo general para emitir sus propios certificados. En principio, cualquiera puede solicitar sin ningún tipo de problema un certificado a un CA para el uso que estime, ya sea un servidor Web, firmar código o lo que sea. Aquí nos vamos a centrar a servidores Web por ser además el uso mayoritario. La pregunta entonces se derivaría, una vez descartada la opción A, en cual es el motivo entonces, si virtualmente cualquiera puede solicitar un certificado a un CA de confianza: Dinero, el más viejo y conocido de todos, el señor billete, Cash, Money.

 

Tipos de Certificados (para Servidores Web)

A día de hoy existen básicamente 3 tipos de certificados para servidores Web, que se diferencia en función de la información que el cliente quiere por así decirlo validar ante el CA. Como al final todo es una cuestión de confianza, cuanta más información te valide el CA sobre tu persona/empresa, más fiabilidad dará dicha persona/empresa de cara a todo el mundo:

 

-Certificados de Validación de Dominio (DV):

Actualmente más del 60% de todos los certificados que podemos encontrar en la web corresponden a este tipo. El CA que lo emite sólo valida/garantiza que es emitido para el dominio en cuestión, sin aportar absolutamente ninguna otra información identificativa de dicho dominio. Es decir, por lo general basta ser tan solo el dueño o el administrador de un dominio para poder cumplir con los requerimientos que pueda exigir un CA en la emisión de un certificado de este tipo. Ojo!! Eso no significa que estos certificados sean malos, ni mucho menos, aunque se ha hecho muy mala prensa de ellos, pero por cuestiones principalmente de marketing indigno por parte precisamente de los propios CA para que los clientes adquieran certificados que veremos a continuación… que son mucho más caros.

Si visitamos una web, cualesquiera, accedemos por HTTPS y el certificado está validado por un CA de confianza, aun siendo de tipo DV podemos tener la certeza de que el certificado es de quien dice ser. Si un atacante intentase replicar dicho certificado e intentase usar el dominio original, tendría que poder controlar y tener acceso a la configuración del propio dominio para poder lograr un certificado emitido por un CA de confianza, de lo contrario aunque su certificado dijese que es para la web en cuestión, dicho certificado sería rechazado por los navegadores, aplicaciones… del cliente. Esto es importante, porque precisamente hace relativamente poco se culpaba a este tipo de certificados a que se había logrado realizar un ataque a gran escala, pero de nuevo el artículo era sesgado y creado por un CA de prestigio para desprestigiar a otros, si un atacante logra hacerse con el control total de un dominio, da igual al CA de confianza que acuda para la emisión de un certificado DV, porque se lo darán sin problema.

Los certificados DV, a efectos visuales, estamos hartos de verlos en los navegadores web: Candadito Verde, sin más.

certificado DVPor supuesto, siempre suponiendo que son emitidos por un CA válido, de lo contrario tendríamos advertencias de seguridad, candadito rojo o cualquier otro identificativo.

Certificado Info DV

-Certificados de Validación de Organización (OV):

Son el segundo grupo de certificados más usados en la actualidad, y en realidad muy similares a los DV. El CA en este caso emite los certificados no solo validando por los medios oportunos el dominio, sino que además solicita información adicional de la organización/empresa que hay detrás de dicha solicitud, lo que hace necesaria la aportación como es lógico de documentación legal y otros, necesario para que el CA pueda verificar la autenticidad de dicha empresa/organización.

No obstante a efectos visuales para el usuario son prácticamente iguales a los DV, y sería necesario mirar el Certificado directamente para ver la diferencia, que radica en que este tipo de certificados incluye en su variable O (Organization) precisamente la compañia a la que pertenece. En las dos pantallas que puesto anteriormente, no se podría saber si el certificado que he puesto es un DV o un OV, ambos tendrían el mismo aspecto.

Un ejemplo sencillo de certificado OV es el de Google: https://google.es. Pero sería necesario acceder al certificado en cuestión para ver que efectivamente está verificada la organización:

Certificado OV

Si nos fiajos en la pantalla de la derecha, Google Inc. está incluido dentro de la variable O del certificado, aunque sólo es visible si accedemos al visionado directo del certificado. En este caso particular vemos si miramos un poco mas abajo información del propio emisor (CA) del certificado, y básicamente se repite porque Google a su vez es un CA universalmente reconocido, con lo que evidentemente emite sus propios certificados. Cabe indicar que Google no es en sí un CA raiz, OJO!! A su vez depende del certificado Raiz de GeoTrust, aunque Google puede emitir sus propios certificados. Pero la parte que nos atañe aquí es el primer bloque.

 

-Certificados de Validación Extendida (EV):

Son como es natural los más caros, e igualmente los que en teoría ofrecen el mayor grado de confianza para los usuarios. En este caso el CA deberá de verificar mucha más información relevante sobre la propia compañía, siendo el proceso de verificación mucho más lento y profundo. La finalidad es clara, que el usuario final tenga la plena y total seguridad de que la web a la que está accediendo es 100% confiable. Aun con todo al final siempre es todo muy relativo, porque en cuanto a seguridad se refiere podría dar la misma seguridad un certificado tipo DV y OV. Si los certificados EV se crearon exclusivamente por cuestiones de marketing y como excusa de embolsar más dinero para los CA, lo dejo en manos de los lectores. En lo personal, aunque por supuesto estoy totalmente de acuerdo a que la fiabilidad que pueda otorgar un certificado EV es como es natural mayor a un certificado DV, eso no implica que un certificado DV no me de confianza alguna.

Está claro que un hacker, aun logrando acceso y control al dominio le sería virtualmente imposible o cuasi imposible lograr que emitiesen para el otro certificado EV para un subdominio de dicho dominio o cualquier cosa similar, o intentar crear una web con nombre similar e intentar que la organización y otra información pusiese en el certificado que es otra que se quiere suplantar. Eso es evidente, cuantos más controles sometan los CA a los clientes para emitir el certificado, este será más  confiable, pero lo siento… no soy de esos que aconseja por ello que cualquier tienda tenga que tener por obligación un certificado EV, como si hacen la mayoría de todos los CA (teniendo en cuenta que el precio es mucho mucho mayor)

En este caso, los certificados EV no obstante si son tratados de un modo más… especial por los navegadores Webs. Son muchas menos web en los que los hemos visto, pero no son extraños a día de hoy encontrar algunas webs sobre todo que los usan (curiosamente, muchas de ellas son empresas que actúan también como CA). Uno de los ejemplos más “estrella” de ello, es la archiconocida PayPal, que desde luego pocos sitios han sufrido más intentos de phising y SCAN. Podemos saber perfectamente si es un certificado EV porque la propia barra del navegador web cambia para mostrar una barra adicional verde que incluye directamente la información de la propia compañía:

Certificado EV

Esa “barra verde” que hace acopio en este caso Firefox automáticamente nos dice que estamos ante un certificado EV, y ni siquiera hace falta acceder a la información del propio certificado para ver que directamente nos da la información en el propio Firefox sin ir mas profundamente, mostrando la compañía e incluso la dirección de esta.

Muchos se preguntarán que por qué Google u otros grandes como Facebook no usan este tipo de certificados. Bien, oficialmente no existe una respuesta ante esto por sus partes, pero desde mi punto de vista es obvio, y viene a colación de lo dicho anteriormente. Los certificados EV, pese a mostrar más información directamente en los navegadores y que los CA necesiten más datos para emitirlos, no aportan por sí mismos nada más, no dan más seguridad ni más nada, sino que son un reclamo al público para decir: “Ei, mira, uso un certificado EV, tienes que fiarte de mi”. O por ejemplo: “Ei, ves?? Soy el mas guay y el mejor porque uso el certificado EV”. Google tiene nombre propio y en mayúsculas, su propia marca es él mismo y no hay persona que tenga un PC que no conozca quienes son. Evidentemente para ellos no es cuestión de dinero.

Como dije antes y lo reitero, que cada cual saque sus propias conclusiones sobre la necesidad, o no, de que los sitios como tiendas de comercio electrónico y otros requieran un EV, o les sea más que suficiente con un OV. No tiene nada que ver con la seguridad/cifrado, es sobre todo una cuestión de marketing, tanto para los CA que los venden, como para aquellos que quieren parecer mejores por tenerlos. No estoy en contra de los certificados EV, son importantes en muchos casos, pero la gran mayoría están movidos o por el propio marketing que quieren hacer ellos mismos para con el público, o por desconocimiento de quien los adquieren. Como siempre… es mi opinión.

 

 Let’s Encrypt

Bueno, y ¿qué tiene que ver todo esto con Let’s Encrypt?. Básicamente, que Le’ts Encrypt ha sido la primera iniciativa real y usable de que prácticamente cualquiera que tenga un dominio/hosting mínimamente decente, poder adquirir un certificado válido emitido por un CA de confianza (en este caso Let’s Encrypt, aunque de momento actúa por encima de ellos el certificado Raiz de IdentTrust), sin siquiera invertir un solo euro, y de manera además totalmente transparente, es decir… toda infraestructura que usan es de código abierto y puede verificarse, cumpliendo con todos los requisitos de seguridad que puedan cumplir igualmente cualquier otro CA. Eso sí, OJO, Let’s Encrypt SOLO EMITE CERTIFICADOS DV.

Para poner todo esto un poco desde cierta perspectiva. Tomemos los precios por ejemplo de un CA conocido como pueda ser Godaddy (iba a coger Symantec pero los preciso son mucho mayores.). Evidentemente estos datos no son extrapolables a otros CA, cada uno tiene sus propios precios, tomo los de Godaddy por ser relativamente conocidos y porque sus tablas de precios son muy claras. Sus precios anuales (redondeados) para un solo dominio sin incluir subdominios son los siguientes:

-Certificado DV: 85€
-Certificado OV: 110€
-Certificado EV: 227€

A nadie se le escapa que si quisiésemos por ejemplo un certificado que cubriese también todos los subdominios la gracia se nos iría a 330€ en el caso de los DV (siempre tomando de ejemplo los precios de Godaddy. Sí, prácticamente todos los CA que “venden” certificados garantizan con un seguro el certificado, pero no dejan de ser precios importantes a desembolsar de manera anual. No estoy en contra para nada de este tipo de certificados, no estoy endemoniando a Godaddy, Symantec, Comodo… para nada, ojo, son empresas en su mayoría muy profesionales y con grandes servicios, solo quiero poner en perspectiva todo el asunto que nos trae.

¿Que sucede? Pues que evidentemente una empresa no tiene problema en gastarse en sus presupuestos uno dos o los certificados que necesite, sean DV o incluso si se quieren dar la fardada y la presuntuosidad EV. ¿Pero que pasa con las Pymes?? ¿Que pasa con bloggers, autónomos y básicamente el gran grueso de la población? Que costearse incluso un certificado DV puede ser costoso para el poco uso que creen poder darle, y eso acompañado al desconocimiento es lo que hace que a día de hoy má del 60% de todas las web no soporten HTTPS. Y el problema por supuesto se multiplica si lo que se requieren son certificados wildcard/multiples subdominios o múltiples dominios.

Let’s Encrypt por otro lado, como digo, ha hecho posible que prácticamente cualquiera tenga acceso a certificados DV, sin importar el número de subdominios que se requieran o el número de certificados a necesitar por poseer múltiples dominios. Se ha criticado que el proceso sea relativamente automático, pero no nos engañemos… todos los CA usan procedimientos igualmente automatizados para ello (certificados DV), pero de nuevo es normal, a fin de cuenta una organización sin ánimo de lucro alguno está ofreciéndote los certificados DV que quieras a tus dominios y subdominios.

Por supuesto, no es oro todo lo que reluce, y Let’s Encrypt (a partir de ahora LE) puede no ser la mejor opción para todos. Vamos a ver que puntos son o deberían de ser de gran interés para el usuario:

-LE sólo emite certificados DV
-LE sólo emite certificados de 3 meses de vigencia (es lo habitual por otro lado, pero eso obliga a automatizar el proceso de renovación/instalación)
-LE requiere que tengamos como es normal acceso y control sobre el dominio, y si queremos que sea sencillo acceso root en el hosting en cuestión, de lo contrario el proceso puede ser más complicado.
-Muchas compañías de Hosting NO PERMITEN este tipo de certificados por cuestiones obvias, ellos mismos los venden. Aunque cualquier servicio de hosting en el que tengamos acceso al propio servidor como Root no debería de ser problema. Por suerte, y dada la gran aceptación que ha tenido muchas empresas de hosting de siempre están viéndose obligadas a permitir de forma “sencilla” su uso y su automatización completa.
-LE requiere que se tenga por lo general un conocimiento mínimo de que estamos haciendo, de que es un certificado digital y de como usarlo.

 

No obstante tampoco es tan malo como lo pitan algunos:

-LE permite emitir usar tanto certificados RSA como ECC (certificados mas pequeños, y más seguros)
-LE instalado correctamente permite automatizar todo el proceso de forma sencilla, con lo que la renovación no es un problema
-LE Es totalmente gratuito
-LE actualmente usa actualmente un certificado Raiz que generosamente les emitió un certificado intermedio para poder hacer funcionar la cosa, actualmente YA TIENEN el certificado propio CA Raiz aceptado por Mozilla (un gran paso), con lo que a medio-largo plazo serán incluso un CA de confianza de todo derecho.
-La gran aceptación ha “obligado” a grandes como Godaddy, OVH, WordPress… permitir su uso o directamente o indirectamente. Otros por desgracia como 1and1 y algunos otros, de momento al menos, no tienen intención. Siempre como digo en alojamientos web “estándares”, ya que cualquier servicio de hospedaje “completo” tipo servidores virtuales o dedicados, deberían de poder usarlos sin problema alguno.

 

Instalación/Uso

Esto me temo que depende enormemente de donde y como se quiera realizar. En su versión más simplista, suponiendo un control completo del propio servidor. Lo más simples es el propio “cliente” que aconseja Le, llamado Certbot, que tienen instrucciones sencillas para su instalación prácticamente en cualquier distribución linux y servidor Web que se use. Teniendo en cuenta la gran variedad, es obvio que no voy a explicar como donde y cuando.

No obstante, y con la idea en mente que pueda ser usado en la mayor cantidad de sitios posibles, se han creado diferentes clientes muy dispares que aprovechan las diferentes opciones de verificación de dominios que obliga, como es natural, LE para la expedición de los certificados. Así por ejemplo, CertBot requiere que se posean permisos de administrador, mientras que las herramienta acme.sh (hay otras) que podemos encontrar AQUI permite su instalación y uso sin necesidad de Root, aunque pueda ser necesario como es natural instalar uno mismo los certificados donde correspondan

Así tenemos muchos hospedajes Web “baratos” en el mercado que no permite root en sus servidores pero si especificar los certificados TLS. Gracias a herramientas como Acme.sh se pueden ejecutar por SSH en los servidores, lograr que LE nos expida los certificados y posteriormente instalarlos en los paneles de control que nos permita el proveedor. Quizás no es en este caso 100% automatizado, pero si hace que sea viable su uso, que a fin de cuenta es lo que importa. A medida que más proveedores se usan, más sencillo será tanto para administradores como para los propios chicos de LE automatizar las expediciones e instalaciones, y no dudarlo, mejorar con creces la seguridad global dentro de Internet.

 

Conclusión

Al final la idea es la misma: Que aquellos administradores o pequeñas/grandes empresas donde no se han usado certificados para asegurar el tráfico por HTTP por motivos económicos o por infraestructuras, les sea rentable y lo más sencillo posible. Esto no quiere decir que los certificados de cualquier otro CA tengan menos valor, repito. LE no es para todos, y lo comprendo. Pero eso no quita que alabe la gran idea y el gran trabajo que están realizando, y que sirva igualmente de tirón de orejas al resto de CA que hasta ahora han podido imponer un poco los precios que han querido, a fin de cuenta quien se iba a meter en emitir certificados desde un CA reconocible de forma gratuita.

Recomiendo a cualquiera que tenga dominio/hospedaje propio al menos informarse un poco al respecto, merece la pena, y que se plantee realmente si es viable o no su uso en cada caso. En lo personal lo tengo claro… quitando casos concretos, todos los dominios y otros que pueda gestionar irán poco a poco usando certificados de LE, siempre que crea que es necesario claro, gran prueba es que este mismo blog no solo no va sobre HTTP plano sino que no tiene opción (actualmente). Forzar HTTPS en cualquier sitio que pueda enviar información confidencial de ida o vuelta es mandatorio, al menos desde mi punto de vista, y más aun cuando hay datos sensibles. Un DV suele ser más que suficiente para la gran mayoría de casos, así que no hay motivo para no tomar LE muy muy enserio como opción.

Y sí, aunque theliel.es aun no está “asegurado”, ya empecé hace unas semanas con la implementación de LE en todos los dominios que están bajo mi control, que no son pocos, aunque eso no quiera decir que fuerce las conexiones HTTPS por defecto en todo momento. A fin de cuenta los procesos es mejor hacerlos poco a poco…

Desde aquí, aunque posiblemente no me lean, sólo dar la enhorabuena al trabajo que están realizando, creo sinceramente que es de esas iniciativas que sí cambian las cosas.

Volver a arriba

Sobre Mí

Alma Oscura por Theliel is licensed under a Creative Commons Reconocimiento-No comercial-Sin obras derivadas 3.0 Unported License.
Política de Privacidad.
Para otros permisos que puedan exceder el ámbito de esta licencia, contactar en blog.theliel.es/about/contactar.