Netzwerksicherheit Teil 5: Virtualisierung und Ausfallsicherheit Martin Mauve, Björn Scheuermann und Philipp Hagemeister Sommersemester 2015 Heinrich-Heine-Universität Düsseldorf Netzwerksicherheit Virtualisierung und Ausfallsicherheit 1
Virtualisierung Bisher: Sicherheit durch mehrere physisch getrennte Systeme Jetzt: Mehrere virtuelle Maschinen (VMs) auf einem physischem System 2. Praktikumsaufgabe: VMs erstellen und konfigurieren Kann wie die erste in Kleingruppen abgelegt werden Mehr Informationen unter https://hhunetsec.de/2015/praktikum2.pdf Netzwerksicherheit Virtualisierung und Ausfallsicherheit 2
Virtualisierung: Vorteile Energieeffizienter Verschieben auf andere Hardware möglich (bei Hardwarefehler / Skalierung / Wartung) Snapshots möglich Für Malware-Analyse etc. Legacy-Betriebssysteme Abschottung verschiedener Dienste auf einer Maschine Netzwerksicherheit Virtualisierung und Ausfallsicherheit 3
Virtualisierung in Software Rein in Software (z.b. QEMU, DOSBox, VirtualBox, VMWare) Kann beliebige Architekturen simulieren Sehr langsam ohne JIT-Compiler! Netzwerksicherheit Virtualisierung und Ausfallsicherheit 4
Virtualisierung in Hardware CPU um Ring -1 erweitert z.b. IBM Mainframes z.b. Intel VT-X/AMD-V mit VirtualBox/VMWare/Virtual PC Native Geschwindigkeit Entweder auf Desktop-Betriebssystem oder mit minimalem Hypervisor-OS Netzwerksicherheit Virtualisierung und Ausfallsicherheit 5
Paravirtualisierung Problem: Emulation von Hardware unnötig langsam Stattdessen: Spezialisierte Treiber, die statt mit virtueller Hardware mit dem Hypervisor sprechen... oder eine spezialisierte Standardbibliothek Oft eingesetzt mit Xen, VMWare Netzwerksicherheit Virtualisierung und Ausfallsicherheit 6
Virtualisierung auf Betriebssystemebene Ziel der Virtualisierung ist normalerweise ein Gast-Prozess, nicht das Gast-Betriebssystem Idee: Gast-Prozess im normalem OS laufen lassen Fließender Übergang von Prozess mit anderen Rechten zu Prozess mit anderem (Dateisystem-/Netzwerk-/IPC-/...)Namespace Beispiele: Linux Containers (LXC), FreeBSD jails, vserver Netzwerksicherheit Virtualisierung und Ausfallsicherheit 7
chroot Systemaufruf (privilegiert) und gleichnamiges Programm Setzt Dateisystem-Wurzelverzeichnis auf das angegebene Verzeichnis Wurzelverzeichnis beschränkt mit.. begehbaren Pfad Beispiel (debian): $ sudo debootstrap sid./myroot $ touch myroot/run/in-chroot $ sudo chroot myroot # ls /run/ in-chroot lock network utmp # ls /../../../run in-chroot lock network utmp Netzwerksicherheit Virtualisierung und Ausfallsicherheit 8
chroot: Limitierungen chroot setzt Wurzelverzeichnis Wurzelverzeichnis beschränkt mit.. begehbaren Pfad Mit int fchdir(int fd) kann man in ein mit int open(const char *pathname, int flags) geöffnetes Verzeichnis wechseln Wie kann man aus einem chroot ausbrechen? Konstruieren Sie mit den obigen Informationen einen Angriff. Netzwerksicherheit Virtualisierung und Ausfallsicherheit 9
chroot: Limitierungen chroot setzt Wurzelverzeichnis Wurzelverzeichnis beschränkt mit.. begehbaren Pfad Mit int fchdir(int fd) kann man in ein mit int open(const char *pathname, int flags) geöffnetes Verzeichnis wechseln Wie kann man aus einem chroot ausbrechen? Konstruieren Sie mit den obigen Informationen einen Angriff. 1 Verzeichnis mit open öffnen 2 chroot in ein Unterverzeichnis 3 Mit fchdir in das geöffnete Verzeichnis wechseln 4 Von dort aus bis zum richtigen Wurzelverzeichnis.. verfolgen (virtuelles Wurzelverzeichnis wird nie erreicht!) Netzwerksicherheit Virtualisierung und Ausfallsicherheit 9
Sicheres chroot 1 Verzeichnis mit open öffnen 2 chroot in ein Unterverzeichnis 3 Mit fchdir in das geöffnete Verzeichnis wechseln 4 Von dort aus bis zum richtigen Wurzelverzeichnis.. verfolgen (virtuelles Wurzelverzeichnis wird nie erreicht!) Wie kann man einen Ausbruch verhindern? Netzwerksicherheit Virtualisierung und Ausfallsicherheit 10
Sicheres chroot 1 Verzeichnis mit open öffnen 2 chroot in ein Unterverzeichnis 3 Mit fchdir in das geöffnete Verzeichnis wechseln 4 Von dort aus bis zum richtigen Wurzelverzeichnis.. verfolgen (virtuelles Wurzelverzeichnis wird nie erreicht!) Wie kann man einen Ausbruch verhindern? Ausbruch funktioniert nur wenn chroot nochmals aufgerufen werden kann! Netzwerksicherheit Virtualisierung und Ausfallsicherheit 10
Sicheres chroot 1 Verzeichnis mit open öffnen 2 chroot in ein Unterverzeichnis 3 Mit fchdir in das geöffnete Verzeichnis wechseln 4 Von dort aus bis zum richtigen Wurzelverzeichnis.. verfolgen (virtuelles Wurzelverzeichnis wird nie erreicht!) Wie kann man einen Ausbruch verhindern? Ausbruch funktioniert nur wenn chroot nochmals aufgerufen werden kann! Also: Berechtigungen für chroot (CAP_SYS_CHROOT unter Linux) widerrufen Netzwerksicherheit Virtualisierung und Ausfallsicherheit 10
Sicheres chroot 1 Verzeichnis mit open öffnen 2 chroot in ein Unterverzeichnis 3 Mit fchdir in das geöffnete Verzeichnis wechseln 4 Von dort aus bis zum richtigen Wurzelverzeichnis.. verfolgen (virtuelles Wurzelverzeichnis wird nie erreicht!) Wie kann man einen Ausbruch verhindern? Ausbruch funktioniert nur wenn chroot nochmals aufgerufen werden kann! Also: Berechtigungen für chroot (CAP_SYS_CHROOT unter Linux) widerrufen Dafür Programme als nicht-root-benutzer laufen lassen Allgemeines Prinzip (nicht nur für chroot): Ein Programm sollte immer so früh wie möglich unnötige Berechtigungen abgeben. (Principle of least privilege) Netzwerksicherheit Virtualisierung und Ausfallsicherheit 10
chroot: Hausaufgabe Hausaufgabe (Übungsblatt 6) Schreiben Sie ein Programm run-in-chroot (in der Sprache Ihrer Wahl, z.b. C, Shell oder Python), das 1 Ein neues Unterverzeichnis mit einem fertigem Dateisystem erstellt (z.b. durch Entpacken eines tarballs, debootstrap, oder mkarchroot) 2 Eine beliebige Datei (aus dem echtem Dateisystem) in diesem chroot ausführt Hausaufgabe (Übungsblatt 6) Schreiben Sie ein Programm breakout, das aus dem chroot ausbricht und eine Datei /breakout.successful im echten Wurzelverzeichnis erstellt. Hausaufgabe (Übungsblatt 6) Korrigieren Sie run-in-chroot, sodass das Gastprogramm als nicht-root läuft und darum nicht mehr ausbrechen kann. Netzwerksicherheit Virtualisierung und Ausfallsicherheit 11
Ausfallsicherheit Unterbrechungsfreie Stromversorgung Festplatten-Ausfälle durch RAID kompensieren Netzwerksicherheit Virtualisierung und Ausfallsicherheit 12
Unterbrechungsfreie Stromversorgung (USV) Auch: Uninterruptible power supply (UPS) Schutz gegen Stromausfall Schutz vor Spannungs-/Frequenzschwankungen Ggf. von Generatoren unterstützt Einfachster Typ: Voltage and Frequency Dependent (VFD / Offline) Welche Probleme sehen Sie bei diesem Design? Netzwerksicherheit Virtualisierung und Ausfallsicherheit 13
USV: Typen Probleme beim VFD-Design: Hohe Umschaltdauer ( 10ms) Kein Schutz vor Spannungs-/Frequenzschwankungen Besser: Voltage and Frequency Independent (VFI, auch: Online) Aber teurer (wegen hier nicht dargestellten Bauteilen) Netzwerksicherheit Virtualisierung und Ausfallsicherheit 14
RAID (Redundant Array of Independent Disks) Zusammenschluss mehrerer Festplatten Erhöhung der Ausfallsicherheit Leistungssteigerung Achtung: Eignet sich nicht als Backup! Warum? Netzwerksicherheit Virtualisierung und Ausfallsicherheit 15
RAID (Redundant Array of Independent Disks) Zusammenschluss mehrerer Festplatten Erhöhung der Ausfallsicherheit Leistungssteigerung Achtung: Eignet sich nicht als Backup! Warum? RAID schützt nur vor Hardware-Fehlern! Nicht vor versehentlichem Überschreiben von Daten oder Angreifern In Software und in Hardware möglich Günstiger und flexibler in Software Weniger CPU-Last in Hardware Netzwerksicherheit Virtualisierung und Ausfallsicherheit 15
RAID: JBOD Just a Bunch of Disks Speicherplatz: Bei n Platten n größer Lesegeschwindigkeit: wie eine Platte Fehlertoleranz: Keine, höhere Ausfallwahrscheinlichkeit! Netzwerksicherheit Virtualisierung und Ausfallsicherheit 16
RAID 0 - Striping Speicherplatz: n größer Lesegeschwindigkeit: Manchmal besser als JBOD Fehlertoleranz: Keine, höhere Ausfallwahrscheinlichkeit! Zum Beispiel für temporäre Daten Netzwerksicherheit Virtualisierung und Ausfallsicherheit 17
RAID 1 - Mirroring Speicherplatz: Wie eine Platte Lesegeschwindigkeit: n höher Fehlertoleranz: 1 Platte kann ausfallen Zum Beispiel für wichtige oft ausgelieferte Daten Netzwerksicherheit Virtualisierung und Ausfallsicherheit 18
RAID 10 - Striping und Mirroring Kombination von RAID 1 und RAID 0 Speicherplatz: Wie zwei Platten Lesegeschwindigkeit: 2 4 höher Fehlertoleranz: 1-2 Platten können ausfallen Aber: Benötigt 4 oder mehr Platten, das geht besser! Netzwerksicherheit Virtualisierung und Ausfallsicherheit 19
RAID 5 - Verteilte Parität Berechne Parität mit XOR Speicherplatz: Wie zwei Platten Lesegeschwindigkeit: Hängt vom Zugriffsmuster ab, 1 n Fehlertoleranz: Eine Platte darf ausfallen Auch mit mehr als 3 Platten möglich Netzwerksicherheit Virtualisierung und Ausfallsicherheit 20
RAID 6 - Mehrfache Parität Speichere mehrfache Fehlercodes (nicht nur XOR) Speicherplatz: Wie drei Platten Lesegeschwindigkeit: Hängt vom Zugriffsmuster ab, 1 n Fehlertoleranz: Zwei Platten Auch mit mehr als 5 Platten möglich Netzwerksicherheit Virtualisierung und Ausfallsicherheit 21
Festplatten-Ausfallsicherheit Problem: Nach Festplattenfehler im RAID muss neue Platte eingehängt werden Solange kein (bei RAID 6 geringerer) Schutz! Lösung: RAID-Controller verwendet bereits eingehängte Reserve-Festplatte (Hot Spare) Problem: Verlust von geschriebenen Daten bei Stromausfall (und USV zu teuer, bzw. ausgefallen!) Lösung: Kleine USV nur für den RAID (Auch: Battery Backup Unit (BBU/ZMM)) Nochmal: RAID bietet Schutz gegen natürlichen Ausfall, hilft nicht gegen Angreifer! Dafür: (Offline-)Backup Netzwerksicherheit Virtualisierung und Ausfallsicherheit 22