Ich versuche festzustellen, ob unter Linux Umgebungsvariablen für einen Prozess von anderen (nicht als Root ausgeführten) Benutzern beobachtet werden können.
Der unmittelbare Anwendungsfall besteht darin, Geheimnisse in Umgebungsvariablen zu stecken. Dies wird an vielen Stellen im Web als unsicher erörtert, aber ich konnte mich nicht auf den genauen Expositionspunkt in Linux konzentrieren.
Beachten Sie, dass ich nicht darüber spreche, Klartextgeheimnisse in Dateien abzulegen. Beachten Sie auch, dass ich nicht über die Offenlegung des Root-Kontos spreche (ich betrachte den Versuch, Geheimnisse vor einem Gegner mit Root als Nichtstarter zu verbergen).
Diese Frage scheint sich mit meinen zu befassen, mit Kommentaren, die Umgebungsvariablen als völlig sicherheitslos oder einfach nur verschleiert klassifizieren, aber wie greift man darauf zu?
In meinen Tests kann ein nicht privilegierter Benutzer keine Umgebungsvariablen für einen anderen Benutzer über die Prozesstabelle ('ps auxwwe') beobachten. Die Befehle, mit denen Umgebungsvariablen gesetzt werden (z. B. export), sind Shell-Builtins, die es nicht in die Prozesstabelle schaffen, und befinden sich daher nicht in / proc / $ pid / cmdline. / proc / $ pid / environ kann nur von der UID des Prozesseigners gelesen werden.
Möglicherweise besteht die Verwechslung zwischen verschiedenen Betriebssystemen oder Versionen. Verschiedene (aktuelle) Quellen im Web entschlüsseln die Unsicherheit von Umgebungsvariablen, aber meine Stichprobe verschiedener Linux-Versionen scheint zu zeigen, dass dies nicht möglich ist, zumindest nicht bis 2007 (wahrscheinlich weiter, aber ich habe keine Kästchen aktiviert) Hand zum Testen).
Wie kann ein nicht privilegierter Benutzer unter Linux Umgebungsvariablen für die Prozesse eines anderen Benutzers beobachten?
quelle
Umgebungsvariablen sind ausreichend sicher. Die Frage, mit der Sie verknüpft sind, lautet: Wenn das System kompromittiert ist, ist der einzige Sicherheitsvorteil der Verwendung von Umgebungsvariablen über eine Konfigurationsdatei die Unbekanntheit. Das heißt, wenn jemand Root-Zugriff hat, kann er auf beide zugreifen.
Ob die Verwendung von Umgebungsvariablen für geheime Daten als "dunkel" eingestuft wird, ist ebenfalls umstritten. Dies ist eine sehr verbreitete Praxis, und deshalb würde ich sie nicht als solche betrachten.
Sie können nur an zwei Stellen auf die in einer Umgebungsvariablen gespeicherten Daten zugreifen:
1. Die laufende Umgebung des Prozesses
Während der Ausführung des Prozesses kann über auf die Umgebungsvariablen dieses Prozesses zugegriffen werden
/proc/$PID/environ
. Auf diese Datei kann jedoch nur der Benutzer zugreifen, dem der Prozess gehört, oder der Root.2. Die Quelle der Umgebungsvariablen
Wenn Sie ein Init-Skript verwenden und die Variablen in diesem Init-Skript gespeichert sind, können Sie die Variablen natürlich durch Lesen dieses Skripts abrufen.
Oder wenn die Umgebungsvariablen von irgendwo anders kommen, wo auch immer.
3. 'ps' Ausgabe
Ja, ich weiß, dass ich 2 gesagt habe, und in jedem anständigen System wird es 2 sein. Wenn der Administrator jedoch nicht weiß, was er tut, ist es möglich, eine dritte Allee zu eröffnen.
Wenn der Prozess über so etwas wie gestartet wird
sh -c 'cd /foo/bar; POP=tart /my/executable'
, ist diesersh
Prozess sichtbar inps
:quelle
e
Modifikator to erwähnenps
. Außerdem kann nur die Umgebung von Prozessen angezeigt werden, die dem Benutzer gehören.export FOO=bar
), wird sie möglicherweise auch in der Verlaufsdatei angezeigt (z. B.~/.bash_history
), wenn der Benutzer keine Vorsichtsmaßnahmen getroffen hat, um das Speichern oder Entfernen der Umgebungsvariablen zu verhindern .