Bloqueie QUALQUER pedido na Ligação

3

Estou tendo problemas para descobrir como bloquear QUALQUER solicitação de DNS no BIND para diminuir as alterações de um ataque de amplificação de DNS. Eu vi guias on-line, mas a maioria deles parece realizar limite de taxa via iptables ou vincular.

Alguma dica ou conselho?

    
por hspaans 22.12.2015 / 00:25

3 respostas

2

Não há opção de configuração para descartar todas as consultas do tipo ANY . minimal-responses pode ser usado para eliminar a seção adicional de suas respostas, exceto quando exigido pelo RFC, tornando-o uma opção segura sem desvantagens reais. (além da solução de problemas do administrador)

Honestamente, é um pouco tarde no jogo considerar esta abordagem. Claro, . ANY ainda pode aparecer nas suas principais consultas de vez em quando, mas pseudo aleatório Os ataques de subdomínio são o sabor atual do dia e enfatizam pacotes por segundo sobre bytes por segundo. Depois disso, haverá outra coisa e assim por diante.

O foco na limitação de taxas é principalmente devido a ser uma das estratégias mais eficazes para limitar os danos que sua infraestrutura pode causar no geral. É aqui que o seu foco deveria estar. Se você estiver executando uma infra-estrutura recursiva, certifique-se de que o BCP-38 seja implementado em algum lugar entre o cliente e seu caminho de saída. Não execute um resolvedor aberto. Então e assim por diante. Apenas uma vez que você tenha limitado sua superfície de ataque geral, faz sentido focar em estratégias específicas de ataque, porque, como você está descobrindo, os que perdem valor rapidamente perdem.

    
por 22.12.2015 / 00:55
1

Se você tiver BIND 9.9 ou posterior e sua instalação tiver Limitação de taxa de resposta ativada durante a criação, você poderá definir uma taxa limitada, como abaixo:

  options {
           ...
           rate-limit {
              responses-per-second 10;
              log-only yes;
          };
  };

Se você estiver satisfeito com o resultado ao revisar seu query.log, remova a linha somente log-in e assista a ela. O padrão é 5 se não me engano e não é aconselhável ir abaixo desse número. Além disso, por favor, monitore sua taxa de queda, pois você pode querer ajustá-la em servidores de nomes que hospedam mais zonas.

E sim, você poderia fazer iptables, mas isso é mal aconselhado, pois na maioria dos casos, o filtro IP fica em apuros antes do seu servidor de nomes. Também não pode fazer distinções baseadas no pedido, apenas no número de pacotes e seu IP de origem. Isso significa que você descartará muito tráfego legal.

    
por 22.12.2015 / 01:15
1

Esse método é ineficiente, mas faz o que você solicitou

A única maneira efetiva e universal que eu sei é ativar um filtro de string iptables para bloquear o pedido. Certifique-se de fazer o backup de sua configuração do iptables antes de fazer isso.

-A PREROUTING -p udp -m udp --dport 53 -m string --hex-string "|0000ff0001|" --algo bm --from 40 -j DROP 

colocado na seção de tabela bruta do iptables da sua configuração do iptables.

... ou da linha de comando:

iptables -t raw -I PREROUTING -p udp -m udp --dport 53 -m string --hex-string "|0000ff0001|" --algo bm --from 40 -j DROP

O motivo para usar a tabela bruta é evitar os hits da tabela de estado no caso de você estar recebendo uma alta taxa de solicitações.

Etapa opcional que pode ser útil: Use com cuidado e teste em um servidor de teste. Evite fazer isso em um servidor crítico para os negócios sem testes extensivos.

Isso pode parar alguns ataques de enumeração e amplificação de DNS, mas quebra alguns RFCs. É trivial impedir que qualquer coisa além de NOERROR deixe seu servidor.

#
# drop anything leaving with the source port of 53 (DNS)
iptables -t raw -I OUTPUT -p udp -m udp --sport 53 -j DROP
#
# but then let through NOERROR for recursive
iptables -t raw -I OUTPUT -p udp -m udp --sport 53 -m string --hex-string "|8500|" --algo kmp --from 30 --to 31 -j ACCEPT
#
# and let through NOERROR for non-recursive
iptables -t raw -I OUTPUT -p udp -m udp --sport 53 -m string --hex-string "|8400|" --algo kmp --from 30 --to 31 -j ACCEPT

Nenhum dos daemons DNS suporta a seleção com tipos de solicitação para bloquear sem modificar o código-fonte, AFAIK. Por exemplo, modifiquei o rbldnsd para responder a "ANY" com a resposta "A". Isto é obviamente pouco ortodoxo e pode perturbar os puristas.

    
por 22.12.2015 / 01:59