Wie Hacker Backdoors in PNG-Bildern verstecken (und wie Sie Ihre Website schützen)
Der Datei-Upload ist eine grundlegende Funktion vieler Websites, von Profilbildern bis hin zu Dokumenten-Uploads. Doch was passiert, wenn ein harmlos wirkendes .png-Bild eigentlich ein trojanisches Pferd ist, das einem Angreifer volle Kontrolle über Ihren Server verschafft?

Diese Angriffsform wird als File Upload Vulnerability bezeichnet. Hacker nutzen dabei eine geschickte Manipulation auf Ebene des Hex-Codes, um Sicherheitsfilter zu umgehen.

Wie funktioniert der Trick mit den Magic Bytes?
Computersysteme und Server identifizieren Dateitypen nicht nur anhand der Endung wie .jpg oder .png. Sie lesen die ersten Bytes einer Datei, die sogenannten Magic Bytes. Bei einem PNG-Bild beginnt der Hex-Code immer mit 89 50 4E 47.
Ein Angreifer kann ein bösartiges PHP-Skript ein sogenanntes Reverse Shell, das Zugriff auf Ihr Server-Terminal gewährt nehmen und die Magic Bytes eines PNGs an den Anfang dieser Datei injizieren.
Beim Hochladen werden schwache Validierungsmechanismen der Website getäuscht, die nur die erste Zeile oder den MIME-Typ prüfen. Ihr Server stuft die Datei als reguläres PNG ein und speichert sie. Wenn der Angreifer einen Weg findet, den Server dazu zu bringen, die Datei als .php-Skript zu lesen, wird der Code ausgeführt und Ihre Website vollständig kompromittiert.
Wie schützen Sie sich gegen diesen Angriff?
Misstrauen gegenüber Benutzereingaben ist oberstes Gebot, doch für Datei-Uploads sind weiterführende Schritte erforderlich:
- Bild-Neugenerierung: Verwenden Sie Bibliotheken wie GD in PHP, um hochgeladene Bilder neu zu verarbeiten und zu generieren. Dies löscht automatisch bösartigen Code, der in Metadaten oder am Dateiende versteckt ist.
- Ausführungsblockade: Konfigurieren Sie Ihren Server wie Apache oder Nginx so, dass die Ausführung von PHP-Skripten im Upload-Verzeichnis strikt unterbunden wird.
- Speicherung außerhalb des Web Root: Speichern Sie hochgeladene Dateien in einem Verzeichnis, das nicht direkt über eine öffentliche URL zugänglich ist.
Cybersicherheit ist nicht schwarz-weiß. Jede Eingabe sollte als potenzielle Bedrohung behandelt werden, bis das Gegenteil bewiesen ist.