Является ли аутентификация имени пользователя WCF без безопасности транспорта угрозой безопасности?

Я пытаюсь использовать защиту имени пользователя в WCF. Я пытаюсь выяснить, представляет ли использование транспортных учетных данных типа None/Anonymous определенную угрозу безопасности.

Меня беспокоит начальный обмен, при котором двоичные данные передаются по туннелю с использованием спецификации доверия WS (согласование TLS). Будет ли эта попытка аутентификации моего имени пользователя и пароля восприимчива к снифферам сети до того, как будет установлен общий контекст безопасности?

Любые мысли приветствуются.

Благодарю.

<security mode="Message">
   <transport clientCredentialType="None" />
   <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true" />
</security>

3 ответа

Решение

Согласно спецификации WS-Security токен UserName может содержать как незашифрованное имя пользователя, так и пароль. Это позволит увидеть эту информацию по незашифрованному проводу в открытом виде. Бинарное форматирование не является сдерживающим фактором. Обычно это называется "безопасность по неизвестности", а не как мера безопасности вообще.

По совпадению, я столкнулся с большой частью этой информации, читая статью Скотта Хансельмана некоторое время назад. Это намекает на проблемы, с которыми вы столкнулись. http://www.hanselman.com/blog/BreakingAllTheRulesWithWCF.aspx

Вы определенно захотите включить некоторую безопасность на транспортном уровне, если намерены включить эту функцию.

Вот документы OASIS по WS-Security UsernameToken. Похоже, что допускается несколько сценариев, но я не уверен, какой сценарий использует WCF по умолчанию: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf

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

Сделал еще несколько исследований здесь. По сути, нет никакого риска, что пароль будет раскрыт кем-то, кто прослушивает сеть, если вы используете пароли (по умолчанию). Безопасность транспорта не требуется, если вы не беспокоитесь о конфиденциальности самого тела сообщения.

Это объясняется здесь: http://msdn.microsoft.com/en-us/library/ms977327.aspx

Короче:

  1. Дайджесты паролей используются для проверки того, что клиент знает правильный пароль. Пароль никогда не отправляется. Только хэш вычисляется.

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

Да, это так, данные не будут зашифрованы по проводам, и, таким образом, учетные данные будут открыты для всех, кто хочет посмотреть.

Есть ли какая-то особая причина, по которой вы хотите так поступить? Я бы не рекомендовал это.

Другие вопросы по тегам