PHP: Safe_Mode nötig?

Bash, Shell, PHP, Python, Perl, CGI
markusk
Posts: 140
Joined: 2003-05-04 20:14

PHP: Safe_Mode nötig?

Post by markusk »

Hallo!

Auf meinem Server (verwaltet durch Confixx) ist Safe_Mode auf "on". Ist dies notwendig? Ich meine, wenn ich open_basedir immer auf /home/www/webX setze (in jedem VHost), dann kann doch nichts passieren, oder irre ich mich jetzt?

Gruß Markus
arty
Userprojekt
Userprojekt
Posts: 729
Joined: 2002-06-12 10:11

Re: PHP: Safe_Mode nötig?

Post by arty »

Du irrst dich. Nutze PHP als CGI mit suPHP und du kannst den Safe Mode deaktivieren.

bye
arty
markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: PHP: Safe_Mode nötig?

Post by markusk »

Kannst du mir mal ein konkretes Beispiel nennen, wie dadurch doch Gefahren entstehen können?
darkspirit
Posts: 553
Joined: 2002-10-05 16:39
Location: D'dorf

Re: PHP: Safe_Mode nötig?

Post by darkspirit »

Schau doch mal ins PHP-Manual und informier dich, was der Safe-Mode alles bewirkt. Damit beantwortet sich deine Frage dann von selbst ;)
markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: PHP: Safe_Mode nötig?

Post by markusk »

http://www.debianhowto.de/howtos/de/sup ... odphp.html

Ich benutze Confixx. Wofür wird mod_php benötigt, also wann müsste ich dies in den VHosts aktivieren?
andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen

Re: PHP: Safe_Mode nötig?

Post by andreask2 »

arty wrote:Du irrst dich. Nutze PHP als CGI mit suPHP und du kannst den Safe Mode deaktivieren.
Naja, komt drauf an wogegen man sich schützen will, oder? IMHO ist das nur sinnvoll wenn man shared Hosting betreibt und verschiedene User gegeneinander abgeschottet werden sollen, oder?

Angenommen es gibt nur einen User, da ist das IMHO nicht nötig.

Zumindest ist das die Situation bei mir.

Wenn ich in diesem Szenario jetzt Apache/PHP so gut wie möglich absichern will, was habe ich da für Möglichkeiten? Angenommen ein PHP-Script enthält tatsächlich eine Lücke die es dem Angreifer ermöglicht eigenen Code auszuführen, dann sind ja alle Sicherungen von PHP rellativ nutzlos, da ein Angreifer über Shell-Kommandos alle Einschränkungen seitens PHP wie open_basedir... umgehen kann.

Das heißt man muss hier ansetzen, dass der Angreifer auch über die Shell, wo er Befehle ja mit den Rechten des Apachen ausführt, nichts anrichten kann. Aber IMHO ist das leider nicht so ohne weiteres möglich, da der Apache normalerweise Daten auf die Platte schreiben können muss, und das kann man dann auch entsprechend ausführen.

Und wenn man die Rechte des Apachen bengrenzt kann der Angreifer das ganze mit irgendwelchen Root-Kits aushebeln. Das heißt wieder, man muss hier ansetzen, ein chroot kann er ebenfalls umgehen, und auch mit ständig aktuellen Paketen kann man das Risiko nur stark minimieren aber nicht abschalten. Das heißt, wenn man wirklich Sicherheit will muss man Kernel mit zusätzlichen Sicherheitspatches verwenden, die eben gegen solche Angriffe schützen, z.B. grsec...

Das ist zumindest mein aktueller Stand ;-)

Wenn ich schreibe dass eine Sicherheitsmechanismus ausgehebelt werden kann heißt das aber IMHO nicht dass man auch drauf verzichten sollte, denn einen gewissen Schutz bietet jeder Sicherheitsmechanismus, und kann so möglicherweise verhindern, dass z.B. sensible Daten ausgelesen werden können...


Viele Grüße
Andreas
darkspirit
Posts: 553
Joined: 2002-10-05 16:39
Location: D'dorf

Re: PHP: Safe_Mode nötig?

Post by darkspirit »

Klar kommt es darauf an, was auf welche Weise auf dem System läuft. Ich würde deine Aussage aber eher umdrehen und behaupten, dass PHP per CGI mit suexec bzw. suPHP eher Pflicht ist und die Ausnahme mit mod_php nur auf einem System ohne weitere User sinnvoll ist.

Wenn die Serverdienste selbst eine Sicherheitslücke haben, sind alle Features von PHP in der Richtung natürlich nutzlos, aber es geht ja beim Safe-Mode eher darum, die Rechte der Scripte einzugrenzen und diese Funktionalität ist durchaus sinnvoll, allerdings auch wieder mit der oben genannten "Ausnahme" bei einem Server ohne weitere User. Da kann man evtl. darauf verzichten, aber wie du selbst anmerkst, sollte man nicht auf Sicherheitsmechanismen verzichten, auch wenn sie möglicherweise ausgehebelt werden können. Beispielsweise schreibe ich alle PHP-Skripte so, dass sie ohne register_globals auskommen, auch wenn ich das Script natürlich so entwickeln könnte, dass es trotzdem sicher ist, aber ich möchte auf die Kontrolle durch PHP nicht verzichten.. man kann immer Fehler machen ;)

Wenn der Apache eine Sicherheitslücke hat, die dem Angreifer erlaubt, Befehle als Webserver-User auszuführen, schützt beispielsweise ein chroot doch erstmal ganz gut, ein Root-Kit kann ja sowieso erst installiert werden, wenn der Angreifer schon zu Root-Rechten gekommen ist, also bräuchte es noch eine weitere Sicherheitslücke an anderer Stelle für den letzten Schritt. Hier greift natürlich ein Schutz auf Kernelebene gut, da gebe ich dir Recht.
andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen

Re: PHP: Safe_Mode nötig?

Post by andreask2 »

Ich habe mir gerade noch was "tolles" überlegt ;-)

Also, ich würde noch was beim Partitionieren beachten:

Ich würde zum einen /tmp als auch das Verzeichnis in dem die ganzen Dateien liegen die der Apache braucht(Scripte...) in eine jeweils eigene Partition stecken, und die mit noexec mounten.

Und auf allen anderen Verzeichnissen dem Apachen gar keien Rechte einräumen. Das hat den Vorteil, dass ein Angreifer keine eigenen Sachen Systemaufrufe(exec...) ausführen kann. Damit ist er auf die Möglichkeiten von PHP beschränkt(AFAIK).

Nur, die Sache hat bei mir einen großen Haken, leider brauche ich ein PERL-Script mit bestimmten Funktionalitäten die PHP nicht bietet, das heißt ich ich muss aus PHP heraus auf den PERL-Interpreter starten können. Und damit hat ein Angreifer wieder alle Möglichkeiten von PERL zur Verfügung.

Das Problem, ich muss an einigen Stellen Dateien schreiben können, das heißt ja dass Apache zumindest PERL-Scripte schreiben könnte und wenn der PERL-Interpreter zur Verfügung steht kann ein Angreifer darüber ein eigenes PERL-Script auch ausführen. Kann man das irgendwie verhindern oder beschränken? Hm, am besten wäre wohl auf die PERL-Script zu verzichten, nur kann PHP PERL an dieser Stelle leider nicht ersetzen.

ODer gibt es eine Möglichkeit aus einem PERL-Script eine Art binary zu machen, so dass es den Interpreter irgendwie einbindet und der Interpreter selber nicht merh zur Verfügung steht? Sowas kann dann ja ausführbar sein, aber man kann das ja in ein Verzeichnis legen wo der Apache keine Schreibrechte besitzt...

Ich hoffe das war jetzt nicht zu sehr OT ;-)

Was sagt Ihr allgemein zu den Ã?berlegungen, oder ist das alles am Ende einfach zu umgehen? ich wüßte im Moment allerdings nicht wie.


Grüße
Andreas