Qual é o objetivo da opção sshd "UseDNS"?

79

Eu sei o que faz, mas não sei por que . Quais ataques ele impede?

É relevante para todos os tipos de métodos de autenticação? (com base no host, senha, chave pública, teclado interativo ...)

user368507
fonte
2
Adicionei um ao CoreOS também aqui: github.com/coreos/bugs/issues/92

Respostas:

66

A UseDNSopção é principalmente inútil. Se as máquinas clientes estiverem disponíveis na Internet, há uma grande chance de que eles não tenham nenhum DNS reverso, o DNS reverso não resolva para frente ou o DNS não forneça nenhuma informação além de "pertence a este ISP ”, que o endereço IP já informa.

Em configurações típicas, o DNS é usado apenas para log. Pode ser usado para autenticação, mas somente se IgnoreRhosts nofor especificado em sshd_config. Isto é para compatibilidade com instalações antigas que usavam rsh, onde você pode dizer “o usuário chamado bobna máquina chamada darkstarpode logar como alicesem mostrar nenhuma credencial” (escrevendo darkstar bobem ~alice/.rhosts). Só é seguro se você confiar em todas as máquinas que possam estar se conectando ao servidor ssh. Em outras palavras, isso raramente é utilizável de maneira segura.

Como a pesquisa de DNS não fornece nenhuma informação útil, exceto em circunstâncias muito peculiares, ela deve ser desativada. Pelo que sei, o único motivo pelo qual está ativado é que ele é tecnicamente mais seguro (se você está preocupado com autenticação, não disponibilidade), mesmo que isso se aplique apenas a um pequeno conjunto de circunstâncias.

Outro argumento para desativar esse recurso é que todo recurso supérfluo é um risco desnecessário à segurança .

Gilles
fonte
Portanto, o UseDNS é relevante apenas para autenticação baseada em host? Se eu não usar autenticação baseada em host e não me importo se o nome do host ou o IP aparecem nos logs, o UseDNS não faz diferença?
user368507
5
@ user368507 Sim, é isso. UseDNSnem é útil se você usar autenticação de host com base em chave , apenas se você usar autenticação de host com base em nome de host (ou seja, autenticação extremamente fraca).
Gilles
3
@Gilles, é claro, se você usa autenticação baseada em chave e em nome de host, UseDNSé muito útil e crítica. Você autentica um usuário com base na chave e o servidor com base no nome do host, atribuído a um endereço MAC.
Kara deniz
38

Eu adicionei a um relatório de bug (antigo, mas ainda atual) no Ubuntu sobre isso.

https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/424371

Propus alterar o padrão para Não e adicionar documentação mais recente:

# UseDNS - Determines whether IP Address to Hostname lookup and comparison is performed
# Default value is No which avoids login delays when the remote client's DNS cannot be resolved
# Value of No implies that the usage of "from=" in authorized_keys will not support DNS host names but only IP addresses.
# Value of Yes supports host names in "from=" for authorized_keys. Additionally if the remote client's IP address does not match the resolved DNS host name (or could not be reverse lookup resolved) then a warning is logged.
Rodney
fonte
2
Up up vote up ... isso é mais útil, porque contém uma informação que eu estava procurando.
0xC0000022L
1
Da mesma forma, se UseDNS não for, os nomes de host não poderão ser correspondidos nas regras pam_access e os IPs deverão ser usados.
ColinM
1
Votei esta resposta alguns anos atrás, mas só hoje notei que o padrão foi alterado para "UseDNS no" no OpenSSH 6.8p1, que está no Ubuntu 15.10 e posterior .
Anthony G - justice para Monica
O RedHat (no RHEL7) recentemente também alterou o padrão para Não, o que quebra os controles de acesso baseados em nomes de host (que são úteis como controles principalmente de consultoria em uma intranet, obviamente não como o único mecanismo de controle de acesso).
dannysauer
8

Na página de manual de sshd_config(5):

 UseDNS  Specifies whether sshd(8) should look up the remote host name and
         check that the resolved host name for the remote IP address maps
         back to the very same IP address.  The default is “yes”.

A habilitação faz com que o acesso a partir de um local sem o DNS adequado (para frente e para trás) gere um aviso nos logs.

Portanto, isso não impede nenhum ataque, exceto que seria necessário um endereço remoto qualificado do cliente para não registrar nenhum aviso. Esse aviso pode ajudá-lo a localizar o invasor apenas se esse registro PTR fizer algum sentido.

editar: atualizado de acordo com o comentário de Andrey Voitenkov .

gertvdijk
fonte
Portanto, é um filtro sobre quem pode se conectar com base no que houver no servidor DNS?
user368507
2
Por que isso tornaria o acesso impossível? O sshd apenas gera aviso se os registros DNS A / PTR não corresponderem. A sequência de logon ficará lenta em caso de resolução de problemas.
Andrey Voitenkov 27/11/2012
Isso impede o acesso se a chave autorizada tiver sido comprometida desde que o invasor não possa falsificar os valores no from=campo antes da chave autorizada em questão (se usada).
Alecz
7

É necessário quando você usa a opção FROM em um arquivo allowed_keys e deseja filtrar por nomes e não apenas IPs.

A opção FROM em uma linha de um arquivo allowed_keys permite limitar hosts que podem usar uma chave específica.
Isso aumenta a capacidade de gerenciar vários servidores que têm acesso um ao outro sem permitir que os clones de uma máquina representem sua origem, geralmente sem intenção (sobras de crontabs, erro humano).

Didi Kohen
fonte
3

Eu gostaria de acrescentar que no CentOS 7 (7.1.1503) e, portanto, no Red Hat Enterprise Linux 7, não consegui efetuar login com a configuração padrão de yespara UseDNS. Depois de descomentar e configurá-lo como no, consegui efetuar login. Portanto, parece que um serviço pode ser negado de fato se o DNS não estiver funcionando corretamente! No CentOS 6, parece que o padrão é noe, portanto, posso sshentrar sem o DNS funcionando!

Gostaria de acrescentar que minha experiência foi em contêineres LXC e não em máquinas físicas, caso isso faça a diferença!

AnthonyK
fonte