it-swarm.com.de

Welche Sicherheitsrisiken gibt es, wenn jemand PHP Skripte) hochladen darf?

Angenommen, ein Partner möchte ein PHP - Skript auf meinen Apache-Server hochladen. Welche Art von Chaos könnte dadurch verursacht werden?

Welche PHP Parameter stellen eine Bedrohung dar? Wenn diese PHP Parameter vollständig deaktiviert sind, kann PHP auf meinen Servern eingefügt werden) dann sicher sein?

Dies sind einige PHP Parameter, von denen ich weiß, dass sie eine Sicherheitslücke darstellen. Welche anderen sind dort, die unsicher sind?

Schreiben an den Server :

  1. fwrite

  2. file_get_contents

  3. FILE_APPEND

Dateien auf dem Server öffnen :

  1. öffnen

  2. file_get_contents

  3. umfassen

  4. fread

  5. url_get_contents

  6. curl_init

  7. curl_setopt

Dateien löschen :

  1. verknüpfung aufheben
  2. nicht gesetzt

Gibt es andere Sicherheitslücken, über die ich nachdenken sollte, bevor ich Partnern erlaube, .php-Dateien auf meinen Server hinzuzufügen? Ich stelle mir vor, dass es eine Menge geben könnte, von der ich nichts weiß.

Ich mache mir auch Sorgen um Schleifenskripte, die all meine RAM und CPU, Backdoor-Zugriffsangriffe, Malware und dergleichen) verbrauchen könnten. Gibt es Maßnahmen, die ich ergreifen kann, um dies zu verhindern? und mehr vom Geschehen?

Wenn Javascript, JQuery oder andere Sprachen im Skript PHP) eingebettet sind, sind diese ebenfalls gefährlich? Und welche Parameter in anderen Sprachen muss ich deaktivieren, um meinen Server zu schützen?

Wie schützen Websites wie jsfiddle und codepen ihre Websites und ermöglichen es den Nutzern, ihren eigenen Code zu veröffentlichen?

27
Michael d

Es ist sehr gefährlich, weil Sie jemandem erlauben, eine PHP - Datei mit unbekanntem Code und unbekannten Absichten hochzuladen. Wenn Sie diese Funktionalität als Teil Ihrer Website benötigen, sollten Sie Ihren Server z Beispiel:

  • Legen Sie nur ein Verzeichnis zum Hochladen fest PHP Dateien von Benutzern, Sie sollten die richtigen Benutzerberechtigungen (Lesen, Schreiben oder Ausführen) für dieses Verzeichnis anwenden. Denken Sie daran, einen bestimmten Benutzer für dieses Verzeichnis zu erstellen und nicht root zu verwenden Benutzer.
  • Sie können eine .htaccess-Datei für das Verzeichnis erstellen und dann bestimmte Einstellungen für dieses Verzeichnis festlegen ( Konfigurieren der .htaccess-Datei ).
  • Überprüfen Sie den Eingabebenutzer, auch wenn Sie ein bestimmtes Namensformat und eine maximale Größe für PHP Dateien) festlegen sollten, wenn eine PHP Datei nicht mit diesem oder seinem Format übereinstimmt Die Größe ist größer als zulässig. Dann sollte die Anwendung dem Benutzer nicht erlauben, diese Datei hochzuladen.
  • Verwenden Sie die Kanonisierung, bevor Sie Dateifunktionen verwenden, z. B.: realpath , basename . Dies hilft Ihnen, einen Pfadüberquerungsangriff zu vermeiden.
  • Sie sollten PHP Funktionen mit hohem Risiko deaktivieren, zum Beispiel: exec, Shell_exec. Sie können dies über die Datei php.ini tun. Sie können beispielsweise die folgende Zeile hinzufügen, um Funktionen für das Betriebssystem zu deaktivieren Befehlsausführung und Einstellungsverwaltung:

    disable_functions =exec,passthru,Shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
    

    Die folgende Zeile hilft beim Deaktivieren von Funktionen zum Einschließen oder Öffnen von Dateien aus externen Quellen:

    allow_url_fopen=Off
    allow_url_include=Off
    

Offizielle Dokumentation php.ini Datei

Dies sind einige grundlegende Empfehlungen. Sie sollten Ihre Webanwendung und Ihre Anforderungen analysieren, um die richtigen Einstellungen für Ihren Server und Ihre Webanwendung festzulegen.

Ich hoffe, diese Informationen helfen Ihnen.

33
hmrojas.p

Wenn Sie jemandem erlauben, ein PHP - Skript auf Ihren Server hochzuladen und auszuführen, geben Sie dieser Person effektiv das Recht, alles zu tun, was sie kann, wenn sie SSH-Zugriff mit Benutzername/Passwort für hat Verarbeiten Sie das Skript PHP wird ausgeführt als.

Wenn die betreffende Person das Skript über Apache ausführen würde, könnte die Person alles tun, was der Apache-Benutzer auf Ihrem Server tun könnte.

Als zusätzliches Risiko könnte diese Person den angegebenen Zugriff nutzen, um eine Eskalation von Berechtigungen zu versuchen, was wahrscheinlich gegen die rechtliche Vereinbarung verstoßen würde, die Sie mit ihnen haben (Sie haben eine rechtliche Vereinbarung, nicht wahr?).

29
Jacco

Für mich klingt es so, als würden Sie sich gleich in den Fuß schießen. Das Hochladen und Ausführen von Personen, denen Sie nicht vertrauen, PHP auf Ihrem Server) ist äußerst gefährlich. Hier sind einige Dinge, die ein Angreifer versuchen könnte:

  • Führen Sie Batch-Befehle aus, die Ihren Webserver übernehmen. Es kann dann als Staging-Ground verwendet werden, um andere Server aus Ihrem Netzwerk heraus anzugreifen.
  • Lesen Sie Dateien, die Geheimnisse enthalten, z. Passwörter, Verschlüsselungsschlüssel, TLS-Schlüssel usw.
  • Führen Sie XSS-Angriffe (mit JavaScript) durch, um Sitzungscookies oder andere Anmeldeinformationen von Ihren Benutzern zu stehlen. Dies setzt voraus, dass die hochgeladenen Dateien in derselben Domäne oder Subdomäne wie andere Anwendungen ausgeführt werden.

Die Liste geht weiter und weiter und weiter. Es gibt Möglichkeiten, wie Sie versuchen können, diese Angriffe zu blockieren ( hmrojas.p hat einige Vorschläge), aber das ist nicht einfach. Blacklisting-Funktionen sind ein Anfang, aber Blacklisting ist nie mehr als eine teilweise Verteidigung. Selbst für die besten Experten ist es eine Herausforderung, jemanden zu enthalten, der PHP] ausführen kann.

Wenn Sie der Person, die den Code geschrieben hat, nicht vertrauen, müssen Sie den Code sorgfältig und manuell prüfen, um sicherzustellen, dass er harmlos ist. Das kostet Zeit und Mühe und ist nicht mit dem direkten Hochladen von Dateien kompatibel.

Manchmal ist der einzige Gewinnzug, nicht zu spielen. Ich würde sagen, dies ist einer dieser Fälle.

25
Anders

Während es Websites gibt, auf denen Sie PHP Code on Demand (dh v4l )) ausführen können, schränken sie Ihre Möglichkeiten stark ein und springen Sie durch einige wichtige Reifen, um es sicher zu machen

Ich verwende ein Setup, bei dem Skripte in einer kleinen virtuellen Maschine ausgeführt werden. Aus Sicherheitsgründen hat dieser Computer kein Netzwerk und nur ein minimales Dateisystem. Skripte werden von einem Daemon (in Golang geschrieben) ausgeführt und Ergebnisse (mit Statistiken) werden an eine PostgreSQL-Datenbank gemeldet. Alle Ergebnisse werden gespeichert und verwendet, um Durchschnittswerte für die Leistungsübersicht bereitzustellen.

Ich würde Benutzern nicht erlauben, PHP Skripte in einer Live-Umgebung hochzuladen. Wir hatten einmal einen Praktikanten, der ein Bild-Upload-Skript schrieb. Außer er hat vergessen, irgendetwas an der Datei zu überprüfen, die er akzeptierte. Jemand hat ein PHP Malware-Skript aus der Türkei hochgeladen und versucht, es zu übernehmen (er wäre auch damit durchgekommen, wenn nicht andere Sicherheitsmaßnahmen auf dem Server gewesen wären).

17
Machavity

PHP verfügt über zahlreiche Funktionen zum Deaktivieren von Funktionen und zum Einschränken bestimmter Aktionen, sodass es in gemeinsam genutzten Hosting-Szenarien verwendet werden kann. Daher ist es viel sicherer, Benutzern das Hochladen von PHP-Skripten zu ermöglichen, als Perl-Skripten, wenn Ihr Webserver und Ihre PHP-Instanz korrekt konfiguriert sind.

Ich möchte also eine andere Sache als die Sicherheit von urlopen und ähnlichem ansprechen: Sie erlauben Leuten, interaktive Websites zu betreiben.

Die Folgen sind gefährlich, unabhängig davon, wie viel Netzwerk oder Festplatte IO sie herstellen können, da sie beispielsweise eine Phishing-Site einrichten können, die sich schlecht auf Ihre Domain- und IP-Reputation auswirkt.

Sie landen also nicht auf einer schwarzen Liste, weil Spam-Mails blockiert werden, weil PHP das Senden von E-Mails nicht zulässt, sondern möglicherweise, weil Sie ein Skript ausführen, das nach den Facebook-Anmeldungen des Benutzers sucht.

5
allo

Sie erwähnen einen Apache-Server, aber nicht, ob PHP installiert) ist oder nicht.

Jede Software kann ohne die andere verwendet/installiert werden.

Beide Softwareteile sind für mehrere Betriebssysteme verfügbar. Sie haben nicht erwähnt, welche hier im Spiel ist.

In dem Fall, dass PHP auf dem Server installiert ist:

Das Risiko besteht darin, dass das Benutzerkonto PHP läuft unter, über Administratorrechte für den Computer verfügt) alles in der Bibliothek PHP) tun kann.

Sollte dieses Konto keine Administratorrechte haben, schränkt dies die Möglichkeiten ein.

Einige Betriebssysteme verfügen über erkennbare/bekannte Exploits, mit denen nicht administrative Konten Administratorrechte erhalten können. Diese werden als Exploits zur Eskalation von Berechtigungen bezeichnet. Wenn einer verwendet wird, können sie in der Bibliothek PHP) alles tun.

Für den Fall, dass PHP nicht auf dem Server installiert ist:

Es gibt wenig bis gar kein Risiko. Eine PHP Datei ist nur eine Textdatei mit Anweisungen, die PHP interpretiert und wirkt. Es ist nicht schädlicher als eine Textdatei mit einem Rezept für Eintopf.

2
Miles Prower

Sie können dies auf keinen Fall „sichern“. Jede Möglichkeit, jemandem/jemandem zu erlauben, Code nach Belieben auf einem System auszuführen, kann zu einer vollständigen Systemübernahme führen, entweder aufgrund der Ausführung aller Anweisungen aufgrund von Fehlern im System, die versuchen, die Verwendung bestimmter Funktionen zu verhindern.

Sogar eine Skriptsprache in einem Gefängnis/Chroot/Container als dedizierter Benutzer kann letztendlich Schwachstellen (vorhandene/neue) ausnutzen, die einen vollständigen Root-Zugriff und mehr ermöglichen (d. H. Firmware-Zugriff). Damit müssen sich Shared Hosting-Anbieter den ganzen Tag auseinandersetzen. Der größte Teil der Vorbeugung und Korrektur kommt von zwei Dingen:

  1. Legal; Listen Sie im Voraus auf, was sie in einem Vertrag tun können und was nicht

  2. Prozess; Entlassungen und Wiederherstellungsprogramme haben, um Verstöße/Verluste zu beheben

1
John Keates