Peter K.: Sicherheit bei Updates mit PHP

Hallo,

wir wollen unser eigenes CMS jetzt auch um einen "vernünftigen" Modulmanager erweitern. Das CMS läuft natürlich auf den einzelnen Clientservern, der Modulmanager soll aber die einzelnen Module auch aktualisieren können.

Nun ergeben sich erhebliche Sicherheitsprobleme. Das ganze CMS wird zwar natürlich in andere Hände gegeben, wenn es beim Client installiert wird, aber so ist es dennoch ziemlich abgeschottet. Wenn der Modulmanager sich nun jetzt auch aktualisieren soll, muss er ja eine Datei auf dem zentralen Server öffnen und den Code laden, der dann beim Client in eine Datei geschrieben wird.

Ich habe ein Problem damit, dass jeder x-beliebige, der nicht berechtigt ist den Code zu laden, dann über die entsprechende URL an den code kommen kann. Dies können natürlich auch Hacker sein, die den Code analysieren wollen.

Kann man das irgendwie sicherer machen?

Liebe Grüße aus dem tiefen Westen der Republik :o)
Peter

  1. Ich habe ein Problem damit, dass jeder x-beliebige, der nicht berechtigt ist den Code zu laden, dann über die entsprechende URL an den code kommen kann. Dies können natürlich auch Hacker sein, die den Code analysieren wollen.

    Kann man das irgendwie sicherer machen?

    Nun, das Client-Skript muss sich hald am Server erst authentifizieren, bevor es den Quellcode der Module runterladen kann.
    Das kann über einen einfachen Hash gehen, der bei jedem Client identisch ist (und somit jedem bekannt ist, der dein CMS hat), oder beispielsweise über einen Lizenzschlüssel, sofern dein CMS mit Lizenzen vertrieben wird.

    Aber, auch wenn es natürlich besser ist, dass nicht jeder Beliebige deinen Quellcode lesen kann, sollte das dennoch kein Sicherheitsproblem darstellen. Auch wenn kein Mensch fehlerfrei ist, solltest du dennoch von der Sicherheit deines CMS genug überzeugt sein, sodass du es guten gewissen anderen unter die Nase halten kannst :)

    Gruß,
    Andreas

  2. Hallo,

    Ich habe ein Problem damit, dass jeder x-beliebige, der nicht berechtigt ist den Code zu laden, dann über die entsprechende URL an den code kommen kann. Dies können natürlich auch Hacker sein, die den Code analysieren wollen.

    Wenn das deine einzige Sorge wäre, könntest du beruhigt sein.

    Außerdem, wenn das Analysieren deines Code eine potenzielle Sicherheitslücke darstellt, dann hast du irgendetwas falsch gemacht. Die Sicherheit sollte nicht darauf beruhen, dass der Code geheim bleibt, was nich funktioniert, da jeder der dein CMS einsetzt auch den Code einsehen kann, sondern lieber sollte  dein CMS sicher programmiert worden sein.

    Nun ergeben sich erhebliche Sicherheitsprobleme.

    Die größte Gefahr ist in meinen Augen, dass jmd. deinen Verteilserver knackt/manipuliert.
    Wenn es jmd. schafft, dort einzubrechen und den auszuliefernden Code zu manipulieren, dann lädt jedes CMS dank des automatischen Updates diese manipulierten Code. Das heißt für den Angreifer, dass wenn er es schafft, deinen Server zu unterwandern, er Zugriff auf jedes CMS hat und somit evt. mit einem Schlag tausende CMS unter seine Kontrolle bringen kann. In diesen Code kann er alles einschleusen was er möchte, also könnte er z.B. ein kleines Script schreiben, welches für ihn von jedem CMS die Datenbank kopiert und per Mail zuschickt => tausende senible Daten landen so unter Umständen direkt bei ihm.
    Deswegen sollte man, wenn man soetwas plant, unbedingt seinen Code signieren  und die CMS sollte nur signierten Code akzeptieren. Natürlich muss der private Schlüssel, mit dem der Code signiert wird, seperat aufbewahrt werden, irgendwo sicher bei dir zu Hause an einem PC ohne Internet oder so.

    Persönlich würde mir solch ein Modulmanager nicht gefallen und wäre für mich ein Grund, dein CMS _nicht_ einzusetzen.
    Dieser Modulmanager mit Auto-Update ist gleichzusetzen mit einer Backdoor, du hast die uneingeschränkte Möglichkeit über die Applikationen zu herrschen und jede Menge Unfug zu machen, du könntest ja heimlich die Datenbank kopieren oder ähnliches.

    Ein weiteres Problem sehe ich dabei, was passiert denn mal, wenn durch ein Update das CMS beschädigt wird und seinen Dienst nicht mehr tut? Dies könnte mit einem Schlag alle Systeme bei den Kunden lahm legen. Wie das mit der Haftung dann aussieht, kann ich dir nicht beantworten, so macht man seine Kunden/User aber auf keinen Fall glücklich, wenn durch ein Update das CMS nicht mehr zu erreichen ist.
    Und gerade unrealistisch ist soetwas nicht. Es gibt zig tausend PHP, MySQL und Apache (o.ä.) Konfigurationen, kannst du diese alle vorher testen? Funktioniert der aktualisierte Code mit PHP4, PHP5, hardened-php, mit MySQL3, MySQL4 und MySQL5? Klappt alles, wenn der Safe Mode auf On/Off ist? Und wie sieht es mit register globals, open basdir, magic_quotes_gpc aus? Alles überprüft und gestestet?

    Da man dies nicht alles abdecken kann, kann es gut passieren, dass durch das Auto-Update aufeinmal sehr viele der CMS lahmgelegt werden.
    Und wie verhält sich das Update, wenn der Kunde/User am CMS Source rumgespielt hat? Evt. musste er eine Datei anpassen, damit das CMS bei ihm auf dem Server läuft? Kann man all diese Fälle mit einbeziehen?

    Persönlich wäre mir so ein auto update zu gefährlich, du kannst ihn evt. darauf hinweisen das neue Versionen vorhanden sind, aber alles automatisch zu machen wäre nicht ratsam.

    MFG

    1. Hallo,

      danke für deine Anregung mit dem signierten code. Es war übrigens nirgendwo von einem auto-update die Rede ;-)

      Liebe Grüße
      Peter