Malware durch file_exists?
halloWelt
- php
0 Tom0 Sven Rautenberg0 Texter mit x0 ichbinich
Hallo,
ich habe in den letzten Tagen das Problem, dass immer wieder schädliche Code in meine Dateien (JavaScript, HTML und PHP) gelangt. Ich weiß allerdings nicht, wo die Lücke liegen kann. Ich habe außer meinem Projekt nur Piwik in der aktuellen Version auf dem Server. In meinem Projekt gibt es nur eine Datei, die in Dateien schreiben kann und auf die wird nicht verlinkt und sie ist mit einem Passwort geschützt (das aber evtl. nicht gut genug ist). Ich führe keinen Code aus der Datenbank per eval oder ähnlichem aus und in die Datenbank kann eigentlich auch kein schädlicher Code gelangen, weil ich immer real_escape_string verwende.
Ich öffne Dateien, deren Name per URL-Parameter übergeben wurde. Mit file_exists prüfe ich zunächst, ob es eine Datei mit dem Namen und entsprechender Endung gibt. Ich lese die Datei mit file() ein und verarbeite sie dann weiter. Kann es sein, dass file_exists() oder file() unsicher ist und sich auch falsche Dateinamen übergeben lassen, die dann irgendwie dazu führen, dass der Inhalt einer anderen Datei geändert wird?
Hello,
dein Projekt scheint ja öffentlich zu sein. Kannst Du uns einen Link darauf geben?
Hast Du Upload-Möglichkeiten (z. B. für Bilder) in deinem Projekt? Das ist die einfachste Angriffsstelle.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
Ich kann zwar leider nichts zum eigentlichen Thema beitragen, würde aber gern eine Nachfrage stellen.
Hast Du Upload-Möglichkeiten (z. B. für Bilder) in deinem Projekt? Das ist die einfachste Angriffsstelle.
Hast du dafür Beispiele oder Sicherheitstipps? Ich schreibe derzeit an einer Klasse für den Upload von Bildern. Könntest du kurz umreissen auf was du genau anspielst und wie man sich davor schützen kann?
Dank dir!
Hast du dafür Beispiele oder Sicherheitstipps? Ich schreibe derzeit an einer Klasse für den Upload von Bildern. Könntest du kurz umreissen auf was du genau anspielst und wie man sich davor schützen kann?
Wenn ein Script den Upload einer beliebigen Datei ermöglicht, kann man nicht nur harmlose Dinge wie Bilder hochladen sondern auch Scripte die andere Dateien auslesen und zurückgeben können.
Der beste Schutz wäre eine Überprüfung einer solchen Datei, ob sie wirklich ein Bild ist oder was anderes. Im einfachsten Fall könnte man den Dateiheader (die ersten paar Bytes) überprüfen, ob das einer der paar wenigen gängigen Dateitypen ist.
Hello,
Hast du dafür Beispiele oder Sicherheitstipps? Ich schreibe derzeit an einer Klasse für den Upload von Bildern. Könntest du kurz umreissen auf was du genau anspielst und wie man sich davor schützen kann?
Jau. Der Rumpf des Artikels ist wieder da.
http://wiki.selfhtml.org/wiki/Artikel:PHP/File_Upload
Da steht eigentlich schon genug Stoff drin für den Anfang.
Ich werde ihn mal fortführen die nächsten Tage...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Moin!
ich habe in den letzten Tagen das Problem, dass immer wieder schädliche Code in meine Dateien (JavaScript, HTML und PHP) gelangt. Ich weiß allerdings nicht, wo die Lücke liegen kann.
Informiere deinen Hoster und bitte ihn um Mithilfe. Zum einen kennt er seine Server vermutlich besser, hat häufiger mit dem Problem zu tun, und sieht eventuell schneller die Ursache. Andererseits hat er außerdem auch den Blick auf sein Gesamtsystem, den du gar nicht bekommen kannst. So kann er beispielsweise auch erkennen, dass ein Angriff auf einen ganz anderen Kunden erlaubt, bei dir die Dateien zu verändern (bei Shared Hosting).
Ich habe außer meinem Projekt nur Piwik in der aktuellen Version auf dem Server.
Das ist ja trotzdem verdächtig, auch wenn es die aktuelle Version ist. Klingt nach viel Code, den du nicht im Detail kennst.
Hast du dein Access-Log angeschaut? Error-Log? Überhaupt alle Logs, die du sehen kannst. Die zeitliche Korrelation zwischen "Originaldatei" und "schädliche Datei" kannst du durch permanentes Prüfen der Dateiinhalte über einen gewissen Zeitraum (gern auch automatisiert) hinbekommen, sofern die Logfiles zu viele unstrukturierte Informationen haben.
In meinem Projekt gibt es nur eine Datei, die in Dateien schreiben kann und auf die wird nicht verlinkt und sie ist mit einem Passwort geschützt (das aber evtl. nicht gut genug ist). Ich führe keinen Code aus der Datenbank per eval oder ähnlichem aus und in die Datenbank kann eigentlich auch kein schädlicher Code gelangen, weil ich immer real_escape_string verwende.
Wenn es dein eigener Code nicht ist, ist es anderer Code.
Wenn du kein Shared Hosting hast, ist Piwik schuld. Oder irgendein Code-Rest, den du nicht erkennst.
Ich öffne Dateien, deren Name per URL-Parameter übergeben wurde. Mit file_exists prüfe ich zunächst, ob es eine Datei mit dem Namen und entsprechender Endung gibt. Ich lese die Datei mit file() ein und verarbeite sie dann weiter. Kann es sein, dass file_exists() oder file() unsicher ist und sich auch falsche Dateinamen übergeben lassen, die dann irgendwie dazu führen, dass der Inhalt einer anderen Datei geändert wird?
Beide Funktionen sind ungefährlich, führen zumindest keinen Code aus.
file_exists() und dann include() wäre gefährlich. Aber include() allein wäre genauso gefährlich. Heißt aber: Das Prüfen mit file_exists() ist keine Sicherheitsprüfung! Es ist eine Prüfung nach Existenz einer Datei - mit dieser Datei kann man dann unsicheren Unfug treiben oder auch nicht.
- Sven Rautenberg
Auch wenn es nicht die Ursache für dein Problem ist, ein Nachtrag.:
Ich führe keinen Code aus der Datenbank per eval oder ähnlichem aus und in die Datenbank kann eigentlich auch kein schädlicher Code gelangen, weil ich immer real_escape_string verwende.
Wenn Du nichts aus der Datenbank ausführst, dann ist es das, was dich vor den Auswirkungen von schädlichem Code in der DB schütz. real_escape_string schützt nicht davor schädlichen Code in die DB zu bekommen (der dort keinen Schaden anrichten kann), es schützt nur deine DB vor Angriffen auf die DB (ausspähen, löschen, ...).
Wenn Du gespeicherten Code wieder aus der DB ausliest, dann ist er so wie er reingekommen ist. real_escape_string soll daran auch nichts ändern, im Gegenteil, es soll genau das (und nicht mehr) gefahrlos machen und somit ermöglichen.
Hallo,
ich habe in den letzten Tagen das Problem, dass immer wieder schädliche Code in meine Dateien (JavaScript, HTML und PHP) gelangt.
Hast du deine Zugangsdaten (FTP, Datenbank, Kundenlogin) umgehend geändert und trotzdem wurden erneut Daten verändert?
vg ichbinich