Michael Neubert: Wann wird CHMODE XXX gefährlich?

Hallo,

bei einem Webprojekt von mir ist es Hackern gelungen, eigene Seiten einzuschleusen, nachdem ich mit CHMODE einige Datei- und Verzeichnisrechte geändert hatte (für Counter, etc.)

Leider ist es mir ein Rätsel, wie sie das bewerkstelligt haben.
Prinzipell stelle ich mir folgende Fragen:

1. Vergibt man auf ein Verzeichnis die Rechte CHMODE 777 (oder 757), ist das dann eine Art Freibrief für Hacker? Können diese dann wie sie wollen, Dateien uploaden und Scripte auf dem Server ausführen?
Diese Einstellungen sind ja z.B. Pflicht, wenn man in PHP Scripten in ein Verzeichnis z.B. Bilder eines Uploads ablegen will.

2. Wie sieht dieselbe Geschichte bei einzelnen Dateien aus:
Bsp: counter.dat  mit CHMODE 777, da in dieser Datei ein Counter angespeichert wird.

3. abc.php mit CHMODE 777 ...Wäre dies dann der absolute best case für Hacker?

Über Antworten würde ich mich sehr freuen, da ich im Netz bisher keine brauchbaren Antworten gefunden habe.

Danke im Vorraus.

Gruß
Michael

  1. Hi,

    1. Vergibt man auf ein Verzeichnis die Rechte CHMODE 777 (oder 757), ist das dann eine Art Freibrief für Hacker?

    nein. Dateirechte alleine sind noch nichts, mit dem man etwas anfangen könnte. Im übrigen macht es wenig Sinn, der Welt mehr Rechte einzuräumen als bestimmten Benutzern - 757 ist insofern mit 777 identisch.

    Können diese dann wie sie wollen, Dateien uploaden und Scripte auf dem Server ausführen?

    Ein Server ist ein Server ist ein Server. Er ermöglicht bestimmte Zugriffsmethoden. Weitere kannst Du implementieren, etwa einen Upload; hier beispielsweise können Sicherheitslücken enttehen. Benutzerrechte haben dabei so ziemlich überhaupt keine Bedeutung - wenn es funktionieren soll, muss der _Server_ die Rechte haben, und das gilt für _jeden_ Benutzer.

    1. Wie sieht dieselbe Geschichte bei einzelnen Dateien aus:

    Es werden die Zugriffsrechte dieser einzelnen Datei geregelt.

    Bsp: counter.dat  mit CHMODE 777, da in dieser Datei ein Counter angespeichert wird.

    Es heißt "chmod", nicht "CHMOD" und schon gar nicht "CHMODE".

    1. abc.php mit CHMODE 777 ...Wäre dies dann der absolute best case für Hacker?

    Nein. Er hat immer noch keinen Zugriff auf die Datei. Und wenn er auf irgendeinem Weg Zugriff erlangt, dann entweder als der Server (der notwendigerweise relativ viel darf) oder als Du (der vermutlich noch mehr darf).

    Über Antworten würde ich mich sehr freuen, da ich im Netz bisher keine brauchbaren Antworten gefunden habe.

    Das liegt daran, dass die Benutzerrechte hier kaum eine Bedeutung spielen. Erst mal muss der Hacker an das System kommen - _das_ muss verhindert werden.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      Können diese dann wie sie wollen, Dateien uploaden und Scripte auf dem Server ausführen?

      Ein Server ist ein Server ist ein Server. Er ermöglicht bestimmte Zugriffsmethoden. Weitere kannst Du implementieren, etwa einen Upload; hier beispielsweise können Sicherheitslücken enttehen. Benutzerrechte haben dabei so ziemlich überhaupt keine Bedeutung - wenn es funktionieren soll, muss der _Server_ die Rechte haben, und das gilt für _jeden_ Benutzer.

      Falsch!

      Richtig konfigurierte Webserver lassen alle Skripten *NUR*
      unter der jeweiligen Kennung des jeweiligen Benutzers laufen!
      Ausnahme sind da nur ....*censored*.... PHP-Skripten, die
      die notwendige Servertechnik nicht unterstützen.

      Bei solchen Servern braucht man sich auch nicht weiter um die
      Dateirechte zu kümmern. Es reicht wenn die Dateien lesbar sind und die Skripten ausfuehrbar.
      Das Skript hat dann die selben Rechte wie der eigene User.
      das heisst. Wenn man ein Sicherheitsloch hat, dann trifft es "nur" einen selbst, nicht aber ggf. noch andere User (sieht man von Serverlast ab).

      Was konnte in deinen fall nun passiert sein?

      2 Moeglichkeiten:

      1. Ein andere Benutzer auf dem Webserver hat gesehen, dass du
      jedermann durch chmod 777 alle Rechte gegeben hast.
      Und da du so freimuetig warst, hat er das dann genutzt.
      Und dies war dann noch nichtmal strafbar! Denn schliesslich hast
      du allen Benutzern die Erlaubnis dazu gegeben, indem du selbst
      allen Benutzern das Recht gabst.

      2. Jemand ausserhalb des Servers war das.
      Dieser Jemand wird nur dann da Dateien hochladen koennen, wenn es ein Skript von dir gab, welches es erlaubt,
         Dateien ungeprueft hochzuladen (Billige upload-Skripten z.B.)
        oder Kommandos auszufuehren.

      In beiden Faellen hast du dann irgendwelche Skripten von irgendeiner Skriptarchiv-Seite gezogen, die nichts taugten, d.h. unsicher waren.
      Hier solltest du halt mal schauen: Was hast du an Skripten und was machen die. Und pruefen die die Eingabe?

      Im Zweifel hier gegen den Angeklagten. Und loeschen.

      Was du weiterhin beachtensolltest: Da jemand schon bei dir was hochladen konnte, ist es moeglich, dass auch deine Zugangsdaten ausgespaeht wurden: Wer schon ein Skript hochladen kann, der kann bestimmt auch ein Batch-Skript in deiner Userumgebung laden, welches alle deine Eingaben protokolliert und etwaige Verbindungsdaten aufzeichnet/weiterschickt.
      Aber ich vermute es nicht.
      Ein echter Hacker haette genau das gemacht (wenn er keine Lust gehabt haette, weiter auf dem System rumzulurken) und er haette sich nicht durch irgendein Skript verraten dass du findest.
      (Ein Cracker haette auch ein anderes Skript, naemlich eine Variante von formmail installiert; Dann waere es dir aufgefallen, wenn du auf einmal von deinem Provider die kündigung kriegst, weil von dir SAM gesendet wird.)

      Wie auch immer. Es war wohl die harmlose Sorte, die bei dir rumgespielt hat.

      Auf alle solltest du daher noch dein Passwort aendern (lassen).
      Und deine gesamten HTML-Dateien noch ungewoehnlichen Inhalten im SourceCode absuchen.

      Viel Spass beim Aufraeumen.

      Ciao,
        Wolfgang

      1. Hi,

        wenn es funktionieren soll, muss der _Server_ die Rechte haben, und das gilt für _jeden_ Benutzer.
        Falsch!
        Richtig konfigurierte Webserver lassen alle Skripten *NUR*
        unter der jeweiligen Kennung des jeweiligen Benutzers laufen!

        ähm, habe ich etwas anderes gesagt?

        1. Ein andere Benutzer auf dem Webserver hat gesehen, dass du
          jedermann durch chmod 777 alle Rechte gegeben hast.

        Wie dies?

        Und da du so freimuetig warst, hat er das dann genutzt.
        Und dies war dann noch nichtmal strafbar! Denn schliesslich hast
        du allen Benutzern die Erlaubnis dazu gegeben, indem du selbst
        allen Benutzern das Recht gabst.

        Jau. Auf dem Webserver ist jeder Benutzer der Webserver.

        1. Jemand ausserhalb des Servers war das.

        Also auf dem Rechner.

        Dieser Jemand wird nur dann da Dateien hochladen koennen, wenn es ein Skript von dir gab, welches es erlaubt,

        Häh? Das Script wäre Teil des Servers (bzw. würde "als Server" ausgeführt werden). Wenn man außerhalb des Servers agiert, braucht man kein Server-Script mehr.

        Auf alle solltest du daher noch dein Passwort aendern (lassen).

        Ja.

        Viel Spass beim Aufraeumen.

        Ja :-)

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi

          Richtig konfigurierte Webserver lassen alle Skripten *NUR*
          unter der jeweiligen Kennung des jeweiligen Benutzers laufen!

          ähm, habe ich etwas anderes gesagt?

          Ich hab's so verstanden als ob du meintest, der Webserveruser != User fuehrte die Skripten aus.

          1. Ein andere Benutzer auf dem Webserver hat gesehen, dass du
            jedermann durch chmod 777 alle Rechte gegeben hast.

          Wie dies?

          "ls -la" ?

          Oder ein "find / > /allowdirs 2>&1 > notalloweddirs"

          Und da du so freimuetig warst, hat er das dann genutzt.
          Und dies war dann noch nichtmal strafbar! Denn schliesslich hast
          du allen Benutzern die Erlaubnis dazu gegeben, indem du selbst
          allen Benutzern das Recht gabst.

          Jau. Auf dem Webserver ist jeder Benutzer der Webserver.

          Oeh..

          So könnte man es sagen.. Ist aber etwas verwirrend zu sagen.
          Weil eigentlich stimmt es nicht.
          Man ist im hoechsten Fall ein Webserver-Child wenn es ein CGI ausfuehrt.

          1. Jemand ausserhalb des Servers war das.

          Also auf dem Rechner.

          Server != Webserver.

          Ich bin von irgendwo aus dem Web/Internet.

          Dieser Jemand wird nur dann da Dateien hochladen koennen, wenn es ein Skript von dir gab, welches es erlaubt,

          Häh? Das Script wäre Teil des Servers (bzw. würde "als Server" ausgeführt werden). Wenn man außerhalb des Servers agiert, braucht man kein Server-Script mehr.

          Der Typ hat die Rechte noch garnicht.
          Wie geht er vor um sie zu bekommen: Er testet oder schaut welche bekannten Skripte mit Exploids auf der Webdomain installiert sind.

          Nachdem er ein unsicheres Skript gefunden hat, wird dies ausgenutzt, d.h. er bekommt Zugriff auf den Userbereich, weil er Kommandos mit Hilfe des Skriptes als User ausfuehren kann.

          Ciao,
            Wolfgang

          1. Hi,

            Ich hab's so verstanden als ob du meintest, der Webserveruser != User fuehrte die Skripten aus.

            ob Webserveruser != User weiß ich nicht; in vielen Fällen ist das so.

            1. Ein andere Benutzer auf dem Webserver hat gesehen, dass du
              jedermann durch chmod 777 alle Rechte gegeben hast.
              Wie dies?
              "ls -la" ?

            Die Sicherheitslücke ist dann, über den Server Shell-Kommandos ausführen zu können. In dem Moment, wo sowas möglich ist, sind Dateirechte das geringste Problem.

            Jau. Auf dem Webserver ist jeder Benutzer der Webserver.
            Man ist im hoechsten Fall ein Webserver-Child wenn es ein CGI ausfuehrt.

            Das meinte ich mit Webserver. Dass man nicht die Rechte des Vaters hat (gewöhnlich root), möchte ich doch wohl vom Hersteller der Server-Software erwarten ;-)

            1. Jemand ausserhalb des Servers war das.
              Also auf dem Rechner.
              Server != Webserver.

            Von einem anderen Server war bisher nicht die Rede. Daher gehe ich von einem üblichen _und_ gefährlichen aus, nämlich einem Telnet- oder SSH-Server, der durchaus die Charakteristika "auf dem Rechner" erfüllt. Ein FTP-Server kann etwas weniger, aber dennoch immer noch ebenso tituliert werden - zumindest Dateimanipulationen sind bis zu einem recht hohen Grad möglich.

            Dieser Jemand wird nur dann da Dateien hochladen koennen, wenn es ein Skript von dir gab, welches es erlaubt,
            Häh? Das Script wäre Teil des Servers (bzw. würde "als Server" ausgeführt werden). Wenn man außerhalb des Servers agiert, braucht man kein Server-Script mehr.
            Der Typ hat die Rechte noch garnicht.
            Wie geht er vor um sie zu bekommen: Er testet oder schaut welche bekannten Skripte mit Exploids auf der Webdomain installiert sind.
            Nachdem er ein unsicheres Skript gefunden hat, wird dies ausgenutzt,

            Genau das sind die Rechte, von denen ich hier rede. Nur sind es halt keine "chmod"-Rechte.

            Cheatah

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
      2. Hallo,

        auf der Website habe ich einem Verzeichnis die Rechte 777 gegeben, damit ich in dieses Verzeichnis über eine PHP Script Bilder eines Bilduploads (akzeptiert nur Bilder und nichts anderes :-) hineinkopieren kann.

        Da dies aber nun ein Sicherheitsrisiko zu sein scheint, frage ich mich doch, wie ich das Abspeichern von Daten/Bildern dann gestalten soll?

        Wäre es eine sinnvolle Lösung, vom Bildupload Script kurzzeitig die Rechte des Verzeichnisses auf 777 zu setzen -> Bild hineinkopieren -> Verzeichnis zurücksetzen (755)?

        Oder hat jemand einen besseren Vorschlag?

        Danke im Vorraus

        Gruß
        Michael N.

        P.S.: Die oben beschriebene Problematik dürfte ja dann auch z.B. einfache PHP Scripte betreffen (Zähler), welche über eine Datei gewisse Informationen auf dem Server abspeichern, da diese Datei dann entsprechend auch auf 777 gesetzt werden müsste...