Чи видимі змінні середовища непривілейованим користувачам в Linux?


12

Я намагаюся визначити, чи змінні в середовищі Linux змінні середовища для процесу доступні для інших (некореневих) користувачів.

Випадок негайного використання - це введення секретів у змінні середовища. Це обговорюється в багатьох місцях в Інтернеті як небезпечне, але я не зміг досягти нуля в точній точці експозиції в Linux.

Зауважте, що я не говорю про введення секретів ясного тексту у файли. Також зауважте, що я не говорю про вплив кореневого облікового запису (я бачу спробу приховати секрети від супротивника з коренем як нестартер).

Це питання, як видається, стосується моїх, з коментарями, які класифікують змінні середовища як повністю без захисту, або просто просто затуманені, але як можна отримати доступ до них?

У моїх тестах один непривілейований користувач не може спостерігати змінні середовища для іншого користувача через таблицю процесів ('ps auxwwe'). Команди, що встановлюють змінні середовища (наприклад, експорт), є вбудованими оболонками, які не вносять їх у таблицю процесів, а розширення не знаходяться в / proc / $ pid / cmdline. / proc / $ pid / environment читає тільки UID власника процесу.

Можливо, плутанина між різними операційними системами або версіями. Різні (недавні) джерела в Інтернеті декретують незахищеність змінних оточуючих середовищ, але мої точні перевірки різних версій Linux, схоже, вказують на те, що це неможливо повернути принаймні до 2007 року (можливо, далі, але я не маю вікон на рука для тестування).

Як в Linux непривілейований користувач може спостерігати змінні середовища для інших процесів?

Відповіді:


7

Як пояснив Жилл в дуже вичерпній відповіді на аналогічне запитання на security.stackexchange.com, середовищі процесів доступні лише користувачеві, якому належить процес (і звичайно root).


Будь-яке посилання на публікацію, яку ви мали на увазі?
cyc115

@ cyc115 натисніть на слово "відповісти" :)
guntbert

6

Змінні середовища досить захищені. Питання, з яким ви пов’язані, говорить про те, що якщо система порушена, єдиною перевагою безпеки використання змінних оточуючих середовищ у файлі конфігурації є невизначеність. Це означає, що якщо хтось отримав кореневий доступ, він може потрапити до обох.
Чи вважається використання змінних оточуючих даних для секретних даних «неясними», також є дискусійним. Це дуже поширена практика, і тому я б не вважав це таким.

Ви можете отримати доступ до даних, що зберігаються в змінній середовища, лише в 2 місцях:

1. Безпечне середовище процесу

Коли процес запущений, до змінних оточуючих середовищ цього процесу можна отримати доступ /proc/$PID/environ. Однак доступ до цього файлу може отримати лише той користувач, який володіє процесом або root.

2. Джерело змінних середовища

Якщо ви використовуєте скрипт init, і змінні зберігаються в цьому скрипті init, змінні можна, звичайно, отримати, прочитавши цей сценарій.

Або якщо змінні середовища надходять з іншого місця, то де б це не було.

3. 'ps' вихід

Так, я знаю, що я сказав 2, і в будь-якій гідній системі це буде 2. Однак якщо адміністратор не знає, що він робить, можливо відкрити 3-й проспект.

Якщо процес запускається через щось подібне sh -c 'cd /foo/bar; POP=tart /my/executable', то цей shпроцес буде видно в 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

1
Ви також повинні згадати eмодифікатор для ps. Він також дозволяє лише переглядати оточення процесів, якими володіє користувач.
Бармар

1
Ще одне можливе місце: якщо змінна середовища була встановлена ​​через оболонку (наприклад export FOO=bar), вона також може відображатися у файлі історії (наприклад ~/.bash_history), якщо користувач не вжив заходів безпеки, щоб не зберегти її чи видалити.
tavnab
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.