VT100-Terminals (die alle modernen Terminalemulatoren in gewissem Maße emulieren) unterstützten eine Reihe problematischer Befehle, moderne Emulatoren oder Distributionen deaktivieren jedoch die problematischeren und weniger nützlichen. Hier ist eine nicht vollständige Liste der potenziell riskanten Escape-Sequenzen (ohne diejenigen, die die Anzeige lediglich in irgendeiner Weise unleserlich machen):
- Die Befehle für beliebige Protokolldateien in rxvt und Eterm von HD Moore gemeldeten . Dies sind in der Tat große Fehler, die zum Glück lange behoben wurden.
- Der Rückantwortbefehl, auch als Return Terminal Status bezeichnet, wird aufgerufen von
ENQ
(Ctrl+E
) . Dadurch wird Text in das Terminal eingefügt, als hätte der Benutzer ihn eingegeben. Dieser Text unterliegt jedoch nicht der Kontrolle des Angreifers: Es handelt sich um den Namen des Terminals, normalerweise so etwas wie xterm
oder screen
. Auf meinem System (Debian squeeze) gibt xterm standardmäßig den leeren String zurück (dies wird von der answerbackString
Ressource gesteuert ).
- Die Befehle Geräteattribute senden,
ESC [ c
und "Freunde". Das Terminal antwortet mit ESC [ … c
(wobei das …
nur Ziffern und ASCII-Satzzeichen enthalten kann). Auf diese Weise können einige Terminalfunktionen abgefragt werden, die meist veraltet sind, aber möglicherweise von alten Anwendungen verwendet werden. Auch hier ist die Reaktion des Terminals nicht von Benutzereingaben zu unterscheiden, sie wird jedoch nicht vom Angreifer gesteuert. Die Steuersequenz sieht möglicherweise wie eine Funktionstaste aus, aber nur, wenn der Benutzer eine ungewöhnliche Konfiguration hat (keine der üblichen Einstellungen, auf die ich gestoßen bin, hat eine gültige Funktionstasten-Escape-Sequenz, die ein Präfix der Terminalantwort ist).
- Die verschiedenen Funktionen zur Gerätesteuerung (DCS, beginnend mit
ESC P
).
- Ich weiß nicht, durch was Schaden angerichtet werden kann
DECUDK
ein typischer Terminalemulator (benutzerdefinierte Schlüssel setzen).
DECRQSS
(Request Status String) ist ein weiterer Befehl, auf den das Terminal mit einer Escape-Sequenz antwortet, diesmal beginnend mit \eP
; Dies kann problematisch sein, da \eP
es sich um einen gültigen Schlüssel handelt ( Alt+Shift +P ) handelt.
- Xterm bietet zwei weitere experimentelle Funktionen:
ESC P + p …
und ESC P + q …
, um Termcap-Zeichenfolgen abzurufen und festzulegen. Aus der Beschreibung kann dies verwendet werden, um zumindest die Wirkung von Funktionstasten zu ändern.
- Mehrere Statusberichtsbefehle:
ESC [ … n
(Gerätestatusbericht). Das Terminal antwortet mit einer Escape-Sequenz. Die meisten dieser Escape-Sequenzen entsprechen nicht den Escape-Sequenzen der Funktionstasten. Man sieht problematisch aus: Der Bericht ESC [ 6 n
hat die Form woESC [ x ; y R
x
undy
sind Ziffernfolgen, und dies könnte F3mit einigen Modifikatoren aussehen .
- Befehle zur Fensterbearbeitung
ESC [ … t
.
- In einigen Fällen kann die Größe des xterm-Fensters geändert, ein Symbol angezeigt usw. werden, was störend ist.
- Einige von diesen führen dazu, dass das Terminal mit einer Escape-Sequenz antwortet. Die meisten dieser Escape-Sequenzen sehen risikoarm aus, es gibt jedoch zwei gefährliche Befehle: die Antworten auf
ESC [ 2 0 t
undESC [ 2 1 t
umfassen das Terminal - Fenster das Symbol Label und Titel sind und der Angreifer diese wählen können.
- Zumindest unter Debian Squeeze ignoriert xterm diese Befehle standardmäßig. Sie können durch Festlegen der
allowWindowOps
Ressource oder selektiv durch die disallowedWindowOps
Ressource aktiviert werden . Gnome-Terminal unter Ubuntu 10.04 implementiert standardmäßig sogar die Titelantworten. Ich habe keine anderen Terminals oder Versionen überprüft.
- Befehle zum Festlegen des Terminaltitels oder des Symbolnamens. Unter xterm und den meisten anderen X-Terminals ist dies der Fall . Unter Bildschirm lautet die Escape-Sequenz . Ich finde die Besorgnis über diese Befehle überbewertet. Während sie ein gewisses Maß an Unfug zulassen, hat jede Webseite das gleiche Problem. Wenn Sie in einem Fenster nur nach dem Titel und nicht nach der Klasse des Fensters handeln, öffnen Sie eine Datei, deren Name Sie von einer nicht vertrauenswürdigen Partei erhalten haben, oder Sie zitieren keine variable Erweiterung in einem Shell-Skript oder tupfen einen tollwütigen Hund auf die Nase - Beschweren Sie sich nicht, wenn Sie gebissen werden.
ESC ] digit ; title ESC \
ESC k title ESC \
Ich finde Varnishs Reaktion unaufrichtig. Es fühlt sich so an, als würde man versuchen, die Schuld zu ändern, oder im Sicherheits-Nazi-Modus (jede Sicherheitsbedenken, ob echt oder nicht, rechtfertigen das Blackballing einer Funktion).
Die Weisheit von Terminal-Response-Escapes im Allgemeinen wurde in regelmäßigen Abständen in Frage gestellt, aber noch immer hat keines der großen Terminal-Emulationsprogramme es für angebracht gehalten, diese Sequenzen zu verwerfen, wahrscheinlich in einem fehlgeleiteten Versuch der Kompatibilität mit der nicht mehr verwendeten 1970er-Technologie. (…)
Anstatt alle Programme zu beschuldigen, die Protokolldateien schreiben, wäre es sicherheitstechnisch viel produktiver, die Terminalemulationsprogramme dazu zu bringen, keine dummen Dinge mehr zu tun und dieses und andere Sicherheitsprobleme ein für alle Mal zu beheben für alle.
Viele der Rückantworten sind nützliche Funktionen: Eine Anwendung muss Dinge wie die Cursorposition und die Fenstergröße kennen. Das Einstellen des Fenstertitels ist ebenfalls sehr nützlich. Es wäre möglich, sich vollständig auf ioctl
Aufrufe für diese zu verlassen, dies hätte jedoch zusätzlichen Code und Dienstprogramme erforderlich gemacht, um diese zu erstellenioctl
Aufrufe tätigen und sie in Text im Unix-Stil zu übertragen, der Dateideskriptoren weitergibt. Das Ändern dieser Schnittstellen würde jetzt viel Arbeit bedeuten und wenig Nutzen bringen.
Textdateien dürfen keine nicht druckbaren Zeichen wie Steuerzeichen enthalten. Protokolldateien werden im Allgemeinen als Textdateien erwartet. Protokolldateien sollten keine Steuerzeichen enthalten.
Wenn Sie besorgt , dass eine Datei Escape - Sequenzen enthalten können, öffnen Sie sie in einem Editor, oder sehen Sie es mit , less
ohne -r
oder -R
Option, oder sehen Sie es durch cat -v
.