Хакеры нашли способ подбора PIN-кодов к кошелькам Google Wallet, которые используются для платежей по беспроводной связи малого радиуса действия (стандарт NFC, основан на RFID). Оказывается, подбирать PIN-код можно методом брутфорса без обращения к серверу Google благодаря выявленной уязвимости в архитектуре этого приложения.

А началось всё в декабре 2011 года, когда был проведён анализ Google Wallet компанией viaForensics. Уже тогда стало ясно, что это приложение не идеально и с ним явно будут проблемы. Так оно и вышло.

Google Wallet хранит всю информацию во внутренней базе данных sqlite3. Специалист по безопасности Джошуа Рубин решил посмотреть на эту базу внимательнее и проверить выводы, сделанные viaForensics. Он сразу же определил, что насчёт слабой защиты они не ошиблись, но при этом Джошуа обнаружил ещё кое-что интересное. В базе данных он обратил внимание на таблицу со странным названием metadata. Её назвали так специально, чтобы отвести от столь ценной таблицы внимание потенциальных злоумышленников, глупый подход, который лишь указывает на отсутствие реальной защиты. Итак, а таблице было всего три строки, но в каждой из них — большой блоб бинарных данных.

Один ряд называется gmad_bytes_are_fun и является чем-то вроде зашифрованной файловой системы для хранения данных. Содержимое бинарных данных в этой строке явно предполагает, что там находится вся информация о кредитной карте, и её явно хорошо бы изучить подробнее, пишет Джошуа Рубин, но в данный момент его интересовало другое.

Другая строка называется deviceInfo и для понимания этих данных нужно было понять, чем они обработаны. После нескольких попыток выяснилось, что данные скомпилированы с помощью гугловского протокола Protocol Buffers. Это открытая библиотека для унификации данных в сообщениях между системами. Чтобы прочитать эти данные, нужно указать правильный message format в файле .proto (Protocol Buffer Basics: Java). Сделав подходящий .proto, Джошуа сумел прочитать бинарные данные и был шокирован увиденным. Там были Unique User IDs (UUID), информация об аккаунтах Google (GAIA) и Cloud to Device Messaging (C2DM, пуш-уведомления), статус Google Wallet Setup, параметр "TSA" (видимо, Trusted Services), статус SE и самое главное — данные "Card Production Lifecycle" (CPLC) и PIN-код.

Хэш пин-кода хранится в зашифрованном виде в SHA256. Однако, зная длину PIN-кода (четыре цифры), достаточно попробовать максимум 10 тыс. хэшей SHA256, так что криптографическая защита здесь вовсе не является проблемой. PIN-код побирается менее чем за секунду даже на смартфоне.

Таким образом, подобрать код можно без обращения к серверу, на котором стоит ограничение в пять неправильных попыток. Поскольку PIN-код легко подбирается на телефоне, смысл этого ограничения на сервере полностью теряется, как и смысл всей системы безопасности Google Wallet.

На видео Джошуа демонстрирует, насколько быстро его программа Wallet Cracker подбирает пароль.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии