3.6 Testing for Logout Functionality
Суть вразливості:
Завершення сеансу – важлива частина життєвого циклу сеансу. Приводячи до мінімуму життя сеансу токена, знижують ймовірність успішної атаки з перехопленням сеансу. Це можна розглядати як метод захисту проти запобігання таким атакам, як міжсайтові сценарії та підробка міжсайтових запитів. Відсутність безпечного завершення сеансу лише збільшує ризик успішної атаки.
Для безпечного завершення сеансу необхідні щонайменше такі компоненти:
- Доступність елементів управління в інтерфейсі користувача, що дозволяють користувачеві вручну вийти з системи.
- Завершення сеансу після заданого часу бездіяльності (тайм-аут сеансу).
- Правильне анулювання сеансу за сервера.
Є кілька проблем, які можуть стати на заваді ефективному завершенню сеансу. Для ідеального безпечного застосування, користувач повинен мати можливість завершити роботу в будь-який час через інтерфейс користувача. На кожній сторінці повинна бути кнопка виходу із системи, і повинна розміщуватися так, щоб її бачив користувач.
Ще одна поширена помилка при завершенні сеансу полягає в тому, що для токена сеансу на стороні клієнта встановлено нове значення, тоді як стан на стороні сервера залишається активним, і його можна використовувати повторно, встановивши для файлу cookie сеансу попереднє значення.
Деякі платформи веб-додатків покладаються виключно на cookie сеансу для ідентифікації користувача, що увійшов до системи. ID користувача вбудовано (зашифроване) значення cookie. Сервер програм не відстежує на стороні сервера сеанс. При виході файлу cookie сеансу видаляється з браузера. Однак, оскільки додаток не роблять відстеження, то він не знає, відключений сеанс чи ні. Таким чином, повторно використовуючи файл cookie сеансу, можна отримати доступ до автентифікованого сеансу. Добре відомим прикладом цього є функція автентифікації за допомогою форм в ASP.NET.
Користувачі веб-браузерів часто не звертають уваги на те, що програма все ще відкрита, і просто закривають браузер або вкладку. Мережевий додаток повинен знати про цю поведінку та автоматично завершувати сеанс на стороні сервера після певного часу.
Використання системи єдиного входу (SSO) замість схеми аутентифікації додатку часто викликає співіснування кількох сеансів, які мають завершуватися окремо. Наприклад, припинення дії сеансу конкретної програми не завершує сеанс у системі SSO. SSO дають користувачеві можливість знову увійти до додатку, в якому вихід був виконаний безпосередньо перед цим.
Як протестувати
Тестування інтерфейсу користувача виходу з системи Перевірте зовнішній вигляд і видимість функції виходу з інтерфейсу користувача. Для цього перегляньте кожну сторінку з точки зору користувача, який має намір вийти з веб-програми.
Є кілька властивостей, які вказують на хороший інтерфейс для виходу з системи:
- Кнопка виходу є на всіх сторінках веб-програми.
- Кнопка виходу має бути швидко побачена користувачем, який хоче вийти з веб-програми.
- Після завантаження сторінки, кнопка виходу має бути видно без прокручування.
- В ідеалі, кнопка виходу з системи розміщується в області сторінки, яка фіксується у вікні перегляду браузера, а не повинна залежати від прокручування контенту на сторінці.
Тестування завершення сеансу на стороні сервера
Спочатку збережіть файли cookie, які використовуються для ідентифікації сеансу. Викличте функцію виходу із системи. Спробуйте перейти на сторінку, яка відображається лише в автентифікованому сеансі, наприклад, за допомогою кнопки повернення назад у браузері. Якщо відображається кешована версія сторінки, натисніть кнопку перезавантаження, щоб оновити сторінку з сервера. Якщо функція виходу призводить до встановлення файлів cookie сеансу на нове значення, відновіть старе значення файлів cookie сеансу та перезавантажте сторінку з автентифікованої області програми. Якщо цей тест не виявляє жодних уразливостей на певній сторінці, спробуйте принаймні ще кілька сторінок програми, які вважають критично важливими для безпеки, щоб гарантувати, що завершення сеансу правильно розпізнається цими областями.
Ніякі дані, які мають бути помічені лише автентифікованим користувачам, не повинні бути помітні на перевірених сторінках. В ідеалі програма має перенаправляти на форму входу після завершення сеансу. Це не обов'язково для безпеки програми, але встановлення файлів cookie сеансу на нові значення після виходу із системи зазвичай вважається гарною практикою.
Тестування тайм-ауту сеансу
Спробуйте визначити тайм-аут сеансу, виконуючи запити до сторінки в автентифікованій області веб-програми з наростаючими затримками.
Правильне значення тайм-ауту сеансу залежить від мети програми та має становити безпеку та зручність використання. У банківських додатках немає сенсу тримати активну сесію більше 15 хвилин. З іншого боку, короткий тайм-аут у вікі чи форумі може дратувати користувачів, які друкують довгі статті. У цьому випадку можуть бути допустимі таймати від години і більше.
Тестування завершення сеансу в середовищі єдиного входу (Single Sign-Off)
Виконайте вихід із програми, що тестується. Переконайтеся, що існує центральний портал або каталог програм, який дозволяє користувачу зайти повторно до програми без автентифікації. Перевірте, чи запитує програма у користувача автентифікацію. Під час входу в програму виконайте вихід із системи єдиного входу. Потім спробуйте отримати доступ до автентифікованої області програми, що тестується.
Очікується, що виклик функції виходу з системи веб-програми, підключеної до системи SSO, має викликати завершення всіх сесій. Потрібно вимагати автентифікації користувача для отримання доступу до програми після виходу з системи SSO підключеного до програми.