Container isolieren Anwendungen vom Host, auf dem sie laufen. Hierzu greifen Container-Runtimes auf die Namespace-Technologie des Linux-Kernels zurück [1]. Wie bei der Virtualisierung von ganzen Systemen besteht allerdings auch hier die Gefahr, dass durch einen Softwarefehler ein Ausbruch aus dem Container erfolgt und somit der Zugriff auf das Hostsystem möglich ist. Vor einiger Zeit wurde ein solcher Fehler in der Container-Runtime "runC" bekannt. Angreifer waren dadurch in der Lage, auf dem Hostsystem beliebigen Code mit Root-Rechten auszuführen. Die Schwachstelle erhielt die CVE-Bezeichnung "2019-5736" [2].
Der Fehler war besonders problematisch, da runC standardmäßig sowohl von Docker als auch von Podman verwendet wird. Auf Systemen, die SELinux aktiviert hatten, ließ sich die Schwachstelle allerdings nicht ausnutzen. Die SELinux-Policy hatte nämlich den Zugriffsversuch aus dem Container auf das Hostsystem unterbunden [3]. Für viele Anwendungsfälle ist die Standard-SELinux-Policy allerdings nicht ausreichend, weshalb eine individuelle Modifikation des Regelwerks notwendig ist. Um diese durchzuführen, ist jedoch ein wenig Grundlagenwissen notwendig.
Auf einem SELinux-System laufen Prozesse immer innerhalb von sogenannten Domänen ab. Diese besitzen eine eindeutige Bezeichnung, die auch als SELinux-Label bezeichnet wird. Eine Policy regelt den Zugriff der Prozesse aus einer Domäne auf Objekte aller Art. Nehmen wir als typisches Beispiel einen Apache-Webserver. Der Prozess "httpd" läuft standardmäßig innerhalb einer Domäne namens "httpd_t". Die Eingabe von »ps -efZ
«
bestätigt dies:
ps -efZ|grep httpd
system_u:system_r:httpd_t:s0 apache 23305 32557 0 Jun28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
Das vom
...Der komplette Artikel ist nur für Abonnenten des ADMIN Archiv-Abos verfügbar.