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