Ausarbeitung

Transcrição

Ausarbeitung
Isolation – Systemvirtualisierung mit Xen, KVM
und NOVA
Andreas Trenkmann
Universität Dortmund, 44227 Dortmund, Deutschland,
[email protected]
Zusammenfassung. Diese Arbeit bietet einen Einblick in die Systemvirtualisierung mit XEN, KVM und NOVA. Des Weiteren wird die Eigenschaft der Isolation bei den genannten Systemen eingehend beleuchtet.
Dabei werden die Schwächen der jeweiligen genutzten Technologie, Vollvirtualisierung und Paravirtualisierung, aufgezeigt. Die Leistungsfähigkeit der drei Systemvirtualisierungen wird in einer zusammenfassenden
Evaluierung gegenübergestellt.
1
Einleitung
Augenblicklich ist die Systemvirtualisierung die Grundlage des Cloud-Computings. Betrachtet man die Dienststruktur des Cloud-Computings, so lassen sich
die folgenden drei Ebenen identifizieren: Software as a Service (SaaS), Platform
as a Service (PaaS) und Infrastructure as a Service (IaaS) [1]. Das letztgenannte
IaaS kann man als Verwaltungsebene von Datenzentren verstehen. Diese Datenzentren können aus vielen physikalischen Servern bestehen und noch einer
weitaus größeren Anzahl an virtuellen Servern, die sich auf den physikalischen
Servern befinden [2]. Die Anzahl der virtuellen Servern ist abhängig von den Ressourcen des physikalischen Hosts. Das IT-Management legt dabei, unabhängig
von der Anzahl der virtuellen Maschinen (VMs) je Host, das Hauptaugenmerk
auf die Anforderungen an Zuverlässigkeit, Leistungsfähigkeit und Sicherheit [3].
In dieser Ausarbeitung wird die Leistungsfähigkeit und die Sicherheit von den
Virtualisierungsumgebungen Xen, KVM und NOVA betrachtet. Dazu werden
zunächst die Technologien, die zur Systemvirtualisierung zur Verfügung stehen,
erläutert. Anschließend wird als Grundpfeiler der Sicherheit zwischen mehreren
VMs, die Isolation zwischen den VMs und zwischen VM und Host-System erklärt. Tiefergehend wird hier die Kompromittierung der VMs und der darüber
liegenden Verwaltungsschicht beleuchtet. Daraufhin wird die Leistungsfähigkeit
der Virtualisierungsumgebungen gegenübergestellt. Abschließend folgt eine Zusammenfassung der erarbeiteten Erkenntnisse.
2
Systemvirtualisierung
Mit Systemvirtualisierung ist man in der Lage, kosteneffektiv, zwei oder mehrere virtuelle Systemumgebungen auf der selben Hardware simultan in Betrieb
2
zu nehmen. Dabei können die virtuellen Systemumgebungen aus verschiedenen
Betriebssystemen bestehen. Die virtuellen Systemumgebungen werden nachfolgend als Virtual Machine (VM) oder als Gast-Betriebssystem bezeichnet.
Hypervisor Eine weitere Grundkomponente der Systemvirtualisierung ist, neben den VMs, der Hypervisor, auch bekannt als Virtual Machine Monitor (VMM).
Der Hypervisor agiert als Schicht zwischen dem Gast-Betriebssystem und der
echten Hardware. Es wird zwischen zwei Typen von Hypervisors unterschieden.
Der Typ 1 Hypervisor läuft direkt auf der System-Hardware, während der Typ
2 Hypervisor auf einem Betriebssystem des Hosts als Anwendung ausgeführt
wird, wobei das entsprechende Betriebssystem Virtualisierungsdienste unterstützen muss (vgl. Abbildung 1a und 1b). Somit unterliegt das Gast-Betriebssystem
einem der beiden Hypervisor-Typen. Damit hat der Kernel des jeweiligen GastBetriebssystems keinen direkten privilegierten Zugriff auf die CPU [3].
Betriebssysteme, obgleich Gast- oder Host-Betriebssysteme, werden durch das
(a) Hypervisors vom Typ 1
(b) Hypervisors vom Typ 2
Abb. 1: Einbettung des Hypervisors vom Typ 1 und Typ 2 (entnommen aus [4])
Schutzkonzept der Ringe von Anwendungen abgeschottet. Aus diesem Grund
gibt es in der Regel einen privilegierten und einen nicht-privilegierten Modus,
diese unterscheiden sich folgendermaßen:
– Im nicht-privilegierten Modus, dem Benutzermodus (Usermodus), werden
üblicherweise die Anwendungen ausgeführt.
– Im privilegierten Modus, dem Kernelmodus, werden Programmteile des Betriebssystems ausgeführt.
Die genannten Modi werden von der CPU unterstütz, dabei wird zwischen der
älteren x86-Architektur und der aktuellen x64/IA64-Architektur unterschieden.
In der x86-Architektur ist das Schutzkonzept über vier Privilegierungsstufen
realisiert, diese Ringe werden vom privilegierten Ring 0 bis zum unprivilegierten
Ring 3 hochgezählt. Dabei nutzen proprietäre Betriebssysteme lediglich Ring 0
für das Betriebssystem und Ring 3 für die Anwendungen (vgl. Abbildung 2).
Später wird gezeigt, dass bei der x86-Architektur die ungenutzten Ringe für die
3
Virtualisierung genutzt werden können [5].
Die x64/IA64-Architektur hält jeweils nur zwei Ringe vor, die ebenfalls mit Ring
0 (privilegiert) und Ring 1 (weniger privilegiert) bezeichnet werden. Entscheidend
Abb. 2: Schutzringe in der x86-Architektur (entnommen aus [5])
für die Virtualisierung ist nun die Tatsache, dass nur Prozesse, die in Ring 0
ausgeführt werden, Zugriff auf die Hardware haben. Da proprietäre Betriebssysteme, und damit potenzielle Host-Betriebssysteme, lediglich zwei privilegierte
Modi verwenden, muss die VM und damit das Gast-Betriebssystem zusammen
mit dessen Anwendungen im unprivilegierten Modus ausgeführt werden. Erfolgt
nun durch das Gast-Betriebsystem ein privilegierter Befehl an eine x86-CPU,
der eine Ausnahme und damit einen Trap in den höher privilegierten Modus
erzeugt, kann dieser Trap von dem Hypervisor nicht abgefangen werden. Ein
Trap ist ein Software-Interrupt, der für einen Übergang vom Benutzermodus in
den Kernelmodus sorgt, um den aufgerufenen Systemdienst auszuführen. Traps
werden üblicherweise durch einen speziellen Maschinenbefehl des Prozessors, den
sog. Supervisor-Call oder SVC unterstützt. Der Trap-Mechanismus hat den Vorteil, dass der Aufruf eines Systemcalls von einem Anwendungsprogramm aus
ermöglicht wird, ohne dass die tatsächliche Adresse der Systemroutine bekannt
sein muss (Information Hiding). Alle Systemcalls zusammen bilden die Schnittstelle der Anwendungsprogramme zum Kernel [6].
Man unterscheidet folgende Befehle, privilegierte und nicht-privilegierte Befehle,
sensitive Befehle und kritische Befehle. Zu den sensitiven Befehlen zählen beispielsweise Befehle, die den Zugriff auf Ein- und Ausgabegeräte dienen. Die sensitiven Befehle sind eine sollten eine Teilmenge der privilegierten Befehle sein. Kritische Befehle sind sensitive aber nicht privilegierte Befehle und lösen damit auch
keinen Trap aus, somit können sie auch nicht vom Hypervisor abgefangen werden und stellen daher ein Problem dar. Die Schwäche der x86-Architektur, des
Abfangen von kritischen Befehlen, kann mit derzeitigen Virtualisierungslösungen
umgangen werden. Die dazu notwendigen Techniken lauten Code-Patching oder
Binärübersetzung (Binary Translation). Dabei werden vor der Ausführung von
kritischen Befehlen, selbige vom Hypervisor erkannt und ausgetauscht. Wird nun
4
ein solch ausgetauschter Befehl ausgeführt, führt das zum Sprung in den Hypervisor. Dieser hat Zugriff auf Ring 0 und führt den Befehl auf der CPU aus. Diese
Vorgehensweise tritt im Hypervisor Typ 2 auf [4].
Die Problematik der kritischen Befehle ist in der x64/IA64-Architektur durch
saubere Zuordnung der sensitiven zu den privilegierten Befehlen als klare Teilmenge gelöst worden.
Virtualisierungstechniken für Prozessoren Seit einiger Zeit haben die Hersteller AMD [7] und Intel [8] die x86-Prozessoren um Virtualisierungs-Techniken
erweitert. Die Techniken bestehen aus der Erweiterung der Befehlssätze der Prozessoren und der Einführung erweiterter Betriebsmodi.
Bei AMD ist die Erweiterung als Pacifica oder AMD-V bekannt und bei Intel heißen die Erweiterungen VMX bzw. Vanderpool. Die Erweiterungen der
verschiedenen Hersteller sind zueinander inkompatibel aber relativ ähnlich. Als
zusätzliche Modi wurden ein Root- bzw. Wirt-Modus und ein Gast-Modus eingeführt. Der Root-Modus, auch als Ring -1 oder VMX root bekannt, besitzt
mehr Privilegien als Ring 0 und besitzt damit die Kontrolle über die CPU und
andere Ressourcen. In Ring -1 wird nun auch der Hypervisor ausgeführt. Im
Gast-Modus bzw. VMX non-root werden die Gast-Betriebssysteme ausgeführt.
Ruft das Gast-Betriebssystem hier einen kritischen Befehl auf, erzeugt der Prozessor eine Unterbrechung (Trap) und springt zum Hypervisor.
Als eine weitere Erweiterung sind die Prozessoren in der Lage, beim umschalten von Gast-Modus in Root-Modus, den Status der Segment-, Kontroll- und
Steuer-Register zu speichern. Wird erneut in den Gast-Modus zurückgeschaltet
werden die gespeicherten Register-Zustände wiederhergestellt.
Mittels der Erweiterung der Befehlssätze kann die CPU dem Hypervisor den
Grund für den Aufruf des Trap nennen. Damit ist der Hypervisor in der Lage
angemessen zu reagieren [4] [9].
Ein Vorteil der Erweiterung ist, dass weder das Host-Betriebssystem noch das
Gast-Betriebssystem angepasst werden muss und zudem kann der Hypervisor
auf aufwendige Binary Translations verzichten. Der Grund dafür liegt darin,
dass alle weiteren Privilegierungsstufen beibehalten wurden. Da die CPU nun
für mehrere Betriebssysteme aufteilbar ist, spricht man auch von Partitionierung
der CPU. Aufgrund der Tatsache, dass nicht jede Hardware partitionierbar ist,
muss der Hypervisor diese für das Gast-Betriebssystem emulieren und dabei die
Zugriffe verwalten. Ein Beispiel für die nicht partitionierbare Hardware ist die
Netzwerkkarte [4].
Vorteile der Virtualisierung Nach den gerade erläuterten Hauptmerkmalen
der Virtualisierung sind einige Vorteile dieser Technologie bereits zu erkennen.
Mittels Virtualisierung wird die Arbeitsbelastung konsolidiert, um Hardware,
Energie und Raum einzusparen. Durch dieses Mittel können mehrere Betriebssysteme auf einer energiesparenden Hardware ausgeführt werden. Gerade genannte Hardware kann zuverlässiger, günstiger und effektiver sein, als eine zu
der Anzahl der bereitgestellten VMs vergleichbaren Anzahl an zu beschaffene
5
Hardware. Weiterhin ist in großen Virtualisierungssystemen mithilfe von LiveMigration der Ausgleich von Serverauslastung möglich. Hierbei werden die VMs
zur Laufzeit manuell oder automatisiert von einem Server auf einen anderen
übertragen. Dadurch können Fehlertoleranzen, die auf der Arbeitsbelastung von
Systemen beruhen, eingehalten werden. Weitere Vorteile sind: Vereinfachte Wartung, hohe Flexibilität, unterstützt Verfügbarkeits- und Sicherheitskonzepte und
ältere bzw. veraltete Systeme und Software werden unterstützt [10].
Wie eingangs erwähnt, stehen mehrere Virtualiserungsarten zur Verfügung,
diese sind unter anderem Anwendungsvirtualisierung, Paravirtualisierung, Speichervirtualisierung, Netzwerkvirtualisierung etc. Die Virtualisierungsarten, Paravirtualisierung und Vollvirtualisierung, werden in den nachfolgenden Unterkapiteln eingehend erläutert [11] [12].
2.1
Vollvirtualisierung
Das Hauptmerkmal der Vollvirtualisierung ist, dass die Gast-Betriebssysteme
unverändert auf die VMs installiert werden können. In dieser Form der Virtualisierung wird die gesamte, dem Betriebssystem unterliegende, Hardware simuliert.
Das Bedeutet, dass jede Software, die auf der echten Hardware ausgeführt werden kann, auch auf der simulierten Hardware in der VM ausgeführt werden kann.
Dazu zählen auch mehrere Betriebssysteme, die gleichzeitig auf einer Hardware
ausgeführt werden und durchaus verschieden sein können [12].
Ein Vorteil dabei ist, dass die simulierte Hardware populärer Hardware entsprechen kann und damit Treiberprobleme vermieden werden. Die Simulation wird
durch Emulation von dem Hypervisor übernommen [4]. Der Hypervisor kann
bei der Vollvirtualisierung vom Typ 1 oder vom Typ 2 sein. Der Typ 1 Hypervisor ist bei Vollvirtualisierung nur mit den Prozessoren möglich, die die neuen
Virtualisierungs-Techniken besitzen (vgl. Kapitel 2). Der Hypervisor wird bei
vielen Herstellern von Vollvirtualisierungs-Software als Virtual Machine Monitor
(VMM) bezeichnet. Hier herrscht, auch in der Literatur, weitläufige Unklarheit
über die genaue Bedeutung des Begriffs. Bei NOVA beispielsweise kommt sowohl
eine VMM als auch ein Hypervisor vor. Im gleichen Zusammenhang findet man
auch die Bezeichnungen einer hybriden VMM, die weitestgehend das Monitoring,
die dynamische Verwaltung von Speicher und die Interaktion zwischen den VMs
beschreibt1 [11]. Der Übersicht halber wird der VMM aber weiterhin als Hypervisor Typ 2 bzw. Typ 1 bezeichnet. Dieser verteilt die Hardware-Ressourcen des
Host-Systems an die VMs und emuliert Hardware, die nicht für den gleichzeitigen
Zugriff von mehreren Betriebssystemen ausgelegt sind [9]. Beispiele für Virtualisierungslösungen, die auf dem Konzept der Vollvirtualiserung basieren, sind:
VMware Server, VMware Workstation, VMware Fusion, Microsoft Virtual PC
(in der Version für x86), Parallels Desktop, Parallels Workstation, VirtualBox,
Kernel-based Virtual Machine (KVM), Xen-Server (ab Version 3 und entsprechender Virtualisierungstechnik in den verwendeten Prozessoren) und Mac-on1
Siehe dazu auch die Diskussion von Microsoft’s Hyper-V Manager, Ben Armstrong:
http://blogs.msdn.com/b/virtual_pc_guy/archive/2006/07/10/661958.aspx
6
Linux (MoL). In den nachfolgenden Unterkapiteln wird auf die Lösungen KVM
und NOVA eingegangen [13].
KVM KVM steht für Kernel-based Virtual Machine und erweitert Linux um
ein Subsystem, dass die Fähigkeit eines Hypervisors Typ 2 und eines Typ 1 mitbringt. Dabei werden die VMs als Prozess nahtlos in das System integriert. Wie
der Name schon verkünden lässt, ist der Hypervisor als Modul in den Kernel
des Betriebssystems integriert. Dabei wurde das Ziel verfolgt, ein Virtual Machine Interface (VMI) als Schnittstelle zu einem Mikrokern, sprich eine Schnittstelle mit Hypervisor-Befehlen, zu schaffen. Damit arbeitet der Linux-Kernel
selbst als Hypervisor. KVM setzt dafür aber voraus, dass die verwendeten Prozessoren Virtualisierungstechnik unterstützten (vgl. Kapitel 2). Daraus folgt,
dass die CPU-Virtualisierung durch die Hardware bereitgestellt wird. Bei der
CPU-Virtualisierung werden Teile der Hardware direkt durch die entsprechenden Kernel angesprochen, die Verteilung erfolgt zuvor durch den Hypervisor, im
Fall von KVM also durch den Kernel des Hosts. Die Ressource-Anforderungen
des Gast-Betriebssystems werden im Host-Betriebssystem mit einem Emulator
und gleichnamigen Prozess namens QEMU verarbeitet. Der Speicher für die
VMs wird durch KVM bereitgestellt [13]. In Abbildung 3 ist die Architektur
von KVM dargestellt. Als weitere Funktion bietet KVM die Fähigkeit der Live
Migration, damit ist die Möglichkeit gegeben die VM im laufenden Betrieb von
einem Host auf einen anderen Host zu übertragen. Dabei setzt die VM nur für
einige Millisekunden aus. Für die Übertragung wird der gesamte Speicher auf
den Ziel-Host übertragen, verändert sich der Speicher bzw. ein Teil des Speichers
während der Übertragung, muss dieser erneut übertragen werden [10].
Abb. 3: Architektur von KVM (entnommen aus [4])
NOVA Die NOVA OS Virtualization Architecture (NOVA) wurde von der TU
Dresden im Rahmen des Open Robust Infrastructure (ROBIN) Projekts entwickelt [14]. Diese Plattform sieht dem Aufbau eines Hypervisor Typ 1 Archi-
7
tektur sehr ähnlich, unterliegt aber einer Vollvirtualsierungs-Umgebung. Ähnlich der KVM (vgl. KVM) befindet sich der Hypervisor eingebetet in einer
Mikrokernel-basierten Systemumgebung. NOVA wurde gezielte auf eine kleine
Trusted Computing Base (TCB) hin entwickelt. Der entstandene Mikrokernel
wurde daraufhin formal verifiziert, was darauf schließen lässt, dass es sich hier um
eine sehr sichere Virtualisierungsumgebung handelt [15]. Auf die TCB wird später im Kapitel Sicherheit in KVM, NOVA und XEN eingegangen. In Abbildung
4 ist die Architektur von NOVA zu erkennen. Die hier gezeigten VMM entsprechen nur Teilweise einem Hypervisor Typ 2. Die Hauptaufgaben der multiplen
VMMs ist das verwalten der Interaktion zwischen den VMs und des Speichers
des Host-Systems. Weiterhin werden hier auch die sensitiven Befehle injiziert.
In [11] wird explizit darauf hingewiesen, dass die Bezeichnungen der üblichen
Terminologie abweichen und man nur zum Ausdruck bringen möchte, dass die
VMM im nicht-privilegierten und der Hypervisor im privilegierten Modus arbeitet. Des Weiteren wurde absichtlich ein Mikrokernel-basiertes System gewählt
um die Trusted Computing Base (TCB) klein zu halten. Diese Systeme verfolgen,
mithilfe eines kleinen Kernels, die Principle Of Least Privilege (POLP). Damit
wird versucht Sicherheit zu gewährleisten, indem die zur Verfügung stehenden
Privilegien auf das unbedingt Notwendige begrenzt werden [16]. Die TCB sind
Befehlssätze und Anwendungen die für das System als sicherheitskritisch gelten. Während der Entwicklung von NOVA wurde explizit darauf geachtet diese
klein zu halten. Daher ist der Hypervisor auch die einzige Komponente, die im
privilegierten Ring 0 bzw. Ring -1 arbeitet. Auf dem Host können auf Ring 3
Applikationen direkt unter dem Hypervisor ausgeführt werden, beispielsweise
der Partition Manager oder der x86 VMM. Diese Applikationen laufen unter der
Benutzerumgebung NUL (NOVA UserLand), welche sich in drei Komponenten
gliedert: Den Host-Treiber, den VMs zur Verfügung gestellten Device Models und
den Virtual Executer (in der VMM enthalten). Der Partition Manager verteilt
statisch die Speicherbereiche, die Interrupts und die Ein- und Ausgabe-Ports des
Hosts. Die Device Models werden durch den Emulator QEMU (vergleich Kapitel LiteraturKVM) eingesetzt, dessen Aufgabe es ist, den VMs, virtuelle Geräte
bereitzustellen. Dabei werden für die Darstellung der Gerätezustände Register
verwendet. Die nötigen Interrupts der Geräte zu den entsprechenden VMs werden durch die VMMs injiziert.
Im Gegensatz zu den Lösungen XEN oder KVM ist mit NOVA augenblicklich
keine Live-Migration möglich.
2.2
Paravirtualisierung
Man spricht von Paravirtualisierung, wenn die Gast-Betriebssysteme auf den
VMs nicht auf Ring 0 sondern auf Ring 1 ausgeführt werden. Dazu müssen
proprietäre Betriebssysteme angepasst werden, um sie als Gast-Betriebssystem
aufspielen zu können. Das führt auch schon zu dem Problem, dass Betriebssystemhersteller diese Anpassung verweigern können. Der Hypervisor ist vom Typ
1 und gleichzeitig auch das Betriebssystem des Hosts. Die ParavirtualisierungsArchitektur wurde für die x86-Prozessor- und RISC-Architektur entwickelt und
8
Abb. 4: Architektur von NOVA (entnommen aus [17])
nutzt den bisher ungenutzten Ring 1 für die Gast-Betriebssysteme, womit die
Host-Systeme insgesamt drei Ringe benötigen. Möchte das Gast-Betriebssystem
einen privilegierten Befehl ausführen, erfolgt vom Kernel des Gast-Betriebssystems
ein Aufruf an den Hypervisors. Diese sogenannten Hypercalls ruft eine Schnittstelle (API) des Hypervisors auf. Für Gast-Betriebssysteme wären damit die
privilegierten Befehle abgefangen. Nun können aber bestimmte Anwendungen
ebenfalls privilegierte Befehle, die sogenannten Systemcalls, an den Kernel anfordern, der sich ursprünglich in Ring 0 befand. Die Systemcalls werden vom
Interrupt-Handler des Hypervisors abgefangen und von dort aus an das GastBetriebssystem zurückgegeben, dabei prüft der Interrupt-Handler im Hypervisor, ob der Zugriff erlaubt ist. Das Gast-Betriebssystem setzt nun einen Hypercall
an die API des Hypervisors ab, dieser greift auf die entsprechende Hardware zu
bzw. verarbeitet die Anfrage in Ring 0. Nur aufgrund dieser Abhandlung ist
es möglich Anwendungen unverändert auf den Gast-Betriebssystemen installieren und ausführen zu können. Das Prozedere der Systemcall-Verarbeitung ist in
Abbildung 5 dargestellt. Die Verwaltung der Hardware und der Interrupts übernimmt der Hypervisor, somit emuliert oder virtualisiert der Hypervisor keine
Hardware, aber es können trotzdem mehrere VMs auf einen Prozessor zugreifen
[12] [4].
XEN XEN wurde 2003 an der Universität zu Cambridge vorgestellt2 und ist der
derzeit einzige Open-Source-Hypervisor Typ 1 [12]. Seit Version 3 ist auch eine
Vollvirtualisierungsumgebung verfügbar, somit unterstützt Xen sowohl paravirtualisierte (PV) als auch vollvirtualisierte Gast-Betriebssysteme (HVM), man
spricht hier von einem Gasttyp oder Virtualization Modes. Zusätzlich werden
im HVM-Betrieb auch Techniken angeboten, die ursprünglich im PV-Betrieb
genutzt wurden. Zudem wird dadurch ein Paralell-Betrieb von VMs im HVMund PV-Modus möglich. VMs werden bei XEN als DomU oder Gast bezeichnet.
2
Siehe dazu XEN im Internet: http://wiki.xen.org/wiki/Xen_Overview
9
Abb. 5: Hypercall (entnommen aus [4])
Des Weiteren startet der Hypervisor von XEN eine eigene (Linux-) Instanz und
lädt mit dieser Instanz die nötigen Treiber, die später über den Hypervisor verwaltet werden. Diese gerade genannte Instanz wird Dom0 bzw. Control Domain,
in Anlehnung zu Ring 0, genannt.
Die Speicherverwaltung nativer Betriebssysteme nutzt eine Hardware, die MemoryManagement Unit (MMU), welche sich um die Adressumsetzung von virtuellen
zu physikalischen Adressen kümmert. Xen führt hier eine indirekte Schicht ein,
mithilfe dessen dem Gast-Betriebssystem pseudo-physikalische Adressen zur Verfügung gestellt werden. Der Hypervisor leitet Speicherzugriffe der Gast-Betriebssysteme
direkt an die MMU weiter und stellt sicher, dass kein unberechtigter Zugriff erfolgt. Schreibzugriffe erfolgen per Hypercall über den Hypervisor. Beim Arbeitsspeicher gibt es die Möglichkeit harte und weiche Speichergrößen festzulegen.
Die feste Größe steht dem Gast in jedem Fall zur Verfügung, während der Bereich zwischen weicher und harter Grenze dem Gast zur Verfügung stehen kann.
Der Gerade beschriebene Balloon-Treiber gibt freien Arbeitsspeicher an XEN
zurück, um ihn entsprechend zu verteilen. Als Gerätetreiber stellt XEN dem
Gast-Betriebssystem abstrakte Geräte bereit, die die Grundfunktionen der Geräte aus der Dom0 beherrschen. Dieser Split-Device-Treiber wird im Hypervisor
mittels einem I/O-Ring-Mechanismus realisiert. Ein I/O-Ring stellt eine Methode zur asynchronen Kommunikation zwischen Gästen, also virtuellen Maschinen,
bereit. Ein Gast stellt eine Anfrage in den Ring, während ein anderer diese Anfrage entfernt und eine Antwort im Ring platziert. Anfragen an Geräte erfolgen
entsprechend an die Dom0 [12].
3
Isolation
Ein Hypervisor besitzt drei Haupteigenschaften [13]:
10
Isolation: Nur der Hypervisor besitzt die Verantwortung die VMs zu kontrollieren, zu überwachen und physikalische Ressourcen zuzuweisen. Die Isolation
schafft die Illusion, dass jede VM ihren eigenen Adressraum besitzt. Mit
der Existenz eines Hypervisors ist jede VM von der anderen isoliert, obwohl
diese auf dem gleichen physischen Host ausgeführt werden. Damit kann das
Gast-Betriebssystem, auf einer VM, weder auf Anwendungen noch auf das
Betriebssystem anderer VMs oder auf das Host-System zugreifen.
Interposition Der Hypervisor verwaltet alle Zugriffe auf die privilegierten Befehle auf dem physischen Host. Das Gast-Betriebssystem leitet alle Interrupts
und Traps an den Hypervisor weiter, dieser interagiert im Interesse des GastBetriebssystem direkt mit der physischen Plattform. Die I/O-Anforderungen
werden vom Gast aus über virtuelle Geräte angesprochen. Die virtuellen Geräte werden vom Hypervisor über eine I/O-Abstraktionssicht an die echte
Hardware weitergeleitet.
Inspektion Der Hypervisor hat jederzeit Zugriff auf alle Zustände der VMs.
Das beinhaltet die CPU-, Speicher- und Gerätezustände. Diese Zugriffe sind
nötig aufgrund der Durchführung von Checkpointing (Snapshot), Rollback
(Zurücksetzen) und Replay (Abfangen von Operationen an den Prozessor).
Die Inspektion wird hauptsächlich für die Live-Migration genutzt.
In diesem Kapitel wird der Hauptfokus auf die Verletzung der gerade genannten
Isolations-Eigenschaft gerichtet. Doch bevor mögliche Angriffe beschrieben werden, wird das Angreifer-Modell skizziert. Der Angreifer ist nicht in der Lage in
die Hardware oder dessen Firmware des Hosts einzubrechen. Damit einbezogen
ist der CPU Mikrocode, der BIOS des Hosts und der Code des Hypervisors, diese
Vertrauenswürdigkeit nennt man Tamper-Proof. Ebenfalls unangreifbar ist der
Boot-Prozess der Host-Plattform. Der Angreifer ist in der Lage lokal oder per
Fernzugriff die Software über den Hypervisor zu verändern. Weiterhin ist der
Angreifer in der Lage bösartige Gast-Betriebssysteme in den VMs aufzuspielen,
feindliche Gerätetreiber mit direktem Speicherzugriff zu installieren oder schädliche Hypervisor-Benutzerumgebungen zu benutzen. Schädliche Software, oder
Teile einer Software, die dem Angreifer die Kontrolle des Gast-Betriebssystems
ermöglichen, während der Angreifer selbst unsichtbar bleibt, wird Root-Kit genannt [11].
3.1
Isolationskonflikte
Unabhängig davon, welche Methode der Angreifer wählt ist die Isolation gefährdet, sobald der Angreifer Zugriff auf den Hypervisor besitzt oder den Betrieb
andere VMs behindert. Um eine VM angreifen zu können muss zunächst festgestellt werden, ob es sich um eine VM handelt. Red Pill bietet Techniken zur
Identifizierung einer VM [18]. Für die Identifizierung werden Prozesse, Registerschlüssel und Dienste in der VM untersucht.
DoS Hat der Angreifer die Kontrolle einer VM gewonnen ist er in der Lage Denial of Service-Angriffe (DoS) zu tätigen. Dabei stellt er andauernd Anfragen an
11
die Ressourcen, wie Netzwerkkarte, Speicher, etc. und belastet die CPU. Einer
Virtualisierungsumgebung mit großen Kapazitäten sollten viele Anfragen an Ressourcen nichts ausmachen, insofern dass bestimmte Server-Dienste die VM auch
stark auslasten können. Problematisch wird es, wenn der Angreifer viele VMs
auf einem Host unter seine Kontrolle bringt und mit diesen, die nicht-infizierten
VMs, aufgrund andauernder DoS-Angriffe, behindert. Mit vielen VMs unter der
Kontrolle des Angreifers, erhält dieser allmählich die Kontrolle über die betroffenen Ressourcen. Dies kann dann dazu führen, dass alle nicht-infizierten VMs
keinen Zugriff auf die Ressourcen erhalten und somit zum Stillstand gezwungen
werden [19].
VM Escape Der Hypervisor ist für Isolation der VMs auf dem Host verantwortlich. Der Prozess um aus der gekapselten VM auszubrechen und mit dem
Hypervisor interagieren zu können wird VM Escape genannt. Ist das der Fall hat
der Angreifer die Möglichkeit den Hypervisor zu korrumpieren und die Kontrolle
über alle auf dem Host ausgeführten VMs bzw. den Host selbst zu erhalten. Die
Angriffsfläche wird vergrößert wenn man VM-Werkzeuge, wie ein gemeinsames
Clipboard (Zwischenspeicher), gemeinsame Laufwerke, etc. verwendet [19].
VM Hopping Beim VM Hopping springt der Angreifer auf eine andere VM
innerhalb des Hosts. Voraussetzung für diesen Angriff ist, dass der Angreifer die
IP-Adresse der anderen VM kennt. Der Angreifer kann bei einem erfolgreichem
Angriff die volle Kontrolle der VM erhalten [19].
VM Monitor-Attacke Der VM Monitor wird für die Überwachung der Ressourcen des physischen Hosts, sowie die Status der einzelnen VMs verwendet.
Voraussetzung dafür ist, dass der Angreifer bereits über die Kontrolle einer VM
verfügt. Mit Side-Channel Attacken ist es möglich die Speicherinformationen einer weiteren VM auszulesen. Side-Channel Attacken sind besonders schwierig
auszumachen, da der Angreifer durch beobachten des Systemverhaltens Schlüsse
zieht bzw. Korrelationen feststellt. Aufgrund dieser Korrelationen kann der Angreifer angreifbare Situationen bzw. Momente ausnutzen, um an Informationen
zu gelangen zu denen er sonst keinen Zugriff haben sollte. Eine andere Möglichkeit der Attacke wäre die Manipulation des ARP-Chaches (ARP-Poisoning)
im Hypervisor, um den Datenverkehr der angegriffenen VM zum Angreifer zu
leiten. Dies setzt aber ein VM Escape voraus [19].
Eine weitere resultierende Gefährdung nach erfolgreichem Angriff ist die Live
Migration. Da hier schnell VMs an andere Hosts übertragen werden, kann mit
der Übertragung infizierter VMs der Angreifer diese Hosts ebenfalls gefährden.
[20] [21]
3.2
Sicherheit in KVM, NOVA und XEN
Die Angriffsmöglichkeiten von Virtualisierungsumgebungen sind zahlreich, wie
auch vielfältig. NOVA und XEN zielen in ihren Sicherheitskonzepten darauf ab,
12
ihre TCB (Trusted Computing Base) gering zu halten. Durch dieses Konzept
verkleinert sich automatisch die Angriffsfläche des Hypervisors. Speziell NOVA
wurde im Hinblick eine sehr kleine TCB bereitzustellen entwickelt. Weiterhin
bietet NOVA generell eine kleinere Angriffsfläche, da viele Funktionen, wie Live
Migration, nicht implementiert wurden [11]. NOVA bestätigt aber diese Funktionen als Applikation nachzurüsten. XEN hat seine Angriffsfläche dadurch verringert, dass eine Anwendungsschicht in die Dom0 eingefügt wurde, somit wurde
die TCB der Linux-Instanz, also des Hypervisors Typ 1, verringert [22].
Eine weitaus effektivere Methode ist, den Angreifer nicht auf die VMs zu lassen bzw. vom Angreifer übernommene VMs zu identifizieren. KVM-SMA (KVM
Security Management Architecture) wurde unter Berücksichtigung bekannter
Root-Kits entwickelt und beinhaltet eine Sicherheitsüberwachung [19]. In [23]
wird ebenfalls eine Sicherheitsüberwachung für XEN eingeführt. Hier wurden
verschieden Sicherheits-Mechanismen eingeführt, die Hypercall-Aufrufe identifizieren und überwachen, die Netzwerkschnittstelle sichern und den Speicherbereich schützen.
4
Evaluierung
Systemvirtualisierungen erzeugen für die Gast-Betriebssystem einen Overhead
(Mehraufwand), der sich negativ auf die Verarbeitungsgeschwindigkeit von Programmen auswirken kann. Der Grund dafür liegt darin, dass im Gegensatz zur
nativen Ausführung eines Betriebssystems, der Hypervisor eine Schicht zwischen
physikalischer Plattform und Betriebssystem bildet (vergleich Kapitel Hypervisor). Für einen akkuraten Leistungsvergleich zählt auch die Größe der verwendeten Hypervisors. Hier wird die Größe über den geschriebenen Quellcode
gemessen, dabei werden die Zeilen in KLOC (K für 1000 und Lines of Code)
gemessen. In Abbildung 6 ist der Vergleich dargestellt. Für den Vergleich wurden noch die Mikrokernel-Version von KVM (KVM-L4), der ESXi von VMware
und Microsoft’s Hyper-V herangezogen, die ebenfalls Virtualisierungs-Lösungen
darstellen. Der grüne Bereich der gestapelten Balkendiagramme, stellt die Größe
der TCB dar. Die andersfarbigen Bereiche der Diagramme stellen die, für den
Virtualiserungs-Betrieb notwendigen Komponenten dar, die außerhalb der TCB
liegen. NOVA besitzt eine TCB mit einer Größe von 9 KLOC, XEN’s TCB ist
100 KLOC groß und KVM hat eine TCB Größe von über 200 KLOC. Da KVM
in einem Linux-Kernel integriert ist, ist Linux ebenfalls teil der TCB. KVM-L4
ist eine Portierung von KVM zum L4 Linux, welches paravirtualisiert unter dem
L4-Mikrokernel ausgeführt wird. Die kommerziellen Lösungen von Microsoft und
VMware besitzen ebenfalls eine TCB, die bei Microsoft mit 100 KLOC und bei
VMware mit 200 KLOC groß ausfällt.
Für den Leistungsvergleich wurde die Zeit gemessen (wahre Zeit, nicht ProzessZeit), die für die Kompilierung des x86 Linux 2.6.32 Kernel aufgewandt wurde.
Die Kompilierung startete mit einem Cold Buffer Cache und vier parallelen Prozessen um den Effekt des Festplatten-Delays zu minimieren. Abbildung 7 zeigt
den Leistungsvergleich. Als Nativ wurde ein Rechner genutzt, der ohne Virtuali-
13
Abb. 6: Vergleich von KLOC je Hypervisor (entnommen aus [11])
sierung mit einem Linux 2.6.32 läuft, einen Arbeitsspeicher in der Größe von 512
MB RAM besitzt und eine intel i5 CPU verwendet. Die gerade genannte Konfiguration wurde für die VMs auf den entsprechenden Virtualisierungsumgebungen,
mit der gleichen Hardware genutzt. Für die Virtualisierungsumgebungen wurde
allerdings der Arbeitsspeicher auf 3 GB erhöht. Dabei wurden vom Hypervisor
den entsprechenden VMs ebenfalls 512 MB RAM zugeteilt. Der Balken Direct
stellt das native System mit Nutzung des Nested Paging dar. Nested Paging ist
in der Befehlssatzerweiterung der neuen Prozessoren enthalten (vergleich Virtualisierungstechniken für Prozessoren) und ist eine virtualisierte Adresstabelle.
Die folgenden Balken stellen die Umgebung KVM 2.6.32, Xen 3.4.2, VMWare
ESXi 4.0 U12, und Microsoft Hyper-V Build 7100 dar. Damit liegt der Overhead
mit NOVA bei ca. 1%, mit KVM bei ca. 2% und mit XEN bei ca. 2,5%. Das
zeigt, dass der Overhead sehr gering ist, was nicht zuletzt den Virtualisierungstechniken der CPU zu verdanken ist.
5
Zusammenfassung
In dieser Arbeit wurden die Systemvirtualisierungen XEN, KVM und NOVA
dargestellt. Dabei wurden die Virtualisierungstechniken aktueller Prozessoren
aufgezeigt und die Verwendung dieser Techniken in den genannten Systemvirtualisierungen dargestellt. Weiterhin wurde die Systemvirtualisierung generell
charakterisiert. Mit den Isolationskonflikten wurden die Schwächen der Virtualisierung erläutert. Im Anschluss wurden Sicherheitsmechanismen genannt, die
zumindest einen großen Teil dieser Schwächen mindern. Ein grober Leistungsvergleich zeigte einerseits den minimalen Overhead, der durch die Virtualisierung
entsteht und andererseits den geringen Unterschied zwischen den verschiedenen
Virtualisierungsumgebungen.
14
Abb. 7: Leistungsvergleich bei Linux-Kernel Kompilierung mit Intel Core i7 CPU
(entnommen aus [11])
Zusammenfassend ergibt sich mit der Systemvirtualisierung die Möglichkeit mehrere Betriebssysteme simultan auf einem physischen Host auszuführen, aber mit
der steigenden Anzahl der Möglichkeiten wächst auch die Anzahl der Sicherheitsrisiken. Der Schlüssel zu einem guten Sicherheitskonzept liegt nicht allein
in einer kleinen TCB. Vielmehr muss es auch überwachende Komponenten geben, die wie ein klassischer Vieren-Scanner das System zur Laufzeit überwachen.
Je mehr Gast-Betriebssysteme auf einem Hypervisor laufen, umso größer ist der
Schaden den ein Angreifer an solch einem System anrichten kann.
Da bereits jetzt Technologien, wie Cloud-Sevices, auf Virtualisierung nicht mehr
verzichten können, steht die Sicherheit der Virtualsierungs-Technologie, sowie
eine gute Sicherheits-Architektur, im Fokus von brauchbaren IT-Lösungen.
Literatur
1. Xin Wan, Xinfang Zhang, Liang Chen, and Hao Jin. Tvpdc: A model for secure
managing virtual infrastructure in iaas cloud. In Computational Intelligence and
Security (CIS), 2012 Eighth International Conference on, pages 136 –141, nov.
2012.
15
2. Chao-Tung Yang, Kuan-Lung Huang, Jung-Chun Liu, Wei-Sheng Chen, and WenHung Hsu. On construction of cloud iaas using kvm and open nebula for video
services. In Parallel Processing Workshops (ICPPW), 2012 41st International Conference on, pages 212 –221, sept. 2012.
3. L. YamunaDevi, P. Aruna, D.D. Sudha, and N. Priya. Security in virtual machine
live migration for kvm. In Process Automation, Control and Computing (PACC),
2011 International Conference on, pages 1 –6, july 2011.
4. Peter Mandl. Betriebssystemvirtualisierung. In Grundkurs Betriebssysteme, pages
289–309. Springer Fachmedien Wiesbaden, 2013.
5. Peter Mandl. Betriebssystemarchitekturen und betriebsarten. In Grundkurs Betriebssysteme, pages 25–48. Springer Fachmedien Wiesbaden, 2013.
6. Peter Mandl. Interruptverarbeitung. In Grundkurs Betriebssysteme, pages 49–73.
Springer Fachmedien Wiesbaden, 2013.
7. Amd virtualization. http://www.amd.com/virtualization (23 Jan. 2013).
8. Intel - virtualization technology. http://www.intel.com/virtualization (23 Jan.
2013).
9. Avi Kivity, Yaniv Kamay, Dor Laor, Uri Lublin, and Anthony Liguori. kvm: the
linux virtual machine monitor. In Proceedings of the Linux Symposium, volume 1,
pages 225–230, June 2007.
10. L. YamunaDevi, P. Aruna, D.D. Sudha, and N. Priya. Security in virtual machine
live migration for kvm. In Process Automation, Control and Computing (PACC),
2011 International Conference on, pages 1 –6, july 2011.
11. Udo Steinberg and Bernhard Kauer. Nova: A microhypervisor-based secure virtualization architecture. In 5th European Conference on Computer Systems, volume 5,
pages 1–14, 2010.
12. Paul Barham, Boris Dragovic, Keir Fraser, Steven Hand, Tim Harris, Alex Ho, Rolf
Neugebauery, Ian Pratt, and Andrew Warfield. Xen and the art of virtualization.
In SOSP’03, Bolton Landing, New York, USA, pages 1–14, October 2003.
13. F.A. Bazargan, Chan Yeob Yeun, and J. Zemerly. Understanding the security
challenges of virtualized environments. In Internet Technology and Secured Transactions (ICITST), 2011 International Conference for, pages 67 –72, dec. 2011.
14. Open robust infrastructures (robin), webpage. http://robin.tudos.org, 2006.
15. Hendrik Tews. Formal methods in the robin project: Specification and verification
of the nova microhypervisor. June 2007.
16. Roland Schmitz, Walter Kriha, Roland Schmitz, and Walter Kriha. Sichere software: Mechanismen und konstruktionsprinzipien. In Sichere Systeme, Xpert.press,
pages 415–484. Springer Berlin Heidelberg, 2009. 10.1007/978-3-540-78959-8.
17. Nul - the nova userland. http://os.inf.tu-dresden.de/nul/.
18. S.T. King and P.M. Chen. Subvirt: implementing malware with virtual machines.
In Security and Privacy, 2006 IEEE Symposium on, pages 14 pp. –327, may 2006.
19. F. Lombardi and R. Di Pietro. A security management architecture for the protection of kernel virtual machines. In Computer and Information Technology (CIT),
2010 IEEE 10th International Conference on, pages 948 –953, 29 2010-july 1 2010.
20. Bazarganand Fatma, Yeob Yeun Chan, and Zemerly Mohamed Jamal. State-of-theart of virtualization, its security threats and deployment models. In International
Journal for Information Security Research, volume 2, pages 335 – 343, Dec 2012.
21. Yu-Lun Huang, Borting Chen, Ming-Wei Shih, and Chien-Yu Lai. Security impacts
of virtualization on a network testbed. In Software Security and Reliability (SERE),
2012 IEEE Sixth International Conference on, pages 71 –77, june 2012.
22. G. Murray Derek, Milos Grzegorz, and Hand Steven. Improving xen security
through disaggregation. In SVEE’08, pages 151 –160, March 2008.
16
23. Chunxiao Li, A. Raghunathan, and N.K. Jha. Secure virtual machine execution
under an untrusted management os. In Cloud Computing (CLOUD), 2010 IEEE
3rd International Conference on, pages 172 –179, july 2010.

Documentos relacionados