Безопасность коммуникаций - PullRequest
5 голосов
/ 18 февраля 2010

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

Ответы [ 4 ]

2 голосов
/ 18 февраля 2010

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

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

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

1 голос
/ 18 февраля 2010

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

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

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

1 голос
/ 18 февраля 2010

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

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

Тем не менее, если вы обрабатываете конфиденциальные данные, взгляните на mlock .

0 голосов
/ 18 февраля 2010

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

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

...