Vorwort

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Viele Unternehmen betreiben ihre Anwendungen in nativen Cloud-Umgebungen und nutzen Container und Orchestrierung, um Skalierbarkeit und Ausfallsicherheit zu gewährleisten. Wenn du ein Mitglied des Operations-, DevOps- oder sogar DevSecOps-Teams bist, das diese Umgebungen für dein Unternehmen einrichtet, woher weißt du dann, ob deine Implementierungen sicher sind? Wenn du ein Sicherheitsexperte bist, der Erfahrung mit traditionellen serverbasierten oder auf virtuellen Maschinen basierenden Systemen hat, wie kannst du dein vorhandenes Wissen für containerbasierte Implementierungen anpassen? Und was musst du als Entwickler in der Cloud-Native-Welt bedenken, um die Sicherheit deiner containerisierten Anwendungen zu verbessern? Dieses Buch befasst sich mit einigen der wichtigsten zugrunde liegenden Technologien, auf die sich Container und Cloud Native stützen, damit du besser in der Lage bist, die Sicherheitsrisiken und potenziellen Lösungen für deine Umgebung einzuschätzen, und um zu vermeiden, dass du in schlechte Praktiken verfällst, die deine Technologieimplementierungen angreifbar machen.

In diesem Buch lernst du viele der Bausteintechnologien und -mechanismen kennen, die in containerbasierten Systemen verwendet werden, und wie sie im Linux-Betriebssystem aufgebaut sind. Gemeinsam tauchen wir tief in die Grundlagen der Funktionsweise und Kommunikation von Containern ein, damit du nicht nur das "Was" der Containersicherheit kennst, sondern vor allem auch das "Warum". Mit diesem Buch möchte ich dir helfen, besser zu verstehen, was passiert, wenn du Container einsetzt. Ich möchte dich dazu ermutigen, mentale Modelle zu entwickeln, die es dir ermöglichen, potenzielle Sicherheitsrisiken, die sich auf deine Einsätze auswirken könnten, selbst zu bewerten.

Dieses Buch befasst sich in erster Linie mit der Art von "Anwendungscontainern", die viele Unternehmen heutzutage verwenden, um ihre Geschäftsanwendungen in Systemen wie Kubernetes und Docker auszuführen. Dies steht im Gegensatz zu "Systemcontainern" wie LXC und LXD vom Linux Containers Project. In einem Anwendungscontainer sollst du unveränderliche Container mit so wenig Code wie nötig betreiben, um die Anwendung auszuführen, während in einer Systemcontainer-Umgebung eine ganze Linux-Distribution ausgeführt und eher wie eine virtuelle Maschine behandelt wird. Es ist völlig normal, sich per SSH in einen Systemcontainer einzuloggen, aber Sicherheitsexperten für Anwendungscontainer werden dich misstrauisch beäugen, wenn du dich per SSH in einen Anwendungscontainer einloggen willst (aus Gründen, die später in diesem Buch behandelt werden). Die grundlegenden Mechanismen zur Erstellung von Anwendungs- und Systemcontainern sind jedoch Kontrollgruppen, Namensräume und das Ändern des Root-Verzeichnisses, so dass dieses Buch dir eine solide Grundlage bietet, von der aus du die unterschiedlichen Ansätze der verschiedenen Container-Projekte erkunden kannst.

Für wen dieses Buch ist

Egal, ob du dich als Entwickler, Sicherheitsexperte, Operator oder Manager betrachtest, dieses Buch ist für dich am besten geeignet, wenn du gerne ins Detail gehst, wie die Dinge funktionieren, und wenn du gerne Zeit in einem Linux-Terminal verbringst.

Wenn du auf der Suche nach einer Anleitung bist, die dir Schritt für Schritt erklärt, wie du Container sichern kannst, ist dieses Buch vielleicht nicht das Richtige für dich. Ich glaube nicht, dass es einen allgemeingültigen Ansatz gibt, der für jede Anwendung in jeder Umgebung und in jedem Unternehmen funktioniert. Stattdessen möchte ich dir helfen zu verstehen, was passiert, wenn du Anwendungen in Containern ausführst, und wie die verschiedenen Sicherheitsmechanismen funktionieren, damit du die Risiken selbst einschätzen kannst.

Wie du später in diesem Buch erfährst, werden Container mit einer Kombination von Funktionen des Linux-Kernels erstellt. Bei der Sicherung von Containern kommen viele der gleichen Mechanismen zum Einsatz, die du auch auf einem Linux-Host verwenden würdest. (Ich verwende den Begriff "Host" sowohl für virtuelle Maschinen als auch für Bare-Metal-Server.) Ich erkläre, wie diese Mechanismen funktionieren und zeige dann, wie sie in Containern angewendet werden. Wenn du ein erfahrener Systemadministrator bist, kannst du einige Abschnitte überspringen, um zu den containerspezifischen Informationen zu gelangen.

Ich gehe davon aus, dass du dich mit Containern auskennst und wahrscheinlich schon einmal mit Docker oder Kubernetes herumgespielt hast. Du wirst Begriffe wie "ein Container-Image aus einer Registry ziehen" oder "einen Container starten" verstehen, auch wenn du nicht genau weißt, was unter der Decke passiert, wenn du diese Aktionen durchführst. Ich erwarte nicht, dass du die Details der Funktionsweise von Containern kennst - zumindest nicht, bis du dieses Buch gelesen hast.

Was dieses Buch behandelt

Wir beginnen in Kapitel 1 mit der Betrachtung von Bedrohungsmodellen und Angriffsvektoren, die Container-Einsätze betreffen, und den Aspekten, die die Containersicherheit von der traditionellen Einsatzsicherheit unterscheiden. Der Rest des Buches beschäftigt sich damit, wie du ein gründliches Verständnis von Containern und diesen container-spezifischen Bedrohungen aufbauen kannst und wie du dich dagegen verteidigen kannst.

Bevor du dir wirklich Gedanken darüber machen kannst, wie du Container absicherst, musst du wissen, wie sie funktionieren. In Kapitel 2 werden einige zentrale Linux-Mechanismen wie Systemaufrufe und Fähigkeiten beschrieben, die bei der Verwendung von Containern zum Tragen kommen. In den Kapiteln 3 und4 werden wir uns dann mit den Linux-Konstrukten beschäftigen, aus denen Container bestehen. So erfährst du, was Container wirklich sind und inwieweit sie voneinander isoliert sind. In Kapitel 5 vergleichen wir dies mit der Isolierung von virtuellen Maschinen.

In Kapitel 6 lernst du den Inhalt von Container-Images kennen und erfährst einige bewährte Methoden, um sie sicher zu erstellen. Kapitel 7 befasst sich mit der Notwendigkeit, Container-Images mit bekannten Software-Schwachstellen zu identifizieren.

In Kapitel 8 befassen wir uns mit einigen optionalen Linux-Sicherheitsmaßnahmen, mit denen Container über die in Kapitel 4 beschriebene grundlegende Implementierung hinaus gehärtet werden können. In Kapitel 9 werden wir uns ansehen, wie die Isolation von Containern durch gefährliche, aber alltägliche Fehlkonfigurationen gefährdet werden kann.

Dann wenden wir uns der Kommunikation zwischen Containern zu. Kapitel 10 befasst sich mit der Kommunikation zwischen Containern und zeigt Möglichkeiten auf, wie die Verbindungen zwischen ihnen zur Verbesserung der Sicherheit genutzt werden können. Kapitel 11 erklärt die Grundlagen von Schlüsseln und Zertifikaten, mit denen sich Container-Komponenten gegenseitig identifizieren und sichere Netzwerkverbindungen untereinander aufbauen können. Das ist bei Containern nicht anders als bei allen anderen Komponenten, aber dieses Thema wird aufgenommen, da Schlüssel und Zertifikate in verteilten Systemen oft für Verwirrung sorgen. In Kapitel 12 werden wir sehen, wie Zertifikate und andere Berechtigungsnachweise zur Laufzeit sicher (oder nicht so sicher) an Container weitergegeben werden können.

In Kapitel 13 werden wir untersuchen, wie Sicherheitstools Angriffe zur Laufzeit verhindern können, indem sie die Funktionen von Containern nutzen.

In Kapitel 14 schließlich werden die 10 größten Sicherheitsrisiken des Open Web Application Security Project besprochen und container-spezifische Ansätze zu ihrer Behebung vorgestellt. Spoiler-Alarm: Einige der Top-Sicherheitsrisiken lassen sich auf genau dieselbe Weise angehen, egal ob deine Anwendung containerisiert ist oder nicht.

Ein Hinweis zu Kubernetes

Heutzutage nutzen die meisten Leute Container mit dem Kubernetes-Orchestrator. Ein Orchestrator automatisiert den Prozess der Ausführung verschiedener Arbeitslasten in einem Cluster von Maschinen, und an einigen Stellen in diesem Buch gehe ich davon aus, dass du ein grundlegendes Verständnis für dieses Konzept hast. Im Allgemeinen habe ich versucht, mich auf Konzepte zu konzentrieren, die auf der Ebene der zugrunde liegenden Container - der "Datenebene" in einer Kubernetes-Installation - wirken.

Da Kubernetes-Workloads in Containern ausgeführt werden, ist dieses Buch für die Sicherheit von Kubernetes relevant, aber es ist keine umfassende Abhandlung über alles, was mit der Sicherung von Kubernetes oder Cloud Native Deployments zu tun hat. Es gibt noch viele andere Aspekte rund um die Konfiguration und Nutzung der Control Plane-Komponenten, die über den Rahmen dieses Buches hinausgehen. Wenn du mehr über dieses Thema erfahren möchtest, könnte dich der O'Reilly Kubernetes Security Report (den ich zusammen mit Michael Hausenblas verfasst habe) interessieren.

Beispiele

Es gibt viele Beispiele in diesem Buch, und ich ermutige dich, sie selbst auszuprobieren.

In den Beispielen gehe ich davon aus, dass du dich mit den grundlegenden Linux-Kommandozeilen-Tools wie ps und grep auskennst und mit den grundlegenden täglichen Aktivitäten beim Ausführen von Container-Anwendungen durch die Verwendung von Tools wie kubectl oder docker. Dieses Buch wird die erstgenannten Tools verwenden, um viel mehr darüber zu erklären, was passiert, wenn du die letzteren verwendest!

Um die Beispiele in diesem Buch nachvollziehen zu können, brauchst du Zugang zu einem Linux-Rechner oder einer virtuellen Maschine. Ich habe die Beispiele mit einer virtuellen Ubuntu 19.04-Maschine erstellt, die unter VirtualBox auf meinem Mac läuft; ich verwende auch Vagrant, um meine virtuellen Maschinen zu erstellen, zu starten und zu stoppen. Du solltest in der Lage sein, ähnliche Ergebnisse mit anderen Linux-Distributionen und mit virtuellen Maschinen deines bevorzugten Cloud-Providers zu erzielen.

Wie man Container betreibt

Viele Menschen haben ihre erste (oder vielleicht einzige) Erfahrung mit dem direkten Einsatz von Containern mit Docker gemacht. Docker hat die Nutzung von Containern demokratisiert, indem es eine Reihe von Tools zur Verfügung gestellt hat, die für Entwickler/innen einfach zu bedienen sind. Von einem Terminal aus kannst du Container und Container-Images mit dem Befehl docker bearbeiten.

Das Tool docker ist in Wirklichkeit eine dünne Schicht, die API-Aufrufe an die Hauptkomponente von Docker richtet: einen Daemon, der die ganze harte Arbeit erledigt. Innerhalb des Daemons gibt es eine Komponente namens containerd die immer dann aufgerufen wird, wenn du einen Container starten willst. Die Komponente containerd stellt sicher, dass das Container-Image, das du ausführen willst, vorhanden ist, und ruft dann die Komponente runc auf, die die eigentliche Instanziierung des Containers vornimmt.

Wenn du möchtest, kannst du selbst einen Container starten, indem du containerd oder sogar runc direkt aufrufst. Das Projekt containerd wurde 2017 von Docker an die Cloud Native Computing Foundation (CNCF) gespendet.

Kubernetes verwendet eine Schnittstelle namens Container Runtime Interface (CRI), unter der die Nutzer eine Container-Laufzeitumgebung ihrer Wahl auswählen können. Die heute am häufigsten verwendeten Optionen sind die bereits erwähnten containerd und CRI-O (das ursprünglich von Red Hat stammt, bevor es an die CNCF gespendet wurde).

Das docker CLI ist nur eine Möglichkeit, Container und Images zu verwalten. Es gibt noch einige andere Möglichkeiten, um die in diesem Buch behandelten Anwendungscontainer zu betreiben. Das Tool podman von Red Hat, das ursprünglich entwickelt wurde, um die Abhängigkeit von einer Daemon-Komponente zu beseitigen, ist eine dieser Optionen.

Die Beispiele in diesem Buch verwenden eine Vielzahl verschiedener Container-Tools, um zu zeigen, dass es mehrere Container-Implementierungen gibt, die viele gemeinsame Merkmale haben.

Feedback

Zu diesem Buch gibt es eine Website unter containersecurity.tech. Du bist eingeladen, uns dort dein Feedback zu geben und Korrekturen vorzunehmen, die du gerne in zukünftigen Ausgaben sehen würdest.

In diesem Buch verwendete Konventionen

In diesem Buch werden die folgenden typografischen Konventionen verwendet:

Kursiv

Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.

Constant width

Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.

Constant width bold

Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.

Constant width italic

Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.

Hinweis

Dieses Element steht für einen allgemeinen Hinweis.

Code-Beispiele verwenden

Zusätzliches Material (Code-Beispiele, Übungen usw.) steht unter https://containersecurity.tech zum Download bereit .

Wenn du eine technische Frage oder ein Problem mit den Codebeispielen hast, sende bitte eine E-Mail an

Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Der Verkauf oder die Verbreitung von Beispielen aus O'Reilly-Büchern erfordert jedoch eine Genehmigung. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Genehmigung erforderlich.

Wir freuen uns über eine Namensnennung, verlangen sie aber in der Regel nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Zum Beispiel: "Container Security von Liz Rice (O'Reilly). Copyright 2020 Vertical Shift Ltd, 978-1-492-05670-6."

Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter kontaktieren

O'Reilly Online Learning

Hinweis

Seit mehr als 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.

Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen findest du unter http://oreilly.com.

Wie du uns kontaktierst

Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Nord
  • Sebastopol, CA 95472
  • 800-998-9938 (in den Vereinigten Staaten oder Kanada)
  • 707-829-0515 (international oder lokal)
  • 707-829-0104 (Fax)

Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter https://oreil.ly/container-security aufrufen .

Schreib eine E-Mail an , um Kommentare oder technische Fragen zu diesem Buch zu stellen.

Weitere Informationen zu unseren Büchern, Kursen und Neuigkeiten findest du auf unserer Website unter http://www.oreilly.com.

Finde uns auf Facebook: http://facebook.com/oreilly

Folge uns auf Twitter: http://twitter.com/oreillymedia

Schau uns auf YouTube: http://www.youtube.com/oreillymedia

Danksagungen

Ich bin vielen Menschen dankbar, die mir während des Schreibens dieses Buches geholfen und mich unterstützt haben.

  • Meine Lektorin bei O'Reilly, Virginia Wilson, die alles im Blick behält und dafür sorgt, dass das Buch auf dem neuesten Stand ist.

  • Die technischen Prüfer, die durchdachte Kommentare und umsetzbares Feedback lieferten: Akhil Behl, Alex Pollitt, Andrew Martin, Erik St. Martin, Phil Estes, Rani Osnat und Robert P. J. Day.

  • Meine Kollegen bei Aqua Security, die mir im Laufe der Jahre so viel über Containersicherheit beigebracht haben.

  • Phil Pearl - mein Mann, mein bester Kritiker und Coach und mein bester Freund.

Get Container Sicherheit now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.