Ausführbare Dateien unter Windows tarnen
Published 26 July, 2012Achtung: Dieser Eintrag soll keine Beschreibung/Aufforderung zur Sabotage sein, sondern lediglich ein Gefühl für Sicherheitslücken durch Unicode-Zeichen vermitteln und gleichzeitig davor warnen, selber Opfer einer solchen Lücke zu werden.
Lateinische Schrift (sowieso nahe Abkömmlinge) wird von links nacht rechts gelesen. Es gibt jedoch auch viele Schriften (z.B. arabische) welche von rechts nacht links gelesen werden. Um einen Computer zu signalisieren, in welche Richtung eine Bytefolge nun ausgegeben werden soll, gibt es im Unicode-Zeichensatz einige nicht-druckbare Zeichen, welche die Schreibrichtung des nachfolgenden Textes angeben. Interessant sind dabei die Zeichen "right-to-left override" (RTLO, 0x202E) und "left-to-right override" (LTRO, 0x202D).
Der Windows-Explorer zeigt Dateinamen immer in der korrekten Schreibweise (nach Unicode) an. Das heißt, dass die tatsächliche Reihenfolge der Zeichen, die wir sehen, eine komplett andere sein kann:
Byte-Folge | Darstellung |
DasIstEinTest.txt | DasIstEinTest.txt |
[RTLO]DasIstEinTest.txt | txt.tseTniEtsIsaD |
[RTLO]abc[LTRO]abc | abccba |
[RTLO]abc1[LTRO]abc2 | abc21cba |
Man sieht, dass der LTR-Text auch immer vor den RTL-Text gezogen wird und der RTL-Text in umgekehrter Reihenfolge dargestellt wird.
Das interessante Dabei ist, dass die Dateiendung (und somit der Dateityp) an der ANSI-Schreibweise festgemacht wird und nicht an der Unicode-Darstellung. Das bedeutet, dass man eine Dateiendung ebenfalls gut verbergen kann und die Datei ganz harmlos aussehen lassen kann. Da seit einigen Windows-Versionen per Default die Dateiendungen sowieso nichtmehr angezeigt werden, ist das für die meisten Benutzer sowieso irrelevant, aber wenn diese Dargestellt werden, sollte man sich keinenfalls darauf verlassen.
Angenommen, ich lege eine PE-Executable mit dem Dateinamen "h[RTLO]gpj.exe" an, wird diese Datei als "hexe.jpg" angezeigt (man könnte auch das Icon noch in das des Bildbetrachters von Windows ändern) und außer dem kleinen Vermerkt "Anwendung" dürfte diese Datei genauso aussehen, wie eine Bilddatei. Wenn man drauf klickt kommen ein paar Warnmeldungen, ob man *wirklich* diese fremde Datei ausführen möchte, aber ich behaupte mal, dass diese Meldung von 90% aller Benutzer ohne Beachtung weggeklickt wird.
Anschließend läuft eine Binary mit Userrechten.
D.h.: Wenn ihr das nächste mal einen USB-Stick auf dem Firmenparkplatz findet... guckt euch nicht die Bilder darauf an ;-)
Übrigens ist *.exe nicht die einzige Dateiendung, die Windows sofort ausführt. Dazu gehören unter anderem auch scr, pif, hta, scf, bat, cmd, psc1, vbs, inf, usw. Die meisten davon können entweder direkt eine PE-Executable sein, oder haben zumindest das Recht dazu, eine auszuführen.
Diese "Lücke" ist übrigens seit Jahren bekannt, und wird von MS auch offenbar nicht gepatched. Eigentlich verhält sich das Betriebssystem auch korrekt: Die Darstellung ist richtig. Ob der Anwendungstyp nun durch die Darstellung oder die "echte" Bytefolge bestimmt werden sollte ist etwas anderes.
Aber wenn man Opfer dieses Problems wurde, dann hat man selber mindestens einmal unbedacht auf "OK" gedrückt :-)