XenServer und Sicherheit

Der Citrix XenServer ist bereits durch seine grundlegende Architektur ein sehr sicheres System. Allerdings wird oft das Zusammenspiel der einzelnen Komponenten nicht ausreichend beachtet und damit die Sicherheit einer solchen Virtualisierungsplattform falsch eingeschätzt und mögliche Sicherheitslücken in der Konfiguration unterschätzt. Mit diesem Artikel möchte ich nicht nur die einzelnen Komponenten in puncto Sicherheit betrachten, sondern auch konkrete Hinweise für die Absicherung einer XenServer Infrastruktur geben.

Die einzelnen Komponenten

In einer normalen Installation besteht ein Citrix XenServer aus den folgenden Komponenten:

xenserver:xs_security01.png

  1. Die erste Komponente ist natürlich die zugrundeliegende Hardware.
  2. Auf der eigentlich Hardware befindet sich der Xen Hypervisor. Der Hypervisor ist die erste Software die vom BIOS der Hardware gestartet wird und läuft im nativen 64-bit Modus. Weshalb auch eine Installation auf 32-bit Systemen nicht möglich ist. Der Hypervisor ist die Schicht, die eine Virtualisierung von Hardware überhaupt erst möglich macht.
  3. Sobald der Hypervisor gestartet wurde, wird die erste virtuelle Maschine gestartet. Diese virtuelle Maschine ist die Control Domain (auch Dom0 genannt) und besteht aus einer virtualisierten 32-bit Hardware mit erweiterten Privilegien für den Zugriff auf die darunterliegende physikalische Hardware. Die Dom0 ist ein angepasstes Linux (basierend auf CentOS 5.1) und stellt fast alle Linux Kommandos zur Administration zur Verfügung.
  4. Innerhalb der Dom0 sind zwei API's implementiert. Die erste und wichtigste der beiden ist die XAPI (oder auch XenAPI) und stellt die Schnittstelle für das Management aller weiteren virtuellen Maschinen sowie der verwendeten Ressourcen zur Verfügung. Die zweite API ist der Storage Manager (auch SMAPI genannt) und stellt ein Interface für iSCSI oder FiberChannel Storage bzw. dateibasierten VHD und lokalem Storage zur Verfügung.

Für den Zugriff bwz. Kommunikation mit der XenAPI stehen mehrere Möglichkeiten zur Verfügung. Die bekannteste ist das XenCenter, einer Windows Anwendung die auf einer Management Workstation installiert wird und direkt mit der XenAPI kommuniziert. Weniger bekannt ist das Kommandozeilen Tool xe das auf der Konsole des XenServers zu finden ist und auch über SSH benutzt werden kann. Dieses Kommandozeilen Tool steht nach der Installation des XenCenters auf einem Windows Rechner auch als Windows-Version (xe.exe) zur Verfügung. Für alle die auf der Konsole des XenServers (das ist dann die virtuelle Control Domain oder Dom0) arbeiten müssen aber nicht auf eine grafische Oberfläche verzichten möchten, können die xsconsole für rudimentäre Aufgaben verwenden. All diese Möglichkeiten werden direkt von Citrix zur Verfügung gestellt, es existieren aber noch diverse Tools von Drittherstellern die unter anderem per xmlrpc mit der XenAPI kommunizieren können.

Die Hardware

Ich denke es ist selbstverständlich das ein Serversystem nicht unter dem Schreibtisch, sondern in einem gesicherten Rechenzentrum betrieben werden sollte. Deshalb möchte ich nicht weiter auf die physikalische Sicherheit der Hardware eingehen.

Der XenServer Host

Bei der Installationsroutine des XenServer werden bereits sicherheitskritische Fragen gestellt. Die natürlich offensichtlichste ist die nach dem Passwort des Systemverwalters, also das Passwort für den Benutzer „root“. Bei der Wahl dieses Passwortes sollte man sämtliche guten Ratschläge und Best Practices betreffend der Kennwortsicherheit beachten und ein möglichst kompliziertes Passwort wählen. Denn mit diesem Passwort können alle Tätigkeiten an dem Server vorgenommen werden. Mit Einrichtung der Control Domain werden in der Regel auch drei Netzwerke eingerichtet; das Management Netzwerk, das Storage Netzwerk sowie das Netzwerk für die virtuellen Maschine. Diese drei Netzwerke können alle auf ein physisches Netzwerkinterface zeigen, aus Sicherheitsgründen sollte sie aber alle über ein eigenes Netzwerkinterface mit dem entsprechenden Netzwerk verbunden werden. Wobei es in diesem Fall egal ist, ob es sich um einzelne oder verbundene (Bonding / Teaming) Netzwerkinterfaces handelt. Schauen wir uns doch mal die Funktion dieser einzelnen Netzwerk in Bezug auf die Sicherheit an.

Management Netzwerk

Das Management Netzwerk wird vom XenServer für unterschiedliche Aufgaben benutzt.

xenserver:xs_security02.png

  • Alle Requests der XenAPI
  • Verschieben von virtuellen Maschinen (XenMotion) innerhalb eines Ressource Pools
  • Im- und Exportieren von virtuellen Maschinen
  • Senden von E-Mail Warnungen
  • Kommunikation mit anderen Resource Pool Mitgliedern

Die XenAPI selbst ist in einer High-Level Sprache mit dem schönen Namen Objective CAML ( OCaml) geschrieben. Dadurch ist die XenAPI selbst fast völlig unempfindlich gegen Buffer Overflows bzw. Integer Buffer Overflows und ist sehr robust gegen Angriffe über das Netzwerk. Außerdem benutzt die XenAPI das stunnel Paket um SSLv3 Verschlüsselung zu implementieren. Obwohl die Standard XenAPI Clients von Citrix (hier speziell das XenCenter) eine Kommunikation ausschließlich über den Port 443 SSL verschlüsselt führen, lauscht die XenAPI auch auf Port 80 (PlainText). Es ist nicht auszuschließen, dass XenAPI Clients von anderen Herstellern oder der Open Source Gemeinde unverschlüsselt mit der XenAPI kommunizieren. Dies verdeutlicht auch die Ausgabe von netstat auf einem XenServer.

[root@xenserver ~]# netstat -l --numeric-ports 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address               Foreign Address  State 
[...] 
tcp        0      0 xenserver.localhost:80      *:*              LISTEN 
tcp        0      0 xenserver.localhost:443     *:*              LISTEN 
[...]

Allerdings ist der offene Port 80 nicht völlig sinnlos, der die unverschlüsselte Kommunikation über HTTP wird von XenMotion genutzt um das Memory Image einer laufenden virtuellen Maschine auf einen anderen Host zu übertragen. Die Idee dahinter war, ein Memory-Image möglichst schnell zu übertragen, deshalb wurde hier auf den Overhead, den die Verschlüsselung erzeugen würde, verzichtet. Aus diesem Grund sollte XenMotion auch nur im LAN verwendet werden. Bei Übertragungen im WAN sollte hier IPSec benutzt werden um das Memory-Image verschlüsselt zu übertragen. Wer den Zugriff auf Port 80 unterbinden möchte, kann den Port entweder auf der Firewall vom Admin-Netzwerk zu den entsprechenden XenServer sperren oder die interne Firewall der Dom0 entsprechend konfigurieren.

Da die Control Domain im XenServer auf Linux basiert, gibt es hier auch eine IPTables Firewall. Zur Konfiguration dieser Firewall steht eine rudimentärre GUI zur Verfügung, die man mit system-config-securitylevel-tui oder einfach mit lokkit an der Konsole aufrufen kann.

xenserver:xs_security03.png

Zugegeben das GUI ist nicht besonders schön, aber man kann nach Auswahl von Customize relativ einfach den Port 80 deaktivieren.

xenserver:xs_security04.png

Überprüfen kann man die Firewall Rules mit dem Kommando more /etc/sysconfig/iptables.

 
[root@xenserver ~]# more /etc/sysconfig/iptables 
# Firewall configuration written by system-config-securitylevel 
# Manual customization of this file is not recommended. 
*filter 
:INPUT ACCEPT [0:0] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0] 
:RH-Firewall-1-INPUT - [0:0] 
-A INPUT -j RH-Firewall-1-INPUT 
-A FORWARD -j RH-Firewall-1-INPUT 
-A RH-Firewall-1-INPUT -i lo -j ACCEPT 
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT 
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT 
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT 
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT 
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT 
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 694 -j ACCEPT 
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT 
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited 
COMMIT 

Zu beachten ist allerdings, dass nach dem Sperren des HTTP-Ports über die IPTables Firewall das Verschieben von virtuellen Maschinen über XenMotion nicht mehr möglich ist.

Jedes Linux System und so auch die Control Domain des XenServers erzeugen bei der Installation ein eindeutiges Schlüsselpaar bestehend aus einem Public-Key welcher den Clients präsentiert wird sowie einem Private-Key der den Public-Key verifizieren kann. In der normalen Administration mit dem XenCenter werden diese Schlüssel nicht zu sehen sein. Sobald man jedoch zum ersten mal eine Kommunikation über SSH (z.b. unter Windows mit PuTTY) mit dem entsprechenden XenServer aufbauen möchte, warnt uns der SSH Client.

xenserver:xs_security06.png

Das vom XenServer erzeugte Schlüsselpaar können wir mit der xsconsole überprüfen.

xenserver:xs_security05.png

Der einzige Sinn dieser Schlüssel ist es, zu verifizieren das der Server mit dem man eine Verbindung aufbaut auch der ist von dem man denkt das er es ist.

Bei der Installation eines XenServers werden auch die Zertifikate für die SSL Komminikation erzeugt. Citrix empfiehlt diese durch eigene Zertifikate zu ersetzen. Prinzipiell ist das nicht nötig, aber in großen Umgebungen durchaus üblich. Wichtig hierbei ist, das die neuen Zertifikate inkl. des privaten Schlüssels in einer *.PEM Datei vorliegen müssen. Um neue Zertifikate zu installieren, sollte erstmal das vorhandene gesichert werden. Dies erledigt man mit dem CLI.

mv /etc/xensource/xapi-ssl.pem /etc/xensource/xapi-ssl.pem.alt

Danach muss lediglich das neuen Zertifikat an die richtige Stelle kopiert werden. Innerhalb einer SSH Verbindung z.B. mit SCP.

scp /neueszertifikat.pem root@xenserver:/etc/xensource/xapi-ssl.pem

Dieser Artikel wird aktuell noch weiter ergänzt und liegt noch nicht in der finalen Version vor. Die vorstehenden Informationen sind jedoch aktuell und werden nicht mehr maßgeblich verändert. Allerdings sind zusätzliche Informationen noch in der Erfassung.

xenserver/xssecurity.txt · Zuletzt geändert: 25.02.2011 - 05:15 von Thomas Krampe
Sie befinden sich hier: Willkommen im Xenmaster WikiCitrix XenServerXenServer und Sicherheit