Nur bestimmte Perl-Anwendungen erlauben!

testit

Well-Known Member
Hallo,

kennt jemand eine Möglichkeit, die Interpretation (Ablauf) von PERL-Programmen auf bestimmte PERL-Programme (bspw. Namen) einzuschränken?

Versuche, andere PERL-Prozesse zu starten, sollen auf diese Weise unterbunden werden (wenn jemand nicht weiss, wie die erlaubten Namen sind ;)

Danke und Gruss
testit
 
Wenn du z.B. eine Reihe Perl Skripte in einem cgi-bin Ordner anbieten willst, sollte die einfachste Möglichkeit sein, keine Schreibrechte in cgi-bin zu geben. Auf diese Weise können nur diese Skripte, sofern sicher programmiert, verwendet werden.
 
Hallo,

Deine Überlegung ist im Grunde richtig, allerdings nur im Zusammenhang mit CGI-Anwendungen und eben nicht, worauf meine Frage abzielt, mit Perl-Programmen allgemein, also auch jene, die man nicht als CGI-Anwendungen startet.

Hintergrund meiner Frage ist folgender: Es ist ja bekannt, dass viele PHP-getriebene Foren immer wieder mit neuen Varianten von Web-Worms konfrontiert werden, die von irgendwelchen Domains Perlcode einschleussen und ausführen.

Unabhängig von Patches halte ich es für eine gute Idee, die Ausführung von PERL-Programmen auf dem Server dahingehend zu beschränken, dass nur noch bestimmte Prozesse (bzw. Prozessnamen) als Perl-Programme vom Perl-Interpreter ausgeführt werden.


Nette Grüsse
testit
 
Das ist ein allgemeines Problem mit Ausführbarkeit. Wenn nicht Perl dann immer noch Shell Skripte oder einfach PHP. Die beste Lösung wäre hier wohl den Apachen in eine Jail zu sperren und PHP restriktiv zu konfigurieren.
 
Dein HTTP-Server sollte auf maximal 2 Teilbäume deiner Verzeichnisstruktur Schreibrechte haben: /tmp und /documentroot (woimmer das auch ist), wobei es beim Documentroot natürlich drauf ankommt, was da dann wirklich ausgeliefert wird, ob man +w braucht oder nicht.

Mache jetzt für /tmp und dein /documentroot eine eigene Partition und mounte diese noexec. Lücken im HTTP-Server die die Benutzerrechte nicht eskalieren können damit dann zwar Code nach /tmp schreiben, ihn aber nicht ausführen.
 
Noexec ist nur da um menschlichem Versagen vorzubeugen. Es verhindert nicht die Ausführung von Code mit einem Interpreter.
 
Hintergrund meiner Frage ist folgender: Es ist ja bekannt, dass viele PHP-getriebene Foren immer wieder mit neuen Varianten von Web-Worms konfrontiert werden, die von irgendwelchen Domains Perlcode einschleussen und ausführen.
Wenn man schon wissentlich und freiwillig unsicheren Code auf seinem Webserver einsetzt, dann erlaubt man diesem (hier dem PHP-Interpreter/Modul) nicht das benutzen von System/Shell Exec - Funktionen. Über suExec für PHP-Scripte lässt sich auch einiges Regeln.

BTW muss es ja, wie schon gesagt, kein Perl-Code sein der Nachgeladen wird. Kann ja auch PHP-Code sein, der über's CLI ausgeführt wird, "normale" Shell-Scripte, usw...
 
Ich würde den Apache in ein Jail Packen. Alles was nicht benötigt wird gar nicht erst installieren (Perl, Ruby, Python etc). PHP nur als Apache-Modul und nicht als cli bauen. Wenn Du nun noch shell_exec(), system(), exec(), passthru() und popen() per php.ini verbietest und open_basedir vernünftig setzt, solltest Du halbwegs sicher sein.

Zumindest hab ich so gute Erfahrung gemacht.
 
Back
Top