Идентификатор сеанса не обновлен в веб-приложении 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), что еще мне нужно сделать, чтобы сделать приложение более безопасным?


person Emkay    schedule 13.12.2013    source источник


Ответы (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 просит вас исправить.

person Paritosh    schedule 13.12.2013
comment
Паритош благодарит за ответ. Да, я использую проверку подлинности с помощью форм. Это имеет смысл, если appscan жалуется на удаление cookie сеанса после выхода из системы, позвольте мне попробовать ваше предложение. Но как мы справимся, если он жалуется на возможный захват сеанса, когда он активен? это реально возможно? - person Emkay; 14.12.2013

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

Существует ряд альтернатив использованию AntiForgeryTokens, хранящихся в сеансе как часть шаблона токена синхронизатора. Одним из способов завоевать популярность является шаблон зашифрованных токенов, реализованный фреймворк под названием ARMOR. Предпосылка здесь заключается в том, что вам не нужны ни сеанс, ни файлы cookie, чтобы поддерживать защиту CSRF. Сертификаты SSL не повлияют на него.

person Paul Mooney    schedule 18.12.2013