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?
źródło
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ówczassh
proces ten będzie widoczny wps
:źródło
e
modyfikatorze dops
. Umożliwia także przeglądanie środowiska procesów, które użytkownik posiada.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ąć.