У меня есть что-то вроде этого:
(есть клиент , которому необходимо запустить сторонний .exe с правами администратора с некоторыми пользовательскими параметрами. Чтобы не постоянно раздражать пользователя диалогами UAC, я сделал Служба , работающая с привилегиями SYSTEM. Клиент и Служба взаимодействуют через WCF и NetNamedPipeBinding
.)
Это прекрасно работает, я беспокоюсь только о безопасности. Риск состоит в том, что я не контролирую сторонний .exe, поэтому я не знаю, что могут сделать некоторые недокументированные параметры.
(возможно, он позволяет запустить какой-то процесс, который позволил бы повысить привилегии для прав SYSTEM из пространства пользователя)
Я не вижу ничего, что подтверждает подлинность Клиента на Сервере как действительного клиента. Учитывая, что именованные каналы представляют собой известную угрозу / проблему безопасности (см. http://www.blakewatts.com/namedpipepaper.html / https://hackinparis.com/data/slides/2017/2017_Cohen_Gil_The_forgotten_interface_Windows_named_pipes.pdf), я искал контрольный список рекомендаций / рекомендаций по безопасности, но не нашел ни одного.
Таким образом, вопрос в основном:
Как я могу убедиться, что только мой клиент (не другие программы) не имеет права подключаться к привилегированной службе? И как мне это сделать при использовании WCF?
Что я думал до сих пор:
И Service.exe
, и Client.exe
будут в C:\Program Files\<some name>
. Другие невыпущенные программы не могут писать по этому пути, поэтому, возможно, разрешит клиенту записать аргументы в некоторый файл и разрешить службе читать его? Можно ли использовать аналогичный метод для аутентификации всего соединения WCF?