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

В конце прошлого года компания Valve, разработчик видеоигр и куратор Steam, раздала на соответствующие серверы новый код, устраняющий проблемы с шифрованием, обнаруженные Натаниелем Тейсом (Nathaniel Theis), известным также как XMPPwocky. В отчете, поданном в Valve, исследователь указал на уязвимости, позволившие ему провести MitM-атаку, атаку с повторным навязыванием сообщения (replay) и атаку с оракулом (padding oracle attack). Все эти бреши Тейс использовал в связке, чтобы удостовериться, что при адекватном количестве попыток можно добыть пользовательскую информацию на сервисе.

Некоторые недочеты шифрования, применяемого на Steam, Тейс недавно раскрыл в блоге на steamdb.info. Так, он обнаружил возможность просматривать данные, отправляемые посредством сообщений CMsgClientLogon. Эти сообщения помогают идентифицировать пользователей и содержат информацию о пользовательском аккаунте, в том числе account_name, пароль, login_key и sha_sentryfile — поле, необходимое для авторизации машины пользователя на платформе при включенной функции SteamGuard.

После пары попыток PoC-программе Тейса удалось раскрыть содержимое всех этих полей. С ее помощью исследователь смог воспроизвести простейший перехват пакетов пользователя (в его роли выступил тестовый аккаунт) на основе pcap при подключении клиента к Steam и расшифровать всю сессию посредством replay-атаки. Такие атаки предполагают повторное использование ранее переданного сообщения или его части в текущем сеансе протокола. Используя обе атаки, Тейс смог перехватить важное сообщение ChannelEncryptResponse, содержащее зашифрованный ключ сессии, и все последующие сообщения, отправляемые на Steam для расшифровки.

«Никаких MitM, просто возможность прослушки, — пишет исследователь. — Ограничений по времени тоже нет: если я зафиксировал старт соединения, у меня уже есть все, что нужно, а если соединение закроется, его можно просто восстановить. Я бы даже смог проводить параллельные атаки по всем серверам Steam, значительно ускорив процесс».

Еще один дефект, который исследователю удалось заставить работать на себя, присутствовал в библиотеке CryptoPP: по свидетельству Тейса, она проверяет не все биты заполнителя. В ответном письме Threatpost автор PoC признал, что CryptoPP в принципе надежна, но ее способ обработки паддинга несколько необычен, что немного затруднило атаку.

Исследователю в итоге удалось применить атаку с оракулом, добавляя блоки в конец шифротекста, отправляемого на сервер Steam. Производя расшифровку, сервер каждый раз сообщал, корректен паддинг или нет, что позволяло Тейсу по частям восстанавливать содержимое отдельных секретных идентификаторов. «Steam расшифровывает все подаваемые шифротексты, но не возвращает результат, — пояснил Тейс для Threatpost. — Дело в том, что его ответ зависит от корректности паддинга, по сути, от того, оканчивается ли расшифрованный текст одной из нескольких магических последовательностей».

Атаки типа padding oracle — это известный метод получения закрытой информации от устройств криптозащиты или из приложений, выполняющих операции шифрования. В данном случае оракулом Тейсу, по его признанию, послужил сам Steam, который расшифровывал все, что ему подавали.

Тейс, 19-летний учащийся колледжа, работал над PoC вместе со своим коллегой-хакером, использующим ник Zemnmez. Этот дуэт уже много где производил взломы, но особое пристрастие исследователи питают к Steam. По оценке Тейса, они уже обнаружили не менее 50 разных XSS-уязвимостей на сайте Steam; эти баги позволяют красть внутриигровые предметы и блоки, а также генерировать запросы. В благодарность за находки Valve занесла имена исследователей в Hall of Fame («Галерея славы»): Zemnmez числился в этом списке с 2013 по 2015 год, Тейс появился в нем в прошлом году.

Обнаружив уязвимость Steam к атакам padding oracle, исследователи сразу уведомили операторов игровой платформы, и проблема была частично решена в тот же день, 5 декабря. Столь же быстро был обновлен криптокод: 9 декабря было проведено бета-тестирование, а на следующий день состоялся выпуск. Одновременно Valve устранила еще один недостаток, облегчивший задачу Тейсу и Zemnmez: на Steam наконец был введен код подтверждения подлинности сообщений (MAC), позволяющий обнаружить атаку по модификации данных.

Тем не менее Тейс не совсем доволен итоговым решением. «Меня тревожит их MAC, он очень нестандартен, — поясняет свои сомнения исследователь. — Этот MAC фактически используется как часть независимой верификации, и до проверки MAC-кода сообщение все равно подвергается расшифровке. Они говорят, что очень строго следят за тем, чтобы не было слива информации о времени, и, наверное, на практике это должно работать нормально, но меня это все равно тревожит».

Команда Steam также заявила, что переписывает платформу с прицелом на TLS; переход на более криптостойкий протокол в данном случае был бы, вероятно, лучшим способом укрепить безопасность веб-сервиса. Тем не менее Тейс полагает, что даже при корректной привязке к серверу открытых ключей (key pinning) время в большинстве случаев все равно останется весьма расплывчатым понятием в мире Valve. Последняя, впрочем, никак не прокомментировала этот тезис.

На настоящий момент лучшей защитой от атак на Steam, по мнению Тейса, является SteamGuard, аутентификатор для мобильных устройств, обеспечивающий дополнительный уровень защиты. «Мобильный аутентификатор хорош тем, что блокирует поразительно широкий спектр возможных атак, — подчеркивает исследователь. — Единственной реальной проблемой является то, что он может подтверждать куплю-продажу на данном устройстве. Если кто-то заберется в ваш телефон, он сможет распродать все ваши предметы, и удача вас покинет».

Категории: Уязвимости