Zum Inhalt springen

Linux/SELinux/08 Virtualisierung: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „Red Hat Enterprise Linux“ durch „Linux“
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
=== Kapitel 8. sVirt ===
sVirt ist eine in Linux integrierte Technologie, die SELinux und Virtualisierung miteinander verbindet. sVirt wendet Mandatory Access Control (MAC) an, um die Sicherheit bei der Nutzung virtueller Maschinen zu verbessern. Die Hauptgründe für die Integration dieser Technologien sind die Verbesserung der Sicherheit und die Absicherung des Systems gegen Fehler im Hypervisor, die als Angriffsvektor gegen den Host oder eine andere virtuelle Maschine genutzt werden könnten.


[[Kategorie:SELinux/DOC]]
Dieses Kapitel beschreibt, wie sVirt mit Virtualisierungstechnologien in Linux integriert ist.
 
=== Chapter 8. sVirt ===
sVirt is a technology included in Linux that integrates SELinux and virtualization. sVirt applies Mandatory Access Control (MAC) to improve security when using virtual machines. The main reasons for integrating these technologies are to improve security and harden the system against bugs in the hypervisor that might be used as an attack vector aimed toward the host or to another virtual machine.
 
This chapter describes how sVirt integrates with virtualization technologies in Linux.


==== Non-Virtualized Environment ====
==== Nicht-virtualisierte Umgebung ====
In a non-virtualized environment, hosts are separated from each other physically and each host has a self-contained environment, consisting of services such as a Web server, or a DNS server. These services communicate directly to their own user space, host kernel and physical host, offering their services directly to the network. The following image represents a non-virtualized environment:
In einer nicht-virtualisierten Umgebung sind die Hosts physisch voneinander getrennt, und jeder Host verfügt über eine in sich geschlossene Umgebung, bestehend aus Diensten wie einem Webserver oder einem DNS-Server. Diese Dienste kommunizieren direkt mit ihrem eigenen Benutzerbereich, dem Host-Kernel und dem physischen Host und stellen ihre Dienste direkt dem Netzwerk zur Verfügung. Die folgende Abbildung stellt eine nicht-virtualisierte Umgebung dar:


==== Virtualized Environment ====
==== Virtualisierte Umgebung ====
In a virtualized environment, several operating systems can be housed (as "guests") within a single host kernel and physical host. The following image represents a virtualized environment:
In einer virtualisierten Umgebung können mehrere Betriebssysteme (als „Gäste“) innerhalb eines einzigen Host-Kernels und physischen Hosts untergebracht werden. Die folgende Abbildung stellt eine virtualisierte Umgebung dar:


=== 8.1. Security and Virtualization ===
=== 8.1. Sicherheit und Virtualisierung ===
When services are not virtualized, machines are physically separated. Any exploit is usually contained to the affected machine, with the obvious exception of network attacks. When services are grouped together in a virtualized environment, extra vulnerabilities emerge in the system. If there is a security flaw in the hypervisor that can be exploited by a guest instance, this guest may be able to not only attack the host, but also other guests running on that host. This is not theoretical; attacks already exist on hypervisors. These attacks can extend beyond the guest instance and could expose other guests to attack.
Wenn Dienste nicht virtualisiert sind, sind die Maschinen physisch voneinander getrennt. Ein Exploit bleibt in der Regel auf den betroffenen Rechner beschränkt, mit der offensichtlichen Ausnahme von Netzwerkangriffen. Wenn Dienste in einer virtualisierten Umgebung zusammengefasst werden, entstehen zusätzliche Schwachstellen im System. Wenn es im Hypervisor eine Sicherheitslücke gibt, die von einer Gastinstanz ausgenutzt werden kann, ist dieser Gast möglicherweise in der Lage, nicht nur den Host anzugreifen, sondern auch andere Gäste, die auf diesem Host laufen. Dies ist keine Theorie; Angriffe auf Hypervisoren gibt es bereits. Diese Angriffe können über die Gastinstanz hinausgehen und andere Gäste Angriffen aussetzen.


sVirt is an effort to isolate guests and limit their ability to launch further attacks if exploited. This is demonstrated in the following image, where an attack cannot break out of the virtual machine and extend to another host instance:
sVirt ist ein Ansatz, um Gäste zu isolieren und ihre Fähigkeit einzuschränken, weitere Angriffe zu starten, falls sie ausgenutzt werden. Dies wird in der folgenden Abbildung veranschaulicht, in der ein Angriff nicht aus der virtuellen Maschine ausbrechen und sich auf eine andere Host-Instanz ausweiten kann:


SELinux introduces a pluggable security framework for virtualized instances in its implementation of Mandatory Access Control (MAC). The sVirt framework allows guests and their resources to be uniquely labeled. Once labeled, rules can be applied which can reject access between different guests.
SELinux führt in seiner Implementierung der Mandatory Access Control (MAC) ein pluggbares Sicherheitsframework für virtualisierte Instanzen ein. Das sVirt-Framework ermöglicht es, Gäste und ihre Ressourcen eindeutig zu kennzeichnen. Nach der Kennzeichnung können Regeln angewendet werden, die den Zugriff zwischen verschiedenen Gästen verweigern.


=== 8.2. sVirt Labeling ===
=== 8.2. sVirt-Kennzeichnung ===
Like other services under the protection of SELinux, sVirt uses process-based mechanisms and restrictions to provide an extra layer of security over guest instances. Under typical use, you should not even notice that sVirt is working in the background. This section describes the labeling features of sVirt.
Wie andere Dienste unter dem Schutz von SELinux nutzt sVirt prozessbasierte Mechanismen und Einschränkungen, um eine zusätzliche Sicherheitsebene für Gastinstanzen bereitzustellen. Bei typischer Nutzung sollten Sie gar nicht bemerken, dass sVirt im Hintergrund arbeitet. Dieser Abschnitt beschreibt die Kennzeichnungsfunktionen von sVirt.


As shown in the following output, when using sVirt, each Virtual Machine (VM) process is labeled and runs with a dynamically generated level. Each process is isolated from other VMs with different levels:
Wie in der folgenden Ausgabe gezeigt, wird bei Verwendung von sVirt jeder Prozess einer virtuellen Maschine (VM) gekennzeichnet und läuft mit einer dynamisch generierten Stufe. Jeder Prozess ist durch unterschiedliche Stufen von anderen VMs isoliert:
  <code>~]# ps -eZ | grep qemu
  ~]# ps -eZ | grep qemu
 
system_u:system_r:svirt_t:s0:c87,c520 27950 ? 00:00:17 qemu-kvm
system_u:system_r:svirt_t:s0:c87,c520 27950 ? 00:00:17 qemu-kvm
  system_u:system_r:svirt_t:s0:c639,c757 27989 ? 00:00:06 qemu-system-x86</code>
  system_u:system_r:svirt_t:s0:c639,c757 27989 ? 00:00:06 qemu-system-x86
The actual disk images are automatically labeled to match the processes, as shown in the following output:
Die eigentlichen Disk-Images werden automatisch so beschriftet, dass sie zu den Prozessen passen, wie in der folgenden Ausgabe gezeigt:
  <code>~]# ls -lZ /var/lib/libvirtimages/*
  ~]# ls -lZ /var/lib/libvirtimages/*
   
   
  system_u:object_r:svirt_image_t:s0:c87,c520   image1</code>
  system_u:object_r:svirt_image_t:s0:c87,c520 image1
The following table outlines the different labels that can be assigned when using sVirt:
Die folgende Tabelle gibt einen Überblick über die verschiedenen Labels, die bei der Verwendung von sVirt zugewiesen werden können:
{| class="wikitable"
{| class="wikitable"
|+Table 8.1. sVirt Labels
|+Tabelle 8.1. sVirt-Labels
!Type
!Typ
!SELinux Context
!SELinux-Kontext
!Description
!Beschreibung
|-
|-
|Virtual Machine Processes
|Prozesse der virtuellen Maschine
|system_u:system_r:svirt_t:MCS1
|system_u:system_r:svirt_t:MCS1
|MCS1 is a randomly selected MCS field. Currently approximately 500,000 labels are supported.
|MCS1 ist ein zufällig ausgewähltes MCS-Feld. Derzeit werden etwa 500.000 Labels unterstützt.
|-
|-
|Virtual Machine Image
|Image der virtuellen Maschine
|system_u:object_r:svirt_image_t:MCS1
|system_u:object_r:svirt_image_t:MCS1
|Only processes labeled ''svirt_t'' with the same MCS fields are able to read/write these image files and devices.
|Nur Prozesse mit der Labelung „svirt_t“ und denselben MCS-Feldern können diese Image-Dateien und Geräte lesen/beschreiben.
|-
|-
|Virtual Machine Shared Read/Write Content
|Gemeinsam genutzte Lese-/Schreibinhalte der virtuellen Maschine
|system_u:object_r:svirt_image_t:s0
|system_u:object_r:svirt_image_t:s0
|All processes labeled ''svirt_t'' are allowed to write to the svirt_image_t:s0 files and devices.
|Alle Prozesse mit dem Label „svirt_t“ dürfen in die svirt_image_t:s0-Dateien und -Geräte schreiben.
|-
|-
|Virtual Machine Image
|Image der virtuellen Maschine
|system_u:object_r:virt_content_t:s0
|system_u:object_r:virt_content_t:s0
|System default label used when an image exits. No ''svirt_t'' virtual processes are allowed to read files/devices with this label.
|Standard-Systemlabel, das beim Beenden eines Images verwendet wird. Kein virtueller „svirt_t“-Prozess darf Dateien/Geräte mit diesem Label lesen.
|}
|}
{| class="wikitable"
{| class="wikitable"
|+Table 8.1. sVirt Labels
|+Tabelle 8.1. sVirt-Labels
!Type
!Typ
!SELinux Context
!SELinux-Kontext
!Description
!Beschreibung
|-
|-
|Virtual Machine Processes
|Prozesse der virtuellen Maschine
|system_u:system_r:svirt_t:MCS1
|system_u:system_r:svirt_t:MCS1
|MCS1 is a randomly selected MCS field. Currently approximately 500,000 labels are supported.
|MCS1 ist ein zufällig ausgewähltes MCS-Feld. Derzeit werden etwa 500.000 Labels unterstützt.
|-
|-
|Virtual Machine Image
|Image der virtuellen Maschine
|system_u:object_r:svirt_image_t:MCS1
|system_u:object_r:svirt_image_t:MCS1
|Only processes labeled ''svirt_t'' with the same MCS fields are able to read/write these image files and devices.
|Nur Prozesse mit der Kennzeichnung ‚'svirt_t‘' und denselben MCS-Feldern können diese Image-Dateien und Geräte lesen/schreiben.
|-
|-
|Virtual Machine Shared Read/Write Content
|Gemeinsam genutzte Lese-/Schreibinhalte der virtuellen Maschine
|system_u:object_r:svirt_image_t:s0
|system_u:object_r:svirt_image_t:s0
|All processes labeled ''svirt_t'' are allowed to write to the svirt_image_t:s0 files and devices.
|Alle Prozesse mit der Kennzeichnung „svirt_t“ dürfen in die svirt_image_t:s0-Dateien und -Geräte schreiben.
|-
|-
|Virtual Machine Image
|Image der virtuellen Maschine
|system_u:object_r:virt_content_t:s0
|system_u:object_r:virt_content_t:s0
|System default label used when an image exits. No ''svirt_t'' virtual processes are allowed to read files/devices with this label.
|Vom System standardmäßig verwendete Kennzeichnung beim Beenden eines Images. Kein virtueller Prozess mit der Kennzeichnung „svirt_t“ darf Dateien/Geräte mit dieser Kennzeichnung lesen.
|}
|}
It is also possible to perform static labeling when using sVirt. Static labels allow the administrator to select a specific label, including the MCS/MLS field, for a virtual machine. Administrators who run statically-labeled virtual machines are responsible for setting the correct label on the image files. The virtual machine will always be started with that label, and the sVirt system will never modify the label of a statically-labeled virtual machine's content. This allows the sVirt component to run in an MLS environment. You can also run multiple virtual machines with different sensitivity levels on a system, depending on your requirements.
Bei der Verwendung von sVirt ist auch eine statische Kennzeichnung möglich. Statische Kennzeichnungen ermöglichen es dem Administrator, eine bestimmte Kennzeichnung, einschließlich des MCS/MLS-Feldes, für eine virtuelle Maschine auszuwählen. Administratoren, die statisch gekennzeichnete virtuelle Maschinen betreiben, sind dafür verantwortlich, die richtigen Labels in den Image-Dateien festzulegen. Die virtuelle Maschine wird immer mit diesem Label gestartet, und das sVirt-System ändert niemals das Label des Inhalts einer statisch gekennzeichneten virtuellen Maschine. Dies ermöglicht den Betrieb der sVirt-Komponente in einer MLS-Umgebung. Je nach Ihren Anforderungen können Sie auf einem System auch mehrere virtuelle Maschinen mit unterschiedlichen Sensitivitätsstufen betreiben.
 
[[Kategorie:SELinux/DOC]]

Version vom 25. März 2026, 10:28 Uhr

Kapitel 8. sVirt

sVirt ist eine in Linux integrierte Technologie, die SELinux und Virtualisierung miteinander verbindet. sVirt wendet Mandatory Access Control (MAC) an, um die Sicherheit bei der Nutzung virtueller Maschinen zu verbessern. Die Hauptgründe für die Integration dieser Technologien sind die Verbesserung der Sicherheit und die Absicherung des Systems gegen Fehler im Hypervisor, die als Angriffsvektor gegen den Host oder eine andere virtuelle Maschine genutzt werden könnten.

Dieses Kapitel beschreibt, wie sVirt mit Virtualisierungstechnologien in Linux integriert ist.

Nicht-virtualisierte Umgebung

In einer nicht-virtualisierten Umgebung sind die Hosts physisch voneinander getrennt, und jeder Host verfügt über eine in sich geschlossene Umgebung, bestehend aus Diensten wie einem Webserver oder einem DNS-Server. Diese Dienste kommunizieren direkt mit ihrem eigenen Benutzerbereich, dem Host-Kernel und dem physischen Host und stellen ihre Dienste direkt dem Netzwerk zur Verfügung. Die folgende Abbildung stellt eine nicht-virtualisierte Umgebung dar:

Virtualisierte Umgebung

In einer virtualisierten Umgebung können mehrere Betriebssysteme (als „Gäste“) innerhalb eines einzigen Host-Kernels und physischen Hosts untergebracht werden. Die folgende Abbildung stellt eine virtualisierte Umgebung dar:

8.1. Sicherheit und Virtualisierung

Wenn Dienste nicht virtualisiert sind, sind die Maschinen physisch voneinander getrennt. Ein Exploit bleibt in der Regel auf den betroffenen Rechner beschränkt, mit der offensichtlichen Ausnahme von Netzwerkangriffen. Wenn Dienste in einer virtualisierten Umgebung zusammengefasst werden, entstehen zusätzliche Schwachstellen im System. Wenn es im Hypervisor eine Sicherheitslücke gibt, die von einer Gastinstanz ausgenutzt werden kann, ist dieser Gast möglicherweise in der Lage, nicht nur den Host anzugreifen, sondern auch andere Gäste, die auf diesem Host laufen. Dies ist keine Theorie; Angriffe auf Hypervisoren gibt es bereits. Diese Angriffe können über die Gastinstanz hinausgehen und andere Gäste Angriffen aussetzen.

sVirt ist ein Ansatz, um Gäste zu isolieren und ihre Fähigkeit einzuschränken, weitere Angriffe zu starten, falls sie ausgenutzt werden. Dies wird in der folgenden Abbildung veranschaulicht, in der ein Angriff nicht aus der virtuellen Maschine ausbrechen und sich auf eine andere Host-Instanz ausweiten kann:

SELinux führt in seiner Implementierung der Mandatory Access Control (MAC) ein pluggbares Sicherheitsframework für virtualisierte Instanzen ein. Das sVirt-Framework ermöglicht es, Gäste und ihre Ressourcen eindeutig zu kennzeichnen. Nach der Kennzeichnung können Regeln angewendet werden, die den Zugriff zwischen verschiedenen Gästen verweigern.

8.2. sVirt-Kennzeichnung

Wie andere Dienste unter dem Schutz von SELinux nutzt sVirt prozessbasierte Mechanismen und Einschränkungen, um eine zusätzliche Sicherheitsebene für Gastinstanzen bereitzustellen. Bei typischer Nutzung sollten Sie gar nicht bemerken, dass sVirt im Hintergrund arbeitet. Dieser Abschnitt beschreibt die Kennzeichnungsfunktionen von sVirt.

Wie in der folgenden Ausgabe gezeigt, wird bei Verwendung von sVirt jeder Prozess einer virtuellen Maschine (VM) gekennzeichnet und läuft mit einer dynamisch generierten Stufe. Jeder Prozess ist durch unterschiedliche Stufen von anderen VMs isoliert:

~]# ps -eZ | grep qemu
 

system_u:system_r:svirt_t:s0:c87,c520 27950 ? 00:00:17 qemu-kvm

system_u:system_r:svirt_t:s0:c639,c757 27989 ? 00:00:06 qemu-system-x86

Die eigentlichen Disk-Images werden automatisch so beschriftet, dass sie zu den Prozessen passen, wie in der folgenden Ausgabe gezeigt:

~]# ls -lZ /var/lib/libvirtimages/*

system_u:object_r:svirt_image_t:s0:c87,c520 image1

Die folgende Tabelle gibt einen Überblick über die verschiedenen Labels, die bei der Verwendung von sVirt zugewiesen werden können:

Tabelle 8.1. sVirt-Labels
Typ SELinux-Kontext Beschreibung
Prozesse der virtuellen Maschine system_u:system_r:svirt_t:MCS1 MCS1 ist ein zufällig ausgewähltes MCS-Feld. Derzeit werden etwa 500.000 Labels unterstützt.
Image der virtuellen Maschine system_u:object_r:svirt_image_t:MCS1 Nur Prozesse mit der Labelung „svirt_t“ und denselben MCS-Feldern können diese Image-Dateien und Geräte lesen/beschreiben.
Gemeinsam genutzte Lese-/Schreibinhalte der virtuellen Maschine system_u:object_r:svirt_image_t:s0 Alle Prozesse mit dem Label „svirt_t“ dürfen in die svirt_image_t:s0-Dateien und -Geräte schreiben.
Image der virtuellen Maschine system_u:object_r:virt_content_t:s0 Standard-Systemlabel, das beim Beenden eines Images verwendet wird. Kein virtueller „svirt_t“-Prozess darf Dateien/Geräte mit diesem Label lesen.
Tabelle 8.1. sVirt-Labels
Typ SELinux-Kontext Beschreibung
Prozesse der virtuellen Maschine system_u:system_r:svirt_t:MCS1 MCS1 ist ein zufällig ausgewähltes MCS-Feld. Derzeit werden etwa 500.000 Labels unterstützt.
Image der virtuellen Maschine system_u:object_r:svirt_image_t:MCS1 Nur Prozesse mit der Kennzeichnung ‚'svirt_t‘' und denselben MCS-Feldern können diese Image-Dateien und Geräte lesen/schreiben.
Gemeinsam genutzte Lese-/Schreibinhalte der virtuellen Maschine system_u:object_r:svirt_image_t:s0 Alle Prozesse mit der Kennzeichnung „svirt_t“ dürfen in die svirt_image_t:s0-Dateien und -Geräte schreiben.
Image der virtuellen Maschine system_u:object_r:virt_content_t:s0 Vom System standardmäßig verwendete Kennzeichnung beim Beenden eines Images. Kein virtueller Prozess mit der Kennzeichnung „svirt_t“ darf Dateien/Geräte mit dieser Kennzeichnung lesen.

Bei der Verwendung von sVirt ist auch eine statische Kennzeichnung möglich. Statische Kennzeichnungen ermöglichen es dem Administrator, eine bestimmte Kennzeichnung, einschließlich des MCS/MLS-Feldes, für eine virtuelle Maschine auszuwählen. Administratoren, die statisch gekennzeichnete virtuelle Maschinen betreiben, sind dafür verantwortlich, die richtigen Labels in den Image-Dateien festzulegen. Die virtuelle Maschine wird immer mit diesem Label gestartet, und das sVirt-System ändert niemals das Label des Inhalts einer statisch gekennzeichneten virtuellen Maschine. Dies ermöglicht den Betrieb der sVirt-Komponente in einer MLS-Umgebung. Je nach Ihren Anforderungen können Sie auf einem System auch mehrere virtuelle Maschinen mit unterschiedlichen Sensitivitätsstufen betreiben.