Идентификатор сеанса не обновляется в веб-приложении Asp.NET
Недавно у нас было сканирование безопасности (IBM AppScan) в одном из наших приложений ASP.NET, где сообщалось о средней уязвимости следующим образом
Идентификатор сеанса не обновлен
Степень тяжести: средняя
Риск. Можно украсть или манипулировать сеансом клиента и файлами cookie, которые могут использоваться для олицетворения законного пользователя, позволяя хакеру просматривать или изменять записи пользователя и выполнять транзакции от имени этого пользователя.
Причины: Небезопасное программирование или настройка веб-приложения.
И предлагаемое исправление инструментом для ASP.NET
Для платформ, таких как ASP, которые не генерируют новые значения для файлов cookie сеанса, используйте дополнительный файл cookie. При таком подходе установите вторичный файл cookie в браузере пользователя на случайное значение и установите переменную сеанса на то же значение. Если переменная сеанса и значение cookie не совпадают, аннулируйте сеанс и вынудите пользователя снова войти в систему.
У нас есть SSL-сертификаты, установленные для нашего приложения, и мы убедились, что все файлы cookie (сеанс, аутентификация и AntiForgeryToken) защищены (RequireSSL="True")-HttpOnly, а также реализована Рекомендация Microsoft по снижению уязвимости CSRF, как указано в Microsoft CSRF Fix.
Мой вопрос здесь заключается в том, что даже с SSL-сертификатами и трафиком закончен Https, все еще возможно захватить сеанс? и так как я уже использую вторичный cookie-файл Secure-Httponly (AntiForgeryToken), что еще мне нужно сделать, чтобы сделать приложение более безопасным?
2 ответа
Не уверен, что вы используете Аутентификацию формы, но вы можете попробовать сделать следующее, когда пользователь выходит из системы:
Session.Abandon();
// in case a attacker has forced a cookie with a future expiration date, expire that cookie as well
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddYears(-30);
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
это заставит новое значение идентификатора cookie, когда они пытаются попасть на сайт после выхода из системы. чтобы увидеть, как это работает, вы можете использовать Google Chrome, открыть свое приложение и нажать F12, чтобы вызвать инструменты разработчика. Посмотрите на вкладке Ресурсы есть элемент Cookie, под которым вы должны увидеть cookie своего сайта. Проверьте значение при входе в систему и переходите по сайту, после выхода из вышеприведенного кода вы должны изменить идентификатор. в противном случае, даже после выхода из системы он останется прежним, что, как звучит в appscan, просит вас исправить.
В целом, лучше избегать использования переменных Session в приложениях ASP.NET по ряду причин, не в первую очередь для поддержания баланса между серверами с балансировкой нагрузки.
Существует несколько альтернатив использованию AntiForgeryTokens, хранящихся в сеансе как часть шаблона токена Synchronizer. Одним из методов, набирающих популярность, является Шаблон зашифрованного токена, реализованный платформой под названием ARMOR. Предполагается, что вам не нужны ни Session, ни cookie-файлы для обеспечения защиты CSRF. На него не будут влиять сертификаты SSL.