Linux/SELinux/08 Virtualisierung: Unterschied zwischen den Versionen
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. | |||
Dieses Kapitel beschreibt, wie sVirt mit Virtualisierungstechnologien in Linux integriert ist. | |||
==== | ==== Nicht-virtualisierte Umgebung ==== | ||
In | 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 | 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. | === 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 | 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 | 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 | === 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 | 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 | 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: | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+Tabelle 8.1. sVirt-Labels | ||
! | !Typ | ||
!SELinux | !SELinux-Kontext | ||
! | !Beschreibung | ||
|- | |- | ||
| | |Prozesse der virtuellen Maschine | ||
|system_u:system_r:svirt_t:MCS1 | |system_u:system_r:svirt_t:MCS1 | ||
|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 | |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 | |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 | |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. | ||
|} | |} | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+Tabelle 8.1. sVirt-Labels | ||
! | !Typ | ||
!SELinux | !SELinux-Kontext | ||
! | !Beschreibung | ||
|- | |- | ||
| | |Prozesse der virtuellen Maschine | ||
|system_u:system_r:svirt_t:MCS1 | |system_u:system_r:svirt_t:MCS1 | ||
|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 | |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 | |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 | |system_u:object_r:virt_content_t:s0 | ||
|System | |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. | |||
[[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:
| 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. |
| 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.