![Desativando certas chaves OpenSSH no OpenBSD: por que as entradas 'sshd_config' correspondentes são ignoradas e por que 'ssh-keygen -A' gera chaves proibidas?](https://rvso.com/image/768908/Desativando%20certas%20chaves%20OpenSSH%20no%20OpenBSD%3A%20por%20que%20as%20entradas%20'sshd_config'%20correspondentes%20s%C3%A3o%20ignoradas%20e%20por%20que%20'ssh-keygen%20-A'%20gera%20chaves%20proibidas%3F.png)
Estou tentando obter o seguinte em meus servidores OpenBSD 6.9:
- Proibindo o uso de todas as chaves, exceto a
ssh-ed25519
de ambasSERVIDOReCLIENTElados. - Limitando
ssh-keygen -A
-se a gerar chaves apenas pelossh-ed25519
algoritmo autorizado e nada mais.
Para conseguir isso, adicionei as seguintes linhas ao meu sshd_config
:
HostKey /etc/ssh/ssh_host_ed25519_key
CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519
Eu também adicionei as seguintes linhas ao meu ssh_config
:
CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519
Excluí todas as chaves, exceto a autorizada.
SSD reiniciado:
# rcctl restart sshd
sshd(ok)
sshd(ok)
Depois de verificar se minhas configurações são utilizadas executando os seguintes comandos:
# ssh -Q HostbasedAcceptedAlgorithms
# ssh -Q HostKeyAlgorithms
# ssh -Q PubkeyAcceptedAlgorithms
Para minha surpresa, é com isso que todos eles retornam:
ssh-ed25519
[email protected]
[email protected]
[email protected]
ssh-rsa
rsa-sha2-256
rsa-sha2-512
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
Em outras palavras, as principais restrições são ignoradas.
Só por segurança, até reiniciei o servidor, mas não há diferença.
Uma possível solução alternativa é remover todos os arquivos principais, exceto o autorizado. No entanto, o script init /etc/rc
tem uma linha, ssh-keygen -A
que regenera todas as chaves ssh ausentes após cada reinicialização do sistema, antes que o daemon sshd seja iniciado,incluindo aqueles de algoritmos proibidos!
Portanto, remover as chaves não resolve o problema.
Como solução adicional, eu poderia remover a ssh-keygen -A
linha do script init ou substituí-la pelo meu algoritmo de geração de chave personalizado, mas isso me levará de volta ao ponto onde tudo começou: ter que lidar com esse problema repetidas vezes, por exemplo, após cada atualização do sistema, sempre que a equipe do OpenBSD lança uma nova versão do /etc/rc
. Automatizar a remoção dessa linha e testar uma solução alternativa tão desleixada em um grande número de servidores é difícil e pode levar a uma falha massiva na rede se algo der errado.
Portanto, continuei minha investigação e investiguei o código-fonte do ssh-keygen
. Descobri que não é possível restringir o comportamento do -A
switch externamente, por exemplo, por meio de arquivos de configuração. Ele nem realiza um teste preliminar se as chaves estão autorizadas ou não, apenas gera as chaves, de acordo com uma lista de algoritmos de um array codificado. A única maneira de evitar isso é editando, recompilando e usando um fork personalizado do ssh-keygen
, mas terei que lidar com isso após cada atualização do OpenSSH...
Encontrei uma solução parcial para outros sistemas operacionais, mas não para o OpenBSD.
Alguém poderia me indicar uma solução adequada? Por que minhas restrições sshd_config
e ssh_config
chaves são ignoradas e como parar ssh-keygen -A
de gerar chaves com algoritmos proibidos?
Antes que alguém pergunte: todas as outras configurações são utilizadas em ambos os arquivos de configuração pelo OpenSSH, portanto, esses arquivos de configuração são de fato os que estão sendo carregados.
Muito obrigado por todas as respostas úteis.