Отказ в обслуживании
Если система перегружена так, что не удается обрабатывать сообщения, или сообщения обрабатываются слишком медленно, происходит отказ в обслуживании.
Чрезмерный расход памяти
Проблема может возникнуть при прочтении 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, как это описано в статье службы поддержки Microsoft Support "Проверка подлинности Kerberos в Internet Explorer не работает из-за недостаточного размера буфера при подключении к службам IIS". Кроме того, может потребоваться увеличить максимальный размер сообщения WCF, чтобы оно вмещало увеличенный маркер Kerberos.
Результаты авторегистрации в нескольких сертификатах с одним именем субъекта для компьютера
Авторегистрация — это возможность Windows Server 2003 автоматически регистрировать пользователей и компьютеры в сертификатах. Если компьютер входит в домен, в котором включена эта возможность, сертификат X.509, соответствующий цели проверки подлинности клиента, автоматически создается и вставляется в хранилище личных сертификатов локального компьютера, как только компьютер подключается к сети. Однако при авторегистрации одно и то же имя субъекта используется для всех сертификатов, которые создаются в кэше.
Это может привести к тому, что не удастся открыть службы WCF в доменах с авторегистрацией. Это связано с тем, что условия поиска учетных данных X.509 службы по умолчанию могут быть достаточно сложными, поскольку имеется несколько сертификатов с полным DNS-именем компьютера. Один сертификат связан с авторегистрацией, а другой сертификат может быть выданным самостоятельно.
Чтобы избежать этого, точно задавайте нужный сертификат, используя более четкие условия поиска в элементе serviceCredentials element. Например, используйте параметр FindByThumbprint и задавайте сертификат по его уникальному отпечатку (хэшу).
Дополнительные сведения функции авторегистрации см. в разделе Авторегистрация сертификатов в Windows Server 2003.
Последнее из нескольких альтернативных имен субъекта, используемое для авторизации
В редком случае, когда сертификат X.509 содержит несколько альтернативных имен субъектов, и авторизация выполняется с использованием альтернативного имени субъекта, авторизация может завершиться сбоем.
Защита файлов конфигурации с помощью списков управления доступом
В коде и файлах конфигурации можно задать обязательные и необязательные утверждения для маркеров, выдаваемых CardSpace. В результате в сообщениях RequestSecurityToken, отправляемых в службу маркеров безопасности, будут создаваться соответствующие элементы. Злоумышленник может изменить код или файл конфигурации, удалив обязательные или необязательные утверждения, в результате чего возникнет вероятность того, что служба маркеров безопасности выдаст маркер, который запрещает доступ к целевой службе.
Предотвращение. Проверяйте разрешение на доступ к компьютеру для изменения файла конфигурации. Используйте для защиты файлов конфигурации списки управления доступом к файлам. WCF требует, чтобы код был размещен в каталоге приложения или в глобальном кэше сборок, прежде чем такой код получит разрешение на загрузку из файла конфигурации. Для обеспечения защиты каталогов используйте списки управления доступом к каталогам.
Достигнуто максимальное число безопасных сеансов для службы
Когда клиент успешно проходит проверку подлинности на стороне службы и устанавливается безопасный сеанс для службы, служба отслеживает этот сеанс, пока клиент не отменит его, или пока срок действия сеанса не истечет. Каждый установленный сеанс учитывается службой относительно максимального числа одновременных активных сеансов. Когда будет достигнут этот предел, клиенты, пытающие создать сеансы для связи с этой службой, будут отклоняться, пока один или несколько активных сеансов не истекут или не будут отменены клиентом. У клиента может быть установлено несколько сеансов связи со службой, и все они учитываются при сравнении с предельным значением.
Примечание |
---|
При использовании сеансов с отслеживанием состояния содержимое предыдущего абзаца неприменимо. Дополнительные сведения сеансах с отслеживанием состояния см. в разделе Как создать маркер контекста безопасности с отслеживанием состояния для безопасного сеанса. |
Чтобы избежать этого, задайте максимальное число активных сеансов и максимальное время существования сеанса с помощью свойства SecurityBindingElement класса SecurityBindingElement.
См. также
Основные понятия
Раскрытие информации
Повышение прав доступа
Отказ в обслуживании
Атаки с повторением
Подделка
Неподдерживаемые сценарии