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

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

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

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

Служба удостоверений приложения

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

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

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