Frage:
Ist es sicher, einem Docker-Container zu vertrauen?
0x1gene
2015-05-08 17:17:39 UTC
view on stackexchange narkive permalink

Wenn es um Docker geht, ist es sehr praktisch, einen bereits vorhandenen Container eines Drittanbieters zu verwenden, um das zu tun, was wir wollen. Das Problem ist, dass diese Container sehr kompliziert sein können und einen großen übergeordneten Baum anderer Container haben. Sie können sogar Code aus Repositorys wie GitHub abrufen. All dies erschwert eine Sicherheitsüberprüfung.

Ich weiß, dass es naiv klingen könnte, aber könnte es für jemanden einfach sein, böswilligen Inhalt in einem Container zu verstecken? Ich weiß, dass die Antwort JA lautet, aber ich würde gerne wissen, in welcher Dimension und ob sich das Risiko lohnt. Ich bin mit GitHub vertraut und schaue mir normalerweise den Quellcode an, wenn ich Code von Drittanbietern verwende (es sei denn, es handelt sich um ein bekanntes Projekt).

Ich frage mich, ob die Community darauf achtet Diese Art von Verhalten, da der Schaden eines böswilligen Containers größer sein kann als der von bösartigem Code.

Wie wahrscheinlich ist es, dass ein Container bösartig ist? (In Anbetracht dessen, dass es sehr beliebt ist.) Welche Dimensionen könnten auch die anderen Komponenten des Unterstreichungssystems oder die anderen Systeme im LAN beschädigen / verwenden? Um noch einfacher zu sein, sollte ich ihnen vertrauen?

Bearbeiten: Ich habe einen Artikel von Docker gefunden, der ein wenig Licht in die Docker-Sicherheit und die Best Practices bringt: Docker verstehen Sicherheit und Best Practices.

Hallo Ox1gene. Ihre Frage ist etwas zu weit gefasst, um leicht beantwortet zu werden. Fragen wie "Sollte ich vertrauen" oder "Ist X sicher genug" führen systematisch zur Antwort "Es hängt (von Ihrem Bedrohungsmodell) ab". Allerdings basieren Docker-Container auf ziemlich soliden (aber nicht unfehlbaren) Sicherheitsmechanismen. Sie sollten wahrscheinlich nicht mehr oder weniger vertrauenswürdig sein als andere Beschränkungsmechanismen, es sei denn, Sie wissen genau, wovon Sie sprechen und wovor Sie schützen. Die Containerverteilung weist dieselben Vertrauens- / Risikoprobleme auf wie alle anderen Arten von Codepaketen.
http://www.infoq.com/news/2015/05/Docker-Security-Benchmark
Es gibt auch [ein Projekt] (https://coreos.com/blog/rocket/) von CentOS, das auf eine bessere Sicherheit abzielt.
Acht antworten:
Rory McCune
2015-05-08 18:30:02 UTC
view on stackexchange narkive permalink

Im Moment gibt es keine Möglichkeit, einfach herauszufinden, ob bestimmten Docker-Containern vertraut werden soll. Es gibt Basiscontainer von Docker- und Betriebssystemanbietern, die sie als "vertrauenswürdig" bezeichnen, aber der Software fehlen noch gute Mechanismen (z. B. digitale Signatur), um zu überprüfen, ob Bilder nicht manipuliert wurden.

Zur Verdeutlichung an Zitieren Sie den kürzlich veröffentlichten CIS-Sicherheitsstandard für Docker in Abschnitt 4.2.

Offizielle Repositorys sind Docker-Images, die von der Docker-Community oder dem Anbieter kuratiert und optimiert wurden. Die Signier- und Überprüfungsfunktion für Docker-Container-Images ist jedoch noch nicht bereit.

Daher überprüft die Docker-Engine die Herkunft der Containerbilder nicht selbst.

Sie sollten daher beim Abrufen von Containerbildern große Vorsicht walten lassen.

Wenn Sie vom Docker-Hub aus in die Welt der allgemeinen Container von Drittanbietern einsteigen, ist das Bild noch schwieriger. AFAIK Docker führt keine Überprüfung der Containerdateien anderer Personen durch, daher gibt es eine Reihe potenzieller Probleme.

  • Der Container enthält tatsächliche Malware. Ist das wahrscheinlich, weiß niemand. Ist es möglich, ja.
  • Der Container enthält unsichere Software. Docker-Dateien sind im Grunde wie Batch-Skripte, die eine Maschine erstellen. Ich habe einige gesehen, die beispielsweise Dateien über unverschlüsselte HTTP-Verbindungen herunterladen und sie dann als root im Container ausführen. Für mich ist das kein guter Weg, um einen sicheren Container zu erhalten.
  • Der Container legt unsichere Einstellungen fest. Bei Docker geht es darum, die Einrichtung von Software zu automatisieren. Dies bedeutet, dass Sie in gewissem Maße darauf vertrauen, dass alle Personen, die die Docker-Dateien erstellt haben, diese so sicher konfiguriert haben, wie Sie es gerne hätten.

Natürlich könnten Sie alle Docker-Dateien prüfen, aber wenn Sie dies getan haben, wäre es fast besser gewesen, das Ding selbst zu konfigurieren!

Ich fürchte, dass dies eine Entscheidung ist, die nur Sie wirklich treffen können. Sie tauschen die für die Entwicklung und Pflege Ihrer eigenen Images erforderliche Zeit gegen das erhöhte Risiko aus, dass jemand, der an der Produktion der von Ihnen heruntergeladenen Software beteiligt ist, böswillig ist oder einen Fehler in Bezug auf die Sicherheit des Systems gemacht hat.

_Natürlich könnten Sie alle Docker-Dateien prüfen, aber wenn Sie dies getan haben, wäre es fast besser gewesen, das Ding selbst zu konfigurieren! _ Ist es nicht so, dass Sie nicht sicher sein können, wenn Sie alle Docker-Dateien prüfendass das Docker-Image nur das Ergebnis dessen ist, was in den Docker-Dateien definiert wurde.Könnten danach nicht noch mehr Befehle für die Bilder selbst ausgeführt werden, ohne in der Docker-Datei erwähnt zu werden?
Diese Antwort ist jetzt 5 Jahre alt.Könnten Sie überprüfen, ob es noch aktuell ist?
Marcin
2015-05-08 17:45:41 UTC
view on stackexchange narkive permalink

Vertrauen Sie ihm genauso wie jedem nicht signierten Code, den Sie auf Ihren Systemen ausführen. Container sind nur Prozesse mit einigen zusätzlichen Namespace-Schutzfunktionen. Das sind also alle Schutzfunktionen, die sie erhalten. Sie sprechen immer noch mit demselben Kernel darunter.

theterribletrivium
2015-05-09 07:12:53 UTC
view on stackexchange narkive permalink

Es ist am besten, einen Docker-Container als das Ausführen einer Anwendung auf dem Hostsystem zu betrachten. Es gibt einige Versuche, den Docker-Daemon durch Entfernen der Linux-Kernel-Funktionen zu sperren, dies ist jedoch keine Garantie. Wenn Sie Docker ausführen, können Sie einige Maßnahmen ergreifen, um dieses Risiko zu verringern.

  • SELinux - Wenn Sie dies aktivieren, wird automatisch ein MCS-Etikett für jeden Container generiert, wodurch die Fähigkeit, Schaden zu verursachen, eingeschränkt wird.
  • Read- Nur - Sie können den Container auch als schreibgeschützt markieren, wodurch Sie große Teile des Image des Containers schreibgeschützt machen können, was es einem Angreifer erschweren kann, Malware bereitzustellen.
  • Selbst gehostete Registrierung - Um das Risiko von Bildmanipulationen, Laden bösartiger Container, Verlust von Geheimnissen oder sonstigem Risiko zu verringern, können Sie eine Registrierung intern hosten. https://github.com/dogestry/dogestry ist ein Beispiel für eines, das über S3 liegt, obwohl es auch andere Optionen gibt.
    wberry
    2015-05-08 20:54:57 UTC
    view on stackexchange narkive permalink

    Im Wesentlichen ist es die gleiche Frage, ob Open Source-Software vertrauenswürdig ist. Ich denke jedoch, dass das Risiko der Verwendung von Community Docker-Containern derzeit etwas höher ist als das Risiko der Verwendung von Open Source-Software.

    Erstens gibt es, wie Sie bereits erwähnt haben, keine Signierung und Überprüfung jetzt. Gute Open-Source-Verpackungssysteme umfassen dies heute, zumindest wenn Software aus offiziellen Repositories bezogen wird. Und selbst einmalige Projekte enthalten in der Regel Prüfsummen in Download-Bundles. In der Open Source-Welt wissen Sie nicht, dass der Code sicher ist, aber Sie wissen oft, dass Sie den Code erhalten, den Sie erhalten sollen. Mit Docker wissen Sie nicht einmal, dass der Container zwischen der Veröffentlichung und dem Herunterladen unverändert bleibt.

    Zweitens geht es um das Paket selbst. Sind Sie sicher, dass die Software nichts Böses tut, z. B. Ihre Aktivitäten an ein Internetziel zu melden? Dies war früher eine verbreitete Angst vor Open Source-Software. Heutzutage stellen viele große Unternehmen keine technischen Implementierer in Frage, die Open Source-Software enthalten. Möglicherweise könnte Closed-Source-Software auf diese Weise schlechter sein. Aber für einen Docker-Container, insbesondere einen, der einen vollständigen Satz von Betriebssystem-Tools und -Bibliotheken enthält, ist die "Angriffsfläche" viel größer. Wenn Sie glauben, dass Sie einen schlechten Postfix-Build verwenden, holen Sie sich einfach den offiziellen Code und erstellen Sie ihn (und einige Paketmanager tun dies normalerweise). Wenn Sie glauben, einen schlechten Docker-Container zu haben, ist es oft ein Abenteuer, das Bild "von der Quelle" zu reproduzieren.

    Joe Sinatra
    2017-08-31 10:18:50 UTC
    view on stackexchange narkive permalink

    Können Sie den Docker-Containern von SECURITY vertrauen? Ich denke, die Antwort darauf muss fast immer NEIN sein!

    In meinem Fall wundere ich mich über 'linuxserver / openvpn-as'. Wäre es nicht schön, das Ding einfach in einen meiner Docker-Schwärme zu stecken, es für meine privaten Netzwerke zu öffnen und den Remote-Benutzerzugriff auf diese Netzwerke verwalten zu lassen? Aber wie kann ich so etwas einem Container anvertrauen, den ich aus dem Internet bekomme und der keine Herkunft hat? Ohne das glaube ich nicht.

    Wenn ich Herkunft hätte, müsste ich nur dem Schöpfer vertrauen, um

    1. mit etwas zu beginnen, das ebenso vertrauenswürdig ist ( und so weiter und so fort),
    2. hat nichts Bösartiges getan und
    3. hat keine unsichere Wahl für einen Installations- oder Konfigurationsschritt getroffen.
    4. ol>

      Dies ist an und für sich eine ziemlich große Aufgabe. In diesem Fall muss ich linuxserver.io vertrauen. Nie von ihnen gehört. Aber wenn man sie betrachtet, scheint es ihre gesamte Aufgabe zu sein, Container zu erstellen. Also sind sie wahrscheinlich wirklich gut darin. Und dieser Container wurde angeblich über 500.000 Mal von DockerHub heruntergeladen. Klingt nach etwas ziemlich Sicherem.

      Ich könnte mich also wahrscheinlich ziemlich gut fühlen, wenn ich sicher sein könnte, dass das Bild, das ich erhalte,

      1. von linuxserver.io und erstellt wurde
      2. ist in der Tat DAS Bild, das wirklich 500K-mal heruntergeladen wurde.
      3. Nun, zuallererst ist (2) nicht wahr, oder? Ich glaube, das zählt alle Versionen des Containers. Vielleicht ist der Container seit Jahren sicher, aber jemand hat NUR eine Version mit einer ernsthaften Sicherheitslücke veröffentlicht. Und dann ist da noch (1). Das ist der wahre Stinker. Wie vielen anderen Mechanismen muss ich vertrauen (DockerHub, DockerHubs Hoster, Internetinfrastruktur, ...), um sicherzustellen, dass der ursprüngliche Quellcode für den Container, den linuxserver.io als Quelle für den Container betrachtet, den vollständig definiert Container, den ich tatsächlich benutze. Ich kann das auf keinen Fall wissen. Und wirklich, ich müsste das nicht nur über diesen Container wissen, sondern über alle Untercontainer, die zum Erstellen verwendet wurden. Daher kann ich diesen Container unmöglich verwenden.

        Dies ist ein Extremfall, aber wahrscheinlich nicht für Container mit Netzwerksicherheit. Ich gehe davon aus, dass viele der 500.000 Konsumenten, die dieses Image tatsächlich verwendet haben, dies ohne Verschulden von linuxserver.io rücksichtslos getan haben.

        Docker benötigt einen vollständigen Mechanismus zur Herkunft von Containern. Selbst dann gibt es hier viel Vertrauen. Vielleicht zu groß. Möglicherweise ist Sicherheitssoftware einfach nicht containerisierbar.

    zedman9991
    2015-05-08 19:06:02 UTC
    view on stackexchange narkive permalink

    Sie können durch eine schnelle Untersuchung Vertrauen in die Quelle aufbauen. Ein grundlegenderes Problem ist jedoch die relative Unreife des gesamten Sicherheitsprofils, die sich aus der Notwendigkeit ergibt, Root-Zugriff zum Ausführen Ihres Containers zu verwenden.

    Seitdem Sie schlagen vor, dass wir uns auf beliebte Lösungen konzentrieren. Nehmen wir an, wir verwenden ein kontrolliertes Git-basiertes Repository wie Docker Hub, um ein beliebtes vom Hersteller bereitgestelltes Produkt herunterzufahren. Die Git-Mechanismen bieten eine gute Vertrauensschicht. Wenn Sie dem genannten Anbieter vertrauen, können Sie dessen Docker-Produkt vertrauen. Wenn Sie sich erinnern, dass GitHub vor einigen Jahren kompromittiert wurde, der Quellcode jedoch aufgrund des Integritätssignaturmechanismus und der Veröffentlichungssteuerelemente von Git in Ordnung war. Diese Funktionen schützen auch von Docker veröffentlichte Dateien, wenn Sie beliebte Herstellerprodukte verwenden.

    Die Docker-Datei, die Ihren Container erstellt, kann TAR-Dateien usw. erreichen und herunterladen, die nicht in vertrauenswürdigen Git-Repositorys gehostet werden. Eine einfache Überprüfung dieser Textdatei, der Docker-Datei, kann Vertrauen in diesen Bereich schaffen.

    Die allgemeinen Sicherheitsmechanismen sind sehr jung. Berücksichtigen Sie daher zusätzlich zu den Fragen der Quellcodeverwaltung auch ihre Schwachstellen. Aus der Sicherheitsdokumentation geht hervor:

    Bei der Überprüfung der Docker-Sicherheit sind drei Hauptbereiche zu berücksichtigen:

    • die intrinsische Sicherheit des Kernels und seine Unterstützung für Namespaces und cgroups
    • die Angriffsfläche des Docker-Daemons selbst
    • Lücken im Containerkonfigurationsprofil, entweder standardmäßig oder wenn sie von Benutzern angepasst werden
    • die "härtenden" Sicherheitsfunktionen von Der Kernel und wie sie mit Containern interagieren

    Ich denke, die Tatsache, dass ihre Titelseite zur Sicherheit besagt, dass es drei Hauptbereiche gibt und dann vier auflistet, ist ein weiterer Hinweis darauf, dass sich die Dinge darin ändern Raum. Es scheint eine fantastische Lösung zu sein, erfordert jedoch möglicherweise in naher Zukunft eine intelligente Härtung mit vom Benutzer bereitgestellten Perimetern und Richtlinien.

    Ich denke, Sie könnten Integritätssignaturen mit kryptografischen Signaturen verwechseln. Git bietet Integritätsprüfungen, um Beschädigungen zu verhindern, bietet jedoch keine kryptografische Signatur einer Version, um Manipulationen zu verhindern.
    Ich denke, der GitHub-Hack von 2012 zeigt diesen Wert des Signaturmechanismus. Sie können richtig sein, dass ich verwirrende Begriffe verwendet habe, ich werde überprüfen. Manipulationen an GitHub waren kein Problem. Richtig?
    Die direkte Änderung der Git-Repos war meines Erachtens dort kein Problem, aber das bedeutet nicht, dass Sie sich auf Software von Github verlassen können. Wenn jemand die Creds eines Entwicklers stiehlt, kann er einfach eine neue Version in das Repository verschieben. Die Kryptosignierung einer Version hilft, dieses Risiko zu minimieren und sicherzustellen, dass Sie die Software erhalten, die Sie beabsichtigen.
    Wenn Sie meine Bearbeitung oben sehen, geben die Docker-Leute selbst an, dass die Containersignatur noch nicht vorhanden ist. Ich denke, das ist auch die Bedeutung, die sie suchen ...
    Rory, korrigiert. Ich entschuldige mich dafür, dass ich in Bezug auf Ihre und andere Beiträge falsch gesprochen habe.
    Keine Sorge, sie haben ähnliche Bedeutungen / klingende Begriffe, die so einfach zu verwechseln sind.
    Rory-Container sind nicht signiert, aber Docker Hub verhindert, dass andere sich als Anbieter ausgeben und zu ihren Release-Zweigen wechseln. Die Git-Versionskontrolle ist von zentraler Bedeutung für die Überwachung, ob alles wie erwartet funktioniert. Wenn jemand Anmeldeinformationen stiehlt, ist das Signieren immer noch vertrauenswürdig?
    Das Stehlen von Anmeldeinformationen (Benutzername / Passwort) bietet nicht unbedingt den gleichen Kompromiss wie das Stehlen von Signaturschlüsseln. Im Idealfall sollten Signaturschlüssel offline gehalten und zum Signieren von Releases verwendet werden. Dies erhöht das Vertrauen, das Sie in die Software setzen können, die Sie erhalten.
    L0j1k
    2015-05-08 23:27:28 UTC
    view on stackexchange narkive permalink

    Insbesondere mit Docker können Sie meiner Erfahrung nach darauf vertrauen, dass die überwiegende Mehrheit der Inhalte in der Open Source-Community (wie z. B. Inhalte auf Github) nicht absichtlich bösartig ist. Sie können die Docker-Datei lesen und überprüfen, ob sie Code aus offiziellen Repos abruft, falls vorhanden (im Gegensatz zur Verwendung der Gabel einer zufälligen Person). Wenn es sich um Code handelt, der von einem seltsamen Ort stammt, können Sie sich natürlich jederzeit ansehen, was sich vom offiziellen Repo in dieser speziellen Gabel unterscheidet. Hier gelangen Sie in schädliche Software, die nicht absichtlich bösartig ist. Es ist nur Mistcode oder schreckliche Konfiguration oder gleichwertig. Nach meiner Erfahrung mit Docker sollte Code, der inoffizielle Gabeln verwendet, vermieden werden, es sei denn, die Gabel bietet eine bestimmte Funktion, nach der Sie suchen. Das offizielle Repo wird fast allgegenwärtig aktualisiert als die Gabel. Außerdem verwendet Docker sogenannte "vertrauenswürdige Builds", damit Sie wissen, dass Sie das bekommen, was es verspricht. Schließlich hatte Docker selbst Schwachstellen. Es hört sich so an, als hätten Sie die richtige Einstellung, um sich ein Bauchgefühl zu geben, wenn etwas nicht stimmt.

    In weniger Worten, im Allgemeinen, wenn Ihre Docker-Ressourcen FROM aus einem offiziellen Build ziehen und from offizielle Repos, dies ist ungefähr so ​​sicher, wie Sie mit Software bekommen können. Docker selbst hatte einige Schwachstellen, aber solange Sie über das Patchen Ihrer Infrastruktur auf dem Laufenden bleiben, ist alles in Ordnung.

    willc
    2015-05-08 17:35:51 UTC
    view on stackexchange narkive permalink

    Nehmen Sie die Standardhaltung an, nichts zu vertrauen, das Sie von außen in Ihre Umgebung bringen möchten.

    Wenn Sie es wirklich verwenden möchten, minimieren Sie das Risiko so weit wie möglich, indem Sie es binden, analysieren und sicherstellen, dass es keinen Schaden anrichtet.

    Geben Sie ihm so wenig Zugriff wie möglich auf Ihre Umgebung, damit er das tun kann, was Sie benötigen.

    Überprüfen Sie ihn. Aktualisieren Sie es und stellen Sie sicher, dass die Updates kein neues Risiko darstellen.

    "es beschlagnahmen" wie?, "es analysieren" wie? "und sicherstellen, dass es keinen Schaden anrichtet" und wie? "Gib ihm so wenig Zugang wie möglich zu deiner Umgebung", wie!? Ihre Antwort ist oberflächlich, lässt schwierige Aufgaben trivial klingen und scheint zu ignorieren, dass Docker-Container bereits ein Begrenzungswerkzeug sind, das einen Großteil der oben genannten Aufgaben ausführt.
    Ich antwortete angesichts der gestellten Frage so kurz wie möglich. Da keine Informationen über die Umgebung, das Setup, Richtlinien, Benutzer oder irgendetwas anderes gegeben wurden, konnte vernünftigerweise keine Antwort gegeben werden, ohne viel anzunehmen, und daher die Wahrscheinlichkeit zu erhöhen, dass es falsch ist.


    Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
    Loading...