Shared Hosting. Es ist die billige Option, oder? Und für einen großen Teil der Bevölkerung ist das alles, was sie jemals brauchen werden, um ihre Website oder Web-Anwendung zu hosten. Und wenn es gut funktioniert, ist Shared Hosting skalierbar, schnell und sicher.
Aber was passiert, wenn es nicht gut gemacht wird?
Nun, da fangen gefährliche Sicherheitsfragen an. In diesem Fall besteht die Gefahr, dass Ihre Website unleserlich wird oder die privaten Daten, die Sie behalten, verloren gehen. Aber ärgere dich nicht. Die überwiegende Mehrheit der Web-Hosts haben angemessene Sicherheitsmaßnahmen. Es ist nur die Fly-by-Night, Schnäppchen-Keller Gastgeber müssen Sie vorsichtig sein.
Wir werden die Sicherheitsprobleme bei Shared Hosting untersuchen. Aber lasst uns zuerst darüber sprechen, was eine Shared-Hosting-Plattform sicher macht.
Was macht einen sicheren Web-Host?
Es gibt einige herausragende Sicherheitsüberlegungen, die in Bezug auf Shared Hosting gemacht werden sollten.
- Jeder Benutzer auf dem Server sollte von anderen Benutzern isoliert sein und sollte nicht in der Lage sein, auf die Dateien anderer Benutzer zuzugreifen oder diese zu ändern.
- Eine Sicherheitslücke in der Logik einer Website auf dem Server sollte sich nicht auf andere Benutzer auswirken.
- Der Server wird regelmäßig gepatcht, aktualisiert und überwacht, um Architektursicherheitsprobleme zu beheben.
- Jeder Benutzer sollte über einen eigenen isolierten Datenbankzugriff verfügen und darf keine Änderungen an den gespeicherten Datensätzen oder Tabellenberechtigungen anderer Benutzer vornehmen.
Auch hier erfüllen die meisten Webhosts diese Anforderungen für ihre gemeinsamen Angebote. Wenn Sie jedoch mehrere Websites auf einem Server hosten oder neugierig sind, wie Ihr Hosting-Unternehmen stapelt oder gar daran denkt, eine eigene Hosting-Firma zu gründen und herauszufinden, wie Sie Ihre Benutzer schützen können, lesen Sie bitte auf.
Aber zuerst, ein Disclaimer
Bevor wir uns mit den häufigen Angriffen auf Shared Hosting auseinandersetzen, möchte ich nur betonen, dass dieser Beitrag nicht als erschöpfende Liste potenzieller Sicherheitsprobleme angesehen werden kann (und nicht gelesen werden sollte).
Sicherheit ist, mit einem Wort, groß. Es gibt viele Möglichkeiten, wie Sie eine Website kompromittieren können. Dies gilt doppelt für Shared Hosting. Sie in einem einzigen Artikel zu bedecken, war nie in Sicht.
Wenn Sie über Ihre Sicherheit paranoid sind, erhalten Sie einen VPS oder dedizierten Server. Dies sind Umgebungen, in denen Sie (zum größten Teil) absolute Kontrolle darüber haben, was passiert. Wenn Sie nicht sicher sind über die verschiedenen Arten von Web-Hosting, lesen Sie diesen Artikel Die verschiedenen Formen der Website-Hosting erklärt [Technologie erklärt] Die verschiedenen Formen der Website-Hosting erklärt [Technologie erklärt] Lesen Sie mehr von meinem Kollegen, James Bruce.
Ich sollte auch betonen, dass dieser Beitrag nicht als Angriff auf Shared Hosting ausgelegt werden soll. Vielmehr ist es ein rein akademischer Blick auf die Sicherheitsfragen rund um diese Kategorie von Web-Hosting.
Verzeichnis-Traversal
Beginnen wir mit Directory-Traversal-Attacken. Diese Art von Angriff ermöglicht Ihnen den Zugriff auf Dateien und Verzeichnisse, die außerhalb des Web-Root gespeichert sind.
In reinem Englisch? Nun, stellen wir uns vor, dass Alice und Bob denselben Server verwenden, um ihre Websites zu hosten. Alices Dateien sind in / var / www / alice gespeichert, während Bobs Dokumente in / var / www / bob zu finden sind. Stellen wir uns vor, dass es auf dem Server einen weiteren Ordner gibt (/ usr / crappyhosting / myfolder), der eine unverschlüsselte Klartextdatei (wir nennen sie pwd.txt) mit Systembenutzernamen und Passwörtern enthält.
Mit mir bis jetzt? Gut. Nun stellen wir uns vor, dass Bobs Website PDF-Dateien bereitstellt, die lokal generiert werden, und auf die lokale Datei in der URL verwiesen wird. Etwas wie:
http://example.com/file?=report.pdf
Was würde passieren, wenn ich die Datei 'report.pdf' durch einige UNIX-Parameter ersetzen würde, die das Verzeichnis ändern?
http://example.com/file?=../alice/
Wenn der Server falsch konfiguriert ist, können Sie dann das Dokumentenstammverzeichnis von Alice sehen. Interessant, aber wir sind viel mehr an dieser saftigen Paßdatei interessiert. Accio Passwörter !
http://example.com/file?=../../../usr/crappyhosting/myfolder/pwd.txt
Es ist wirklich so einfach. Aber wie gehen wir damit um? Das ist einfach.
Schon mal von einem wenig bekannten Linux-Dienstprogramm namens chroot gehört ? Sie haben wahrscheinlich schon erraten, was es tut. Dadurch wird der Linux / UNIX-Stamm in einen beliebigen Ordner versetzt, sodass Benutzer diesen nicht beenden können. Effektiv stoppt es Directory-Traversal-Angriffe in ihren Spuren.
Es ist schwer zu sagen, ob Ihr Gastgeber dies an Ort und Stelle hat, ohne gegen das Gesetz zu verstoßen. Um es zu testen, würden Sie schließlich auf Systeme und Dateien zugreifen, auf die Sie keine Zugriffsberechtigung haben. In diesem Sinne wäre es vielleicht sinnvoll, mit Ihrem Webhost zu sprechen und sich zu erkundigen, wie sie ihre Benutzer voneinander isolieren.
Betreiben Sie Ihren eigenen Shared-Hosting-Server und verwenden Sie chroot nicht, um Ihre Benutzer zu schützen? Zugegeben, deine Umgebung kann schwierig sein. Zum Glück gibt es eine Fülle von Plugins, die das einfach machen. Sehen Sie sich insbesondere mod_chroot an.
Befehlsinjektion
Lass uns zu Alice und Bob zurückkehren. Also, wir wissen, Bobs Web-Anwendung hat ein paar ... Ahem ... Sicherheitsfragen drin. Eine davon ist die Kommando-Injection-Schwachstelle, mit der Sie beliebige Systembefehle ausführen können. Eine Kurzanleitung zur Einführung in die Linux-Befehlszeile Eine Kurzanleitung zur Einführung in die Linux-Befehlszeile Mit Linux können Sie viele erstaunliche Befehle ausführen und es ist wirklich nicht schwer zu lernen. Weiterlesen .
Bobs Website ermöglicht es Ihnen, eine Whois-Abfrage auf einer anderen Website auszuführen, die dann im Browser angezeigt wird. Es gibt ein Standard-HTML-Eingabefeld, das einen Domänennamen akzeptiert und dann den Whois-Systembefehl ausführt. Dieser Befehl wird ausgeführt, indem der PHP-Befehl system () aufgerufen wird.
Was würde passieren, wenn jemand den folgenden Wert eingibt?
Beispiel.com && cd ../alice/ && rm index.html
Gut, lasst uns das kaputt machen. Einige davon könnten Ihnen vertraut sein, wenn Sie das Handbuch Erste Schritte zu Linux Erste Schritte zu Linux Erste Schritte zu Linux Ein Leitfaden für Anfänger zu Linux gelesen haben! Sie haben wahrscheinlich von Linux gehört, dem kostenlosen Open-Source-Betriebssystem, das sich gegen Microsoft durchgesetzt hat. Lesen Sie mehr E-Book, das wir 2010 veröffentlicht haben, oder haben Sie einen Blick auf unseren Linux Command Line Cheat Sheet geworfen.
Zunächst wird eine Whois-Abfrage auf example.com ausgeführt. Dann würde das aktuelle Arbeitsverzeichnis in Alices Dokumentenstamm geändert. Dann würde es die Datei "index.html" entfernen, die die Indexseite ihrer Website ist. Das ist nicht gut. Nein Sir.
Wie können wir als Systemadministratoren dagegen vorgehen? Nun, wenn wir zum vorherigen Beispiel zurückkehren, können wir immer jeden Benutzer in seine isolierte, sanierte Chroot-Umgebung versetzen.
Wir können dies auch von einer Sprachebene aus angehen. Es ist möglich (obwohl dies Dinge brechen kann), um Funktionsdeklarationen aus Sprachen global zu entfernen. Das heißt, es ist möglich, Funktionen aus den Sprachen zu entfernen, auf die Benutzer Zugriff haben.
Wenn Sie insbesondere PHP betrachten, können Sie Funktionen mit Runkit - dem offiziellen Toolkit von PHP - entfernen, um die Funktionalität der Sprache zu ändern. Es gibt eine Fülle von Dokumenten da draußen. Lesen Sie es ein.
Sie können auch die PHP-Konfigurationsdatei (php.ini) ändern, um Funktionen zu deaktivieren, die häufig von Hackern missbraucht werden. Öffnen Sie dazu ein Terminal auf Ihrem Server und öffnen Sie Ihre php.ini-Datei in einem Texteditor. Ich benutze gerne VIM, aber NANO ist auch akzeptabel.
Suchen Sie die Zeile, die mit disable_functions beginnt, und fügen Sie die Funktionsdefinitionen hinzu, die Sie sperren möchten. In diesem Fall wäre es exec, shell_exec und system, obwohl es erwähnenswert ist, dass es andere eingebaute Funktionen gibt, die von Hackern ausgenutzt werden können.
disable_functions = exec, shell_exec, System
Sprache und Dolmetscher basierte Angriffe
Schauen wir uns PHP an. Dies ist die Sprache, die eine erstaunliche Anzahl von Websites antreibt. Es kommt auch mit einer Reihe von Eigenheiten und seltsamen Verhaltensweisen. So was.
PHP wird normalerweise in Verbindung mit dem Apache-Webserver verwendet. In den meisten Fällen ist es unmöglich, mehrere Versionen der Sprache mit dieser Konfiguration zu laden.
Warum ist das ein Problem? Nun, stellen wir uns vor, Bobs Web-Anwendung wurde ursprünglich im Jahr 2002 gebaut. Das ist lange her. Das war zurück, als Michelle Branch immer noch die Charts anführte, Michael Jordan spielte immer noch für die Washington Wizards und PHP war eine ganz andere Sprache.
Aber Bobs Website funktioniert immer noch! Es verwendet eine ganze Reihe von eingestellten und veralteten PHP-Funktionen, aber es funktioniert! Die Verwendung einer modernen Version von PHP würde Bobs Website effektiv zerstören, und warum sollte Bob seine Website neu schreiben, um den Launen seines Webhosts gerecht zu werden?
Dies sollte Ihnen eine Vorstellung von dem Dilemma geben, mit dem einige Webhosts konfrontiert werden. Sie müssen einen architektonisch soliden und sicheren Service in Balance halten und gleichzeitig sicherstellen, dass die zahlenden Kunden zufrieden sind.
Daher ist es nicht ungewöhnlich, dass kleinere, unabhängige Hosts ältere Versionen des Interpreters PHP (oder einer anderen Sprache) verwenden.
Es ist nicht ungewöhnlich, dass kleinere, unabhängige Hosts ältere PHP-Versionen verwenden, die Benutzer möglicherweise Sicherheitsrisiken aussetzen.
Warum ist das eine schlechte Sache? Erstens würden die Benutzer einer Reihe von Sicherheitsrisiken ausgesetzt sein. Wie die meisten größeren Softwarepakete wird PHP ständig aktualisiert, um die Fülle von Sicherheitslücken zu beseitigen, die ständig entdeckt (und offengelegt) werden.
Außerdem können Benutzer nicht die neuesten (und größten) Sprachfunktionen verwenden. Dies bedeutet auch, dass aus einem bestimmten Grund veraltete Funktionen erhalten bleiben. Im Fall der Programmiersprache PHP sind dies die laughably terrible (und kürzlich veralteten) mysql_-Funktionen, die für die Interaktion mit dem relationalen Datenbanksystem von MySQL verwendet werden, und dl (), mit denen Benutzer ihre eigenen Spracherweiterungen importieren können.
Als Benutzer sollten Sie sehen können, welche Version eines Interpreters auf Ihrem Dienst ausgeführt wird. Wenn es veraltet ist oder eine Reihe von Sicherheitslücken aufweist, wenden Sie sich an Ihren Host.
Was ist mit Systemadministratoren? Du hast hier ein paar Optionen. Die erste (und vielversprechendste) ist die Verwendung von Docker für jeden Ihrer Benutzer. Mit Docker können Sie mehrere isolierte Umgebungen gleichzeitig ausführen, ähnlich wie bei einer virtuellen Maschine, ohne jedoch ein anderes Betriebssystem ausführen zu müssen. Infolgedessen ist das schnell. Wirklich, wirklich schnell.
In reinem Englisch? Sie können den neuesten und besten Interpreter der neuesten Generation für die Mehrheit Ihrer Benutzer ausführen, während die Kunden, die alte Anwendungen verwenden, alte veraltete Interpreter dazu verwenden, ohne andere Benutzer zu kompromittieren.
Dies hat auch den Vorteil, sprachunabhängig zu sein. PHP, Python, Ruby. Was auch immer. Es ist alles das Gleiche.
Hab keine Albträume.
Dieser Beitrag sollte einige Dinge tun. Erstens sollten Sie auf die Anzahl der Sicherheitsprobleme aufmerksam machen, die Webhosting-Unternehmen bewältigen müssen, um die Sicherheit ihrer Kunden und ihrer Daten zu gewährleisten.
Es sollte Ihnen auch zeigen, wie Websites, die auf demselben Server gehostet werden, sich gegenseitig beeinflussen können. Willst du eine Delle machen? Beginnen Sie, gute, sichere Kodierungsstandards zu befolgen. Insbesondere sollten Sie Ihre Eingaben sowohl im Frontend als auch im Backend bereinigen.
Ein guter Anfang ist mit der neuen Formvalidierung von HTML5. Wir haben bereits in unserem HTML5-Handbuch darüber gesprochen. Zusammen können wir Websites sicherer machen, indem wir bessere, gewissenhaftere Programmierer sind.
Wie immer bin ich bereit, deine Gedanken zu hören. Schreibe mir einen Kommentar unten.
Fotokredit: Jeder braucht einen Hacker (Alexandre Dulaunoy), Aufkleber auf Taxi Fenster (Cory Doctorow), Serverraum (Torkild Retvedt), Linux Bücher und Zeitschriften (library_mistress), PHP Elephant (Markus Tacker)