# DNS Cache Poisoning

## Relembrando o DNS

Quando a gente acessa, por exemplo, o [*https://ganesh.icmc.usp.br/*](https://ganesh.icmc.usp.br/), o nosso navegador precisa saber, na verdade, o endereço IP do site que estamos tentando acessar. Para isso, ele manda uma requisição para o DNS Server - que faz um *match* da URL com o IP. Com isso em mãos, o resultado fica guardado temporariamente na DNS Cache do navegador, ou até do sistema operacional, para que o IP daquele domínio fique salvo e possa ser reutilizado.

![Resolução do domínio pelo DNS Server.](https://i.imgur.com/9cjvG6Q.png)

## Fazendo uma resolução DNS manual

O `dig` é um comando do Linux utilizado para coletar informações de DNS: ele faz pesquisas de domínio e retorna os IPs dos nomes consultados.

```bash
spider@ganesh:~$ dig google.com.br

; <<>> DiG 9.11.5-P4-5.1+deb10u3-Debian <<>> google.com.br
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9066
;; flags: qr rd ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;google.com.br.                 IN      A

;; ANSWER SECTION:
google.com.br.          0       IN      A       216.58.202.195

;; Query time: 18 msec
;; SERVER: 172.17.27.241#53(172.17.27.241)
;; WHEN: Thu Mar 25 15:58:54 -03 2021
;; MSG SIZE  rcvd: 60
```

Observe que no campo `QUESTION` está o domínio do qual queremos saber o IP e no campo `ANSWER` temos o próprio IP do domínio que estamos consultando.

## Como  funciona o DNS Cache Poisoning

**Uma breve intuição de como funciona**

PARABÉNS!! Você acabou de passar na faculdade :). No seu primeiro dia, você pisa no ICMC e precisa ir para a sala 5-001 ter aula de Cálculo. Mas onde ela fica???

Para se achar lá dentro, você abre o Guia dos Bixos e vai rever como funciona a numeração das salas. Chegando lá, você vê tudo vazio e volta pra casa sem entender nada. A questão é: quem te falou que a aula seria nessa sala foi um veterano chatão que só quer ver fogo no parquinho e falou qualquer número.

O DNS Cache Poisoning funciona mais ou menos dessa forma. O atacante (veterano chatão) "envenena" o DNS Cache (nesse caso, a informação que você recebe), podendo redirecionar a vítima para qualquer site que ele quiser, normalmente malicioso.

**Como envenenam o DNS Cache**

Quando um usuário acessa um site, o navegador precisa realizar toda resolução do endereço IP. Ele faz o *request*, com um Transaction ID específico (um inteiro de 16 bits aleatório) utilizado para validar a resposta daquele *request* (só é aceita uma resposta com o mesmo ID). Essa requisição chega até o DNS Server que responde com o respectivo endereço IP utilizando o mesmo Transaction ID.

O atacante, então, precisa estabelecer um Man-In-The-Middle (MITM) para que ele possa interceptar os requests de resolução de domínio, verificar o Transaction ID, forjar uma *response* maliciosa (válida) e enviar para a vítima.

A vítima salva essa resposta em sua DNS Cache, até que ela expire depois de um tempo definido pelo *time-to-live.* Então, o domínio precisa ser resolvido novamente.

## Referências

1. [DNS as Fast As Possible](https://www.youtube.com/watch?v=Rck3BALhI5c)
2. [O que é envenenamento do cache de DNS?](https://www.cloudflare.com/pt-br/learning/dns/dns-cache-poisoning/)
3. [DNS Cache Poisoning - Computerphile](https://www.youtube.com/watch?v=7MT1F0O3_Yw)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gitbook.ganeshicmc.com/redes/ataques/dns-cache-poisoning.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
