Использование общего кэша в среде веб-фермы для обнаружения атак воспроизведения в WCF - PullRequest
24 голосов
/ 06 сентября 2010

Я пытаюсь выяснить, как реализовать механизм обнаружения повторной атаки с WCF в сценарии веб-фермы.

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

В WSE3.0 раньше было возможно предоставить пользовательские реализации для одноразового кэша

http://msdn.microsoft.com/en-us/library/ff647945.aspx

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

Есть мысли?

1 Ответ

1 голос
/ 29 сентября 2011

Во-первых, для этого нет серебряных пуль. У каждого варианта есть свои недостатки. Microsoft рекомендует один из двух вариантов :

  • Использовать защиту в режиме сообщений с токенами контекста безопасности с состоянием (с включенным или без безопасного разговора)
  • Настройка службы для использования безопасности транспортного уровня

Хотя защита вашего сервиса с использованием безопасности на транспортном уровне защитит человека в промежуточном сценарии, он не защитит вас от скомпрометированного клиента. Таким образом, на самом деле это не надежное решение, и использование маркеров контекста безопасности с состоянием - лучший способ из двух. Это требует некоторых соображений при разработке и развертывании.

Как я уже говорил в моем предыдущем ответе, серебряных пуль для этого нет. Вот еще один вариант (который вы, возможно, уже рассмотрели) с использованием параметров detectReplays, maxClockSkew, replayWindow и replayCacheSize. Хотя я не уверен в его надежности в сценарии WebFarm, он должен работать с учетом базовой операции WCF. Вот краткая статья, которая демонстрирует это . Недостаток этой опции в том, что если у вас клиент в другом часовом поясе, отличном от сервера, вы получите сбои, если ваш maxClockSkew не настроен для учета различий в часовых поясах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...