Gefährliche Whitespaces

Vor ein paar Tagen habe ich einen Blogpost über PHP/JS Malware verfasst, deren Zielobjekt die Plattform osCommerce war und die eine interessante neue Technik für das Verbergen von Schadcode benutzte. Heute stieß ich dann auf ein noch ausgeklügelteres Sample eines PHP-Infektors – auch wieder in Zusammenhang mit einer anfälligen e-Commerce-Lösung.

Als ich heute Morgen zur Arbeit kam, bat mich der Kollege unseres polnischen Büros ihn bei der Suche nach einem Schadcode, der den Online-Shop eines Freundes infiziert hätte, zu unterstützen. Die mit dem Browser angezeigte HTML-Seite enthielt einen Link zu einem jquery.js Script in irgendeiner zufällig generierten cx.cc Domain, obwohl in den Quelldateien auf dem Server nirgends ein Hinweis auf diesen Link zu finden war. Ein Verdikt zu erlangen war einfach – dieser Codeabschnitt war durch irgendein infiziertes PHP-Script dynamisch hinzugefügt worden.

Also schauten wir uns alle auf dem Server abgelegten PHP-Dateien an und waren zunächst etwas irritiert, da wir auf den ersten Blick nicht wirklich etwas Verdächtiges erkennen konnten. Aufgrund der Erfahrung mit der Malware div_colors begann ich jedoch, den Code Zeile für Zeile zu analysieren. Eine kleine Funktion am Anfang einer der Haupt-PHP-Dateien erregte schließlich meine Aufmerksamkeit.

Sein unverdächtiges Aussehen verdankt dieser Code einer mehrstufigen Obfuskation. Die erste (und sehr trickreiche) Stufe besteht darin, dass die Funktion vorgibt, auskommentiert zu sein. Bei näherem Hinschauen stellt man fest, dass die Kommentar-Tags verkehrt platziert sind, da der Kommentar an jedem Zeilenende beginnt und am Anfang einer neuen Zeile endet. Einfacher zu erkennen ist diese Auffälligkeit mittels Syntax-Highlighting. Irreführend ist weiterhin, dass die Funktionsbeschreibung, zusammen mit den Namen in dem Code, darauf schließen lässt, dass die Funktion etwas mit einigen Libraries zu tun hat.

Und nun der interessanteste Punkt: Wie arbeitet diese Funktion tatsächlich? Könnten Sie das auf den ersten Blick sagen? Hierbei ist es entscheidend, zu verstehen, was zwischen den Klammern der Variablen $session_key steht: „nichts“ ist hier mit Sicherheit die falsche Antwort ;). Zwar nicht gerade offensichtlich, aber hier steht tatsächlich mehr als nur eine Folge von Leerzeichen: nämlich eine Mischung aus Leerzeichen und Tabulatoren. Diese Abfolge ist deutlich zu erkennen, wenn die nicht druckbaren Zeichen in einem Editor angezeigt werden.

Die Funktion splittet diesen Whitespace-Mix in 8-stellige Abschnitte und ändert dann alle TAB-Zeichen in „1“ und alle Leerzeichen in „0“. Auf diese Weise erhält sie den Binärcode, der anschließend in einen Dezimalwert umgewandelt und als ASCII-Zeichen gedruckt wird. Sehr einfallsreich, Herr Malware-Schreiber!
Die Ausführung der PHP-Datei, die diese CoreLibrariesHandler() Funktion beinhaltet, führt zu einem schädlichen Link, der am Ende von HTML-Dateien angehängt ist:

Trojan.PHP.Injecter.c hinzugefügt.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.