Wie kann ich feststellen, ob der aktuell ausgeführte SSH-Server OpenSSH oder Dropbear ist?

Wie kann ich feststellen, ob der aktuell ausgeführte SSH-Server OpenSSH oder Dropbear ist?

Wenn ich in die Datei gehe /etc/ssh/ssh_config, sehe ich oben in der Datei "$OpenBSD". Wenn ich jedoch den Standardport auf einen anderen Wert ändere, scheint es nicht zu funktionieren. Ein Kollege hat mir gesagt, dass das daran liegt, dass Dropbear hier der Softwareserver ist, nichtOpenSSH.

Gibt es eine Möglichkeit, sicherzugehen?Ich kann beim Googeln keine Antwort darauf finden.

Antwort1

Stellen Sie eine Verbindung zum SSH-Port (z. B. 22) her und überprüfen Sie das Banner.

$ nc 10.0.0.10 22
SSH-2.0-OpenSSH_8.6

Antwort2

Die meisten (wenn nicht alle?) SSH-Server senden unmittelbar nach der Verbindung eine Art Versionszeichenfolge. In einem kleinen Forschungsprojekt von mir habe ich versucht, die SSH-Serverversion über einen großen IPv4-Raum abzubilden, und was ich im Wesentlichen getan habe, war nc address port

Ich habe es in ein Perl-Skript mit einem Timeout integriert, um die Verarbeitung auf meiner Seite zu vereinfachen, sowie einem optionalen Timeout mit einem Standardwert:

#!/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;

Testen gegen einen Server in meinem Netzwerk:

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

Antwort3

Wenn Sie sich auf dem Server befinden, sehen Sie sich den Prozess an, der an den Netzwerkport angeschlossen ist, wo die sshAntwort erwartet wird ( 22oder etwas anderes).

Sie können dafür netstatoder verwenden ss. Sie können dann die vollständige Befehlszeile des laufenden Servers finden, die möglicherweise ausreicht, um ihn zu identifizieren. Alternativ können Sie auch zwei andere Optionen verwenden:

  • das Ausführen stringsdarauf ist zwar die letzte Maßnahme, kann aber Ergebnisse liefern (Sie werden mit Sicherheit auch die Zeichenfolge zurückerhalten, die vom Server remote gemeldet wird, wie andere Antworten zeigen).
  • Sie können die geöffneten Dateien des Prozesses finden (siehe /proc/$PID/fd), die entweder einen Link zu einer Konfigurationsdatei oder einer Protokolldatei enthalten können. Im Idealfall enthält die Protokolldatei genügend Informationen, um den Prozess genau zu bestimmen.

Oder abhängig von Ihrem System und Setup können Sie beispielsweise verwenden, systemctl list-unitsum genau zu sehen, was derzeit ausgeführt wird und was der sshServer ist (dann sehen Sie durch Überprüfen systemdder Unit-Datei, um welche Befehlszeile es sich handelt und andere Informationen).

Wenn Sie sich außerhalb des Servers befinden, sehen Sie sich die anderen Antworten an. Es gibt jedoch keine Garantie dafür, dass die vom Remote-Server zurückgegebenen Daten der Wahrheit entsprechen. Der Server kann sich beliebig darstellen.

Eine weitere Remote-Option wäre, ein „SSH-Fingerprinting“ durchzuführen. Ich habe das nicht direkt gesehen, bin aber sicher, dass es das gibt. Grundsätzlich kann man durch Testen verschiedener Verbindungstypen einige Informationen vom Remote-Teil ermitteln, die über das hinausgehen, was er vorgibt zu sein. Ich vermute, dass mehrere Schwachstellenscanner über solche Dinge verfügen.

Antwort4

Sie können verwenden, psum die Liste der Prozesse und grepdie Ausgabe für abzurufen sshd.
Damit erhalten Sie den Pfad zur ausführbaren Binärdatei {{ eg /usr/sbin/sshdoder so ähnlich }}.
Sie können diese Binärdatei dann mit ausführen, -?um Hilfe- und Verwendungsinformationen abzurufen. Diese Ausgabe enthält dieDefinitiver Name des Pakets{{ zB OpenSSH oder Dropbear oder so ähnlich }}.

verwandte Informationen