Sind Umgebungsvariablen für nichtprivilegierte Benutzer unter Linux sichtbar?

12

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?

Joshua Miller
quelle

Antworten:

7

Wie Gilles in einer sehr umfassenden Antwort auf eine ähnliche Frage auf security.stackexchange.com erklärte, sind Prozessumgebungen nur für den Benutzer zugänglich, dem der Prozess (und natürlich root) gehört.

U / min guntbert
quelle
Irgendein Link zu dem Beitrag, den du gemeint hast?
cyc115
@ cyc115 klicke auf das wort "
antwort
6

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 dieser shProzess sichtbar in ps:

$ sh -c 'cd /; POP=tart sleep 10' &
[1] 3085

$ ps ax | grep POP
phemmer   3085  14   5  0.0  0.0 SN         00:00 sh -c cd /; POP=tart sleep 10
Patrick
quelle
1
Sie sollten auch den eModifikator to erwähnen ps. Außerdem kann nur die Umgebung von Prozessen angezeigt werden, die dem Benutzer gehören.
Barmar
1
Ein weiterer möglicher Ort: Wenn die Umgebungsvariable über die Shell festgelegt wurde (z. B. 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 .
Tavnab