Защищаем сессию с помощью одноразовых токенов

С массовым проникновением интернетов в дома граждан началась и массовая волна мошеннических действий других граждан. Один из видов обмана – перехват Cookie с целью завладеть аккаунтом пользователя. Если это аккаунт от социальной сети – невелика потеря (хотя для кого как), а вот если это аккаунт от Интернет-банкинга? Надо защищаться..

В ЧЕМ ПРОБЛЕМА

Куки (Cookie) используются в HTTP для аутентификации сессий, чтобы распознать конкретного юзера в общей массе. Однако куки не гарантируют совершенно никакой безопасности, потому что создавались не для этого и передаются по Сети в открытом виде. Кто угодно может взять чужие куки и залогиниться под чужим аккаунтом, даже не зная пароля. Существует масса простых утилит для перехвата чужих куки в открытых сетях, например в бесплатном Wi-Fi-хот-споте (взять хотя бы Firesheep и DroidSheep).

Веб-разработчики знают о проблеме, но ничего не могут поделать. Они привыкли полагаться на общую защиту всего трафика через HTTPS, но это не спасает жертву. Есть куча мест, где куки все равно лежат в открытом виде: на сайтах почти всегда найдутся дыры из-за ошибок в конфигурации, куки можно извлечь из браузера с помощью XSS, XST и других трюков, да и сам HTTPS не такой уж непробиваемый.

В общем, по своей природе куки исключительно слабо защищены, тут уж ничего не поделаешь. У одного панамского хакера по имени Итало Дакоста возникла идея: а что, если использовать вместо куки одноразовые токены? Так и родился проект One Time Cookies, ОТС (www.cc.gatech.edu/~idacosta/otc/index.html). В отличие от куки, ОТС изначально придумывались с прицелом на безопасность.

КАК ЭТО РАБОТАЕТ

Идея в том, что клиент сам генерирует уникальный токен с каждым HTTPS-запросом, генерируя хеши НМАС (Hash-based Message Authentication Code) на основании ключа сессии, полученного от сервера. Таким образом, перехват токена (от клиента к серверу) в открытой сети ничего не дает злоумышленнику, потому что токен одноразовый и действует ровно один запрос.

Чтобы подменить сессию, злоумышленник должен сгенерировать свой собственный хеш НМАС и создать свой собственный токен для конкретного запроса. Но он не может этого сделать, потому что не получил от сервера ключ сессии и другую информацию, необходимую для генерации НМАС.

Теоретически злоумышленник может сгенерировать токен только в том случае, если получит доступ к компьютеру жертвы и извлечет информацию, полученную с сервера сразу после авторизации (ввода имени пользователя и пароля на сервере). Однако компоненты ОТС хранятся на клиентской машине в защищенном месте, отдельно от других компонентов браузера, так что большинство обычных методов атаки на браузер тут не сработает. По крайней мере, они защищены гораздо лучше, чем куки.

ОТС могут использоваться параллельно с куки для аутентификации сессий и представляют собой фактически дополнительный уровень безопасности вдобавок к HTTPS.

КАК ИСПОЛЬЗОВАТЬ

Чтобы включить протокол ОТС, его нужно установить и на сервере, и у клиента. Для серверной части есть плагин к WordPress (www.cc.gatech.edu/-idacosta/otc/otc_wp_plugin.zip), а для клиента —расширение к браузеру Firefox (www.cc.gatech.edu/-idacosta/otc/otc.xpi).

Ставим и то, и другое —и все сразу начинает работать, в чем можно убедиться, если посмотреть на пакеты в сниффере Wireshark или расширении Live HTTP Headers для Firefox.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

тринадцать + 1 =