Ответ 1
Вы действительно не задаете правильный вопрос: невозможно дать логический ответ, действующий при любых обстоятельствах. Вы всегда должны оценивать безопасность решения в целом, выявлять угрозы и моделировать связанные с ними риски безопасности.
Тем не менее, верно, что WCF NetNamedPipeBinding имеет характеристики безопасности, которые делают его несколько отличным от привязок на основе сетевых протоколов:
- По сравнению с любым сетевым протоколом NetNamedPipeBinding по своей сути гораздо более защищен от угроз для связи по транспортному соединению. Вместо байтов, передаваемых по сети, в случае именованных каналов обмен сообщениями происходит через механизм, включающий передачу байтов данных (через API-интерфейсы операционной системы) в и из памяти, управляемой ядром операционной системы на одной машине. Поток сообщений нельзя подслушивать, кроме как злоумышленник, у которого уже есть привилегированный код, работающий в режиме ядра (и если у вас есть такой атакующий уже внутри трусиков вашей операционной системы, он, вероятно, уже может делать все, что ему нравится, с вашим приложением). Следовательно, WCF "Безопасность на транспорте" более или менее не имеет отношения к безопасности потока сообщений и, возможно, часто отключается в конфигурации, чтобы избежать ненужных служебных служебных программ.
- Механизм, используемый связыванием именованного канала для публикации конечных точек службы для потенциальных клиентов, также по своей сути более безопасен, чем сетевые протоколы: он основан на именованном объекте общей памяти и, следовательно, недоступен для доступа с любого удаленного компьютера.
- Именованный канал, используемый для обмена сообщениями, называется с идентификатором GUID, который изменяется при каждом перезапуске сервера и дополнительно защищается ACL, который запрещает любому удаленному пользователю открывать его, даже если они могли каким-то образом обнаружить текущий идентификатор GUID имя трубы.
С другой стороны, если быть основанным на объекте операционной системы, доступном через API, а не на общедоступных стандартах для сетевой связи, существуют определенные уязвимости безопасности, которые не возникают для привязок к сети:
- Серверные атаки "на корточках", когда какой-то процесс, отличный от предполагаемого хоста службы WCF, успешно прослушивает именованный канал. Связывание именованных каналов в .NET 3.5 и ранее не было защищено от этой уязвимости из-за ошибки в ACL, созданной привязкой для защиты канала..NET 4 в основном исправил эту ошибку.
- Именованные каналы в Windows имеют встроенный механизм для поддержки именованных каналов, выдающих себя за своих клиентов. WCF NetNamedPipeBinding содержит ошибку, которая в некоторых сценариях позволяет серверу каналов (т.е. Службе WCF) использовать учетные данные клиента Windows для такого олицетворения, даже если привязка WCF на стороне клиента настроена на отказ от олицетворения.
В целом вы должны оценить общую безопасность своего приложения/системы в свете угроз, которые вам важны, с учетом конкретных характеристик различных привязок, которые вы могли бы рассмотреть. NetNamedPipeBinding часто будет лучшим выбором для сценариев с одинаковой машиной.