Фіксація сесії – це метод веб-атаки, при якому зловмисник обманом змушує користувача відкрити URL-адресу з визначеним ідентифікатором сесії. Такі атаки дозволяють зловмиснику захопити сесію користувача, щоб вкрасти конфіденційні дані, переказати кошти або отримати повний доступ до його облікового запису.

Як працює фіксація сесії?

Як і у випадку інших атак із захопленням сесії, метою фіксації сесії є отримання ідентифікатора сесії користувача. Однак, інші методи намагаються отримати ідентифікатор з браузера чи веб-трафіку користувача. Атака фіксації сесії ґрунтується на тому, щоб змусити користувача використовувати ідентифікатор, який вже відомий зловмиснику. Хоча існує багато способів зробити це, для атаки фіксації сесії зазвичай потрібно успішно виконати три операції:

  • Отримати дійсний ідентифікатор сесії для цільової програми
  • Обманути користувача при аутентифікації за допомогою цього заздалегідь визначеного ідентифікатора
  • Отримати доступ до програми, щоб видати себе за користувача

Методи фіксації сесії

У найпростішому сценарії, скажімо, вразлива програма приймає будь-який ідентифікатор сесії через параметр рядка запиту sid. Зловмисник може використати соціальну інженерію, щоб змусити користувача відвідати шкідливу URL-адресу, яка вже містить фіксований ідентифікатор, наприклад: http://banking.example.com/?sid=1234567890

Якщо користувач натисне посилання, можливо, у фішинг-листі чи публікації в соціальних мережах, і аутентифікується за допомогою програми, зловмисник зможе використовувати те саме посилання для доступу до облікового запису користувача.

Використання прихованого поля форми

Щоб уникнути надсилання ідентифікатора сесії безпосередньо в URL-адресу посилання, зловмисник може створити підроблену форму для входу з прихованим полем, що містить значення ідентифікатора. Назва цього поля буде відповідати очікуваному параметру ідентифікатора сесії, тому користувач, надіславши цю форму, увійде з фіксованим ідентифікатором. Як і раніше, це можливо лише в тому випадку, якщо програма отримує свій ідентифікатор сесії з запитів GET або POST.

Обхід проблеми з ідентифікаторами, що генеруються сервером

Ви можете подумати, що для запобігання фіксації буде досить тільки прийняття ідентифікаторів сесії, згенерованих сервером. Однак без додаткових запобіжних заходів зловмисники можуть легко обійти це обмеження. Зрештою, зловмисник може просто відвідати вразливий сервер як законний користувач, отримати ідентифікатор, згенерований сервером, а потім використовувати це значення для фіксації сесії користувача, як розказано раніше.

Встановлення cookie сесії за допомогою заголовка

Подібний ефект може бути досягнутий, якщо додаток вразливий для ін’єкції HTTP-заголовка. Змінюючи відповідь веб-сервера, зловмисник може ввести заголовок Set-Cookie, щоб вказати відоме значення файлу cookie сесії. Отримавши цю відповідь, браузер користувача встановить файл cookie сесії відповідно до інструкцій, зафіксувавши ідентифікатор.

Встановлення cookie сесії за допомогою метатегу

Параметр Set-Cookie також можна встановити за допомогою метатега HTML з атрибутом http-equiv = “Set-Cookie”. Ефект точно такий же, як при використанні заголовка, але з додатковим бонусом, що він працює навіть коли JavaScript відключений у браузері.

Використання між субдомених cookie

Якщо сервер дозволяє використання cookie з підстановочними знаками, які можуть бути задані субдоменом і бути застосованими до основного домену, зловмисник, який контролює attack.example.com, може встановити cookie сесії, які застосовуються до example.com. Обманом змусивши користувача відвідати спочатку attack.example.com для отримання фіксованого файлу cookie сесії, а потім example.com, зловмисник може захопити сесії користувача.

Зворотна фіксація сесії

Атаки фіксації сесії зазвичай припускають, що зловмисник видає себе за звичайного користувача, але всі методи фіксації можуть працювати і в зворотному напрямку. Якщо користувача можна обманом змусити використовувати обліковий запис зловмисника за допомогою фіксованого ідентифікатора, зловмисник може отримати доступ до історії транзакцій цього користувача для отримання конфіденційної інформації (в залежності від програми, додатку).

Запобігання атакам фіксації сесії

Хоча атаки з фіксацією сесії достатньо складні, за винятком самих тривіальних випадків, їх також складно повністю усунути. Тут важливо поводитись з ідентифікатором сесії як з дуже конфіденційними даними та поєднувати декілька заходів безпеки.

Ось неповний список поширених методів захисту фіксації сесії:

  • Використовуйте файли cookie, помічені як HttpOnly і Secure, для установки і зберігання ідентифікаторів сесії
  • Ніколи не використовуйте змінні GET або POST для передачі ідентифікаторів сесії
  • Приймайте тільки ідентифікатори, згенеровані сервером
  • Встановіть обмеження по часу для старих ідентифікаторів сесії
  • Створюйте новий ідентифікатор сесії для кожного запиту

Як і в разі інших атак з перехопленням сесії, вразливості веб-додатків, такі як міжсайтовий скриптинг (XSS), можуть надати зловмисникам можливість використовувати вразливості фіксації сесії. Наявність якісного сканера веб-вразливостей (наприклад, Netsparker) в вашому наборі інструментів безпеки є обов’язковим, так само як і його регулярне використання на всіх етапах розробки і операцій для забезпечення безпеки веб-додатків. Сучасні рішення більше не обмежуються пізнім етапом тестування, тому ви можете усувати проблеми безпеки як можна швидше і ефективніше ще до того, як вони вийдуть з розробки.