Wie sicher ist es, eine beliebige Datei zu kopieren?


77

Manchmal, wenn ich versehentlich cateine Binärdatei habe, ist mein Terminal verstümmelt. Nichts, was ein Schneller resetnicht reparieren kann, aber könnte ein Angreifer theoretisch keine Datei erstellen, die bei Anzeige auf einem Terminal einen beliebigen Code ausführt? Durch einen Exploit im Terminalemulator oder auf andere Weise.


3
Manchmal, wenn ich das tue, sagt meine Shell am Ende "<garbage> unknown command". Da frage ich mich, ob das überhaupt möglich ist.
Keith

5
Es gab Exploits für den Terminal-Emulator, z. B. linuxsecurity.com/content/view/104657 oder securityfocus.com/bid/6936/discuss, sodass es nicht unbedingt sicher sein muss
Ulrich Dangel,

1
Aus diesem Grund ist es besser, etwas zu verwenden, das Binärdateien blockiert (wie more) oder terminal-fähig ist ( less), um den Inhalt von Dateien zu untersuchen. Dies versetzt Ihr Terminal nicht nur nicht in einen seltsamen Zustand, sondern die gesamte Datei wird auch nicht auf einmal vorbeifliegen.
Blrfl

Der stty saneBefehl setzt ein xterm (oder ähnliches) zurück, das zB in einen anderen Zeichensatz umgeschaltet wurde.
Thorbjørn Ravn Andersen

moshDie Dokumentation hat einige Gedanken dazu: mosh.mit.edu/#techinfo
Max Ried

Antworten:


34

Ob eine solche Ausgabe ausgenutzt werden kann, hängt vom Terminalprogramm ab und was dieses Terminal tut, hängt von den gesendeten Escape-Codes ab. Ich kenne keine Terminalprogramme mit solchen ausnutzbaren Funktionen, und das einzige Problem wäre jetzt, dass ein unbekannter Pufferüberlauf oder ähnliches ausgenutzt werden könnte.

Bei einigen älteren hardwareTerminals kann dies ein Problem sein, da Sie z. B. Funktionstasten mit solchen Escape-Sequenzen programmiert haben, indem Sie eine Befehlssequenz für diese Taste in der Hardware gespeichert haben. Sie benötigen immer noch einen physischen Tastendruck, um dies zu aktivieren.

Aber es gibt immer (wie Hauke ​​zu Recht als „geisteskrank“ bezeichnet hat) Leute, die bereit sind, eine solche Funktion hinzuzufügen, wenn dies ein Problem für sie löst, ohne die Lücke zu verstehen, die sie schaffen. Nach meiner Erfahrung mit Open-Source-Software ist dies aufgrund der vielen Augen, die auf den Code schauen, weniger wahrscheinlich als bei Closed Source. (Ich erinnere mich, dass Sie Mitte der Neunziger im Mail-Programm von Silicon Grahpics 'Irix Befehle einschließen konnten, die auf dem Empfänger-Rechner ausgeführt werden sollten, echte Pfade zu ausführbaren Dateien, ...)


3
"Sie könnten Befehle einschließen, die auf dem Empfängercomputer ausgeführt werden sollen." Sie meinen so etwas wie das Einschließen von VBScript in eine E-Mail, das den Windows Scripting Host anruft? :)
ein CVn

Nein, genau, Sie können eine ausführbare Datei starten, die sich bereits auf dem Computer befindet, z. B. einen Sound abspielen. Ich erinnere mich nicht an die genaue Syntax (vor fast 20 Jahren), noch ob Sie diese "Funktion" in einem Setup ausschalten konnten. Wir hatten jedoch Spaß daran, die in unserem Netzwerk gespeicherten Videos automatisch abzuspielen.
Anthon

Du redest nicht über NeWS, oder? IIRC SGI war einer der letzten Hold-outs.
Luser Droog

@luserdroog Nein war dies das Standard - GUI - basierte E - Mail - Programm unter Irix
Anthon

1
@Anthon Ich bin nicht sicher, ob es noch möglich ist, aber die Möglichkeit, Escape-Codes zu verwenden, um ein Terminal dazu zu bringen, den vom writeBefehl kommenden Text zu "wiederholen" - und so Befehle / Skripte auszuführen, die dem Benutzer des Terminals gehören. Es ist angeblich der Grund, warum viele empfehlen, Nachrichten mesg -nfür Benutzer die meiste Zeit und für root immer auszuschalten . AFAIK, das wurde tatsächlich gemacht - obwohl ich nicht weiß, ob es jemals ausgenutzt wurde. So könnte vielleicht zufälliger Text aus einer catausführbaren Datei ausgeführt werden.
Baard Kopperud

33

Die meisten Terminalemulatoren senden eine Antwort zurück, wenn sie bestimmte Escape-Sequenzen empfangen (siehe Dokumentation der xterm-Steuersequenzen ). Sie können z. B. \e[0ceine Nachricht an einen VT100-ähnlichen Emulator senden, der die Geräteattribute zurücksendet \e[?1;2c (Keith hat dies wahrscheinlich beobachtet). Diese Antworten sind jedoch keine willkürlichen Zeichenfolgen. Trotzdem 2cist es eine schlechte Idee , eine ausführbare Datei auf Ihrem System zu haben, die fatal ist.

Update: Die Risiken sind tatsächlich größer als gedacht, da der Titel eines XTM-Fensters gesetzt und der Titel über entsprechende Escape-Sequenzen zurückgesendet werden kann ( http://www.securityfocus.com/bid/6940/ ). . Im Gegensatz zum obigen Beispiel kann der Titel eine fast beliebige Zeichenfolge sein.


Das ist schon sehr knapp.
Gunchars

Es gibt eine noch ältere Funktion - eine Antwortnachricht, die als Antwort auf das ENQ (Ce) -Zeichen gesendet wird. Bei einem echten VT100 wird er vom Benutzer im SETUP-Menü des Terminals eingestellt. Vielleicht gibt es Terminal-Emulatoren, die es erlauben, es aus der Ferne
einzustellen

16

Dies ändert den Terminaltitel in GNOME Terminal 3.6.1, sofern er nicht durch etwas wie PS1 überschrieben wird :

printf "\033]2;Script Kiddie was here\007"

Öffnen Sie jetzt ein neues GNOME-Terminal-Fenster, um die catVersion zu testen :

printf "\033]2;Script Kiddie was here\007" > test.bin
cat test.bin

Ja, hiermit wird auch der Titel des Terminals festgelegt.

Früher gab es ein Sicherheitsproblem mit einem Escape-Code, das dazu führte, dass der Titel in die Befehlszeile gedruckt wurde , sodass Sie effektiv eine Datei erstellen konnten, die bei der catAusgabe gedruckt wurde (ich bin mir nicht sicher, ob Sie dort eine neue Zeile einfügen könnten). beliebige Befehle. Autsch!


8

Während die Verwendung catmöglicherweise nicht zur Ausführung von Code führt, werden Escape-Codes verarbeitet, sodass Sie leicht in die Irre geführt werden können, wenn Sie glauben, dass das Skript harmlos ist, obwohl es tatsächlich böswillig ist.

Hier ist ein Beispielbefehl, den Sie ausführen können, um ein "bösartiges" Shell-Skript zu erstellen:

echo -e '#!/bin/sh\necho "...doing something bad here..."\nexit\n\033[A\033[Aecho "Hello dear reader, I am just a harmless script, safe to run me!"' > demo.sh
chmod a+x demo.sh

Wenn Sie die Datei untersuchen, scheint dies harmlos genug zu sein:

$ cat demo.sh
#!/bin/sh
echo "Hello dear reader, I am just a harmless script, safe to run me!"

Aber sollten Sie es tatsächlich ausführen ...

$ ./demo.sh 
...doing something bad here...

Das Skript schließt rohe Escape-Codes ein, um den Cursor ein paar Zeilen nach oben zu bewegen, sodass der Rest des Skripts über dem schädlichen Code geschrieben wird und ihn verbirgt.

Nahezu jedes andere Programm enthüllt das Skript für das, was es ist. Nur Programme , die (wie nicht den Dateiinhalt verarbeiten cat, moreund less -r) die irreführende Ausgabe.

Beachten Sie dies tailund führen Sie headauch zu derselben irreführenden Ausgabe. Die Verwendung von "less + F" ist daher sicherer als "tail -f".


Das ist ziemlich problematisch ... können Sie sehen , was los ist tatsächlich ausgeführt wird echo $(cat demo.sh), cat demo.sh | grep . --color=yes(Anmerkung: das --color=yesist , was die „bösartigen“ Code hier zeigt) oder die Build-in cat -v demo.sh.
Charlie

Wahr oder falsch, es ist eine Antwort auf eine andere Frage: Wie vertrauenswürdig ist catdie Datei bei der Anzeige von Inhalten .
Incnis Mrsi

@IncnisMrsi: Es ist nicht wirklich eine Antwort auf eine andere Frage. Diese Antwort warnt davor, dass cat Escape-Codes anzeigt, und bietet ein einfaches Beispiel mit nur einer Art von Escape-Code, aber es gibt viele andere. In Kombination mit bestimmten Terminals können diese Tasten neu zuordnen, Dateien überschreiben und theoretisch sogar Befehle ausführen . Wenn Sie also die Gefahr der Anzeige von Escape-Codes erkannt haben, werden Sie verstehen, dass cateine beliebige Datei manchmal nicht sicher ist , wie die gestellte Frage zeigt!
Malvineous,

6

Ich habe es definitiv erlebt, xtermbeliebige Zeichen in sich einzufügen, als hätte ich sie getippt. Und gelegentlich hat dies anscheinend Newline-Charakter enthalten, so dass ich ngwerm:0riu: command not foundals Antwort bekam. Ich sehe keinen Grund, warum jemand keine Datei erstellen konnte, die bestimmte, schädliche Befehle senden würde. Also ja, zumindest einige Terminals sind anfällig für Angriffe mit willkürlichen Auswirkungen.


2

Nun, ein Terminal-Emulator druckt im Grunde genommen einfach die an ihn gesendeten Zeichen aus.

Alles andere als das einfache Drucken eines Zeichens auf die aktuelle Position, wie das Festlegen einer neuen Position, das Ändern der Farbe, das Ändern des Titels usw., erfolgt durch Escape-Sequenzen.

Die unterstützten Escape-Sequenzen bestehen normalerweise aus gut definierten Standards wie ANSI , die keine Möglichkeit zum Starten anderer Prozesse definieren. Obwohl es möglich wäre, eine solche Sequenz zu implementieren, ist mir kein Terminalemulator bekannt, der solche Dinge absichtlich zulässt.

Theoretisch könnte ein Fehler wie ein Pufferüberlauf verwendet werden, um eine beliebige Funktionalität auszulösen. Dies wäre aber auch in so ziemlich jeder anderen Binärdatei möglich.


0

Im Allgemeinen besteht kein Risiko, eine beliebige Datei zu catten. Meine übliche Methode zum Analysieren einer Datei besteht darin, Folgendes zu tun:

$ file <mystery file>
$ strings <mystery file> | less

Mit dem obigen Befehl kann ich den Dateityp bestimmen. Mit filedem stringsBefehl kann ich identifizierbare Zeichenfolgen aus potenziellen Binärdateien ausgeben, deren Herkunft ich nicht sicher bin.

Beispiel

Dateiausgabe
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
String-Ausgabe
$ strings /bin/ls|less
...
across
vertical
single-column
force
never
auto
if-tty
slash
%b %e  %Y
%b %e %H:%M
long-iso
main
posix-
sort_files
?pcdb-lswd
dev_ino_pop
Try `%s --help' for more information.
Usage: %s [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
...

3
Das Ausführen von Zeichenfolgen für eine unbekannte Datei kann ebenfalls problematische Folgen haben. lcamtuf.blogspot.fi/2014/10/…
Jan Wikholm

@IncnisMrsi - lies den ersten Satz !!!!
slm

OK, meine vorherige Aussage zurückziehend. Die Antwort ist kurz, mit verwirrender Terminologie, unbegründet und offensichtlich unvollständig. Beachten Sie, dass aus Sicherheitsgründen "willkürlich" ≠ zufällig ist, wie in Ihrem bevorzugten Betriebssystem verteilt.
Incnis Mrsi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.