Билет вместо паспорта
После входа на сайт сервер не просит пароль при каждом клике. Он выдаёт браузеру идентификатор сессии или токен, который хранится в cookie, и по нему узнаёт вас при следующих запросах. Это можно сравнить с билетом на мероприятие: паспорт показали один раз, дальше проверяют билет.
Перехват сессии, session hijacking, это кража такого билета. Владелец токена признаётся сервером как вошедший пользователь, поэтому пароль ему не нужен, а иногда не помогает и второй фактор, ведь тот уже был пройден при создании сессии. Что такое сессии и токены в общем виде рассказано на отдельной странице, здесь разбираем именно способы кражи.
Как токен попадает к злоумышленнику
Первый путь это перехват в сети. Если соединение не шифруется или шифруется плохо, cookie можно прочитать по дороге, что раньше было массовой проблемой открытых сетей Wi-Fi. Современное шифрование сайтов и флаг Secure у cookie значительно сократили этот риск.
Второй путь это XSS: вредоносный скрипт на странице читает cookie и отправляет их наружу. От этого защищает флаг HttpOnly, запрещающий скриптам доступ к cookie. Третий путь это заражение устройства: программы-стилеры вытаскивают сохранённые cookie и токены из профиля браузера. Четвёртый это фиксация сессии, когда атакующий заранее подсовывает жертве известный ему идентификатор, а после входа использует его сам.
Почему второй фактор не всегда спасает
Многофакторная проверка выполняется при входе. Дальше сервер доверяет сессии, и если украденный токен ещё действителен, злоумышленник просто пользуется им, воспроизводя запросы. Поэтому вредоносные программы, забирающие cookie, столь ценны для тех, кто торгует доступами: они дают уже подтверждённую сессию.
Защитой служит ограничение срока жизни и привязка токена к контексту: устройству, свойствам браузера, иногда адресу. Сервис может завершить сессию при подозрительных изменениях и потребовать повторный вход. Для действий с повышенным риском, вроде смены пароля или платежа, сайты часто запрашивают подтверждение заново.
Меры для пользователя
Есть несколько практичных привычек. Выходите из аккаунтов на чужих и общих компьютерах, не оставляйте вход «запомнить меня» на устройствах, которыми пользуются другие. Периодически просматривайте список активных сессий в настройках безопасности сервиса и завершайте незнакомые, а после подозрения на заражение завершайте все.
Держите систему и браузер обновлёнными, устанавливайте расширения только из надёжных источников: вредоносное расширение способно читать страницы и данные. Скачивайте программы из проверенных мест, потому что стилеры чаще всего приходят вместе с поддельными установщиками.
Меры для тех, кто делает сайты
Разработчики защищают сессию набором приёмов. Cookie выставляют с флагами Secure, HttpOnly и атрибутом SameSite. Идентификатор при входе создают заново, чтобы исключить фиксацию. Сессии сокращают по времени, привязывают к признакам клиента, на сервере хранят возможность отозвать досрочно.
Весь трафик должен идти по HTTPS, а заголовок HSTS запрещает возвращаться к незащищённому соединению. Кроме того, чувствительные операции защищают повторной проверкой, а не одним лишь предъявлением токена.
Как это выглядит в журналах и уведомлениях
Сервисы показывают признаки подозрительного использования сессии в нескольких местах. В списке активных устройств появляются незнакомые модели и места входа. Приходят письма о входе с нового браузера, хотя вы пароль не вводили. Иногда сессия внезапно завершается, если сервер обнаружил несоответствие признаков клиента.
Обращайте внимание на пометки со страной и временем последней активности: если сессия числится активной в то время, когда устройство было выключено, её нужно завершить. После завершения смените пароль и проверьте, не изменились ли способы восстановления и правила пересылки. Если причиной было заражение устройства, смена пароля с того же компьютера не поможет, сначала очистите систему.
Не забывайте и про мобильные приложения: они тоже хранят токены сессий, и если телефон потерян, стоит завершить активные входы удалённо через веб-версию сервиса. Это отзывает выданные токены, даже если устройство окажется у другого человека.