Ataques de DRDoS explorando consultas NTP mode 6 e 7

Ataque

Consultas NTP mode 6 com o comando READVAR e mode 7, com o comando MONLIST permitem que sejam consultadas variáveis internas do NTP, que retornam informações como versão do NTP, sistema operacional do servidor, peers, entre outras. Estas consultas podem ser exploradas por ataques de DDoS, onde o atacante gera uma grande quantidade de tráfego através de consultas NTP mode 6 ou mode 7 para diversos servidores com pacotes UDP mascarados, tendo como endereço IP de origem o IP do alvo do ataque.

Solução

Esta vulnerabilidade pode ser detectada através do seguinte comando (em um terminal Linux):

#ntpq -c rv IP_SERVIDOR_NTP

Se a saída do comando for a saída mostrada abaixo, o servidor está vulnerável.

associd=0 status=0600 leap_none, sync_ntp, no events, unspecified, 
system="cisco", leap=00, stratum=2, rootdelay=1.010, 
rootdispersion=1883.820, peer=29206, refid=192.168.2.26, 
reftime=d7274bfa.27191a36 Wed, May 21 2014 12:59:54.152, poll=6, 
clock=d7274bfa.c07c7606 Wed, May 21 2014 12:59:54.751, phase=7.236, 
freq=-15.20, error=1875.03 

Para corrigir esta vulnerabilidade, deve-se restringir as consultas apenas à rede interna e aos clientes. Um exemplo de configuração de um servidor NTP Linux (arquivo /etc/ntp.conf) onde são aplicadas as restrições necessárias pode ser visto abaixo:

driftfile /var/lib/ntp/ntp.drift 
#statsdir /var/log/ntpstats/ 
statistics loopstats peerstats clockstats 
filegen loopstats file loopstats type day enable 
filegen peerstats file peerstats type day enable 
filegen clockstats file clockstats type day enable 
#Servidores necessarios para realizar o sincronismo 
server ntp.pop-sc.rnp.br iburst 
restrict ntp.pop-sc.rnp.br [nomodify notrap nopeer noquery] 
server ntp.cais.rnp.br iburst 
restrict ntp.cais.rnp.br [nomodify notrap nopeer noquery] 
server mp2.pop-sc.rnp.br iburst 
restrict mp2.pop-sc.rnp.br [nomodify notrap nopeer noquery] 
#Ignorar todos os pedidos por padrao 
restrict -4 default ignore 
restrict -6 default ignore 
#Servir timeStamp somente para as redes necessarias 
restrict 10.0.200.0 mask 255.255.255.0 kod notrap nomodify nopeer noquery 
restrict 200.237.192.0 mask 255.255.255.0 kod notrap nomodify nopeer noquery 
restrict 2801:84:a80:: mask ffff:ffff:ffff:: 
#Permitir monitoramento total para a interface interna 
restrict 127.0.0.1 
restrict ::1 
disable monitor

Para restringir consultas NTP em equipamentos Cisco, devem ser aplicada a configuração conforme o exemplo abaixo.

Ntp access-group peer 34 
ntp access-group serve 33
ntp access-group serve-only 35
ntp access-group query-only 33
ntp server IP_SERVIDOR_NTP prefer 

access-list 33 remark ;ACL para bloquear qualque requisicao NTP 
access-list 33 deny any 
access-list 34 remark ;Servidores NTP que podem ser sincronizados 
access-list 34 permit IP_SERVIDOR_NTP 
access-list 34 deny any 
access-list 35 remark ;Redes que podem sincronizar neste equipamento 
access-list 35 permit 200.237.192.0 0.0.0.255 ;Substituir por redes clientes e                  ;máscaras conforme o modelo
access-list 35 deny any 

No caso das consultas mode 7 (MONLIST), atualizar a versão do NTP corrige esta vulnerabilidade, uma vez que, após a versão 4.2.7, o MONLIST é desabilitado por padrão. Caso não seja possível atualizar o NTP, adicionar a linha disable monitor ao arquivo ntp,conf, como no exemplo anterior.