Einfache Grundprinzipien der IT-Sicherheit (Version 2020)
senioradminEinfache Grundprinzipien der IT-Sicherheit (Version 2020)
Einleitung
IT-Sicherheit ist heute ein riesiges Betätigungsfeld. Menschen, die im ITSec-Umfeld tätig sind, werden mit Begriffen überschwemmt. Der Markt hält eine unüberschaubare Menge an Sicherheits-Produkten bereit. Kaum jemand, der sich mit “Cybersecurity” beschäftigt, kann der Werbung für “Sicherheitsprodukte” entkommen. Dabei wird der Eindruck erweckt, es ginge ohne diese neuen Produkte nicht mehr. Dabei verwendet die ITSec-Industrie oft die Strategie der Angst- und Panikmache. Doch ist Angst ein schlechter Ratgeber, im Gegenteil.
Das soll nicht heißen, dass alle ITSec-Produkte schlecht sind. Viele sind allerdings sehr komplex und verstecken diese Komplexität hinter vereinfachten Oberflächen. Viel zu oft werden auch Produkte verkauft, die schlicht nicht nötig sind. Dann werden Produkte ohne Plan und ohne Konzept eingesetzt, nur weil gesagt wurde, dass man heutzutage so etwas haben müsse.
Es ist Zeit, sich von der Begriffsverwirrung und der Produktschwemme zu befreien. Zeit, einen Schritt zurückzutreten und sich darüber Gedanken zu machen, welche Grundprinzipien IT-Sicherheit ausmachen.
1. Kenne deine Systeme und die Bedrohungen
“Wenn du dich und den Feind kennst, brauchst du den Ausgang von hundert Schlachten nicht zu fürchten.” - Die Kunst des Krieges - Sunzi
Man kann nichts verteidigen, wenn man nicht weiß, was man verteidigt oder wogegen man es verteidigt.
Lerne dein System so gut wie möglich kennen. Verstehe, welche Komponenten und Dienste dein System benutzt. Dazu gehören auch Dienstleister, von denen die Systeme abhängig sind. Läuft dein System bei einem anderen Anbieter in der “Cloud”, sind dessen Probleme auch deine Probleme.
Stellst du einen unnötigen Dienst fest, stelle ihn ab.
Stelle fest, welche Risiken durch die laufenden Dienste entstehen können. Denke, wie der Angreifer - welches ist die Schwachstelle bei der du angreifen würdest?
Verlasse dich nicht nur auf externen Support (z.B. des Herstellers). Dies macht dich abhängig vom Supporter und kann schnell zur Katastrophe führen, wenn er nicht reagiert oder das Problem nicht beheben kann. Open Source Software zu verwenden ist hier sehr hilfreich, weil diese meist sehr gut dokumentiert und ihre Funktionsweise daher gut erlernbar ist.
Dokumentiere deine Systeme und Komponenten. Ein guter Überblick ist wichtig, um zu sehen, wo Schwachstellen entstehen können. Kümmere dich dann zunächst um die schwächsten Stellen in deinem System, denn das ist die Stelle, die sich Angreifer gezielt aussuchen, um dann zuzuschlagen.
Verhindere, dass Angreifer dein System besser kennen als du. Verwende Verschlüsselung bei der Kommunikation und, dort wo es nötig ist, bei der Speicherung von Daten. Halte Einzelheiten über deine Systeme geheim. “Der General ist ein weiser Verteidiger, wenn sein Gegner nicht weiß, was er angreifen soll.” (Sunzi, die Kunst des Krieges)
Beobachte Systemmeldungen und Protokolle (Log-Dateien). Oft beinhalten sie wertvolle Hinweise. Auch darüber, wo noch Maßnahmen nötig sein könnten.
2. Verwende Ressourcen und Informationen und nutze Informationsaustausch
Allzu leicht zieht man sich in eine Filterblase zurück und bekommt kaum noch Informationen von der Welt da draußen mit, während Angreifer sich ständig über neue Möglichkeiten informieren.
Vernetze dich mit der “Community”, also mit Leuten denen es ähnlich geht wie dir. Tausch dich mit Ihnen aus, z. B. über Mailinglisten. Gehe zu Community-Veranstaltungen mit Schwerpunkt Security (nicht aber zu reinen Produkt-Werbeveranstaltungen von Herstellern). Gute Adressen vor Ort sind oft der CCC oder die Linux User Group (LUG). Verwende auch Ressourcen der Community, z. B. Blocklisten.
Informiere dich bei CERTs und Security-Mailinglisten über neue Sicherheitslücken. Dies ist Voraussetzung dafür, dein System zu kennen.
Verwende gut dokumentierte, offene und gebräuchliche Systeme. Dies ist Voraussetzung dafür, zu wissen was man einsetzt. Vermeide den Einsatz von “Blackboxen”, deren Inhalt du nicht kennst. Wieder ist es von Vorteil, Open Source Software zu benutzen. Gebräuchliche und verbreitete Open Source Software ist gut dokumentiert und der Quellcode liegt offen. Vermeide jedoch Exoten, die kaum jemand einsetzt und schlecht dokumentiert sind. Vermeide auch, das Rad neu zu erfinden. Nutze die Community. Verwende robuste und stabile Systeme, die gut geprüft sind.
3. Lege Richtlinien und Parameter fest und überprüfe Sie
Um zu wissen, ob deine Systeme korrekt und sicher laufen, müssen sie überprüft werden. Dazu ist es nötig, Richtlinien und Parameter festzulegen innerhalb der die Systeme laufen sollen.
Verwende Monitoring, um deine Systeme zu überprüfen. Falls ein System außerhalb diese Parameter läuft, sollte es Alarmmeldungen geben.
Beobachte Systemprotokolle. Halte Logs einfach (im Textformat) und zentralisiere das Logging. Verwende Filter für Logmeldungen, um nicht von der Flut der Meldungen erschlagen zu werden.
Verwende Informationen, um zu überprüfen, ob deine Systeme Sicherheitslücken aufweisen. Patche die Systeme schnell, denn Angreifer wissen spätestens mit der Veröffentlichung des Patches über die Angreifbarkeit Bescheid.
Auch für die Benutzung der Systeme müssen Richtlinien festgelegt werden. Diese müssen kommuniziert werden. Security-Awareness-Schulungen können ebenfalls dabei helfen. Es muss überprüft werden, ob die festgelegten Richtlinien auch umgesetzt und eingehalten werden.
4. Halte dein System klein und einfach
Systeme und Applikationen sollen so klein und einfach wie möglich sein. Komplexität ist der Feind der Sicherheit. Verwende immer das einfachstmögliche System. Zum einen vermeidet man so Komplexität, zum anderen schont man so Ressourcen.
Füge einem System nicht mehr Komponenten oder Features hinzu als unbedingt benötigt werden. Lass nicht mehr Dienste laufen als unbedingt nötig. Verzichte auf alle unnötige Software. So wird die Angriffsfläche verkleinert, ebenso wie die Wahrscheinlichkeit, dass etwas schiefgehen kann. Falls das System schon bei Lieferung zu komplex ist, passe es an. Hilfreich ist es in dieser Hinsicht Open Source Software zu verwenden.
Beispiel: Verzichte auf Web-Interfaces zur Administration einer Firewall. Das Webinterface benötigt einen HTTP-Server und implementiert eine Schnittstelle zur Umsetzung der Eingaben im Webinterface in Kommandozeilen-Befehle für die Firewall. Dies sind zwei zusätzliche, aber unnötige Angriffsvektoren. Lerne stattdessen, die Kommandozeile direkt zu benutzen.
Fast das Gleiche gilt für Daten: Lösche sensitive Daten, wenn sie nicht mehr gebraucht werden. Speicher sie erst gar nicht, wenn sie nicht benötigt werden.
Auch bei der Rechtevergabe sollte Minimalismus vorherrschen. Gib jeder Person und jedem Prozess nur die Rechte, die unbedingt benötigt werden (Prinzip des geringsten Privilegs).
5. Isoliere deine Systeme
Große All-in-One-Systeme sind oft bequem und komfortabel zu nutzen. Leider sind sie auch überaus komplex und bieten daher eine große Angriffsfläche.
Systeme und Funktionen sollten daher so weit wie möglich voneinander getrennt werden. Bei Problemen ist so immer nur eine Komponente betroffen. Separiere Systeme voneinander, auf möglichst unterschiedlichen Ebenen. Verwende verschiedene Netzwerksegmente, da wo es angebracht ist. Verwende unterschiedliche Hosts für einzelne Dienste. Nutze dabei Virtualisierung, keine Containerisierung, denn Virtualisierung bietet eine bessere Isolation.
Separiere auch Daten. Wichtige Daten sollten woanders gehalten (und besser abgesichert werden) als unwichtige Daten. Verwende nicht das gleiche Passwort für alle Systeme und Dienste.
Verwende Schnittstellen, um die Kommunikation zwischen den isolierten Systemen herzustellen und kontrolliere diese.
Jede Komponente sollte immer genau eine Aufgabe erfüllen, und diese gut. Verwende daher keine Universalisten, sondern Spezialisten. Vergiss aber nicht, dass diese einfach und klein sein sollen. Die Prinzipien des Minimalismus und der Isolierung haben viele Gemeinsamkeiten und beide ergänzen sich.
6. Gestalte deine Systeme fehlertolerant
Frag dich bei jedem System: “Was ist, wenn es ausfällt? Ist dann das gesamte Gefüge betroffen, oder kann es ohne das System weiter funktionieren?” Erstelle einen Notfall-Plan, der sagt, was bei Ausfällen zu tun ist. Denn früher oder später wird jedes System gestört sein oder ausfallen.
Sorge bei kritischen Systemen dafür, dass ein Reservesystem zeitnah bereit steht (gestalte es z. B. als hochverfügbares System). Aktuelle Daten benötigen aktuelle Backups und sollten zeitnah wieder eingespielt werden können.
Je kleiner und einfacher die Systeme sind, desto besser sind sie fehlertolerant zu gestalten. Auch die Isolierung unterstützt dabei, fehlertolerante Systeme einfach aufbauen zu können.
Sicherheitsmaßnahmen können ebenfalls ausfallen oder fehlschlagen. Wenn ein Account oder ein Zertifikat kompromittiert wird, muss es Maßnahmen geben, die den damit eingehenden Risiken entgegenwirken. Es ist daher eine gute Idee, mehrere Sicherheitsmaßnahmen auf mehreren Ebenen einzuführen.
Und es geht nicht nur um technische Systeme. Auch Personen können ausfallen. Es sollte daher vermieden werden, dass der Ausfall einer Person (z. B. des einzigen Sysadmins) zu einem Problem werden kann.
7. Beachte die Verhältnismäßigkeit
Sicherheit kostet Zeit, Geld und Aufwand. Bei jedem vorangegangenen Punkt sollte man sich daher fragen: Ist das verhältnismäßig?
Man kauft sich schließlich auch keinen 1000-Euro-Safe, um darin 100 Euro zu lagern. Daher sollte geprüft werden, was man mit der Sicherheitsmaßnahme eigentlich schützen will und welche Auswirkungen die Maßnahme auf den Betrieb hat. Die Datenbank mit den Ergebnissen der Betriebs-Fußballmannschaft braucht sicher weniger Schutz, als die Datenbank mit den Firmenpatenten. Auch die Wahrscheinlichkeit eines Sicherheitsrisikos spielt eine Rolle, es ist wenig sinnvoll teure Sicherheitsmaßnahmen für sehr unwahrscheinliche Risiken einzuführen.
Ein guter Weg, um die Verhältnismäßigkeit festzustellen, sind daher folgende Fragen:
- Muss das System geschützt werden und inwieweit?
- Welche Sicherungsmaßnahme hat die geringste Auswirkung auf den laufenden Betrieb?
- Wie hoch bzw. wahrscheinlich ist das Sicherheitsrisiko?
- Welches ist die einfachste und kostengünstigste Lösung für die Sicherungsmaßnahme? (Hinweis: oft lautet die Antwort “Open Source Software”)
Schlusswort
Jedes einzelne dieser Grundprinzipien ist ein wichtiger Baustein. Jedoch sind sie um so wirksamer, wenn sie zusammen arbeiten. Wenn man sich diese Grundprinzipien vor Augen führt, können sie dabei helfen, Ordnung in die Flut von Buzzwörtern der ITSec-Industrie zu bekommen und auch im eigenen Netz die Übersicht zu behalten.
Die Systeme zu kennen, zu separieren, klein und einfach zu halten und zu überprüfen kann so manchen “Cybersecurity-Produkt” überflüssig machen. Wenn man die Prinzipien kennt, muss man nicht unbedingt ITIL und ISO 27001 im Detail kennen – vieles von dem, was dort steht, wird sich daraus automatisch ergeben.
Dieser Artikel basiert auf der Arbeit “The Information Security Practice Principles” von Craig Jackson, Scott Russell und Susan Sons vom “Center for Applied Cybersecurity Research” der Universität Indiana. The Information Security Practice Principles, Craig Jackson, Scott Russell, and Susan Sons, University Center for Applied Cybersecurity Research