Является ли аутентификация имени пользователя 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
Короче:
Дайджесты паролей используются для проверки того, что клиент знает правильный пароль. Пароль никогда не отправляется. Только хэш вычисляется.
Атаки воспроизведения предотвращаются использованием одноразового номера и временного окна. Сервер запоминает одноразовый номер для данного временного окна и гарантирует, что будет принято только одно сообщение с этим одноразовым номером. Подпишите все это, и вы в безопасности.
Да, это так, данные не будут зашифрованы по проводам, и, таким образом, учетные данные будут открыты для всех, кто хочет посмотреть.
Есть ли какая-то особая причина, по которой вы хотите так поступить? Я бы не рекомендовал это.