Einführung
Am 1. Juli 2024 veröffentlichte die Qualys Threat Research Unit (TRU ) Informationen über eine Sicherheitslücke, die in OpenSSH [1] entdeckt wurde – einem der beliebtesten und sichersten Dienste für den Fernzugriff auf Server, der hauptsächlich in Linux-Systemen eingesetzt wird.
Der Schwachstelle wurde die CVE-Kennung CVE-2024-6387 zugewiesen, und sie wird in der NVD-Datenbank wie folgt beschrieben:
Eine Sicherheitslücke (CVE-2006-5051) wurde im OpenSSH-Server (sshd) entdeckt. Es gibt eine Race Condition, die dazu führen kann, dass sshd einige Signale auf unsichere Weise behandelt. Ein nicht authentifizierter, entfernter Angreifer kann sie auslösen, indem er sich nicht innerhalb einer bestimmten Zeitspanne authentifiziert. [2]
Die National Vulnerability Database (NVD) ist eine umfassende Datenbank mit Informationen über bekannte Schwachstellen in der Cybersicherheit, einschließlich Details über deren Schweregrad, Auswirkungen und Behebungen. Common Vulnerabilities and Exposures (CVE) ist ein System, das eindeutige Kennungen für öffentlich bekannte Schwachstellen und Gefährdungen bereitstellt.
Einer der faszinierendsten Aspekte dieser Schwachstelle ist, dass sie in OpenSSH vorhanden war und vor langer Zeit sogar mit CVE-2006-5051 gekennzeichnet wurde. Aufgrund eines Programmierfehlers bei der Änderung des OpenSSH-Codes tauchte die Schwachstelle jedoch ab Oktober 2020 wieder auf.
Die Schwachstelle lässt sich als Signalhandler-Race-Condition zusammenfassen, die eine unautorisierte Remotecodeausführung mit Root-Rechten ermöglicht. Um besser zu verstehen, was das bedeutet, werden wir diese Beschreibung in ihre grundlegenden Bestandteile zerlegen und jeden Begriff auf verständliche Weise erklären.
Was ist OpenSSH?
OpenSSH (Open Secure Shell) ist eine weit verbreitete Open-Source-Suite von Tools, die einen sicheren Fernzugriff und Datentransfer über ungesicherte Netzwerke ermöglichen. OpenSSH wurde als Teil des OpenBSD-Projekts entwickelt und bietet ein robustes, verschlüsseltes Protokoll für die sichere Kommunikation zwischen Systemen. Das wichtigste Tool für den sicheren Remote-Shell-Zugriff ist sshmit der sich Benutzer/innen sicher auf entfernten Rechnern anmelden und Befehle ausführen können. OpenSSH setzt starke Verschlüsselungs- und Authentifizierungsmechanismen ein, um Daten vor Abhören und Manipulation zu schützen. Es unterstützt verschiedene Authentifizierungsmethoden, darunter die passwort- und schlüsselbasierte Authentifizierung und erweiterte Funktionen wie Portweiterleitung und sicheres Tunneln. In der Praxis ist der OpenSSH-Server die am häufigsten verwendete Option, um Verbindungen mit Linux-Systemen herzustellen.
Wer ist Root?
Root ist der privilegierteste Benutzer auf dem Linux-System. Er hat vollen und uneingeschränkten Zugriff auf das gesamte System.
Was ist RCE?
Remote Code Execution (RCE) ist eine Schwachstelle, die eine kritische Sicherheitslücke darstellt, die es einem Angreifer ermöglicht, beliebigen Code auf einem entfernten System über ein Netzwerk auszuführen. Man kann sagen, dass dies die Art von Sicherheitslücke ist, von der jeder Hacker träumt. Die Ausführung von Remote-Code kann zu vielen schwerwiegenden Konsequenzen führen. Zum Beispiel können Hacker auf sensible Ressourcen auf dem Rechner zugreifen, Malware und Backdoors installieren (die es ihnen ermöglichen, Persistenz zu erlangen und sich erneut mit dem angegriffenen System zu verbinden) und die auf dem System laufenden Dienste stören oder beeinträchtigen. In extremen Fällen können Hacker durch Remotecodeausführung die vollständige Kontrolle über das angegriffene System übernehmen.
Was ist die Idee hinter der Signalhandler Race Condition in OpenSSH?
Signalhandler sind Funktionen in einem Programm, die auf Signale reagieren, also auf Benachrichtigungen, die an einen Prozess gesendet werden. Eine Race Condition tritt auf, wenn das Timing von Ereignissen zu unerwartetem oder falschem Verhalten führt. Bei Signalhandlern führt dies oft zu Problemen aufgrund von asynchronen Aktionen (Dinge geschehen nicht in der richtigen Reihenfolge). Wenn sowohl der Signalhandler als auch der reguläre Code auf dieselben globalen Variablen oder statischen Daten zugreifen und der Signalhandler diese verändert, während der reguläre Code sie nutzt, kann dies zu Problemen wie Datenbeschädigung oder Abstürzen führen. Angreifer können diese Wettlaufbedingungen ausnutzen, um den Programmstatus zu beschädigen, was zu einem Programmabsturz führen oder die Ausführung von nicht autorisiertem Code ermöglichen kann.
In OpenSSH tritt das Signalhandler-Race-Condition-Problem auf, wenn sich ein Client nicht innerhalb der LoginGraceTime Zeitspanne nicht authentifiziert. Der Parameter LoginGraceTime gibt die Zeit an, die für eine erfolgreiche Authentifizierung am SSH-Server erlaubt ist. Je länger die Gnadenfrist ist, desto länger können die nicht authentifizierten Verbindungen dauern. [3] Der Standardwert für diesen Parameter ist 120 Sekunden. Wenn dieser Timeout erreicht ist, wird der SIGALRM-Handler asynchron ausgelöst und ruft Funktionen auf, die für Signalhandler unsicher sind, wie z.B. syslog(). In Versionen vor 4.4p1 konnte ein Angreifer die Funktion free() ausnutzen, die in syslog() während des Signalhandlers verwendet wird. In den Versionen 8.5p1 bis 9.7p1 sind sowohl die free()- als auch die malloc() -Funktion anfällig für eine Ausnutzung. Der Proof-of-Concept von Qualys Threat Research Unit basiert auf der Verwendung des Datensegments des öffentlichen Schlüssels, um die Nutzlast des Exploits zu senden. Wenn die Ausnutzung erfolgreich ist, erzwingt der Angreifer die Ausführung von Code, der es ihm ermöglicht, die Root-Shell zu erhalten. Da die Ausnutzung perfektes Timing erfordert, sind statistisch gesehen viele Versuche nötig, um erfolgreich zu sein. Für OpenSSH auf einem 32-Bit-System waren beispielsweise durchschnittlich 10.000 Versuche nötig, um eine erfolgreiche Ausführung zu erreichen. [4] DieQualys Threat Research Unit ist dabei, Exploits für 64-Bit-Systeme zu entwickeln und zu testen. [5]
SIGALRM ist ein Signal, das in Unix-ähnlichen Betriebssystemen verwendet wird, um einem Prozess mitzuteilen, dass ein Timer abgelaufen ist. Ein Prozess kann dieses Signal abfangen und es mit einer Signalhandlerfunktion behandeln. Diese Funktion wird ausgeführt, wenn das Signal empfangen wird. Die im obigen Text erwähnten Funktionen sind Teil der Sprache C: syslog() – mit dieser Funktion werden Protokollmeldungen in ein Systemprotokoll geschrieben.malloc() – mit dieser Funktion wird ein Speicherblock zur Verwendung reserviert.free() – mit dieser Funktion wird Speicher freigegeben, der zuvor von der Funktion malloc() zugewiesen wurde.
Betroffene Versionen
Um die Informationen über gefährdete Software zusammenzufassen [5]:
- OpenSSH < 4.4p1 ist verwundbar,
- 4.4p1 < = OpenSSH < 8.5p1 ist nicht verwundbar,
- 8.5p1 < = OpenSSH < 9.8p1 ist wieder verwundbar.
Bedenke jedoch, dass die theoretisch anfällige Version gepatcht sein könnte. Zum Beispiel wurde der Patch für verschiedene Versionen von OpenSSH für das Ubuntu-Betriebssystem eingeführt. [6, 3] Die Version von OpenSSH ist also kein eindeutiger Indikator für das Vorhandensein von Sicherheitslücken.
Um die Version von OpenSSH auf deinem System zu überprüfen, führe den folgenden Befehl im Terminal aus:
ssh -V
Beachte, dass Windows-Systeme nicht betroffen sind. Außerdem sind Alpine Linux und OpenBSD wahrscheinlich nicht anfällig für diesen Angriff. Red Hat Enterprise Linux 9 hat das Potenzial, anfällig zu sein, aber andere Kontrollen haben den Weg zur Ausnutzung verhindert. [4]
Sanierungen
Um die Sicherheitslücke CVE-2024-6387 direkt zu entschärfen, kannst du die folgenden Aktionen durchführen:
- Aktualisiere OpenSSH auf die neueste verfügbare Version oder installiere die gepatchte Version.
- Als nicht perfekte Abhilfe (wenn du keine aktualisierte Version von OpenSSH installieren kannst), setze den Parameter LoginGraceTime in /etc/ssh/sshd_config auf 0. Dadurch wird CVE-2024-6387 vollständig entschärft. Allerdings wird der OpenSSH-Server dadurch anfällig für einen Denial-of-Service. [4]
Du kannst auch die folgenden zusätzlichen Schritte anwenden, um die Risiken, die mit der Möglichkeit des Missbrauchs des OpenSSH-Dienstes verbunden sind, generell zu verringern:
- Firewall-Regeln – Verwende Firewalls, um den Zugriff auf den SSH-Dienst auf vertrauenswürdige IP-Adressen zu beschränken.
- Netzwerksegmentierung – isoliere SSH-Server in separaten Netzwerksegmenten oder VLANs, um das Risiko von Seitwärtsbewegungen innerhalb des Netzwerks zu verringern, wenn ein Server kompromittiert wird.
- Härtet die SSH-Konfiguration – deaktiviert den Root-Login über SSH und verwendet die Authentifizierung mit privaten Schlüsseln anstelle von Passwörtern.
- Aktivitäten überwachen und protokollieren – aktiviere und überwache SSH-Protokolle, um verdächtige Aktivitäten oder unbefugte Zugriffsversuche zu erkennen. Überprüfe die Protokolle regelmäßig auf Anzeichen einer möglichen Gefährdung.
Um es noch einmal zu betonen – die oben genannten zusätzlichen Schritte sind gute Praktiken, um den OpenSSH-Server generell abzusichern, aber sie mindern nicht direkt die Bedrohung durch die beschriebene regreSSHion-Schwachstelle.
Die wichtigsten Erkenntnisse
- Bei der regreSSHion handelt es sich um eine Race Condition-Schwachstelle im OpenSSH-Server, die eine unautorisierte Remote-Befehlsausführung als Root ermöglichen kann.
- Die Sicherheitslücke betrifft einige Linux-Systeme. Windows-Systeme sind nicht betroffen.
- Vorerst wurde der Proof of Concept für 32-Bit-Linux-Systeme vorgestellt. Die Ausnutzung von 64-Bit-Linux-Systemen ist theoretisch möglich und die Forschung läuft.
- Da die Ausnutzung der Schwachstelle sehr kompliziert ist, ist es unwahrscheinlich, dass sie in naher Zukunft in freier Wildbahn auftritt. Die möglichen Auswirkungen sind jedoch schwerwiegend genug, um die vorgeschlagenen Abhilfemaßnahmen ernst zu nehmen.
- Als Abhilfe aktualisierst du OpenSSH auf die neueste Version.
Bibliographie
[1] B. Jogi, “regreSSHion: Remote Unauthenticated Code Execution Vulnerability in OpenSSH server,” [Online]. Verfügbar: https://blog.qualys.com/vulnerabilities-threat-research/2024/07/01/regresshion-remote-unauthenticated-code-execution-vulnerability-in-openssh-server#affected-openssh-versions.
[2] “NVD NIST,” [Online]. Verfügbar: https://nvd.nist.gov/vuln/detail/CVE-2024-6387.
[3] “Ensure SSH LoginGraceTime is set to one minute or less,” SecScan, [Online]. Verfügbar unter: https://secscan.acron.pl/centos7/5/2/14.
[4] “RegreSSHion exploit, CVE-2024-6387: A Write-Up,” Offsec Team, [Online]. Verfügbar unter: https://www.offsec.com/blog/regresshion-exploit-cve-2024-6387/.
[5] “regreSSHion: RCE im OpenSSH-Server, auf glibc-basierten Linux-Systemen (CVE-2024-6387),” Qualys Security Advisory, [Online]. Verfügbar: https://www.qualys.com/2024/07/01/cve-2024-6387/regresshion.txt.
[6] “CVE-2024-6387,” Ubuntu Security, [Online]. Verfügbar unter: https://ubuntu.com/security/CVE-2024-6387.