Фиксация сессии (Session Fixation) является методом нападения, который принудительно устанавливает идентификатор сессии (session ID) в определенное значение. В зависимости от функциональности сайта-мишени, чтобы «зафиксировать» идентификатор сессии может быть применено множество методов. Разнообразие этих методов — от применения Межсайтового программирования до забрасывания веб-сайта предварительно сформированными HTTP-запросами. Затем идентификатор пользовательской сессии фиксируется и злоумышленник ожидает тех, кто будет входить в систему. Как только пользователь сделает это, злоумышленник использует предопределенное значение идентификатора сессии, чтобы получить его онлайн идентификацию со всеми вытекающими последствиями.
В зависимости от того, как формируются значения идентификаторов, существует два типа систем управления сессиями. Первый тип систем является «свободным», который позволяет веб-браузерам указывать любой идентификатор. Второй тип систем является «строгим», который принимает только значения, сформированные на сервере. В свободных системах, произвольный идентификатор сессии обрабатывается вообще без обращения к веб-сайту. Строгие системы требуют от злоумышленника обслуживания «сессии-ловушки», с периодическим обращением к веб-сайты для предотвращения таймаутов по неактивности.
Без активной защиты от фиксации сессии, атака может быть предпринята против любого веб-сайта использующего сессии для идентификации подлинности пользователей. Веб-сайты использующие идентификаторы сессий обычно применяют ключики (Cookie), также применяются URL и скрытые поля форм. К сожалению, сессии основанные на ключиках проще для нападений. Большинство, на настоящий момент выявленных методов атак, направлены на фиксацию именно ключиков.
В отличие от похищения идентификаторов сессий пользователей, выполняемых после их входа на веб-сайт, фиксация сессии предоставляет значительно более широкие возможности для нападения. Активная часть нападения делается до входа пользователей в систему.
Пример
Обычно атака фиксация сессии состоит из трех действий
- 1) Установка сессии
- Злоумышленник устанавливает «сессию-ловушку» на сайт-мишень и получает этот идентификатор сессии. Или, злоумышленник для нападения может выбрать случайный идентификатор сессии. Но в этом случае, значение установленное сессией ловушкой должно поддерживаться (чтобы «быть живым») с повторными соединениями с веб-сайтом.
- 2) Фиксация сессии
- Злоумышленник помещает значение сессии ловушки в браузер пользователя и фиксирует идентификатор пользовательской сессии.
- 3) Вхождение сессии
- Злоумышленник ожидает пока пользователь не войдет в систему сайта-мишени. Как только пользователь делает это, значение фиксированного идентификатора сессии будет использовано и злоумышленник может «вступить во владение».
- Выдача ключика, используя клиентский скрипт
- Выдача нового значения идентификатора сессии в ключике, используя клиентский скрипт Межсайтовое Программирование в слабых местах в системе защиты на любом поддомене веб-сайта может быть использовано для изменения текущего значения ключика.
Фрагмент кода:http://example/<script>document.cookie=»sessionid=1234;%20domain=.example.dom»;</script>.idc
- Выдача ключика, используя META тег
- Этот метод проще предыдущего, но так же эффективен, особенно когда блокиратор Межсайтового Программирования предотвращает инъекцию тегов HTML скриптов, но не META тегов.
Фрагмент кода:http://example/<meta%20http-equiv=Set-Cookie%20content=»sessionid=1234;%20domain=.example.dom»>.idc
- Выдача ключика, используя HTTP-заголовок ответа
- Злоумышленник вызывает или на целевом веб-сайте, или на любом из его поддоменах, выдачу ключика с идентификатором сессии. Это может быть выполнено разными путями:
- взлом веб сервера в домене (например, плохо поддерживаемый WAP сервер)
- заражение пользовательского DNS сервера, практически добавив веб-сервер злоумышленника в атакуемый домен
- установка злонамеренного веб-сервера в атакуемый домен (например, на рабочей станции в Windows2000 домен, все рабочие станции также находятся в DNS домене)
- использование атаки разбиение HTTP-ответа
Длительная атака Фиксации Сессии может быть выполнена, выдачей постоянных ключиков (например, со временем жизни 10 лет), которые будут держать фиксацию сессии даже после перезагрузки пользователем компьютера.
Фрагмент кода:http://example/<script>document.cookie=»sessionid=1234;%20Expires=Friday,%201-Jan2017%2000:00:00%20GMT»;</script>.idc