Поделиться через


Отказ в обслуживании

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

Чрезмерный расход памяти

Проблема может возникнуть при прочтении XML-документа с большим количеством уникальных локальных имен, пространств имен или префиксов. При использовании класса, который наследуется от XmlReader, и вызове свойства LocalName, Prefix или NamespaceURI для каждого элемента, возвращаемая строка добавляется в таблицу NameTable. Коллекция, содержащаяся в таблице NameTable, никогда не уменьшается в размерах, что создает виртуальную «утечку памяти» в дескрипторах строк.

Возможные способы устранения рисков

  • Создайте класс, производный от NameTable, и включите максимальную квоту по размеру. (Не существует способов предотвратить использование таблицы NameTable или сменить таблицу NameTable при ее заполнении.)

  • Не используйте упомянутые свойства, а использовать вместо них, если возможно, используйте метод MoveToAttribute вместе с методом IsStartElement; эти методы не возвращают строк и поэтому не возникает переполнение коллекции NameTable.

Вредоносный клиент отправляет службе слишком много запросов лицензий

Если вредоносный клиент направляет службе слишком много запросов лицензий, это может привести к излишнему использованию памяти на сервере.

Устранение рисков. Используйте следующие свойства класса LocalServiceSecuritySettings:

  • MaxCachedCookies: определяет максимальное число привязанных ко времени объектов SecurityContextToken, которые сервер кэширует после согласования SPNego или SSL;

  • IssuedCookieLifetime: определяет время существования объектов SecurityContextTokens, выдаваемых сервером после согласования SPNego и SSL. Сервер кэширует объекты SecurityContextToken на данный промежуток времени.

  • MaxPendingSessions управляет максимальным числом безопасных диалогов, установленных на сервере, но для которых ни одно сообщение приложения не было обработано. Данная квота препятствует установлению клиентами безопасных диалогов в службе; таким образом, служба должна отслеживать состояние каждого из клиентов, но не использовать их.

  • InactivityTimeout: определяет максимальный срок, в течение которого служба поддерживает безопасный диалог, не получая сообщений приложения от клиента. Данная квота препятствует установлению клиентами безопасных диалогов в службе; таким образом, служба должна отслеживать состояние каждого из клиентов, но не использовать их.

Привязки WSDualHttpBinding и Dual Custom Bindings требуют проверки подлинности клиента

По умолчанию для привязки WSDualHttpBinding включен режим безопасности. Однако существует возможность, что при отключении проверки подлинности клиента путем задания для свойства ClientCredentialType значения None злоумышленник сможет вызвать атаку типа «отказ в обслуживании» на третьей службе. Это может произойти потому, что вредоносный клиент «заставит» службу отправить поток сообщений третьей службе.

Чтобы избежать этого, не присваивайте данному свойству значение None. Кроме того, помните о такой угрозе при создании пользовательской привязки, использующей шаблон двустороннего обмена сообщениями.

Возможно переполнение журнала событий аудита

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

Для решения этой проблемы задайте свойству SuppressAuditFailure значение true и используйте свойства средства «Просмотр событий» для управления поведением аудита. Дополнительные сведения об использовании Просмотр событий для просмотра журналов событий и управления ими см. в Просмотр событий. Дополнительные сведения см. в разделе "Аудит".

Недопустимые реализации IAuthorizationPolicy могут привести к тому, что служба не отвечает

Evaluate Вызов метода в неисправной реализации IAuthorizationPolicy интерфейса может привести к тому, что служба не отвечает.

Устранение рисков. Используйте только надежный код. Это значит, следует использовать только тот код, который вы написали и испытали сами, или код от надежного поставщика. Не следует разрешать подключение к коду ненадежных расширений IAuthorizationPolicy без их тщательной проверки. Это относится ко всем расширениям, используемым при реализации службы. WCF не делает никаких различий между кодом приложения и внешним кодом, подключаемым с помощью точек расширяемости.

Может потребоваться изменить максимальный размер маркера Kerberos

Если клиент принадлежит к большому числу групп (примерно 900, хотя реальное число может быть другим в зависимости от конкретных групп), может возникнуть проблема, если размер блока заголовка сообщения будет превышать 64 килобайта. В этом случае можно увеличить максимальный размер маркера Kerberos. Кроме того, может потребоваться увеличить максимальный размер сообщения WCF для размещения более крупного токена Kerberos.

Результаты авторегистрации в нескольких сертификатах с одним именем субъекта для компьютера

Автоматическая регистрация — это возможность Windows Server 2003 автоматически регистрировать пользователей и компьютеры для сертификатов. Если компьютер входит в домен, в котором включена эта возможность, сертификат X.509, соответствующий цели проверки подлинности клиента, автоматически создается и вставляется в хранилище личных сертификатов локального компьютера, как только компьютер подключается к сети. Однако при авторегистрации одно и то же имя субъекта используется для всех сертификатов, которые создаются в кэше.

Влияние заключается в том, что службы WCF могут не открываться на доменах с автоматической регистрацией. Это связано с тем, что условия поиска учетных данных X.509 службы по умолчанию могут быть достаточно сложными, поскольку имеется несколько сертификатов с полным DNS-именем компьютера. Один сертификат связан с авторегистрацией, а другой сертификат может быть выданным самостоятельно.

Чтобы устранить эту проблему, наведите ссылку на точный сертификат, используемый с помощью более точного критерия поиска в serviceCredentials>.< Например, используйте параметр FindByThumbprint и задавайте сертификат по его уникальному отпечатку (хэшу).

Дополнительные сведения о функции автоматической регистрации см. в разделе "Автоматическая регистрация сертификатов" в Windows Server 2003.

Последнее из нескольких альтернативных имен субъекта, используемое для авторизации

В редком случае, когда сертификат X.509 содержит несколько альтернативных имен субъектов, и авторизация выполняется с использованием альтернативного имени субъекта, авторизация может завершиться сбоем.

Защита файлов конфигурации с помощью списков управления доступом

Вы можете указать обязательные и необязательные утверждения в файлах кода и конфигурации для выданных токенов CardSpace. В результате в сообщениях RequestSecurityToken, отправляемых в службу маркеров безопасности, будут создаваться соответствующие элементы. Злоумышленник может изменить код или файл конфигурации, удалив обязательные или необязательные утверждения, в результате чего возникнет вероятность того, что служба маркеров безопасности выдаст маркер, который запрещает доступ к целевой службе.

Предотвращение. Проверяйте разрешение на доступ к компьютеру для изменения файла конфигурации. Используйте списки управления доступом к файлам (ACL) для защиты файлов конфигурации. WCF требует, чтобы код был в каталоге приложения или глобальном кэше сборок, прежде чем он позволит загрузить такой код из конфигурации. Для обеспечения защиты каталогов используйте списки управления доступом к каталогам.

Достигнуто максимальное число безопасных сеансов для службы

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

Примечание.

При использовании сеансов с отслеживанием состояния предыдущий абзац неприменим. Дополнительные сведения о сеансах с отслеживанием состояния см. в разделе "Практическое руководство. Создание маркера контекста безопасности для безопасного сеанса".

Чтобы избежать этого, задайте максимальное число активных сеансов и максимальное время существования сеанса с помощью свойства SecurityBindingElement класса SecurityBindingElement.

См. также