Czy zmienne środowiskowe są widoczne dla nieuprzywilejowanych użytkowników w systemie Linux?

12

Próbuję ustalić, czy w systemie Linux zmienne środowiskowe dla procesu są obserwowalne przez innych użytkowników (innych niż root).

Bezpośrednim przypadkiem użycia jest tajemnica w zmiennych środowiskowych. Jest to omawiane w wielu miejscach w Internecie jako niepewne, ale nie byłem w stanie dokładnie określić punktu ekspozycji w Linuksie.

Zauważ, że nie mówię o umieszczaniu w plikach tajemnic czystego tekstu. Zauważ też, że nie mówię o narażeniu się na konto root (próbuję ukryć sekrety przed przeciwnikiem z rootem jako niestabilny).

To pytanie wydaje się odnosić się do moich, z komentarzami, które klasyfikują zmienne środowiskowe jako całkowicie pozbawione bezpieczeństwa lub po prostu zaciemniające, ale w jaki sposób można uzyskać do nich dostęp?

W moich testach jeden nieuprzywilejowany użytkownik nie może obserwować zmiennych środowiskowych dla innego użytkownika poprzez tabelę procesów ('ps auxwwe'). Polecenia ustawiające zmienne środowiskowe (np. Eksport) są wbudowanymi powłokami, które nie trafiają do tabeli procesów i przez rozszerzenie nie znajdują się w / proc / $ pid / cmdline. / proc / $ pid / Environment jest odczytywalny tylko przez UID właściciela procesu.

Być może zamieszanie dotyczy różnych systemów operacyjnych lub wersji. Różne (niedawne) źródła w Internecie potępiają niepewność zmiennych środowiskowych, ale moje sprawdzanie punktowe różnych wersji linuksa wydaje się wskazywać, że nie jest to możliwe, sięgając wstecz do 2007 r. (Prawdopodobnie dalej, ale nie mam pól na ręka do testu).

Jak w Linuksie użytkownik nieuprzywilejowany może obserwować zmienne środowiskowe dla procesów innych?

Joshua Miller
źródło

Odpowiedzi:

7

Jak wyjaśnił Gilles w bardzo wyczerpującej odpowiedzi na podobne pytanie na security.stackexchange.com, środowiska procesowe są dostępne tylko dla użytkownika, który jest właścicielem procesu (i oczywiście root).

guntbert
źródło
Jakiś link do wpisu, o którym wspominałeś?
cyc115
@ cyc115 kliknij słowo „odpowiedz” :)
guntbert
6

Zmienne środowiskowe są bardzo bezpieczne. Pytanie, z którym się łączysz, brzmi: jeśli w przypadku naruszenia bezpieczeństwa systemu jedyną korzyścią bezpieczeństwa wynikającą z używania zmiennych środowiskowych nad plikiem konfiguracyjnym jest niejasność. Oznacza to, że jeśli ktoś uzyskał dostęp do konta root, może uzyskać dostęp do obu.
To, czy użycie zmiennych środowiskowych do tajnych danych jest uważane za „niejasne”, jest również dyskusyjne. Jest to bardzo powszechna praktyka i dlatego nie uważałbym jej za taką.

Dostęp do danych przechowywanych w zmiennej środowiskowej można uzyskać tylko w 2 miejscach:

1. Środowisko działania procesu

Podczas procesu można uzyskać dostęp do zmiennych środowiskowych tego procesu /proc/$PID/environ. Jednak tylko użytkownik będący właścicielem procesu lub root może uzyskać dostęp do tego pliku.

2. Źródło zmiennych środowiskowych

Jeśli używasz skryptu inicjującego, a zmienne są przechowywane w tym skrypcie inicjującym, zmienne można oczywiście uzyskać, czytając ten skrypt.

Lub jeśli zmienne środowiskowe pochodzą skądinąd, to gdziekolwiek to jest.

3. Wyjście „ps”

Tak, wiem, że powiedziałem 2, aw każdym przyzwoitym systemie będzie to 2. Jednak jeśli administrator nie wie, co robi, możliwe jest otwarcie trzeciej alei.

Jeśli proces zostanie uruchomiony za pomocą czegoś podobnego sh -c 'cd /foo/bar; POP=tart /my/executable', wówczas shproces ten będzie widoczny w 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
źródło
1
Powinieneś również wspomnieć o emodyfikatorze do ps. Umożliwia także przeglądanie środowiska procesów, które użytkownik posiada.
Barmar
1
Jeszcze jedna możliwa lokalizacja: jeśli zmienna środowiskowa została ustawiona przez powłokę (np. export FOO=bar), Może również pojawić się w pliku historii (np. ~/.bash_history), Jeśli użytkownik nie podjął środków ostrożności, aby nie zapisać lub usunąć.
tavnab