Я только что прочитал в сети о недавно обнаруженной уязвимости безопасности в ASP.NET. Здесь вы можете прочитать подробности.
Проблема заключается в том, что ASP.NET реализует шифрование AES алгоритм для защиты целостности куки файлы этих приложений генерировать для хранения информации во время сеансов пользователя.
Это немного расплывчато, но вот более пугающая часть:
Первый этап атаки требует несколько тысяч запросов, но как только успешно, и злоумышленник получает секретные ключи, он полностью скрыт. требуется криптографическое знание очень простой.
В целом, я недостаточно осведомлен о безопасности/криптографии, чтобы узнать, действительно ли это серьезно.
Итак, должны ли все разработчики ASP.NET опасаться этой техники, которая может владеть любым сайтом ASP.NET за несколько секунд или что?
Как эта проблема влияет на среднего разработчика ASP.NET? Это влияет на нас вообще? Каковы последствия этой уязвимости в реальной жизни? И, наконец: есть ли какое-то обходное решение, которое предотвращает эту уязвимость?
Спасибо за ваши ответы!
EDIT: позвольте мне обобщить полученные ответы
Итак, это в основном атака типа "padding oracle". @Sri предоставил отличное объяснение того, что означает этот тип атаки. Вот шокирующее видео о проблеме!
О серьезности этой уязвимости: Да, это действительно серьезно. Он позволяет злоумышленнику узнать машинный ключ приложения. Таким образом, он может сделать несколько очень нежелательных вещей.
- В задании ключа машины приложения злоумышленник может дешифровать файлы cookie аутентификации.
- Даже хуже того, он может генерировать файлы cookie аутентификации с именем любого пользователя. Таким образом, он может появиться как любой на сайте. Приложение не может провести различие между вами или хакером, который создал файл cookie аутентификации с вашим именем для себя.
- Он также позволяет расшифровывать (а также генерировать) файлы cookie сеанса, хотя это не так опасно, как предыдущий.
- Не так серьезно: он может расшифровать зашифрованное ViewState страниц. (Если вы используете ViewState для хранения конфиденциальных данных, вы не должны этого делать!)
- Довольно неожиданно: зная машинный ключ, злоумышленник может загрузить любой произвольный файл из вашего веб-приложения, даже те, которые обычно не могут быть загружены! (Включая Web.Config и т.д.)
Вот куча хороших практик, которые я получил, чтобы не решить проблему, но помочь улучшить общую безопасность веб-приложения.
- Вы можете шифровать конфиденциальные данные с защищенной конфигурацией
- Использовать только файлы cookie HTTP
- Предотвращение DoS-атак
Теперь давайте сосредоточимся на этой проблеме.
- Скотт Гатри опубликовал запись об этом в своем блоге
- Сообщение об уязвимости в блоге ScottGu FAQ
- Обновление ScottGu об уязвимости
- У Microsoft есть рекомендации по безопасности
- Понимание уязвимости
- Дополнительная информация об уязвимости
Решение
- Включить customErrors и создать единую страницу с ошибкой, для которой перенаправляются все ошибки. Да, даже 404s. (ScottGu сказал, что дифференциация между 404 и 500 имеет важное значение для этой атаки.) Кроме того, в ваш
Application_Error
илиError.aspx
поместите некоторый код, который делает случайную задержку. (Создайте случайное число и используйте Thread.Sleep, чтобы спать так долго.) Это позволит злоумышленнику решить, что именно произошло на вашем сервере. - Некоторые люди рекомендуют переключиться на 3DES. Теоретически, если вы не используете AES, вы не сталкиваетесь с уязвимостью безопасности в реализации AES. Как оказалось, это не рекомендуется вообще.
Некоторые другие мысли
Спасибо всем, кто ответил на мой вопрос. Я много узнал о не только этой проблеме, но и о безопасности в Интернете в целом. Я отметил @Mikael ответ, как принято, но другие ответы также очень полезны.