So verhindern Sie das Anhängen oder Ausführen in einem Docker-Container

8

Wie kann verhindert werden, dass ein Benutzer meines vorgefertigten Docker-Containers auf eine Shell in einer laufenden Instanz dieses Containers zugreifen kann? Ich habe alle Beiträge gegoogelt und gelesen, die sich auf dieses Szenario beziehen, und bin ohne eine funktionierende Lösung gekommen. Ich versuche, den Zugriff auf eine bestimmte Ressource im Container zu verhindern. Um diese Anfrage durchzuführen, nehmen wir an, es handelt sich um eine Seriennummer in einer Konfigurationsdatei. Ich baue auf dem Java: 7- Bild auf, das auf einem Ubuntu- Bild basiert .

Gehen Sie wie folgt vor, um Ihre Lösung zu testen:

  1. Erstellen Sie Ihren Docker-Container und führen Sie ihn aus

  2. Exportieren Sie Ihren Container

    Docker-Export [Containername] | gzip -c> mycontainer.tar.gz

  3. Importieren Sie Ihren Container auf einem externen System

    gzip -dc mycontainer.tar.gz | Docker-Import - [Containername]

  4. Führen Sie den Container aus

  5. Shell in den laufenden Container mit einer / allen der folgenden Methoden:

    docker exec -it [Containername] bash

    Docker anhängen [Containername]

    Docker run -ti --entrypoint = / bin / bash [Containername]

[Containername] ist der Name Ihres Containers

Bash, Dash und Sh sind alle gültige Shells

Paul Gregoire
quelle
1
Wenn Sie versuchen, Informationen in Ihrem Container zu schützen, ist Docker nicht die gewünschte Technologie. Selbst wenn Sie den Shell-Zugriff einschränken konnten, gibt es eine Vielzahl anderer trivialer Mittel, um auf das Dateisystem im Container zuzugreifen.
EEAA
Leider muss ich in diesem Fall Docker verwenden; Mir ist klar, dass es in diesem Fall nicht ideal ist.
Paul Gregoire
Hey @EEAA, könnten Sie mich auf eine Liste dieser "trivialen Mittel" verweisen? Was würden Sie dann anstelle von Docker vorschlagen?
Nils Petersohn

Antworten:

5

bashSpeziell für den Befehl habe ich in der .bashrc-Datei den Befehl exitam Ende der Datei hinzugefügt , damit sich der Benutzer anmeldet und schließlich ausscheidet, aber Benutzer können den shBefehl weiterhin verwenden .

José Roberto García Chico
quelle
3

Um die Antwort von Jose zu ergänzen, besteht eine andere Lösung darin, ...

docker exec :id -it /bin/rm -R /bin/*

Dadurch werden sh und alle nützlichen bin-Befehle unter Linux entfernt. Ich bin mir nicht sicher, was Sie tun würden, um an diesem Punkt in den Container zu gelangen. Ich weiß zwar, dass Sie möglicherweise einen Speicherdebugger verwenden können, um Umgebungsvariablen des laufenden Containers abzurufen, aber das macht es umso ärgerlicher ... Ich frage mich, ob es eine Möglichkeit gibt, diesen Speicher in Ring 0 zu sperren und wegzunehmen SSH-Zugriff insgesamt auf den Host.

Wenn jemand weiß, wie man das knackt, würde mich interessieren, wie.

BEARBEITEN

Sie möchten Docker-Geheimnisse verwenden, wenn Sie vertrauliche Informationen schützen. Auschecken:

https://docs.docker.com/engine/swarm/secrets/

Dr.Knowitall
quelle
Das funktioniert perfekt für meine Zwecke, danke! Obwohl ich glaube, dass der richtige Befehl lautet:docker exec -it 'container-id' /bin/rm -R /bin/*
ty01
Dies gilt nicht für mich arbeiten Docker version 18.09.6, build 481bc77156 . Der Ansatz von@ty01 gibt diese Fehlermeldung /bin/rm: cannot remove '/bin/<filename>': No such file or directoryfür alle filenames in /bin. Die Antwort kommt@Dr. Knowitall zurück Error: No such container: :id. Auch wenn ich iddurch das CONTAINER_IDvon ersetze docker ps, gibt es immer noch die gleiche Fehlermeldung.
Edesz
0

Wenn es sich bei den zu schützenden Informationen um eine Seriennummer handelt, ist die Verschlüsselung dieser Informationen die einzig sichere Möglichkeit, sie zu schützen. Sie können verschiedene Möglichkeiten zum Verschlüsseln geheimer Daten auswählen und sicherstellen, dass Sie einen starken Schlüssel verwenden. Sie können Ihre Anwendung auch veranlassen, geheime Daten an Ihren Server zu senden, um deren Gültigkeit zu ermitteln. Basierend auf den Antworten von Ihrem Server können die Apps weiterarbeiten oder Nachrichten stoppen und anzeigen.

Nehmen Sie in Kürze immer an, dass Ihre Anwendung vollständig und gründlich seziert werden kann. Verschlüsseln Sie immer alle geheimen und wichtigen Daten mit einem starken Schlüssel, sodass das Knacken des Schlüssels sehr lange dauert (vorausgesetzt, der Verschlüsselungsalgorithmus ist öffentlich verfügbar oder bekannt).

Wenn Sie den Zugriff allein verhindern, selbst wenn Sie einen Weg finden, dies zu tun, entsteht nur ein falsches Sicherheitsgefühl.

Donny Kurnia
quelle
... dann wird das zu schützende Geheimnis zum Verschlüsselungsschlüssel, und Sie müssen ihn mit einem Verschlüsselungsschlüssel schützen. Und schützen diesen Schlüssel mit einem Schlüssel und schützt diesen Schlüssel mit einem Schlüssel und ...
Mark