Aquariophile: Raetsel .... Provider-Kaeppchen und der böse Hacker-Wolf

Das ist eine Story vom Rotkaeppchen (alias: Provider) und dem bösen Wolf (alias: Hacker)

Es war einmal vor langer Zeit... (und ist leider auch noch heute so)

Apache ist der user "www-data"
www-data darf /home/ lesen um die Daten im Web darzustellen.

Der user "hacker" ist bööööse und will immer hacken.
Darum hat er auch eine CHROOT umgebung.

Seine Shell die sich bei seinem Login automatisch chrootet
kommt da niiie heraus.

Wenn nun ein Perlscript in /home/hacker/cgi-bin/  liegt,
welches / auslesen will, so wird dem bösen hacker nur sein eigenes
HomeDirectory angezeigt.

Weil das ist ja sein persoenliches /
Das ist auch gut so.

Da "hacker" aber ein Kunde ist, und viel Geld zahlt,
darf er natürlich auch ein Verzeichnis für WWW haben.

So kann die ganze Welt seine Daten unter www.foo.bar/hacker/
sehen und aufrufen.

Nun hat aber der lieber Herr Provider ein Problem.
Weil das boese Script das / ausliest ist nicht mehr in der CHROOT
von "hacker" sondern wird von user "www-data" ausgefuehrt und kann somit
/ lesen.

Und selbst wenn / nicht lesbar waere,
und selbst wenn www-data chrooted waere,
/home/ MUSS der user "www-data" IMMER lesen koennen....
und zwar /home/

So kann der boese hacker der nix taugt alle tolles scripte der
supertolles weltbesten Programmierer auslesen....

Und das tut AUA-Dolle-Weh!!

Was kann das arme Rotkaeppchen (Alias: Provider) tun??

LG
Aquariophile

  1. Was kann das arme Rotkaeppchen (Alias: Provider) tun??

    am besten die Großmutter fragen, bevor sie gefressen wird ;-)

    1. Hi Christoph

      am besten die Großmutter fragen, bevor sie gefressen wird

      eine Grossmutter gibts nur wenn man Reseller ist,
      wenn der boese Hackerwolf angreift frisst der das Providerkaeppchen selbst und es verpruegeln einem die Kunden.

      LG Aquariophile

      1. okok ...

        wenn der boese Hackerwolf angreift frisst der das Providerkaeppchen selbst und es verpruegeln einem die Kunden.

        mal abgesehen davon, daß "Kunden" im Märchen nicht vorkommen: wir hatten ja deinen Thread weiter unten (isser noch da?). Ich dachte, daß vor allem die Anmerkungen von CK dir hätten weitergeholfen haben müssen (ups, jetzt kommt auch noch ein Grammatiker ins Märchen gestolpert), scheint aber nicht so
        Kannst das Märchen mal in Maschinensprache übersetzen? Obwohl für die Mehrheit der Forumsbesucher wahrscheinlich marginal, halte ich das Thema durchaus für diskutierenswert

        LG Aquariophile

        lg retour

        Christoph S.

        1. Hi Christoph

          Also ich find deine antwortgeschwindigkeit ja besser als ICQ :)

          naja also in Techische Sprache uebersetzen glaub ich ist nicht noetig das geht auf der Rechten Hirnhaelfte,
          der der Hirnhaelfte der Bilder und Gestalten besser in die Forumsbesucher rein...

          Ausserdem ist es eh sehr sachlich geschrieben...

          Interessanter Teil: Die Apache Developer wussten keine Loesung :)

          1. rehi ...

            Also ich find deine antwortgeschwindigkeit ja besser als ICQ :)

            geradezu märchenhaft, gelle ;-)
            was mir fehlt (und auch weiter unten nicht ganz klar wurde), ist:

            Weil das boese Script das / ausliest ist nicht mehr in der CHROOT
            von "hacker" sondern wird von user "www-data" ausgefuehrt und kann somit / lesen.

            nämlich: wenn "hacker" gleich "ww-data" ist, was macht das schon? Er ist ja nach der Linneschen Nomenklatur auch noch ein Mitglied einer bestimmten Gruppe, und der kannst du doch vorschreiben (als Provider) was sie darf und wer ihr sonst noch angehört. Laß ihn doch in seiner Gruppe allein  -  will ja eh keiner mit ihm spielen. Und sag der ganzen Gruppe, daß sie so ziemlich gar nix tun darf

            Interessanter Teil: Die Apache Developer wussten keine Loesung :)

            vielleicht lesen sie zuwenig Märchen ...

            Christoph S.

            1. Hallo Christoph,

              nämlich: wenn "hacker" gleich "ww-data" ist, was macht das
              schon? Er ist ja nach der Linneschen Nomenklatur auch noch
              ein Mitglied einer bestimmten Gruppe, und der kannst du
              doch vorschreiben (als Provider) was sie darf und wer ihr
              sonst noch angehört. Laß ihn doch in seiner Gruppe allein
              -  will ja eh keiner mit ihm spielen. Und sag der ganzen
              Gruppe, daß sie so ziemlich gar nix tun darf

              Das bringt nichts. Das Script laeuft mit denselben Rechten
              wie der Apache selber.

              Gruesse,
               CK

              1. |hi CK,

                Das Script laeuft mit denselben Rechten
                wie der Apache selber.

                richtig.
                Ich bin mir nicht sicher, ob als letztes Hilfsmittel sich ins "Script" noch eine Abfrage einbauen läßt, ob es denn nun vom "bösen Hacker" aufgerufen wurde. Ist das der Fall, liefert das Script halt seine Leseergebnisse gar nicht erst an den Apache zurück, sondern schreibt sie in eine temporäre Datei und schickt diese Datei sofort nach /dev/nul.
                Müßte doch prinzipiell machbar sein.

                Grüße aus Berlin

                Christoph S.

                1. Hi Christoph,

                  Ich bin mir nicht sicher, ob als letztes
                  Hilfsmittel sich ins "Script" noch eine Abfrage
                  einbauen läßt, ob es denn nun vom "bösen Hacker"
                  aufgerufen wurde.

                  der Autor des Skripts ist aber leider der Hacker ... oder habe (auch) ich das Märchen mißverstanden?

                  Viele Grüße
                        Michael

          2. Hallo Aquariophile,

            demnaechst drueck dich bitte normal aus, dann kann man auch
            verstehen, was du willst.

            Zum Thema: wie ich bereits sagte, das ist nicht einfach. Du
            brauchst, wenn du den Apachen in einer chroot-Umgebung laufen
            lassen willst, massig Speicherplatz und pro User eine IP.
            Jeder User muss dann also seine eigene Apache-Instanz
            bekommen, dessen ausfuehrender User der Domain-User ist. Das
            braucht *viel* Speicher, sowohl HD als auch RAM.

            Die Alternative waere ein CGI-Wrapper, der ueber seteuid(2)
            (oder setuid(2)) und chroot(2) die Zugriffsrechte beschraenkt.
            Der Wrapper muesste natuerlich mit root-Rechten laufen.

            naja also in Techische Sprache uebersetzen glaub ich ist
            nicht noetig das geht auf der Rechten Hirnhaelfte,
            der der Hirnhaelfte der Bilder und Gestalten besser in die
            Forumsbesucher rein...

            Wohl kaum.

            Ausserdem ist es eh sehr sachlich geschrieben...

            Dito.

            Interessanter Teil: Die Apache Developer wussten keine
            Loesung :)

            Kein Wunder, bei deiner Ausdrucksweise.

            Gruesse,
             CK

            1. Hallo,

              demnaechst drueck dich bitte normal aus, dann kann man auch
              verstehen, was du willst.

              Wie kann man nur so humorlos sein? *kopfschüttel*
              Vielleicht sollten alle Fragesteller am besten ihre Fragen in mathematischen Formalismen beschreiben. Dann sind wir sicher, dass sie das Problem auch exakt widergeben.
              (komischerweise habe ich auf Anhieb begriffen, was er wollte)

              Die Alternative waere ein CGI-Wrapper, der ueber seteuid(2)
              (oder setuid(2)) und chroot(2) die Zugriffsrechte beschraenkt.
              Der Wrapper muesste natuerlich mit root-Rechten laufen.

              ... mit root-Rechten laufen ...
              Das reißt natürlich eine neue "Sicherheitslücke". Weil generell am besten ist, wenn so wenig wie möglich als root läuft.
              Aber der Ansatz als solches (CGI-Wrapper) ist schon richtig.
              Vielleicht sollte man in den Zusammenhang auf suExec hinweisen. http://httpd.apache.org/docs/suexec.html

              Gruss
                 MichaelB

  2. Was kann das arme Rotkaeppchen (Alias: Provider) tun??

    a) Apache selbst compilieren und auf die toolen Vorkonfigurationen
       der Distributoren verzichten.
       a1) suexec nutzen und das erlaubte Verzeichnis angeben!
    b) in httpd.conf das Verfolgen von Links abschalten
    c) in httpd.conf bei den virtuellen Hosts die User eintragen fuer suexec
    d) die Document-Roots der user durch ACLs schützen und nur
       fuer den User und www freigeben.  (nur nötig bei PHP-Unterstützung)

    Wenn der Provider allerdings so doof ist und als einziges Konfigurationstool nur "yast" kennt und keine Ahnung von eigenständigen compilieren hat, dann sollte er das Netz von seinem Dienst befreien!

    Ciao,
     Wolfgang