Предоставить услугу PROCESS_DUP_HANDLE службе - PullRequest
0 голосов
/ 08 мая 2019

Фон

У меня есть 2 службы Windows (запущенные на WinServer2016), которые общаются через общую память. Отображение распространяется с помощью DuplicateHandle Windows API от одного сервиса к другому (есть причины, по которым этот метод является предпочтительным).

Пока службы работают под учетной записью локальной системы, все в порядке, но если мы запускаем их под выделенной учетной записью администратора, передача сопоставления завершается неудачно: OpenProcess сообщает об отказе в доступе.

Глядя на панель Свойства / Безопасность / Разрешения / Дополнительно процесса получателя в ProcessExplorer, я действительно вижу, что PROCESS_DUP_HANLDE разрешен для локальной системы и запрещен для группы администраторов. Я вижу точно так же, если я выкидываю дескриптор безопасности процесса с помощью CppCheckSD :

O:BAG:SYD:(A;;0x1fffff;;;SY)(A;;0x121411;;;BA)S:AI(ML;;NWNR;;;SI)

Вопрос

Я хотел бы добавить ACE к процессу получателя, который позволяет PROCESS_DUP_HANDLE для любого процесса, запускаемого учетной записью создателя (обе службы работают с одной и той же учетной записью). Я хотел бы сделать это во время создания сервиса.

sc имеет опции для получения и установки дескриптора безопасности (SD) службы, но я не могу по-настоящему интерпретировать результат sc sdshow:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Этот DACL имеет 4 записи (по сравнению с 2 выше), и у группы администраторов больше прав, чем у системы.

  • Мне кажется, что процесс SD! = Служба SD, это правда?
  • Что соответствует SD, установленному sc?
  • Можно ли добавить необходимое разрешение с помощью sc sdset?
...