ADMIN

2023

01

2022-12-29T12:00:00

Collaboration

PRAXIS

054

Open-Source-Tipp

Sicherheit

Datenaustausch

Schwachstellen in SCP

Ausweichmanöver

von Thorsten Scherf

Veröffentlicht in Ausgabe 01/2023 - PRAXIS

Um Dateien zwischen verschiedenen Rechnern zu kopieren, kommt zumeist das scp-Programm zum Einsatz. In dem zugrundeliegenden SCP-Protokoll werden allerdings immer wieder Schwachstellen bekannt, weshalb es in aktuellen OpenSSH-Versionen standardmäßig keine Verwendung mehr findet. Was diese Änderung für Admins bedeutet, erklärt der Open-Source-Tipp in diesem Monat.

Wohl jeder Admin kennt das Tool scp und wahrscheinlich existiert auch eine ganze Reihe an Skripten in der eigenen Werkzeugkiste, die auf scp basieren. Das Programm ermöglicht es auf sehr einfache Weise, einzelne oder mehrere Dateien zwischen unterschiedlichen Systemen zu kopieren. Sogar ganze Verzeichnisstrukturen können Sie hiermit übertragen. Anders als der Vorgänger rcp, der Teil der Berkeley-r-Kommandos ist, findet die Übertragung der Daten über das Netzwerk mithilfe der Secure Shell (SSH) statt. Das bedeutet, dass nicht nur eine sichere Authentifizierung auf dem Zielsystem erfolgt, sondern die Daten selbst auch in verschlüsselter Form über das Netzwerk fließen. Wie auch reguläre SSH-Verbindungen verwendet scp den Netzwerkport 22.
Unterschiedliche Protokolle
An dieser Stelle ist es wichtig zu verstehen, dass scp durchaus unterschiedliche Protokolle für die Übertragung der Daten verwenden kann. Die weiteste Verbreitung dürfte sicherlich das scp-Tool genießen. Dieses ist Teil der OpenSSH-Im–plementierung [1] und verwendet das gleichnamige SCP-Protokoll. Putty und der Secure Copy client (PSCP) setzen ebenfalls auf SCP. Das Protokoll wurde jedoch niemals offiziell in einem RFC standardisiert. Wer stattdessen das Tool WinSCP [2] verwendet, um damit Daten sicher zu übertragen, verwendet statt dem SCP- das SFTP-Protokoll, das bereits sehr früh im RFC-913 [3] definiert wurde.
OpenSSH ist sicherlich die SSH-Implementierung, die auf den allermeisten Systemen zum Einsatz kommt. Dies gilt nicht nur für Linux- und Unix-Systeme, sondern ebenso für macOS und Windows [4] sowie diverse Hardware-Appliances. So nutzen beispielsweise auch Dell, Cisco oder Juniper, um nur ein paar Namen zu nennen, OpenSSH auf Switches, Routern und anderen Geräten zur Remote-Administration ein.
Wohl jeder Admin kennt das Tool scp und wahrscheinlich existiert auch eine ganze Reihe an Skripten in der eigenen Werkzeugkiste, die auf scp basieren. Das Programm ermöglicht es auf sehr einfache Weise, einzelne oder mehrere Dateien zwischen unterschiedlichen Systemen zu kopieren. Sogar ganze Verzeichnisstrukturen können Sie hiermit übertragen. Anders als der Vorgänger rcp, der Teil der Berkeley-r-Kommandos ist, findet die Übertragung der Daten über das Netzwerk mithilfe der Secure Shell (SSH) statt. Das bedeutet, dass nicht nur eine sichere Authentifizierung auf dem Zielsystem erfolgt, sondern die Daten selbst auch in verschlüsselter Form über das Netzwerk fließen. Wie auch reguläre SSH-Verbindungen verwendet scp den Netzwerkport 22.
Unterschiedliche Protokolle
An dieser Stelle ist es wichtig zu verstehen, dass scp durchaus unterschiedliche Protokolle für die Übertragung der Daten verwenden kann. Die weiteste Verbreitung dürfte sicherlich das scp-Tool genießen. Dieses ist Teil der OpenSSH-Im–plementierung [1] und verwendet das gleichnamige SCP-Protokoll. Putty und der Secure Copy client (PSCP) setzen ebenfalls auf SCP. Das Protokoll wurde jedoch niemals offiziell in einem RFC standardisiert. Wer stattdessen das Tool WinSCP [2] verwendet, um damit Daten sicher zu übertragen, verwendet statt dem SCP- das SFTP-Protokoll, das bereits sehr früh im RFC-913 [3] definiert wurde.
OpenSSH ist sicherlich die SSH-Implementierung, die auf den allermeisten Systemen zum Einsatz kommt. Dies gilt nicht nur für Linux- und Unix-Systeme, sondern ebenso für macOS und Windows [4] sowie diverse Hardware-Appliances. So nutzen beispielsweise auch Dell, Cisco oder Juniper, um nur ein paar Namen zu nennen, OpenSSH auf Switches, Routern und anderen Geräten zur Remote-Administration ein.
Umso schlimmer ist daher die Tatsache, dass das SCP-Protokoll immer wieder durch schwerwiegende Fehler im Rampenlicht steht. In den letzten Jahren haben mehrere Schwachstellen im Protokoll sogar einen Eintrag in der CVE-Datenbank bekommen.
CVE-2020-15778 [5] beschreibt beispielsweise einen Fehler, der es erlaubt, beliebige Kommandos mit in den scp-Aufruf zu schmuggeln, die dann auf dem Remotesystem ausgeführt werden. Oder auch CVE-2019-6111 [6] – hier führt eine fehlende Validierung der übertragenden Daten dazu, dass die vom entfernten System empfangenden Dateien nicht zwangsläufig die Dateien sein müssen, die ursprünglich angefragt und übertragen werden sollten. Dies kann wiederum dazu führen, dass lokale Dateien ungewollt überschrieben werden.
SFTP statt SCP
Auch wenn die einzelnen Schwachstellen in der Vergangenheit immer wieder beseitigt wurden, gibt es doch grundlegende Probleme im SCP-Protokoll, beispielsweise was den Umgang mit Shell-Meta-Zeichen angeht. Dies führte schließlich dazu, dass die OpenSSH-Upstream-Community schon vor einigen Jahren angekündigt hat, das SCP-Protokoll in Zukunft nicht mehr einsetzen zu wollen und stattdessen auf SFTP zu setzen.
Dies hat zuerst zu einiger Verwirrung geführt, da fälschlicherweise angenommen wurde, dass durch diese Änderung auch der Einsatz des scp-Tools nicht mehr möglich ist. Aber wie bereits zu Beginn erwähnt, ist es wichtig zu verstehen, dass es einen Unterschied zwischen dem scp-Tool und dem SCP-Protokoll gibt. Das Werkzeug scp steht natürlich immer noch zur Verfügung, allerdings setzt dieses seit der OpenSSH-Version 9.0 [7] nun standardmäßig auf das SFTP-Protokoll.
Abweichendes Verhalten
Wer scp mit SFTP als zugrundeliegendes Protokoll einsetzt, sollte wissen, dass es durchaus einige Unterschiede zum SCP-Protokoll gibt. So konnte SFTP beispielsweise zuerst nicht mit symbolischen Links oder der Auswertung der Tilde, als Referenz für das Heimatverzeichnis eines Benutzers, umgehen.
Ein weiteres Problem ist, dass SFTP in älteren OpenSSH-Versionen Verzeichnisse nicht rekursiv kopieren kann. Das SCP-Protokoll erlaubt dies allerdings, wenn scp mit der Option "-r" startet. All diese Inkompatibilitäten sind in der OpenSSH-Upstream-Version bereits behoben [8,9,10], was jedoch nicht bedeutet, dass diese Änderungen bereits auch Teil der OpenSSH-Downstream-Version sind, die die Distributoren ausliefern. Oftmals sind in den Distributionen ältere Softwareversionen enthalten und es muss ein Backport von aktuellen Patches auf diese älteren Versionen stattfinden. Da diese Backports immer einen gewissen Arbeitsaufwand erfordern, findet die Auswahl der jeweiligen Patches zumeist auch sehr selektiv statt.
Unsicherer Fallback-Modus
Was also tun, wenn die eigenen Skripte aufgrund dieser Inkompatibilitäten auf einmal nicht mehr funktionieren? Im Idealfall sollte natürlich der Distributor dafür sorgen, dass diese Nebeneffekte beim Einsatz des SFTP-Protokolls nicht mehr auftreten und die entsprechenden Patches mit in die eigene OpenSSH-Version aufnehmen oder, noch besser, ein Rebase auf eine aktuelle OpenSSH-Version durchführen.
Sollte all dies nicht möglich sein, oder einfach zulange dauern, gibt es noch einen weiteren Weg, das alte Verhalten von scp wieder herzustellen. Da das SCP-Protokoll ja nicht komplett entfernt wurde, sondern lediglich standardmäßig nicht mehr zum Einsatz kommt, können Sie scp natürlich einfach anweisen, weiterhin dieses Protokoll anstatt SFTP zu verwenden. Hierfür greifen Sie einfach auf die scp-Option "-O" zurück:
scp -O -r ~tscherf/ remote:~tscherf/backup/
Dieser Fallback-Modus mag aber natürlich nicht in allen Umgebungen gewünscht sein, da hiermit unter Umständen die Gesamtsicherheit eines Systems wieder verringert wird. Auch gilt es zu bedenken, dass der Support für das SCP-Protokoll in Zukunft möglicherweise komplett aus OpenSSH verschwindet. Insofern ist jetzt eigentlich der richtige Zeitpunkt, auf diese Änderung zu reagieren und die eigene Systemlandschaft entsprechend anzupassen. So können Sie durch das Erzeugen der Datei "disable_scp" im OpenSSH-Konfigurationsordner dafür sorgen, dass dieser Fallback-Modus nicht mehr zur Verfügung steht.
Fazit
Wegen immer wieder auftretender Sicherheitsprobleme mit dem SCP-Protokoll setzt OpenSSH nun per Default auf SFTP in Kombination mit scp. Gewisse Inkompatibilitäten existieren mit älteren OpenSSH-Versionen, allerdings sind die meisten dieser Probleme bereits gelöst und treten mit aktuellen Versionen nicht mehr auf. Wer partout weiterhin das SCP-Protokoll einsetzen möchte, dem stellt das scp-Tool einen Fallback-Modus zur Verfügung, auch wenn die Empfehlung lautet, auf SCP zu verzichten und stattdessen auf SFTP zu setzen.
(dr)
Link-Codes
[7] OpenSSH Release Notes: https://www.openssh.com/txt/release-9.0/