Suchen
Inside Forum
Nützliche Links
phpforum.de Tipp
 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > PHP > PHP

PHP Alles rund um PHP

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 26.12.2004, 01:45
Oliver Albers Oliver Albers ist offline
Forum-Mitarbeiter
 
Registriert seit: 03.12.2002
Beiträge: 27.281
Oliver Albers eine Nachricht über ICQ schicken
Standard

Zuerst einmal: ja, eigentlich ist dieses Thema schon abgehandelt mit unserem Dfn-cert warnt vor Angriffen-Thread, den durchzulesen natürlich auch lohnt. Um eventuell ein wenig mehr Aufmerksamkeit zu erheischen habe ich mich aber entschlossen das ganze neu zu posten.

Worum geht es?
Es geht darum, dass es mitlerweile ganz fiese Würmer gibt, die die im o.g. Thread angesprochenen Sicherheitslücken ausnutzen, um sich massenhaft im Web zu verbreiten. Eine Heise News berichtet darüber.
Diese Sicherheitslücke in vielen PHP Skripten führt also dazu, dass Quelltext von anderen Webseiten heruntergeladen und ausgeführt werden kann. Dieser führt dann beliebige Befehle im Kontext des fehlerhaften Skriptes aus.

Die Folgen
Die Folgen dieses Problems können manigfaltig sein. Es kann da anfangen, dass wie bei Santy die Webseite defaced (Seiten werden ersetzt) wird. Enden könnte es - bei zusätzlichem Ausnutzen eventueller weiterer Sicherheitslücken - in der kompletten Übernahme des Servers durch Cracker.

Das konkrete Problem
Konkret wird das Vertrauen ausgenutzt, das manche Programmierer noch den übergebenen Parametern zusprechen. Es werden durch die bisherigen bekannten Varianten der Würmer Parameter an Skripte angehängt, die dann zur Ausführung des Wurmes führen sollen. Es handelt sich ja um ein bekanntes Standardbeispiel:
PHP Quellcode:
<?php
  /*
   * Hier geben wir ein wenig HTML Code aus, der das Layout unserer
   * Seite darstellen soll.
   */


  if (!isset($_GET["seite"]))
  {
    $seite = "start.html";
  } else {
    $seite = $_GET["seite"];
  }

  include $seite; // Genau diese Zeile ist das Problem!
 
  /*
   * Hier würde noch ein wenig HTML ausgegeben
   */

?>
Die markierte Zeile stellt die eigentliche Sicherheitslücke dar. Hier wird entweder seite.html geladen, wenn nichts übergeben wurde oder jede beliebige Seite, die im Parameter übergeben wurde.

Was macht nun der Wurm
Der Wurm sucht sich potentiell anfällige Seiten über bekannte Suchmaschinen und ändert die übergebenen Parameter. Er findet also, dass Ihre Seite index.php?seite=uebermich.html aufgerufen wird und ändert nun den uebermich.html Teil z.B. in etwas wie http://www.boeseseite.com/boesesskript.php, wobei www.boeseseite.com den Quellcode des PHP Skriptes ausliefert, weil der Server kein PHP kann - ansonsten ändert der böse Cracker einfach die Dateieindung auf txt oder etwas ähnliches.

Zu was führt das? Nun, ganz einfach: Wenn sich in boesesskript.php PHP Code befindet wird dieser von unserer index.php ausgeführt.

Ein Beispiel
Man nehme die oben skizzierte index.php und folgende boesesskript.php:
PHP Quellcode:
<?php
  $fp = fopen("testfile.txt", "w");
  fwrite($fp, "Sie sind verwundbar!");
  fclose($fp);
?>
Jetzt rufen wir die Datei auf: http://www.unsereseite.de/index.php?...esesskript.php
Es wird dadurch auf unsererm Webspace eine Datei angelegt. Man muss sich nur noch vor Augen führen, dass boeseskript.php genauso gut alle Dateien hätte löschen können.

Wie ändern?
Nun zum praktischen Teil der Ausführungen: Was muss an unserer index.php geändert werden, damit diese konkrete Sicherheitslücke nicht mehr ausgenutzt werden kann?
Wir müssen dafür sorgen, dass kein Code von fremden Seiten mehr aus "versehen" ausgeführt werden kann. Dazu gibt es verschiedene Lösungsmöglichkeiten. Eine wäre, nicht mehr direkt den Dateinamen zu übergeben, sondern nur noch etwas wie einen Namen der Seite, die wir aufrufen wollen:
PHP Quellcode:
<?php
  /*
   * Dies ist eine sichere index.php - Variante 1 mit Hashes
   */


  $dateien = array(
    "start"     => "start.html",
    "uebermich" => "uebermich.html",
    "impressum" => "impressum.html");

   // HTML Code ausgeben für das Layout

  if (!isset($_GET["seite"]))
  {
    $seite = "start";
  } else {
    $seite = $_GET["seite"];
  }

  include $dateien[$seite];

  // Hier wieder HTML ausgeben
?>
Dem aufmerksamen Leser entgeht nicht, dass man eventuell noch nicht existente Dateien abfangen könnte. Und diese Variante ist natürlich auch äquivalent zu der, die alle möglichen Seiten in einem Switch-Case-Konstrukt aufruft, hat aber nach meiner Meinung eine bessere Lesbarkeit.
Der Nachteil dieser Variante wird auch sofort augenscheinlich: Man muss jede Seite penibel erst einmal im Skript auflisten. Daher kann man sich die Mühe machen und ein klein wenig komplexer werden:
PHP Quellcode:
<?php
  /*
   * Dies ist eine sichere index.php - Variante 2 mit Verzeichnissen
   */


  // Hier HTML Code ausgeben

  if (!isset($_GET["seite"]))
  {
    $seite = "start.html";
  } else {
    $seite = $_GET["seite"];
  }
 
  $seite = basename($seite); //Diese Zeile sorgt dafür, dass Pfadangaben entfernt werden

  if(!file_exists("verzeichnis/$seite"))
  {
    include "404.html";
  } else {
    include "verzeichnis/$seite";
  }

  // Hier wieder HTML ausgeben
?>
In dieser Variante können nur noch alle Dateien geladen werden, die sich in einem bestimmten Verzeichnis befinden. Man erspart sich hier also die auflistung aller Dateien, erkauft sich das aber damit, dass man auf ein gewisses Verzeichnis beschränkt ist.
Dies wird auch durch die zeile mit dem basename() Aufruf sicher gestellt. Findige Bösewichte können damit also auch nicht irgendwelche Dateien auf dem Server ausgeben lassen.

Bin ich damit sicher?
Die traurige Wahrheit: Wahrscheinlich nicht. Es erfordert eine Menge Kentnisse und ständige Kontrolle, um Sicherheitslücken zu schließen. Wenn die Hinweise korrekt umgesetzt wurden, so ist man wenigstens gegen diese eine spezielle Art von Übergriff auf die eigene Seite geschützt. Es gibt jedoch durchaus noch andere Angriffsfläschen gegen PHP Skripte, z.B. sogenannte SQL Injections. An dieser Stelle möchte ich jedoch darauf nicht eingehen und verweise auf http://www.php-faq.de/ch/ch-security.html
__________________
Olli
Mit Zitat antworten
  #2  
Alt 29.12.2004, 18:49
kaiinc.php kaiinc.php ist offline
Besucher
 
Registriert seit: 01.05.2004
Beiträge: 40
Standard

DANKE!!!

für diese anschauliche Darlegung des Problems.

Kai
Mit Zitat antworten
  #3  
Alt 07.01.2005, 13:52
oimel oimel ist offline
Vorbildlicher Helfer
 
Registriert seit: 13.10.2003
Ort: Berlin
Beiträge: 10.294
Standard

Noch ergänzend: Das zweite Skript, das Oliver angeboten hat, ist nur bedingt sicher, denn immerhin kann man auch hier wieder durch relative Pfadangaben zumindest alle PHP-Skripts aufrufen, die sich bereits auf dem Server befinden. Als Beispiel setze man nur mal ein

$seite="../../irgendeinVerzeichnis/irgendeineDatei";

Bietet das System dann auch noch (an beliebiger anderer Stelle) irgendwelche Upload-Möglichkeiten, steht der Serverübernahme nichts mehr im Weg.

Ich halte deshalb Variante 1 für die einzig wirklich sichere.
__________________
Probieren Sie auch den Zwetschgenkuchen
http://www.bastian-frank.de/
Mit Zitat antworten
  #4  
Alt 07.01.2005, 18:16
Oliver Albers Oliver Albers ist offline
Forum-Mitarbeiter
 
Registriert seit: 03.12.2002
Beiträge: 27.281
Oliver Albers eine Nachricht über ICQ schicken
Standard

Nun gut, ich bezog das natürlich nur auf sicher gegenüber den bekannten Würmern. Aber Recht hast du, wenn mans chon Beispiele einstellt sollten sie auch komplett sicher sein, ich werde das mal jetzt entsprechend ändern.
__________________
Olli
Mit Zitat antworten
  #5  
Alt 07.01.2005, 18:19
Oliver Albers Oliver Albers ist offline
Forum-Mitarbeiter
 
Registriert seit: 03.12.2002
Beiträge: 27.281
Oliver Albers eine Nachricht über ICQ schicken
Standard

So, geändert =)
__________________
Olli
Mit Zitat antworten
  #6  
Alt 20.01.2005, 17:03
wormsworldparty wormsworldparty ist offline
Engagierter Besucher
 
Registriert seit: 20.01.2005
Beiträge: 769
Standard

ist zum glück bei mir kein sicherheitsproblem denn der server is so eingestellt das man nur interne skripte includen kann...

Aber trotzdem gut das du das hier postest....
Mit Zitat antworten
  #7  
Alt 20.01.2005, 18:01
oimel oimel ist offline
Vorbildlicher Helfer
 
Registriert seit: 13.10.2003
Ort: Berlin
Beiträge: 10.294
Standard

so sicher kann man nen server gar nicht einstellen, als dass man nicht jeden Eingabewert genau prüfen muss...
__________________
Probieren Sie auch den Zwetschgenkuchen
http://www.bastian-frank.de/
Mit Zitat antworten
  #8  
Alt 21.01.2005, 00:08
PiMMOk PiMMOk ist offline
Vorbildlicher Helfer
 
Registriert seit: 04.03.2004
Ort: Nürnberg
Beiträge: 2.082
PiMMOk eine Nachricht über ICQ schicken
Standard

sicher ist gar nix, aber man kann das bestmögliche gegen eine übernahme oder infizierung tun
__________________
--
Meine Webseite Mein Blog - mit hookers und blackjack!
Mit Zitat antworten
  #9  
Alt 21.01.2005, 15:24
wormsworldparty wormsworldparty ist offline
Engagierter Besucher
 
Registriert seit: 20.01.2005
Beiträge: 769
Standard

ja, aber wenn ich jetzt
PHP Quellcode:
<? include('http://www.phpforum.de/forum/phpforum2_PHP__30671_1106236896.html'); ?>
würs nich funktionieren...



P.S.: meine signatur ist so gemeint das ich eigentlich amateur in php bin aber wenn ich das poste sieht das aus als könnte ich nixxx...
Mit Zitat antworten
  #10  
Alt 21.01.2005, 15:58
wormsworldparty wormsworldparty ist offline
Engagierter Besucher
 
Registriert seit: 20.01.2005
Beiträge: 769
Standard

und das hier auch nich:
PHP Quellcode:
<?php
  $fp = fopen("testfile.txt", "w");
  fwrite($fp, "Sie sind verwundbar!");
  fclose($fp);
?>
aber das ist bei den wenigsten so eingestellt....

P.S.: das muss man schon betonen: ich finds gut das ihr auf sowas hinweist....
Mit Zitat antworten


Antwort

Lesezeichen

Stichworte
sicherheit

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Server wird als Spam-Sender ausgenutzt,Scripts werden attackiert daniquani PHP 5 05.02.2007 12:30
unsichere php.ini l0cu7u5 Administration 8 13.04.2006 11:28
SSL Problem, Sichere/Unsichere Objekte srahmel PHP 4 07.11.2005 10:01
Unsichere Cookies dtail PHP 5 16.08.2005 12:38
Zum Thema "unsichere php scripts" kstadt PHP 1 29.12.2004 18:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:20 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC