Как передавать конфиденциальные данные между процессами в Windows? - PullRequest
2 голосов
/ 12 июня 2009

Я хотел бы передать имя пользователя и пароль от одного процесса другому процессу, запущенному на том же сервере в Windows. Каков наилучший подход для достижения этой передачи безопасным способом? Один простой подход заключается в том, чтобы скопировать пароли в файл и затем прочитать другой процесс из файла, а затем удалить файл, как только он будет прочитан. Хотя это просто, меня беспокоит, безопасен ли он, хотя для кого-то все еще возможно получить доступ к этому файлу, даже если он живет только в течение короткого периода времени, а также имеет возможность пропустить файл, если другой обрабатывает ошибки или вылетает. IPC, такие как сокеты и именованные каналы, кажутся излишними для этой проблемы. Я более склонен к использованию файлов с отображенной памятью, как объяснено в этой ссылке ниже, в которой говорится о разделении памяти между процессами. Это правильный подход? Кроме того, это хорошая идея, чтобы заполнить память фиктивными данными перед освобождением / стиранием, чтобы помешать процессам румян очистить данные из этой области памяти?

http://msdn.microsoft.com/en-us/library/aa366551(VS.85).aspx

Ответы [ 2 ]

4 голосов
/ 12 июня 2009

RPC - ваш друг здесь (я бы не использовал именованные каналы для передачи защищенных данных, потому что у них есть серьезные проблемы (потому что они работают в глобальном пространстве имен и поэтому уязвимы для атак на корточках)).

Поскольку данные не передаются по проводам, шифрование не так важно, как описывают некоторые. Вместо этого пусть один процесс реализует сервер RPC, а другой конец связывается с этим сервером, выполняет вызов RPC с учетными данными и уничтожает дескриптор привязки, что должно разрушить промежуточные структуры данных.

Не забудьте безопасно обнулить память, когда вы закончите ее использовать (в противном случае она может быть сохранена на диске).

Если вы действительно хотите использовать шифрование, используйте CryptProtectMemory, который будет шифровать данные способом, который можно использовать для IPC.

1 голос
/ 12 июня 2009

Используйте некоторые IPC, которые (1) не сохранены на диске, (2) поддерживают ACL.

Это может указывать на именованные каналы.

Поочередно DCOM и WCF поддерживают шифрование содержимого.

...