Como posso saber se o servidor SSH em execução atualmente é OpenSSH ou Dropbear?

Como posso saber se o servidor SSH em execução atualmente é OpenSSH ou Dropbear?

Se eu entrar no arquivo /etc/ssh/ssh_config, posso ver "$ OpenBSD" no topo do arquivo. No entanto, se eu alterar a porta padrão para um valor diferente, parece que não funciona. Um colega me informou que isso ocorre porque o Dropbear é o servidor de software aqui, nãoOpenSSH.

Existe uma maneira de ter certeza?Não consigo encontrar uma resposta pesquisando isso no Google.

Responder1

Conecte-se à porta ssh (por exemplo, 22) e inspecione o banner.

$ nc 10.0.0.10 22
SSH-2.0-OpenSSH_8.6

Responder2

A maioria (se não todos?) dos servidores SSH envia algum tipo de string de versão imediatamente após a conexão. Em um pequeno projeto de pesquisa meu, tentei mapear a versão do servidor SSH em um grande espaço IPv4, e o que fiz foi basicamente nc address port.

Eu coloquei-o em um script perl com um tempo limite para facilitar o processamento da minha parte, bem como um tempo limite opcional com um valor padrão:

#!/usr/bin/perl
use warnings;
use strict;

unless ($ARGV[0] && $ARGV[1]) {  die "Usage: ./raw hostname port [timeout]\n" }
my $timeout = '10s';
if ($ARGV[2]) {  $timeout = $ARGV[2] }

my $response = `timeout $timeout nc $ARGV[0] $ARGV[1]`;
print $response;

Testando-o em um servidor na minha rede:

./sshbanner.pl 172.16.16.11 22
SSH-2.0-OpenSSH_5.3

Responder3

Se você estiver no servidor, observe o processo anexado à porta de rede onde sshé esperado ( 22ou outra coisa).

Você pode usar netstatou sspara isso. Você poderá então encontrar a linha de comando completa do servidor em execução, o que pode ser suficiente para identificá-lo ou então você pode usar outras opções:

  • executá strings-lo é realmente o último curso de ação, mas pode produzir resultados (você certamente encontrará de volta também a string relatada remotamente pelo servidor, como mostram outras respostas)
  • você pode encontrar os arquivos abertos que o processo possui (procure em /proc/$PID/fd), que podem gerar um link para um arquivo de configuração ou um arquivo de log e, idealmente, o arquivo de log forneceria informações suficientes para identificar qual processo é esse.

Ou dependendo do seu sistema e configuração, por exemplo, você pode usar systemctl list-unitspara ver exatamente o que está sendo executado atualmente e qual é o sshservidor (então, inspecionando systemdo arquivo da unidade, você verá qual linha de comando é e outras informações)

Se você for externo ao servidor, veja outras respostas, mas não há garantia de que o retorno do servidor remoto seja verdade, ele pode se exibir como quiser.

Outra opção remotamente seria fazer algumas "impressões digitais SSH". Não vi isso diretamente, mas tenho certeza de que existe. Basicamente, testando vários tipos de conexões, pode-se determinar algumas informações da parte remota, além do que ela afirma ser. Acho que vários scanners de vulnerabilidade têm coisas assim.

Responder4

Você pode usar pspara obter a lista de processos e grepa saída de sshd.
Com isso, você obterá o caminho para o binário executável {{por exemplo, /usr/sbin/sshdou algo parecido }}.
Você pode então executar este binário para -?obter informações de ajuda e uso. Esta saída conterá oNome Definitivo do Pacote{{por exemplo, OpenSSH ou Dropbear ou algo parecido }}.

informação relacionada