Интерактивный пользователь

Интерактивный пользователь — это пользователь, вошедший в систему на компьютере, на котором работает COM-сервер. Если удостоверение должно быть интерактивным пользователем, все клиенты используют один и тот же экземпляр сервера, если сервер регистрирует свою фабрику классов как многопользовательскую. Если пользователь не вошел в систему, сервер не будет работать. Если у сервера есть графический пользовательский интерфейс (GUI), который должен видеть клиент, следует использовать интерактивного пользователя для удостоверения сервера. Однако выбор этого удостоверения несет некоторые риски безопасности, так как сервер выполняется под удостоверением пользователя, вошедшего в систему, без получения сведений или согласия пользователя. Кроме того, приложение-служба не может отображать пользовательский интерфейс. Дополнительные сведения см. в разделе "Интерактивные службы".

Если COM-сервер настроен для запуска от имени интерактивного пользователя, в среде служб терминалов сервер будет запущен в интерактивном сеансе, который соответствует удостоверению пользователя клиента. Однако клиентское приложение может использовать моникер сеанса для ссылки на объект, предоставленный сервером в сеансе, который не соответствует удостоверению клиента. Если это используется, клиентское приложение может указать любой сеанс, в котором сервер будет работать от имени пользователя, которому принадлежит сеанс, а не запускающему пользователю. Разрешения доступа по умолчанию в этом сценарии не позволяют запуску пользователя вызывать методы на сервере. Однако следующие риски безопасности остаются:

  • Если COM-сервер предоставляет интерфейсы, которые не контролируются COM, например TCP-порты, именованные каналы, порты LPC, разделы общей памяти и т. д., они могут использоваться запускающим пользователем для влияния на сервер. COM-объекты, настроенные для запуска в качестве интерактивного пользователя, должны сократить эту область атаки как можно больше.
  • COM-объекты могут быть бесплатными для задания собственных разрешений доступа. Если объект задает разрешения на доступ, либо в регистрации AppID, либо путем вызова CoInitializeSecurity, чтобы разрешить запуску пользователя, пользователь сможет запустить сервер для запуска от имени другого пользователя, а затем получить доступ к объекту.

Удостоверение приложения

Запуск пользователя

Удостоверение службы

Указанный пользователь