Безопасность stdio связи

В программе я разрабатываю (Linux), мне нужен очень основанный на простом тексте IPC. Это было бы очень просто в использовании стандартный канал ввода/вывода для этого. Я могу положить, что сообщения, отправленные в stdin процесса, не могут быть прочитаны никем? Кроме того, я могу положить, что, если я сохранил канал к его stdout, только я могу считать то, что он производит? Я просто хочу удостовериться, что нет никакого находящегося в procfs приема, который может читать из них.

5
задан Cœur 16 April 2018 в 13:45
поделиться

4 ответа

В моем собственном ограниченном тестировании (выполнял uniq | sort , затем пытался отслеживать оба конца канала через / proc / XXX / fd ), мне кажется, что я не могу прочитать, что отправляется в канал, но я могу вводить в него данные.

Другими словами, проведите собственное тестирование, чтобы увидеть, что вы можете, а что нет. : -)

0
ответ дан 15 December 2019 в 00:59
поделиться

Честно говоря, я думаю, это зависит от того, какой уровень безопасности, по вашему мнению, требуется вашему приложению. Я ввожу свой пароль ключа GPG на стандартный ввод. Я всегда задаю вопрос «каков допустимый риск?».

Тем не менее, ничто не защитит ваше приложение от руткита в пространстве ядра. Он может читать не только стандартные терминалы ввода / вывода, но и всю память ваших процессов во время работы. И, вероятно, отмените некоторые меры защиты, которые у вас есть.

Вы можете рассмотреть возможность использования изолированной программной среды SELinux в сочетании с тем, что вы делаете - прочтите об этом на http://danwalsh.livejournal.com/ , если вам действительно нужен такой уровень защиты. libselinux позволяет вам взаимодействовать с ним для проверки наличия защиты и т. д.

2
ответ дан 15 December 2019 в 00:59
поделиться

Насколько я знаю, нет никаких "трюков", и другие пользователи не могут читать ваш stdin/stdout. Просто помните, что:

  • Другие процессы, запущенные от имени того же пользователя, могут читать память вашего процесса; это потому, что безопасность защищает вас от других пользователей.
  • Процесс, запущенный от имени суперпользователя, может делать все.

Учитывая это, если вы работаете с конфиденциальными данными, посмотрите на mlock.

1
ответ дан 15 December 2019 в 00:59
поделиться

Здесь нет никаких хитростей, единственное, что я могу придумать в отношении обнаружения перенаправления stdout в другое место, это сделать это как в простой функции C, как показано здесь isredirected, в остальном бремя ответственности лежит на вас, чтобы убедиться, что сообщения хранятся в безопасности. ...Другое дело, что использование хитрости procfs требует привилегий root для доступа к определенным функциям procfs... так что убедитесь, что вы поставили проверку, чтобы убедиться, что она не запущена от имени root...

int isredirected(void){
if (!isatty(fileno(stdin))) return 1;
return 0;
}

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

1
ответ дан 15 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: