Sind VMs sicherer als Container?

Wir sagen oft: "HTTPS ist sicher" oder "HTTP ist nicht sicher". Aber wir meinen damit, dass "HTTPS schwer zu schnüffeln ist und Man-in-the-Middle-Angriffe schwierig macht" oder "meine Großmutter keine Probleme hat, HTTP zu schnüffeln".

Trotzdem wurde HTTPS gehackt und unter bestimmten Umständen ist HTTP sicher genug. Wenn ich in einer allgemeinen Implementierung, die HTTPS unterstützt (denken Sie an OpenSSL und Heartbleed), einen ausnutzbaren Fehler feststelle, kann HTTPS zu einem Hacking-Gateway werden, bis die Implementierung korrigiert ist.

HTTP und HTTPS sind Protokolle, die in den IETF-RFCs 7230-7237 und 2828 definiert sind. HTTPS wurde als sicheres HTTP konzipiert, aber HTTPS ist sicher und HTTP verbirgt noch keine wichtigen Ausnahmen.

Virtuelle Maschinen (VMs) und Container sind weniger streng definiert, und keine wurde absichtlich so konzipiert, dass sie sicherer ist als die andere. Daher sind die Sicherheitsprobleme immer noch düsterer.

Warum ich glaube, dass VMs sicherer sind als Container

Teilen und Erobern ist eine erfolgreiche Strategie in Krieg und Software. Wenn eine Architektur ein einzelnes komplexes, schwer zu lösendes Sicherheitsproblem in einfachere Probleme unterteilt, ist das Ergebnis in den meisten Fällen sicherer als eine einzelne Lösung, die alle Probleme behebt.

Container sind ein Beispiel für das horizontale Teilen und Erobern von Anwendungen. Durch das Sperren jeder Anwendung in ihrem eigenen Gefängnis schwächen die Schwachstellen in einer Anwendung die Anwendungen in anderen Containern nicht. VMs teilen und erobern sich ebenfalls, gehen aber isoliert noch einen Schritt weiter.

Marvin Waschke /

Ein Fehler in einer inhaftierten Anwendung kann andere Anwendungen nicht direkt betreffen, aber die inhaftierte Anwendung kann das einzelne Betriebssystem (OS), das mit anderen Containern gemeinsam genutzt wird, beschädigen und alle Container betreffen. Bei einem gemeinsam genutzten Betriebssystem können Fehler an jedem Punkt im Anwendungs-, Container- und Betriebssystemimplementierungsstapel die Sicherheit des gesamten Stapels ungültig machen und die physische Maschine gefährden.

+ Auch in der Netzwerkwelt: Was ist billiger: Container oder virtuelle Maschinen? +

Eine mehrschichtige Architektur wie die Virtualisierung trennt den Ausführungsstapel jeder Anwendung bis hinunter zur Hardware, wodurch die Möglichkeit ausgeschlossen wird, dass sich Anwendungen über das gemeinsam genutzte Betriebssystem gegenseitig stören. Darüber hinaus ist die Schnittstelle zwischen jedem Anwendungsstapel und der Hardware definiert und begrenzt, um Missbrauch zu verhindern. Dies bietet einen zusätzlichen robusten Umfang zum Schutz von Anwendungen voreinander.

VMs trennen das Betriebssystem, das die Benutzeraktivität steuert, vom Hypervisor, der die Interaktion zwischen dem Gastbetriebssystem und der Hardware steuert. Das VM-Gastbetriebssystem steuert die Benutzeraktivität, jedoch nicht die Hardware-Interaktion. Es ist unwahrscheinlich, dass ein Fehler in einer Anwendung oder im Gastbetriebssystem die physische Hardware oder andere VMs beeinträchtigt. Wenn das VM-Gastbetriebssystem und das Betriebssystem, das einen Container unterstützt, identisch sind, was häufig der Fall ist, gefährdet dieselbe Sicherheitsanfälligkeit, die alle anderen auf dem Betriebssystem ausgeführten Container gefährdet, andere VMs nicht. Daher trennen VMs Anwendungen horizontal und auch vertikal Betriebssysteme von Hardware.

VM-Overhead

Die zusätzliche Sicherheit von VMs ist mit Kosten verbunden. Die Übertragung von Steuerelementen ist in Computersystemen sowohl in Prozessorzyklen als auch in anderen Ressourcen immer kostspielig. Ausführungsstapel werden gespeichert und zurückgesetzt, externe Vorgänge müssen möglicherweise angehalten oder abgeschlossen werden usw.

Wechsel zwischen dem Gastbetriebssystem und dem Hypervisor kosten viel und kommen häufig vor. Selbst wenn spezielle Steueranweisungen in die Prozessorchips eingebrannt werden, verringert der Steuerübertragungsaufwand die Gesamteffizienz von VMs. Ist der Rückgang signifikant? Schwierige Frage. Anwendungen können optimiert werden, um den Overhead durch die Verwaltung der Steuerungsübertragung zu verringern. Die meisten Serverprozessoren sind jetzt so konzipiert, dass sie die Steuerungsübertragung optimieren. Mit anderen Worten, die Bedeutung hängt von der Anwendung und dem Server ab, aber der Overhead kann niemals vollständig beseitigt, sondern nur verringert werden.

Hypervisor-Schwachstellen

Um die Sache noch weiter zu verkomplizieren, wirft das Trennen von Schichten in einer VM-Architektur ein weiteres Gespenst auf: Hypervisor-Fehler. Ein Hypervisor-Verstoß ist ein einzelner Fehlerpunkt mit potenziellen schwerwiegenden Konsequenzen, insbesondere in öffentlichen Clouds. Es ist vorstellbar, dass ein einzelner Hacker Code in einer VM starten kann, der die Kontrolle über Anwendungen anderer öffentlicher Cloud-Konsumenten übernimmt und eine Tranch einer öffentlichen Cloud in einem einzigen Exploit erstellt.

Eine grundsolide Architektur kann immer noch Implementierungsfehler aufweisen, die ein System erheblich schwächen. Hypervisor-Verstöße werden oft mit der Behauptung abgespeist, dass sie niemals eintreten werden: Die Geschichte besagt, dass Hypervisoren so einfach, so gut geschrieben und so sorgfältig geprüft sind, dass sie niemals versagen. Eine Hypervisor-Verletzung ist möglicherweise genauso verheerend wie WannaCry, aber machen Sie sich darüber keine Sorgen. Aber Heartbleed ist passiert. Und OpenSSL hat weit weniger Codezeilen als ein Hypervisor. Ich muss jetzt raus - mein fliegendes Schwein will mehr Quatsch.

Ich kenne bisher keine signifikanten Hypervisor-Verstöße. Ein kurzer Blick auf die CVE-Datenbank (Common Vulnerabilities and Exposures) zeigt jedoch, dass Forscher ausnutzbare Schwächen des Hypervisors finden. Die Entwickler und Anbieter von Hypervisoren haben Schwachstellen schnell behoben, sobald sie auftreten. Im März 2017 veröffentlichte Microsoft das Security Bulletin MS17-008, in dem sieben gepatchte Sicherheitslücken in seinem Hyper-V-Hypervisor dokumentiert sind, die alle als wichtig oder kritisch eingestuft wurden.

Ich glaube immer noch, dass VMs eine bessere Sicherheit bieten als Container, aber wir müssen die Sicherheit von VM-Systemen mit klaren Augen betrachten. Ich plane, Hypervisor-Schwächen in Zukunft genauer zu diskutieren. Außerdem werden Container und VMs häufig kombiniert. Es gibt noch viel zu sagen.