OpenSSH absichern

OpenSSH ist ein beliebtes Software-Werkzeug, um sichere SSH-Infrastrukturen aufzubauen. Ich zeige in diesem Blog-Artikel, wie Du die Standardkonfiguration von OpenSSH sowohl unter Ubuntu Server als auch unter Windows Server 2019 weiter absichern kannst.

Diskussion

Secure Shell (SSH) ist ein Netzwerkprotokoll zum sicheren Fernsteuern von Netzwerkdiensten über ein unsicheres Netzwerk (z.B. das Internet). OpenSSH ist eine Sammlung von Server- und Client-Komponenten zum Aufbau einer SSH-Infrastruktur. OpenSSH kann sowohl unter Linux als auch unter Windows installiert und genutzt werden.

Die Standardinstallation von OpenSSH versucht einen guten Kompromiss zu finden zwischen maximaler Kompatibilität und maximaler Sicherheit. Man tut gut daran, seine eigene, konkrete OpenSSH-Installation auf mögliche Schwachstellen zu untersuchen. Ziel ist es, die Angriffsfläche des OpenSSH-Dienstes so weit wie möglich zu verkleinern. Wir schauen uns deshalb folgende Maßnahmen genauer an:

  • Keinen direkten Root-Zugriff per SSH zulassen
  • Keine Kennwort-Authentifizierung bzw. wenn doch, dann nur sehr eingeschränkt.
  • Nur wirklich sichere Verschlüsselungsalgorithmen verfügbar machen

Die Konfiguration des OpenSSH-Servers ist in einer zentralen Datei gespeichert.

Unter Ubuntu Server 20.04 LTS und 18.04 LTS:

/etc/ssh/sshd_config

Unter Windows Server 2019:

C:\ProgramData\ssh\sshd_config

Nach Änderung der Konfiguration muss ein Neustart des OpenSSH-Servers erfolgen.

Unter Ubuntu Server 20.04 LTS und 18.04 LTS:

$ sudo systemctl restart ssh.service

Unter Windows Server 2019 per PowerShell:

Restart-Service sshd

Root-Zugriff unterbinden

Der root user ist unter Linux ein stets vorhandenes Benutzerkonto, das den Super-Administrator des Gesamtsystems repräsentiert. Er hat umfassende Rechte und kann auf alle Dateien, Daten und Kommandos zugreifen. root ist daher prädestiniert für Brute-Force-Attacken auf die Benutzeranmeldung. Unter Ubuntu kann man sich standardmäßig nicht als root anmelden. Man kann sich nur mit seinem persönlichen Konto anmelden, das weniger Rechte besitzt. Möchte man administrative Aufgaben in Ubuntu übernehmen, muss man sich mittels des Befehls sudo Administrationsrechte (root privileges) zuweisen lassen.

Auch unter SSH sollte das Anmelden per root auf alle Fälle deaktiviert werden:

PermitRootLogin no

Unter Windows Server 2019 wird diese Einstellung ignoriert, weil es das root-Benutzerkonzept unter Windows so nicht gibt. Windows besitzt standardmäßig ein Benutzerkonto namens Administrator. Dieses Konto besitzt volle Administratorenrechte und legt darüber hinaus ein spezielles Verhalten an den Tag:

  • Die RID (Relative Identifier) des Kontos ist stets 500.
  • Es kann nicht gelöscht werden
  • Es kann sich nicht aussperren (z.B. weil zu oft das falsch Kennwort eingetippt wurde).

Auch dieses Konto steht im Fokus von möglichen Brute-Force-Attacken. Aus diesem Grund empfiehlt es sich, das Administratorkonto unabhängig von OpenSSH in der Windows-Benutzerverwaltung zu deaktiveren. Stattdessen legt man für jeden Administrator ein eigenes Konto mit den jeweils notwendigen Rechten an.

Keine Kennwort-Authentifizierung zulassen

Die meisten Tutorials empfehlen eine Anmeldung nur mit SSH-Schlüssel als sicherste Alternative. Bei dieser Methode verlässt der SSH-Schlüssel nicht Deinen Rechner, kann also weder abgefangen noch durch einen Brute-Force-Angriff erraten werden. Folgende Einstellungen sind daher zu empfehlen:

PubkeyAuthentication yes
PasswordAuthentication no

Das Deaktivieren von PasswordAuthentication unterbindet das Anmelden per Kennwort für alle Benutzer.

Veraltete Verschlüsselung rausschmeißen

Jetzt schauen wir uns die von OpenSSH standardmäßig aktivierten Verschlüsselungsalgorithmen näher an. Ein Test auf SshCheck.com ergibt folgendes Bild:

Standardkonfiguration von OpenSSH

Standardkonfiguration von OpenSSH

Das sieht nicht so gut aus. Zahlreiche Algorithmen werden als schwach (weak) gekennzeichnet oder stehen im Verdacht, dass die NSA ein Hintertürchen (backdoor) besitzt. Wir sollten also etwas tun.

Im Prinzip müssen wir nur die Verschlüsselungsalgorithmen abschreiben, die als wirklich sicher gekennzeichnet sind. Wer etwas tiefer in die Materie einsteigen möchte, dem sei der folgende Blog-Artikel empfohlen, der die Verschlüsselungsalgorithmen von OpenSSH diskutiert und auch eine Konfigurationsempfehlung abgibt.

Die folgende explizite Konfiguration sieht auf alle Fälle vielversprechend aus:

HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com

Ein erneuter Test auf SshCheck.com ergibt nun folgendes Ergebnis:

Optimierte Verschlüsselungskonfiguration für OpenSSH

Optimierte Verschlüsselungskonfiguration für OpenSSH

Noch Fragen?

Mehr Infos zur OpenSSH-Konfiguration findest Du natürlich in den OpenSSH-Manpages. Auch das Bundesamt für Sicherheit in der Informationstechnik (BSI) hat einen Technischen Leitfaden zur sicheren Nutzung von SSH herausgegeben.

Das könnte dich auch interessieren:
  1. Windows 2019 per SSH fernsteuern
  2. Ubuntu Server 18.04 installieren
  3. GitHub + SSH unter Windows 10
  4. FTP/FTPS unter IIS 10
  5. MS SQL Server Express LocalDB
Teile diesen Artikel
comments powered by Disqus