21 KiB
title | icon |
---|---|
DNS Overview | material/dns |
O Domain Name System (DNS) é a 'lista telefónica da Internet'. DNS traduz nomes de domínio para IP endereços para que os navegadores e outros serviços possam carregar recursos da Internet, através de uma rede descentralizada de servidores.
O que é DNS?
Quando você visita um site, um endereço numérico é devolvido. Por exemplo, quando você visita privacyguides.org
, o endereço 192.98.54.105
é retornado.
O DNS existe desde o dos primeiros dias da Internet. Os pedidos DNS feitos para e dos servidores DNS são não geralmente encriptados. Em uma configuração residencial, um cliente recebe servidores pelo ISP via Dynamic Host Configuration Protocol (DHCP).
Os pedidos DNS não encriptados são capazes de ser facilmente surveilled e modificados em trânsito. Em algumas partes do mundo, os ISPs são solicitados a fazer filtragem DNS. Quando um usuário solicita o IP de um domínio que está bloqueado, o servidor pode não responder ou pode responder com um endereço IP diferente. Como o protocolo DNS não é criptografado, o ISP (ou qualquer operador de rede) pode usar deep packet inspection (DPI) para monitorar as solicitações. Os ISPs também podem bloquear pedidos com base em características comuns, independentemente do servidor DNS utilizado. DNS não encriptado usa sempre port 53 e usa sempre o User Datagram Protocol (UDP).
Abaixo, discutimos e fornecemos um tutorial para provar o que um observador externo pode ver usando DNS regular não criptografado e DNS criptografado.
DNS não criptografado
-
Usando
tshark
(parte do Wireshark project) podemos monitorar e gravar o fluxo de pacotes da Internet. Este comando registra os pacotes que atendem às regras especificadas:tshark -w /tmp/dns.pcap udp porto 53 e host 1.1.1.1 ou host 8.8.8.8
-
Podemos então usar
dig
(Linux, MacOS etc) ounslookup
(Windows) para enviar a pesquisa DNS para ambos os servidores. Software como navegadores web fazem estas pesquisas automaticamente, a menos que estejam configurados para usar DNS encriptado.=== "Linux, macOS"
``` dig noall answer privacyguides.org @1.1.1.1.1 dig noall answer privacyguides.org @8.8.8.8 ```
==== "Windows"
``` nslookup privacyguides.org 1.1.1.1 nslookup privacyguides.org 8.8.8.8 ```
-
A seguir, queremos analisar os resultados:
==== "Wireshark"
``` wireshark -r /tmp/dns.pcap ```
=== "tshark"
``` tshark -r /tmp/dns.pcap ```
Se você executar o comando Wireguard acima, o painel superior mostra o "frames", e o painel inferior mostra todos os dados sobre o frame selecionado. Soluções de filtragem e monitoramento empresarial (como as adquiridas pelos governos) podem fazer o processo automaticamente, sem interação humana, e podem agregar esses quadros para produzir dados estatísticos úteis para o observador da rede.
Não. | Hora | Fonte | Destino | Protocolo | Comprimento | Informações |
---|---|---|---|---|---|---|
1 | 0.000000 | 192.0.2.1 | 1.1.1.1 | DNS | 104 | Consulta padrão 0x58ba A privacyguides.org OPT |
2 | 0.293395 | 1.1.1.1 | 192.0.2.1 | DNS | 108 | Resposta de consulta padrão 0x58ba A privacyguides.org A 198.98.54.105 OPT |
3 | 1.682109 | 192.0.2.1 | 8.8.8.8 | DNS | 104 | Consulta padrão 0xf1a9 A privacyguides.org OPT |
4 | 2.154698 | 8.8.8.8 | 192.0.2.1 | DNS | 108 | Resposta de consulta padrão 0xf1a9 A privacyguides.org A 198.98.54.105 OPT |
Um observador pode modificar qualquer um destes pacotes.
O que é "DNS criptografado"?
DNS criptografado pode se referir a um de vários protocolos, sendo os mais comuns:
DNSCrypt
DNSCrypt foi um dos primeiros métodos de encriptação de consultas DNS. O protocolo opera em porta 443 e funciona tanto com o TCP ou UDP protocolos de transporte. DNSCrypt nunca foi submetido ao processo Internet Engineering Task Force (IETF) nem foi submetido ao processo Request for Comments (RFC) , portanto não tem sido usado amplamente fora de alguns implementações. Como resultado, foi amplamente substituído pelo mais popular DNS sobre HTTPS (DoH).
DNS sobre TLS (DoT)
DNS sobre TLS (DoT) é outro método para encriptar a comunicação DNS que é definida em RFC 7858. O suporte foi implementado inicialmente em Android 9, iOS 14, e no Linux em systemd-resolved na versão 237. A preferência na indústria tem se afastado do DoT para DNS sobre HTTPS nos últimos anos, pois o DoT é um protocolo complexo e tem conformidade variável com a RFC nas implementações que existem. DoT também opera em uma porta dedicada 853 e que pode ser facilmente bloqueada por firewalls restritivos.
DNS sobre HTTPS (DoH)
DNS sobre HTTPS como definido em RFC 8484 consultas de pacotes no protocolo HTTP/2 e fornece segurança com HTTPS. O suporte foi adicionado pela primeira vez em navegadores web como Firefox 60 e Chrome 83.
Native implementation of DoH showed up in iOS 14, macOS 11, Microsoft Windows, and Android 13 (however, it won't be enabled by default). General Linux desktop support is waiting on the systemd implementation so installing third-party software is still required.
O que é que uma festa exterior pode ver?
Neste exemplo vamos registar o que acontece quando fazemos um pedido DoH:
-
Primeiro, iniciar
tshark
:tshark -w /tmp/dns_doh.pcap -f "tcp port https e host 1.1.1.1"
-
Segundo, faça um pedido com
curl
:curl -vI --doh-url https://1.1.1.1/dns-query https://privacyguides.org
-
Após fazer o pedido, podemos parar a captura de pacotes com CTRL C.
-
Analisar os resultados em Wireshark:
wireshark -r /tmp/dns_doh.pcap
Podemos ver o estabelecimento de conexão e e aperto de mão TLS que ocorre com qualquer conexão criptografada. Ao olhar para os pacotes de "dados de aplicação" que se seguem, nenhum deles contém o domínio que solicitamos ou o endereço IP devolvido.
Porque não deveria Eu uso DNS encriptado?
In locations where there is internet filtering (or censorship), visiting forbidden resources may have its own consequences which you should consider in your threat model. Fazemos não sugerimos o uso de DNS criptografado para este fim. Use Tor or a VPN instead. Se você estiver usando uma VPN, você deve usar os servidores DNS da sua VPN. Ao utilizar uma VPN, já está a confiar-lhes toda a sua actividade na rede.
Quando fazemos uma pesquisa DNS, geralmente é porque queremos aceder a um recurso. Abaixo, discutiremos alguns dos métodos que podem revelar as suas actividades de navegação mesmo quando utiliza DNS encriptado:
Endereço IP
A maneira mais simples de determinar a atividade de navegação pode ser olhar para os endereços IP que seus dispositivos estão acessando. Por exemplo, se o observador sabe que privacyguides.org
está em 198.98.54.105
, e o seu dispositivo está solicitando dados de 198.98.54.105
, há uma boa chance de você estar visitando os Guias de Privacidade.
Este método só é útil quando o endereço IP pertence a um servidor que só hospeda poucos sites. It's also not very useful if the site is hosted on a shared platform (e.g. Github Pages, Cloudflare Pages, Netlify, WordPress, Blogger, etc). Também não é muito útil se o servidor estiver hospedado atrás de um reverse proxy, o que é muito comum na Internet moderna.
Indicação do nome do servidor (SNI)
A indicação do nome do servidor é normalmente usada quando um endereço IP hospeda muitos sites. Este pode ser um serviço como o Cloudflare, ou algum outro ataque de negação de serviço protecção.
-
Comece a capturar novamente com
tshark
. Adicionamos um filtro com nosso endereço IP para que você não capture muitos pacotes:tshark -w /tmp/pg.pcap porto 443 e host 198.98.54.105
-
Depois visitamos https://privacyguides.org.
-
Depois de visitar o site, nós o que parar a captura de pacotes com CTRL C.
-
A seguir queremos analisar os resultados:
wireshark -r /tmp/pg.pcap
Veremos o estabelecimento de conexão, seguido pelo aperto de mão TLS para o site Guias de Privacidade. Em redor da moldura 5. verás um "Olá Cliente".
-
Expandir o triângulo ▸ ao lado de cada campo:
▸ Transport Layer Security ▸ TLSv1.3 Record Layer: Protocolo de Aperto de Mãos: Cliente Olá ▸ Protocolo de Aperto de Mãos: Cliente Olá ▸ Extensão: Server_name (len=22) ▸ Server Name Indication extension
-
Podemos ver o Server Name Indication (SNI) valor que revela o site que estamos visitando. O comando
tshark
pode dar-lhe o valor directamente para todos os pacotes que contenham um valor SNI:tshark -r /tmp/pg.pcap -Tfields -Y tls.handshake.extensions_server_name -e tls.handshake.extensions_server_name
Isto significa que mesmo que estejamos usando servidores DNS "Encriptados", o domínio provavelmente será divulgado através do SNI. O protocolo TLS v1.3 traz consigo Cliente Encriptado Olá, o que evita este tipo de fuga.
Governos, em particular China e Rússia, ou já começaram a bloquear ou manifestaram o desejo de o fazer. Recently, Russia has started blocking foreign websites that use the HTTP/3 standard. Isto porque o QUIC protocolo que faz parte do HTTP/3 requer que ClientHello
também seja criptografado.
Protocolo de Status de Certificado Online (OCSP)
Outra forma do seu navegador poder divulgar suas atividades de navegação é com o Online Certificate Status Protocol. When visiting an HTTPS website, the browser might check to see if the website's certificate has been revoked. Isto geralmente é feito através do protocolo HTTP , significando que é não encriptado.
O pedido OCSP contém o certificado "número de série", que é único. Ele é enviado ao "OCSP respondedor" para verificar o seu estado.
Podemos simular o que um navegador faria usando o comando openssl
.
-
Obtenha o certificado do servidor e use
sed
para manter apenas a parte importante e escrevê-la em um arquivo:openssl s_client -connect privacyguides.org:443 < /dev/null 2>&1 | sed -n '/^-*BEGIN/,/^-*END/p' > /tmp/pg_server.cert
-
Obter o certificado intermediário. Autoridades Certificadoras (AC) normalmente não assinam um certificado diretamente; eles usam o que é conhecido como certificado "intermediário".
openssl s_client -showcerts -connect privacyguides.org:443 < /dev/null 2>&1 | sed -n '/^-*BEGIN/,/^-*END/p' > /tmp/pg_and_intermediate.cert
-
O primeiro certificado em
pg_and_intermediate.cert
é na verdade o certificado do servidor do passo 1. Podemos usarsed
novamente para apagar até a primeira instância de TERMINAR:sed -n '/^-*END CERTIFICATE-*$/!d;:a n;p;ba' \ /tmp/pg_and_intermediate.cert > /tmp/intermediate_chain.cert
-
Obtenha o OCSP respondedor para o certificado do servidor:
openssl x509 -noout -ocsp_uri -in /tmp/pg_server.cert
O nosso certificado mostra o Lets Encrypt Responder ao certificado. Se quisermos ver todos os detalhes do certificado, podemos usar:
openssl x509 -text -noout -in /tmp/pg_server.cert
-
Comece a captura do pacote:
tshark -w /tmp/pg_ocsp.pcap -f "tcp port http
-
Faça o pedido OCSP:
openssl ocsp -issuer /tmp/intermediate_chain.cert \ -cert /tmp/pg_server.cert \ -text \ -url http://r3.o.lencr.org
-
Abra a captura:
wireshark -r /tmp/pg_ocsp.pcap
There will be two packets with the "OCSP" protocol: a "Request" and a "Response". Para o "Request" podemos ver o "serial number", expandindo o triângulo ▸ ao lado de cada campo:
▸ Online Certificate Status Protocol ▸ tbsRequest ▸ requestList: 1 item ▸ request ▸ reqCert serialNumber
Para a "Resposta" também podemos ver o "número de série":
▸ Online Certificate Status Protocol ▸ responseBytes ▸ BasicOCSPResponse ▸ tbsResponseData ▸ responses: 1 item ▸ Respostas Simples ▸ certID serialNumber
-
Ou use
tshark
para filtrar os pacotes para o Número de Série:tshark -r /tmp/pg_ocsp.pcap -Tfields -Y ocsp.serialNumber -e ocsp.serialNumber
Se o observador da rede tiver o certificado público, que está disponível publicamente, ele pode fazer corresponder o número de série com esse certificado e, portanto, determinar o site que você está visitando a partir daí. O processo pode ser automatizado e pode associar endereços IP com números de série. Também é possível verificar Certificate Transparency logs para o número de série.
Devo utilizar DNS encriptado?
Nós fizemos este fluxograma para descrever quando você deve usar DNS criptografado:
graph TB
Start[Start] --> anonymous{Trying to be<br> anonymous?}
anonymous--> | Yes | tor(Use Tor)
anonymous --> | No | censorship{Avoiding<br> censorship?}
censorship --> | Yes | vpnOrTor(Use<br> VPN ou Tor)
censorship --> | No | privacy{Want privacy<br> from ISP?}
privacidade --> | Yes | vpnOrTor
privacidade --> | No | obnoxious{ISP makes<br> obnoxious<br> redirecciona?}
obnóxio --> | Yes | encryptedDNS(Use<br> encrypted DNS<br> with 3rd party)
obnóxio --> | No | ispDNS{Does ISP support<br> encrypted DNS?}
ispDNS --> | Yes | useISP(Use<br> DNS encriptado<br> com ISP)
ispDNS --> | No | nothing(Do nothing)
Encrypted DNS with a third-party should only be used to get around redirects and basic DNS blocking when you can be sure there won't be any consequences or you're interested in a provider that does some rudimentary filtering.
Lista de servidores DNS recomendados{.md-button}
What is DNSSEC?
Domain Name System Security Extensions (DNSSEC) is a feature of DNS that authenticates responses to domain name lookups. It does not provide privacy protections for those lookups, but rather prevents attackers from manipulating or poisoning the responses to DNS requests.
In other words, DNSSEC digitally signs data to help ensure its validity. In order to ensure a secure lookup, the signing occurs at every level in the DNS lookup process. As a result, all answers from DNS can be trusted.
The DNSSEC signing process is similar to someone signing a legal document with a pen; that person signs with a unique signature that no one else can create, and a court expert can look at that signature and verify that the document was signed by that person. These digital signatures ensure that data has not been tampered with.
DNSSEC implements a hierarchical digital signing policy across all layers of DNS. For example, in the case of a privacyguides.org
lookup, a root DNS server would sign a key for the .org
nameserver, and the .org
nameserver would then sign a key for privacyguides.org
’s authoritative nameserver.
Adapted from DNS Security Extensions (DNSSEC) overview by Google and DNSSEC: An Introduction by Cloudflare, both licensed under CC BY 4.0.
O que é a minimização do QNAME?
Um QNAME é um "nome qualificado", por exemplo privacyguides.org
. A minimização do QNAME reduz a quantidade de informação enviada do servidor DNS para o servidor de nomes autorizado.
Em vez de enviar o domínio inteiro privacyguides.org
, a minimização do QNAME significa que o servidor DNS irá pedir todos os registos que terminem em .org
. Descrição técnica adicional é definida em RFC 7816.
O que é a Sub-Rede do Cliente EDNS (ECS)?
O subrede do cliente EDNS é um método para um resolvedor DNS recursivo para especificar um sub-rede para o host ou cliente que está fazendo a consulta DNS.
O objectivo é "acelerar" a entrega de dados, dando ao cliente uma resposta que pertence a um servidor que lhes está próximo, tal como um content delivery network (CDN), que são frequentemente utilizados em streaming de vídeo e em aplicações web JavaScript.
Este recurso tem um custo de privacidade, pois informa ao servidor DNS algumas informações sobre a localização do cliente.
--8<-- "includes/abbreviations.pt.txt"