Einfache Grundprinzipien der IT-Sicherheit

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 ebenso viele Sicherheits-Produkte bereit.

Während der Admin überlegt, wie er nach ITIL vorgeht um die neue NextGen2-SIEM-Firewall zu integrieren und dabei noch die DSGVO beachten muss, und sich außerdem dringend mal dem Thema APT widmen will, dringen Angreifer über ein längst vergessenes Wordpress-Plugin in den Webserver ein und greifen Daten ab.

Es ist Zeit sich von der Begriffsverwirrung und der Produktschwemme zu befreien. Zeit einen Schritt zurück zu treten und sich darüber Gedanken zu machen, welche Grundprinzipien IT-Sicherheit ausmachen.

1. Kenne deine Systeme

Lerne dein System so gut wie möglich kennen. Wenn Du dein System nicht kennst kannst Du es auch nicht verteidigen. Verstehe, welche Komponenten und Dienste dein System benutzt. Stellst Du einen unnötigen Dienst fest (siehe 2. Halte dein System klein und einfach) stelle ihn ab. Stelle fest, welche Risiken durch die laufenden Dienste entstehen können.

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 ist 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.

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

Beobachte Systemmeldungen und Protokolle (Log-Dateien). Oft beinhalten Sie wertvolle Hinweise. Auch darüber, wo noch Maßnahmen nötig sein könnten.

2. 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 schief gehen 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.

(Exkurs: OpenBSD gilt als das sicherste Betriebssystem der Welt, nicht zuletzt deswegen weil es im Vergleich zu anderen Betriebssystemen sehr schlank ist. Der Linux Kernel besteht aus fast 30 Millionen Zeilen Code, der OpenBSD Kernel hat gerade mal 2,9 Millionen Zeilen, also 10% des Umfangs des Linux Kernels.)

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.

3. 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. Verwende robuste und stabile Systeme, die gut geprüft sind.

4. Verwende Information und nutze Informationsaustausch

All zu 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).

Informiere Dich bei CERTs und Security-Mailinglisten über neue Sicherheitslücken. Dies ist Voraussetzung dafür dein System zu kennen (Punkt 1.).

5. Überprüfe deine Systeme

Um zu wissen ob deine Systeme korrekt und sicher laufen müssen sie überprüft werden. Verwende Monitoring, um deine Systeme zu überprüfen. Lege Parameter fest, innerhalb der deine Systeme laufen sollen. Falls ein System außerhalb diese Parameter läuft, sollte es Alarmmeldungen geben.

Beobachte Systemprotokolle (siehe auch Punkt 2.) 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 (siehe Punkt 4.), 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.

6. 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. Verwende dabei Virtualisierung, keine Containerisierung.

(Exkurs: Obwohl alle Welt von Docker spricht, sollten Docker und andere Containerlösungen nicht für produktive Systeme verwendet werden. Container laufen im selben Kernelspace ab wie der Container-Host und andere Container auf diesem. Das bedeutet, wird ein Container erfolgreich angegriffen, sind alle anderen Container die auf derselben physikalischen Maschine laufen, ebenfalls betroffen. Container bieten keine ausreichende Isolierung).

Verwende Schnittstellen, um die Kommunikation zwischen den isolierten System 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.

7. 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 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 eine 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 (Punkt 2.) desto besser sind sie fehlertolerant zu gestalten. Auch die Isolierung (Punkt 6.) unterstützt dabei, fehlertolerante Systeme einfach aufbauen zu können.

Auch Sicherheitsmaßnahmen können ausfallen. Wenn ein Account oder ein Zertifikat kompromittiert wird, muss es Maßnahmen geben, die den damit eingehenden Risiken entgegenwirken.

8. Beachte die Verhältnismäßigkeit

Sicherheit kostet Zeit, Geld und Aufwand. Bei jedem vorangegangenen Punkt sollte man sich daher fragen: Ist das noch 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 (Beides liegt auf demselben Server? Dann hast Du Punkt 6. nicht beachtet.)

Ein guter Weg, um die die Verhältnismäßigkeit festzustellen, sind folgende Fragen:

  1. Muss das System geschützt werden und in wie weit?
  2. Welche Sicherungsmaßnahme hat die geringste Auswirkung auf den laufenden Betrieb?
  3. 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 die NextGen2-SIEM-Firewall ü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. Weiterführende Literatur: The Information Security Practice Principles, Craig Jackson, Scott Russell, and Susan Sons, University Center for Applied Cybersecurity Research

© Henry Jensen 2019, lizenziert unter CC-BY-SA 4.0