Предотвращение воспроизведения и использования файлов cookie несколькими клиентами - PullRequest
0 голосов
/ 25 августа 2018

Какова «лучшая практика» для предотвращения использования действительного файла cookie более чем одним клиентом одновременно в ASP.NET MVC?

В этом сценарии мы используем все приемы OWASP.

  • Строгий HSTS: HTTPS / SSL на каждой странице
  • Файлы cookie указаны как только HTTPS
  • Файлы cookie помечены как безопасные
  • Файлы cookie имеюткороткий срок действия
  • Существует также код для предотвращения подделки межсайтовых запросов (XSRF) от значений к странице.

Это все замечательно и мешает пользователям изменять значения, но это не мешает злоумышленнику украсть весь файл cookie и повторно использовать его в другом месте , пока онвсе еще действует («воспроизведение cookie» или «фиксация сеанса», в зависимости от того, кого вы спрашиваете).Насколько я могу судить, не существует стандартной конфигурации .NET или шаблона для предотвращения этого.

Например, пользователь A входит в систему, и его файл cookie аутентификации хорош для t минут.Вредоносное ПО на компьютере этого пользователя игнорирует настройку «только HTTP» / «Безопасный» в файле «cookie» и может извлечь фактически сохраненный файл «cookie», отправив его нашему злоумышленнику.После этого злоумышленник может использовать инструмент редактирования файлов cookie, чтобы добавить его в свой браузер и подключиться к сайту как пользователь A, пока не истечет срок действия файла cookie или пока пользователь A не выйдет из системы (аннулирует сеанс).

В идеале,Можно ли настроить .NET таким образом, чтобы сеанс был признан недействительным, если обнаружено, что файл cookie используется двумя клиентами одновременно?

Подобные проверенные элементы:

О, так, сообщество, мы знаем, как сильно вы любите «дубликаты».

Внешние исправления:

  • На этой странице предлагается установитьbool значение на стороне сервера, когда пользователь входит в систему. Неправильно - это будет препятствовать тому, чтобы злоумышленник использовал cookie-файл только после выхода предполагаемого пользователя.Это не делает ничего, чтобы не дать плохому актеру возиться в то же время, что и предполагаемый пользователь.
  • Эта страница в StackExchange использует тот же подход, устанавливая значение сеанса.Он сталкивается с той же проблемой.
  • Даже Часто упоминаемые исправления OWASP Top 10 от Troy Hunt помогают защитить файлы cookie, но не демонстрируют способ предотвратить одновременное использование действительного файла cookie..

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

В идеале, можно ли настроить .NET таким образом, чтобы сеанс был признан недействительным, если обнаружено, что cookie используется двумя клиентами одновременно?

Я не уверен, что вы знаете, насколько неоднозначен этот вопрос - в частности, это понятие "в то же время". Файлы cookie отправляются с запросом HTTP для каждого объекта. Если вы загружаете страницу, файл cookie отправляется вместе с запросом на эту страницу, со всеми ее таблицами стилей, всеми ее сценариями и всеми ее изображениями. Поэтому вы, безусловно, абсолютно уверены, что НЕ хотите, чтобы cookie-файлы использовались «одновременно».

Я думаю, что вы, возможно, заинтересованы в связывании cookie с конкретной конечной точкой клиента, например, видимый IP-адрес браузера. Ответ прост: вставьте IP-адрес в файл cookie. Предполагая, что вы сделали куки-файл защищенным от несанкционированного доступа, сервер просто должен проверить его в то же время, когда он проверяет cookie-файл.

Например, пользователь A входит в систему, и его файл cookie аутентификации работает в течение t минут. Вредоносное ПО на ПК этого пользователя ....

Полная остановка. На Земле нет механизма безопасности, который бы защищал от вредоносных программ на компьютере законного пользователя. Конечно, кроме защиты от вредоносных программ.

0 голосов
/ 25 августа 2018

если ваша цель состоит в том, чтобы

не дать злоумышленнику украсть весь файл cookie и использовать его в другом месте, пока он еще действителен

, тогда ответнет.выхода нет.

Объем информации, которую вы получаете по запросу http, в значительной степени следующий:

  1. IP-адрес пользователя
  2. Заголовки (cookie, пользовательский агент и т. Д.)
  3. Тело запроса
  4. IP-адрес назначения (IP-адрес вашего сервера)
  5. URL

С ограниченным количеством имеющейся информации вы действительно не сможетеразличать двух пользователей, использующих один и тот же файл cookie + браузер + IP.

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

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

Или вы можете сделать его немного более дружественным, сделав его обязательным только в том случае, если новый IP не совпадает с IP-адресом для входа.(не дружит с мобильными пользователями, так как их IP-адреса постоянно меняются)

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