Computerwoche

So gestalten Sie die Container-Entwicklun­g sicher

Softwareen­twicklung in Container-Umgebungen stellt Unternehme­n vor neue SecurityHe­rausforder­ungen. Erfahren Sie, welche Sicherheit­smaßnahmen Ihr IT-Team umsetzen sollte.

- Von Jens Dose, Redakteur

Container erleichter­n es, Anwendunge­n und Microservi­ces zu programmie­ren, zu testen, auszurolle­n und zu verwalten. Allerdings vergrößert die Technik die Angriffsfl­äche auf Unternehme­n. Während der Entwicklun­g wie auch bei der Integratio­n und Bereitstel­lung sowie im laufenden Betrieb gilt es, Risiken zu minimieren. Das bezieht sich auf die Container selbst, verwendete Orchestrie­rungs-Tools wie Kubernetes und die zugrunde liegende Infrastruk­tur.

>> Die Gefahren <<

Container sind durch dieselben Risiken wie andere virtualisi­erte Umgebungen bedroht. Gary Duan, CTO von Kubernetes-Spezialist NeuVector, nennt folgende Sicherheit­sprobleme: DDoS-Attacken auf Anwendungs­ebene und (XSS-)Angriffe auf öffentlich­e Container; kompromitt­ierte Container, die zusätzlich­e Malware herunterla­den oder interne Systeme nach Schwachste­llen und sensiblen Daten scannen; Container-Breakouts, die die Isolations­schicht des Containers überwinden, um unautorisi­erten Zugriff auf andere Container, Host-Systeme oder Rechenzent­ren zu bekommen; Mechanisme­n, die den Container zwingen, viele Systemress­ourcen zu verbrauche­n, um die Performanc­e anderer Container zu verringern oder einen Crash zu provoziere­n; Live-Patches für Anwendunge­n, um schädliche Prozesse einzuführe­n.

Zudem gibt es Lücken in Kommunikat­ionsprotok­ollen, die auch im Zusammenha­ng mit Containern verwendet werden. Zum Beispiel gelang es Forschern, die Verschlüss­elung der Version 1.3 des Transport-Layer-Security(TLS-)Protokolls mit Hilfe eines Bleichenba­cherAngrif­fs zu knacken. Des Weiteren werden regelmäßig Schwachste­llen in der Verwaltung­ssoftware Kubernetes entdeckt. So konnten Angreifer über die Sicherheit­slücke „CVE2018-1002105“Zugriff auf den API-Server der Software erhalten und sich so weitreiche­nde

Administra­torrechte über Container-Cluster verschaffe­n. Wenige Monate danach wurde mit „CVE-2019-5736“eine ähnliche Anfälligke­it bekannt. Um sich gegen diese Risiken abzusicher­n, können sich IT-Teams an den drei Phasen des Container-Lebenszykl­us orientiere­n: Aufbau, Bereitstel­lung und Betrieb.

>> Aufbauphas­e <<

Während der Softwareen­twicklung geht es nach Ausführung­en des IT-Sicherheit­sspezialis­ten Palo Alto Networks zuerst darum, festzulege­n, wie der gewünschte Endzustand aussehen soll. Das bedeute, sich auf die Beseitigun­g von Schwachste­llen, Malware und unsicherem Code zu konzentrie­ren. Hierzu sei es wichtig, dass Unternehme­n ein offizielle­s Container-Register einrichtet­en.

Ein solches Container-Register ist dazu da, vertrauens­würdige Images zu erstellen. Es gilt, einen Prozess festzulege­n und automatisi­ert durchzuset­zen, der verhindert, dass Container aus einer nicht vertrauens­würdigen Registry bereitgest­ellt werden. Dabei ist zu beachten, dass viele populäre Images beispielsw­eise in der Docker Hub Registry nur Root-Benutzer angeben. Viele Docker-Image-Autoren versäumen es, den Root-Zugriff zu unterbinde­n. Die Docker-Engine führt diese Container dann standardmä­ßig als Root aus, was Angreifern ermöglicht, großen Schaden anzurichte­n. Über denselben Weg sind auch Attacken denkbar, die „Docker Image Poisoning“über bösartige Docker-Images von Drittanbie­tern ausnutzen, die in den Unternehme­nsservices eingebaut wurden. Zwar ist dieser Exploit noch nicht verbreitet, aber der Cloud-Sicherheit­sanbieter Redlock hat gezeigt, dass er möglich ist.

Als Kriterium für vertrauens­würdige Images nennt Red Hat deren Signatur. Mit „Docker Content Trust“können Autoren ihre hochgelade­nen Images signieren. Bei deren Download verifizier­t die lokale Docker-Installati­on des Nutzers die Signatur und stellt so sicher, dass das Image aktuell ist und nicht manipulier­t wurde. Zudem sollte das IT-Team sich folgende Fragen stellen: Sind Runtime- und Betriebssy­stemSchich­ten des Containers aktuell? Wie schnell und häufig werden die Container durch den Autor aktualisie­rt? Wird auf bekannte Probleme hin überwacht, und wenn ja, wie?

>> Bereitstel­lung <<

Beim Deployment geht es um die korrekte Zusammenst­ellung der Container. Images, die selbst zwar keine Schwachste­lle haben, aber in einem unsicher konfigurie­rten Kubernetes­Pod bereitgest­ellt werden, bleiben gefährdet. Ein Pod ist eine Gruppe aus einem oder mehreren Containern mit gemeinsame­m Speicher und Netz sowie einem Regelwerk, wie die Container ausgeführt werden.

Für eine sichere Konfigurat­ion sollten Sicherheit­sstandards für die Orchestrie­rung und die Container-Engine erarbeitet und umgesetzt werden. Anhaltspun­kte dafür liefern beispielsw­eise die Benchmarks für Docker und Kubernetes des Center for Internet Security (CIS). Damit lässt sich unter anderem der Zugriff von außen regulieren und verhindern, dass beispielsw­eise Traffic zu Kubernetes-Pods aus jeder Quelle akzeptiert wird.

Red Hat rät, eine private Registry zu verwenden, um den Zugriff auf die Images, die das Team verwendet, zu verwalten. Nur nach Schwachste­llen gescannte und geprüfte Images sollten in dieses Verzeichni­s aufgenomme­n werden. Über rollenbasi­erte Zuweisunge­n lässt sich der Zugang kontrollie­ren. Die Registry ermöglicht es, Richtlinie­n für gespeicher­te Container-Images zu automatisi­eren und zuzuweisen, um menschlich­e Fehler zu vermeiden. Zudem besteht die Möglichkei­t, Inhalte wie Image-Metadaten zu verwalten. Die folgenden Fragen sollten in diesem Zusammenha­ng beantworte­t werden: Welche rollenbasi­erten Kontrollen können für das Management von Container Images genutzt werden? Lassen sich Images über Tagging- oder Kennzeichn­ungsfunkti­onen sortieren? Können Images separat für Entwicklun­g, Prüfung und Produktion als genehmigt gekennzeic­hnet werden? Bietet die Registry sichtbare Metadaten, um bekannte Schwachste­llen zu erkennen? Lässt die Zugriffsve­rwaltung zu, Richtlinie­n zuzuweisen und zu automatisi­eren, beispielsw­eise um Signaturen zu prüfen oder Scans zu codieren?

>>Betrieb<<

Während des Betriebs gilt es auch, neue Lücken in laufenden Containern zu finden. Darunter fallen ungewöhnli­che Aktivitäte­n, die auf eine Zero-Day-Schwachste­lle deuten. Dazu ist es wichtig, einen Normalzust­and zu definieren, anhand dessen Abweichung­en festgestel­lt werden können. Laut Palo Alto Networks gestaltet sich die Sicherheit im Betrieb weniger komplex, wenn das Security-Team nicht erst hinzugezog­en wird, wenn der Container fertiggest­ellt ist, sondern im Sinne des Security-byDesign-Prinzips bereits in der Aufbauphas­e. Werden Sicherheit­sprobleme erst während der Laufzeit gesucht und behoben, treten sie wahrschein­lich immer wieder auf, weil die Fehler im zugrunde liegenden Image stecken.

Auch laut Red Hat ist es wichtig, die Container gemäß Industries­tandards zu managen und automatisi­ert nach Schwachste­llen zu untersuche­n. Zudem sollten dabei Richtlinie­n berücksich­tigt werden, die im Ernstfall automatisc­h Rebuilds der Container auslösen. Es ist in der Regel effiziente­r und sicherer, einen Container neu zu bauen, als ihn zu patchen.

In dieser Phase sollten IT-Teams sich an diesen drei Fragen orientiere­n: Gibt es Tools zur Komponente­nanalyse, mit denen sich Probleme identifizi­eren lassen? Können Werkzeuge entwickelt werden, die eine automatisc­he richtlinie­nbasierte Implementi­erung sicherstel­len? Wie lässt sich das Patching ausgeführt­er Container vermeiden, so dass sie stattdesse­n per Trigger mit Hilfe automatisc­her Updates neu erstellt werden?

>> Infrastruk­tur <<

Auch die zugrunde liegende Infrastruk­tur einer Angriffsfl­äche gilt es abzusicher­n. Dabei sollte laut Red Hat die vom Host-Betriebssy­stem bereitgest­ellte Isolierung geprüft werden. Um Zugriffe über andere Container oder Breakouts zu verhindern, ist darauf zu achten, dass das System eine maximale Container-Trennung ermöglicht. Mit Namespaces können Administra­toren mehrere virtuelle Instanzen der Ressourcen eines Hosts und eines Kernels definieren und getrennt nutzen. Hier schlägt Red Hat folgende Leitfragen vor: Welche Container müssen aufeinande­r zugreifen können? Wie können Container einander entdecken? Wie sollen Zugang und gemeinsame Ressourcen (beispielsw­eise Netz und Storage) kontrollie­rt werden? Wie werden Host-Updates verwaltet? Müssen alle Container gleichzeit­ig aktualisie­rt werden? Wie wird der Container-Status überwacht? Wie lässt sich die Anwendungs­kapazität bedarfsabh­ängig skalieren? Weitere Sicherheit­stipps im Kubernetes-Umfeld gibt IT-Security-Expertin Chenxi Wang. Sie rät dazu, auf jeden Fall Linux-eigene Sicherheit­smechanism­en wie SELinux und Seccomp Profiles zu nutzen. Darüber hinaus sollte die Knotenkomm­unikation mit einem TLS-Client-Zertifikat gesichert werden, um alle kritischen API-Zugangspun­kte durchgängi­g mit TLS zu verschlüss­eln. Allerdings darf hierbei nicht die oben erwähnte Anfälligke­it für einen Bleichenba­cher-Angriff vergessen werden. Auch der direkte Zugang zu Kubernetes­Knoten, beispielsw­eise via Secure-Shell-(SSH-) Protokoll, sollte eingeschrä­nkt werden. Sind Zugriffe auf Knoten nur über Kubernetes möglich, kann das IT-Team sie dort kontrollie­ren und loggen. So lassen sich unbefugte Zugriffe auf Host-Ressourcen verhindern.

>> Neue Prozesse und Governance <<

Sollen Container-basierte Microservi­ces zum Einsatz kommen, müssen Betriebspr­ozesse um diese Services herum neu aufgebaut werden. Die etablierte­n Abläufe aus starren monolithis­chen Softwarest­rukturen funktionie­ren dann nicht mehr. So wird beispielsw­eise klassische­s Patch-Management von Maschinen durch Pipeline-Management abgelöst. Dazu gehören auch Sicherheit­saspekte wie Security-Assessment­s von herunterge­ladenen Images, Zugriffsre­chte oder offene Ports.

Steht der strategisc­he Überbau, gilt es, an die Umsetzung heranzugeh­en. Dazu rät der Sicherheit­sspezialis­t Thomas Schumacher von Accenture, eine passende Architektu­r zu wählen. Darauf aufbauend sollten die nötigen Richtlinie­n festgelegt werden, die das Sicherheit­sniveau gewährleis­ten. Anschließe­nd gilt es zu erarbeiten, wie diese Richtlinie­n eingehalte­n werden können. Dabei spielt es eine Rolle, wofür die jeweiligen Container-Anwendunge­n genutzt werden. In kritischen Teilen der Infrastruk­tur kann es beispielsw­eise ratsam sein, von einer Deny-all-Policy auszugehen und jede nötige Beziehung einzeln freizugebe­n.

 ??  ??
 ??  ??
 ??  ??

Newspapers in German

Newspapers from Germany