Vorschläge/Anregungen für folgendes Sicherheitskonzept
Posted: 2007-06-21 16:07
Hallo!
Da mir vor einigen Wochen mein Rootserver geknackt wurde und ich dadurch unschön auf mein bis dato dilletantisch zusammengeschustertes Sicherheitskonzept aufmerksam gemacht wurde möchte ich jetzt, bevor der Server überhaupt wieder auch nur 1 Sekunde ans Netz geht ein durchdachtes Sicherheitskonzept erarbeiten. Dafür sollen folgende Rahmenbedingungen gelten:
1. Mit ist klar, dass ein Sicherheitskonzept kein Ziel sonden ein Prozess ist, der fortlaufend an die aktuellen Bedingungen angepasst werden muss und "lebt". Daher soll das hier kein statischer Entwurf sein, nach dem Motto: "Einmal drüber nachgedacht, wird in Zukunft schon nix mehr passieren!" Absolute Sicherheit ist eh ein trügerisches Terrain, auf dem ich mich nie wieder sehen möchte.
2. Alle im folgenden genannten Punkte haben sich jetzt durch intensive Recherche in diesem Forum, sowie umfangreiche Fachlektüre ergeben, ich hoffe, dass ich dabei einigermaßen sinnvolle Schritte erarbeiten konnte.
3. Ich hoffe dass ich mit einigen Punkten bei meinen Vorschlägen nicht all zu sehr in einige Fettnäpfchen dieses Forums trampel, es ei mir verziehen! Gleichzeitig bin ich an einer konstuktiven Kritik interessiert und weniger daran, aufgrund von Grlaubenskriegen (z.B. Firewall) gebasht zu werden.
Vorab vielleicht nich die Eckdaten des Servers:
Dedizierter Linux-Rootserver in einem Rechenzentrum. 256 MB RAM, 10 GB Platte. Auf dem Server werden folgende Dienste laufen: Im Ürinzip ein LAMP-Setup, da ich viel CMS-Systeme einsetze, die auf PHP/MySQL basieren, sowie ein TeamSpeak2-Server und ein UnrealTournament 2004-Server.
Hier also meine einzelnen Punkte die das erste Sicherheitskonzept verdeutlichen sollen. Ich verzichte an dieser Stelle bewust auf einzelne Punkte in dem jeweiligen Configs und möchte da später evtl. an anderer Stelle genauer eingehen.
-------------------------------------------------------------------------
I: Konsequente Verlegung der Administration auf eine Shell, Verzicht auf GUIs
Ich habe bin jetzt gelegentlich aus Faulheit und Unwissenheit die hauptsächliche Konfiguration einiger Dienste per Webmin erledigt. An sich eine nette Sache nur passier da viel "unter der Motorhaube". Aus diesem Grund möchte ich die Dienste die ich verwende ausschließlich über eine SSH-Konsole administrieren. Das bezieht sich z.B auch auf den MySQL-Server und soll gerade da auch einen Lerneffekt haben, da ich mich so zwangsläufig auf einer anderen Ebene mit SQL auseinander setzen muss ohne auf Admin-Tools wie Webmit oder phpMyAdmin angewiesen zu sein.
II: Absicherung von SSH
Die Autentifizierung mit dem SSH-Server erfolgt ausschließlich über Public Keys. Diese Keys sind auf einem USB-Stick gespeichert, der nur zu administrativen Zwecken an den PC angesteckt wird. Zusätlich möchte ich den Zugriff auf den Server (nur für SSH) auf den deutschen IP-Bereich eindämmen. Das schützt natürlich nicht davor wenn jemand in China einen deutschen Server knackt und damit meine Maschine DoS't aber es schränkt die möglichen Zugriffe stark ein. Ausserden grenze ich den Login auf einen einzigen nicht-root-user ein. Werde regelmäßig die Keys tauschen und allen anderen Usern auf meinem System die Shell-Rechte entziehen.
III. Einsatz einer Firewall
Den Einsatz einer Firewall möchte ich darauf beschränken, dass alle nicht von Diensten genutzen Ports also (80/22/443 etc) von "innen" immer geblockt werden. Das soll Würmer und ähnliche Bedrohungen einschränken, da diese ja gerne auf Ports senden, die nicht für Standarddienste genutzt werden. (Mit Ausnahmen natürlich) Ich weiß, dass der Einsatz einer Firewall nach außen auch problematisch sein kann, daher möchte ich nur eindämmen, das jemand der Zugriff auf die Maschine bekommt erstmal nur erschwert Zugriff nach außen bekommt. (Stichwort "Nach Hause senden")
IV. Kompletter Verzicht auf FTP
Dieser Punkt erklärt sich von selber, nach der Logfileanalyse ergab sich, dass ein geknackter ProFTPd die Einsteigsluke zum Server war. Wenn überhaupt Daten hochgeladen werden dann ausschließlich über SCP.
V: HTTP nur über SSL
Da ich viele CMSe benutze die von Haus aus kein Login per SSL ermöglichen möchte ich gerne sämtlichen Webtraffic über SSL laufen lassen. Ich stelle mit das so vor das alle Zugriffe über Port 80 verschlüsselt stattfinden. Davon verspreche ich mir, dass Passwörter und Userdaten auf Webformualen (z.B. der Login in einem Forum) nicht mitgehört werden können.
VI: Regelmäßigere Audits
Ich möchte mich mit Nessus vertraut machen und damit mein System regelmäßig auf Sicherheitslücken "abklopfen" und diese natürlich so schnell es geht patchen oder vorrübergehend deaktivieren. Außerdem werde ich noch mehr als bisher rkhunter und chkrootkit einsetzen.
VII: Aktivere Informationsbeschaffung
Mein bisheriges Sicherheitskonzept bestand hauptsächlich darin, fast täglich ein apt-get update/upgrade laufen zu lassen und das System so aktuell wie möglich zu halten. Ich werde in Zukunft mehr in sicherheitsrelevanten Foren nach aktuellen Exploits etc. Ausschau halten, so dass sich meine Reaktionszeit auf solche Bedrohungen verkürzt und ich nicht das Handeln der jeweiligen Package-Maintainer abwarten muss. Das betrifft natürlich auch und ganz besonders die eingesetzten CMS-Systeme (phpBB, Yoomla, Clansphere etc.) Auch hier will ich deutlich mehr hinter den aktuellen Patches hinterher sein. Dazu gehört natürlich sich auch vor dem blinden installieren eine auf den ersten Blick tollen PHP/MySQL-basieren Website diese aktiver auf Sicherheitslecks zu prüfen und bei Bedenken komplett darauf zu verzichten.
VIII: chroot-ten nicht-sicherer Dienste
Der Unreal-Server sowie der TS2-Server sollen in einer chroot-Umgebung laufen um auch hier die Gefahr etwas einzudämmen. Ich weiß, dass chroot keine absoltute Sicherheit bietet (gibt es ja eh nicht...) aber ich möchte ein mehrschichtiges Sicherheitskonzept aufbauen und da gehört das absichern nicht-sicherer Anwendungen aus meiner Sicht dazu.
IX. Einsatz von bastille und/oder ähnlichen Tools.
Ich möchte den Server mit Einsatz von bastille härten und natürlich alles sinvolle manuell ändern, dass bastille nicht abdeckt. Dazu gehört nur als Beispiel, dass keinerlei Security-Tools (nmap, ping, traceroute etc.) auf dem Server zu finden sind, da diese quasi das Handwerkszeug für einen Angreifer sind, wenn er erst mal auf der Maschine ist. Dazu gehört auch der gänzliche Verzicht auf Compiler, wget und ähnliche Tools. Vorschläge was man hier noch machen könnte nehme ich dankend entgegen.
X: Aktive Logfile-Analyse
Bis jetzt habe ich alle Jubeljahre mal in die Logfiles geschaut. Das Problem bei dem letzten Einbruch war dass ich einfach erst dann die verdächtigen Einträge in den Files gesehen habe, als die Maschine schon kompromittiert war. Das ist eindeutig zu spät. An dieser Stelle hätte ich gerne einen Tip, für ein Tool dass die Logfile-Auswertung etwas übersichtlicher gestaltet (Sowas wie Code-Highlighting in vim. Stelle mir das so vor: Warnings weren rot hervorgehoben etc...)
So, jetzt bluten die Finger und ich habe auch erst mal keine weiteren Ideen und bin gespannt auf Eure Meinungen und Vorschläge. Vielleicht zum Schluss noch eine Anmerkung: Ich habe durch diesen Hack meines Server eine Menge Lehrgeld bezahlt. Selbsteinsicht ist ja bekanntermaßen der erste Schritt zur Besserung, daher wird der Server auch erst dann wieder online gehen, wenn alle Schritte die ich hier beschrieben habe, sowie Eure Verbesserungsvorschläge in die Tat umgesetzt wurden.
Viele Grüße
Nico
Da mir vor einigen Wochen mein Rootserver geknackt wurde und ich dadurch unschön auf mein bis dato dilletantisch zusammengeschustertes Sicherheitskonzept aufmerksam gemacht wurde möchte ich jetzt, bevor der Server überhaupt wieder auch nur 1 Sekunde ans Netz geht ein durchdachtes Sicherheitskonzept erarbeiten. Dafür sollen folgende Rahmenbedingungen gelten:
1. Mit ist klar, dass ein Sicherheitskonzept kein Ziel sonden ein Prozess ist, der fortlaufend an die aktuellen Bedingungen angepasst werden muss und "lebt". Daher soll das hier kein statischer Entwurf sein, nach dem Motto: "Einmal drüber nachgedacht, wird in Zukunft schon nix mehr passieren!" Absolute Sicherheit ist eh ein trügerisches Terrain, auf dem ich mich nie wieder sehen möchte.
2. Alle im folgenden genannten Punkte haben sich jetzt durch intensive Recherche in diesem Forum, sowie umfangreiche Fachlektüre ergeben, ich hoffe, dass ich dabei einigermaßen sinnvolle Schritte erarbeiten konnte.
3. Ich hoffe dass ich mit einigen Punkten bei meinen Vorschlägen nicht all zu sehr in einige Fettnäpfchen dieses Forums trampel, es ei mir verziehen! Gleichzeitig bin ich an einer konstuktiven Kritik interessiert und weniger daran, aufgrund von Grlaubenskriegen (z.B. Firewall) gebasht zu werden.
Vorab vielleicht nich die Eckdaten des Servers:
Dedizierter Linux-Rootserver in einem Rechenzentrum. 256 MB RAM, 10 GB Platte. Auf dem Server werden folgende Dienste laufen: Im Ürinzip ein LAMP-Setup, da ich viel CMS-Systeme einsetze, die auf PHP/MySQL basieren, sowie ein TeamSpeak2-Server und ein UnrealTournament 2004-Server.
Hier also meine einzelnen Punkte die das erste Sicherheitskonzept verdeutlichen sollen. Ich verzichte an dieser Stelle bewust auf einzelne Punkte in dem jeweiligen Configs und möchte da später evtl. an anderer Stelle genauer eingehen.
-------------------------------------------------------------------------
I: Konsequente Verlegung der Administration auf eine Shell, Verzicht auf GUIs
Ich habe bin jetzt gelegentlich aus Faulheit und Unwissenheit die hauptsächliche Konfiguration einiger Dienste per Webmin erledigt. An sich eine nette Sache nur passier da viel "unter der Motorhaube". Aus diesem Grund möchte ich die Dienste die ich verwende ausschließlich über eine SSH-Konsole administrieren. Das bezieht sich z.B auch auf den MySQL-Server und soll gerade da auch einen Lerneffekt haben, da ich mich so zwangsläufig auf einer anderen Ebene mit SQL auseinander setzen muss ohne auf Admin-Tools wie Webmit oder phpMyAdmin angewiesen zu sein.
II: Absicherung von SSH
Die Autentifizierung mit dem SSH-Server erfolgt ausschließlich über Public Keys. Diese Keys sind auf einem USB-Stick gespeichert, der nur zu administrativen Zwecken an den PC angesteckt wird. Zusätlich möchte ich den Zugriff auf den Server (nur für SSH) auf den deutschen IP-Bereich eindämmen. Das schützt natürlich nicht davor wenn jemand in China einen deutschen Server knackt und damit meine Maschine DoS't aber es schränkt die möglichen Zugriffe stark ein. Ausserden grenze ich den Login auf einen einzigen nicht-root-user ein. Werde regelmäßig die Keys tauschen und allen anderen Usern auf meinem System die Shell-Rechte entziehen.
III. Einsatz einer Firewall
Den Einsatz einer Firewall möchte ich darauf beschränken, dass alle nicht von Diensten genutzen Ports also (80/22/443 etc) von "innen" immer geblockt werden. Das soll Würmer und ähnliche Bedrohungen einschränken, da diese ja gerne auf Ports senden, die nicht für Standarddienste genutzt werden. (Mit Ausnahmen natürlich) Ich weiß, dass der Einsatz einer Firewall nach außen auch problematisch sein kann, daher möchte ich nur eindämmen, das jemand der Zugriff auf die Maschine bekommt erstmal nur erschwert Zugriff nach außen bekommt. (Stichwort "Nach Hause senden")
IV. Kompletter Verzicht auf FTP
Dieser Punkt erklärt sich von selber, nach der Logfileanalyse ergab sich, dass ein geknackter ProFTPd die Einsteigsluke zum Server war. Wenn überhaupt Daten hochgeladen werden dann ausschließlich über SCP.
V: HTTP nur über SSL
Da ich viele CMSe benutze die von Haus aus kein Login per SSL ermöglichen möchte ich gerne sämtlichen Webtraffic über SSL laufen lassen. Ich stelle mit das so vor das alle Zugriffe über Port 80 verschlüsselt stattfinden. Davon verspreche ich mir, dass Passwörter und Userdaten auf Webformualen (z.B. der Login in einem Forum) nicht mitgehört werden können.
VI: Regelmäßigere Audits
Ich möchte mich mit Nessus vertraut machen und damit mein System regelmäßig auf Sicherheitslücken "abklopfen" und diese natürlich so schnell es geht patchen oder vorrübergehend deaktivieren. Außerdem werde ich noch mehr als bisher rkhunter und chkrootkit einsetzen.
VII: Aktivere Informationsbeschaffung
Mein bisheriges Sicherheitskonzept bestand hauptsächlich darin, fast täglich ein apt-get update/upgrade laufen zu lassen und das System so aktuell wie möglich zu halten. Ich werde in Zukunft mehr in sicherheitsrelevanten Foren nach aktuellen Exploits etc. Ausschau halten, so dass sich meine Reaktionszeit auf solche Bedrohungen verkürzt und ich nicht das Handeln der jeweiligen Package-Maintainer abwarten muss. Das betrifft natürlich auch und ganz besonders die eingesetzten CMS-Systeme (phpBB, Yoomla, Clansphere etc.) Auch hier will ich deutlich mehr hinter den aktuellen Patches hinterher sein. Dazu gehört natürlich sich auch vor dem blinden installieren eine auf den ersten Blick tollen PHP/MySQL-basieren Website diese aktiver auf Sicherheitslecks zu prüfen und bei Bedenken komplett darauf zu verzichten.
VIII: chroot-ten nicht-sicherer Dienste
Der Unreal-Server sowie der TS2-Server sollen in einer chroot-Umgebung laufen um auch hier die Gefahr etwas einzudämmen. Ich weiß, dass chroot keine absoltute Sicherheit bietet (gibt es ja eh nicht...) aber ich möchte ein mehrschichtiges Sicherheitskonzept aufbauen und da gehört das absichern nicht-sicherer Anwendungen aus meiner Sicht dazu.
IX. Einsatz von bastille und/oder ähnlichen Tools.
Ich möchte den Server mit Einsatz von bastille härten und natürlich alles sinvolle manuell ändern, dass bastille nicht abdeckt. Dazu gehört nur als Beispiel, dass keinerlei Security-Tools (nmap, ping, traceroute etc.) auf dem Server zu finden sind, da diese quasi das Handwerkszeug für einen Angreifer sind, wenn er erst mal auf der Maschine ist. Dazu gehört auch der gänzliche Verzicht auf Compiler, wget und ähnliche Tools. Vorschläge was man hier noch machen könnte nehme ich dankend entgegen.
X: Aktive Logfile-Analyse
Bis jetzt habe ich alle Jubeljahre mal in die Logfiles geschaut. Das Problem bei dem letzten Einbruch war dass ich einfach erst dann die verdächtigen Einträge in den Files gesehen habe, als die Maschine schon kompromittiert war. Das ist eindeutig zu spät. An dieser Stelle hätte ich gerne einen Tip, für ein Tool dass die Logfile-Auswertung etwas übersichtlicher gestaltet (Sowas wie Code-Highlighting in vim. Stelle mir das so vor: Warnings weren rot hervorgehoben etc...)
So, jetzt bluten die Finger und ich habe auch erst mal keine weiteren Ideen und bin gespannt auf Eure Meinungen und Vorschläge. Vielleicht zum Schluss noch eine Anmerkung: Ich habe durch diesen Hack meines Server eine Menge Lehrgeld bezahlt. Selbsteinsicht ist ja bekanntermaßen der erste Schritt zur Besserung, daher wird der Server auch erst dann wieder online gehen, wenn alle Schritte die ich hier beschrieben habe, sowie Eure Verbesserungsvorschläge in die Tat umgesetzt wurden.
Viele Grüße
Nico