Naja, bis in letzte Konsequenz wird das hier (AFAIR) auch nie richtig diskutiert. Mir fehlen auch noch einige Ideen um wirklich sicher shared hosting betreiben zu können (bisher mache ich sowas nicht).
Man kann sich einiges von guten, großen Hostern abgucken. Allerdings haben dessen Systeme in der Regel nicht mehr viel mit einer Standard-Distribution gemeinsam, da steckt sehr viel Know How, Arbeit und Erfahrung hinter. Das lässt sich IMHO nicht mal eben aufholen. Domainfactory z.B. verwendet Gentoo auf den Shared Hosting Servern, nutzt allerdings nicht immer die Standard-Pakete aus Portage, sondern einen eigenen Overlay, und teilweise erheblich gepatchte Pakete (z.B. Apache...). Gentoo ist für sowas natürlich eine gute Basis.
Die Server der Hoster sind in der Regel von außen nur über FTP, HTTP und SSH erreichbar, andere Dienste sind nicht aktiviert oder nur über localhost erreichbar (z.B. MySQL). Trotzdem wird ein Paketfilter verwendet, um zu verhindern dass ein Angreifer über ein unsicheres Kundenscript eine bindshell oder sowas in der Art starten kann. Allerdings kann man dann immer noch einen Tunnel vom Server aus herstellen. Wenn man deshalb auch ausgehenden Verkehr filtert, wird das wie gesagt schnell problematisch mit Webservice Scripten der Kunden, Mail-Versand...
Das Haupteinfallstor für die Angriffe ist in der Regel der Apache bzw. unsichere Scripte. Entsprechend müssen ALLE Scripte unter der UserID des entsprechenden Kunden laufen, denn so sind - ordentlich vergebene Dateirechte vorausgesetzt - erstmal nur dessen Daten in Gefahr -> suExec, suPHP. (
vergiss safe_mode)
Dann muss man sich fragen, was man den Kunden auf dem Server so alles erlauben will. Einfach binaries löschen bringt nichts wenn ein gcc da ist, und auch den wegzulassen bringt nichts da man einfach fertige binaries hochladen kann. Man muss also davon ausgehen, dass ein Angreifer potentiell _jeden_ Code mit den Rechten des Kunden ausführen kann. Jeder Versuch dies zu beschränken birgt das Risiko umgangen zu werden. Was man machen kann, ist Zugriff auf /proc zu verhindern, somit werden schonmal alle Tools die auf /proc zugreifen (top, ps, netcat, lsof...) mehr oder weniger nutzlos. Da kann sich der Angreifer auf den Kopf stellen, da kommt er auch nicht mit eigenen Programmen dran, da er nicht die Berechtigung hat /proc zu mounten.
Natürlich muss der Kernel und vor allem UID 0 Software aktuell gepatched sein, vielleicht noch Kernelpatches für proaktive Sicherheit verwenden (grsec, selinux...) - allerdings wäre es mir neu wenn sowas in der Regel verwendet würde. Viele kommen mit den Posix ACLs aus - oder verwenden noch nichtmal diese.
Ein weiterer Baustein ist die Überwachung der Server, ich gehe mal davon aus, dass erfahrene Hoster dies teilweise automatisiert machen, und die entsprechend erfahrenen Admins finden im Fall der Fälle auch recht schnell die Schwachstelle. Vielleicht scannen sie sogar die Verzeichnisse der Kunden nach bekanntermaßen unsicherer Software...
Wie gesagt, wirklich ordentliches shared hosting zu betreiben ist IMHO ne ganze Ecke schwieriger als nen Server zu mieten und ein bisschen zu konfigurieren so dass es überhaupt irgendwie funktioniert... Ich kenne nur wenige Hoster von dessen Qualität ich wirklich überzeugt bin!
Keine Ahnung was die Jungs da noch so machen, vielleicht hat da ja einer von Euch noch gute Ideen? Vor allem muss man ja verhindern, dass der Angreifer...
1. ... seine Rechte erweitern kann -> aktuelles System, proaktive Sicherheit, ACLs - noch was? Was setzen große Hoster hiervon ein? So akuell ist die Software nicht immer, vermutlich nur gepatched wenn wirklich eigene Software betroffen wäre, aber von Kernelpatches(grsec, selinux) habe ich in diesem Zusammenhang noch nichts gehört
2. ... Verbindungen nach außen aufbauen kann (DOS, Tunnel, Angriffe...), aber wie soll das gehen, ohne die Kunden in ihren Möglichkeiten zu beschneiden?
3. ... Überhaupt eigenen Code auf dem Server ausführen kann? Kann man das überhaupt verhindern? Ich denke nicht solange der User unter dem Scripte laufen, in ein Verzeichnis schreiben kann. Bringt es was bei PHP die Funktionen zur Ausführung von Shellkommandos zu verbieten? Ich glaube nicht, da man sich nicht sicher sein kann, dass Befehle auch über irgendeine Extension ausgeführt werden können oder vergleichbares. Abgesehen davon, wenn man CGI Skripte erlauben will (und das erlauben die meisten 'guten' Hoster) - hat man diesbezüglich sowieso verloren. Es können in irgendwelchen Perl/CGI Scripten genau so viele Sicherheitslücken stecken wie in PHP Scripten (
http://www.heise.de/security/news/meldung/62744).
Warum sollte man den Zugriff auf /proc beschränken, wenn man davon ausgeht dass ein Angreifer mit seinen Rechten eh nicht viel anfangen kann? Nur für Zeitgewinnung, Erschwerung oder gibt es wohl andere Gründe?
Gibt es weitere sinnvolle, vergleichbare Maßnahmen?
edit: etwas erweitert ;-)