Анализ уязвимости WASM расширения браузера - Постмортем

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

Уязвимость

В ноябре 2022 года была обнаружена уязвимость в модуле WebAssembly (WASM), расположенном в открытом исходном коде репозитория кошелька, которая затрагивала новые кошельки, созданные версиями 0.0.172 и 0.0.182 Браузерного расширения. Подвержены уязвимости только приватные ключи созданных в этих версиях кошельков. После устранения уязвимости 22 ноября 2022 года все другие версии Браузерного расширения, включая существующую версию, являются безопасными для использования. Импортированные и мобильные кошельки не затронуты данной проблемой.

Используемая в затронутых версиях WASM версия использовала MT19937, псевдослучайный генератор чисел Mersenne Twister с размером состояния в 19937 битов для создания мнемоник. Этот генератор требует одно 32-битное начальное значение для начала процесса генерации. Однако, из-за ограниченного размера зерна, версия WASM могла создать только примерно 4 миллиарда возможных мнемоник. Кроме того, поскольку MT19937 основан на линейном рекурсивном методе, полученная псевдослучайная последовательность не является достаточно безопасной для криптографических целей. Длинная подпоследовательность выходных чисел могла быть использована для предсказания последующих выходных значений, что представляет угрозу безопасности.

Обратите внимание, что эта проблема еще не зарегистрирована как общеизвестная уязвимость и не включена в Common Vulnerabilities and Exposures (CVE). Однако другая команда обнаружила аналогичную проблему в библиотеке криптосистемы Intel Paillier, которую можно найти здесь: Insecure PRNG in key generation · Issue #2 · intel/pailliercryptolib · GitHub.

Проблема заключается в том, что псевдослучайный генератор чисел MT19937 не обеспечивает достаточного уровня случайности. Когда этот генератор использовался для создания приватных ключей, умелый человек (возможно, злоумышленник) мог мониторить достаточное количество итераций, чтобы предсказать будущие итерации. Если этот человек знает, что конкретный адрес кошелька был создан с использованием MT19937, он может получить доступ к приватному ключу кошелька, связанному с определенным публичным адресом, используя средние или высокие вычислительные мощности. В качестве альтернативы злоумышленник может создать массивную базу данных, содержащую все возможные 2^32 выводы, сгенерированные MT19937, и, произведя обратную разработку, сопоставить приватные ключи с большим набором уязвимых адресов по разным цепочкам.

В процессе анализа последствий мы выявили еще несколько адресов кошельков (менее 100), созданных с той же проблемой MT19937. Некоторые из этих кошельков были созданы несколько лет назад, и большинство из них не использовались.

Ответ Trust Wallet на уязвимость

Код, который вызвал уязвимость, был незамедлительно исправлен в течение одного дня после проверки вознаграждения за нахождение ошибок. Это гарантировало, что любые адреса кошельков, созданные после исправления, не были уязвимы для этой уязвимости. Однако уязвимость существовала в адресах, созданных между версией 0.0.172 и версией 0.0.182. Команда разработчиков Trust Wallet не могла устранить уязвимость для кошельков, созданных с использованием уязвимых версий без участия владельцев затронутых адресов. Для того, чтобы быть защищенными от уязвимости, пользователи должны перенести свои активы с затронутых адресов кошельков на новые, не затронутые адреса кошельков. Для ясности, эту операцию должны выполнить сами владельцы адресов кошельков. В этих обстоятельствах мы предприняли все возможные меры, чтобы сообщить пользователям и помочь им снизить риск потенциальных атак.

Команда Trust Wallet усердно работала над обеспечением безопасности активов на затронутых адресах кошельков наших пользователей. Чтобы достичь максимального количества затронутых пользователей, мы использовали все доступные способы, чтобы уведомить их и побудить к переносу своих активов с затронутых адресов кошельков. Мы использовали многоуровневую стратегию уведомления, которая включала предупреждения в приложении каждую минуту и мобильные push-уведомления.

Затронутые пользователи увидели сообщение предупреждения на своем браузерном расширении, в котором мы предоставили ясные инструкции о том, как перенести свои активы на некустодиальный кошелек или централизованную биржу. Кроме того, чтобы убедить наших пользователей в том, что баннер предупреждения не является мошенничеством, была опубликована заметка в блоге Trust Wallet обзора безопасности 3 7 декабря 2022 года, где “баннер предупреждения расширения” был проиллюстрирован как официальное и законное предупреждение от Trust Wallet.

Кроме того, когда мы обнаружили, что финансирование кошельков поступает из Binance на основе общедоступных данных на блокчейне, мы связались с Binance, чтобы помочь уведомить пользователей, сохраняя их конфиденциальность. Важно отметить, что мы серьезно относимся к защите конфиденциальности наших пользователей. Никакая личная информация никогда не была обменена между Binance и Trust Wallet, и мы ценим помощь службы поддержки клиентов Binance в достижении задачи по уведомлению затронутых пользователей.

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

Мы также предоставили помощь пострадавшим от этой уязвимости клиентам, предоставив поддержку клиентов и возместив им их газовые сборы. На сегодняшний день мы возместили около ~23,6 BNB в газовых сборах нескольким пользователям, которые перевели свои активы в безопасное место.

С нашими многочисленными уведомлениями за последние пять месяцев большая часть активов, находившихся в затронутых кошельках, была перемещена пользователями в безопасные места.

Хотя настоящее время имеет некоторые риски для раскрытия этой информации, большинство средств было переведено и защищено пользователями за последние несколько месяцев. Следовательно, операционные издержки для злоумышленника, желающего воспользоваться уязвимостью, выросли по сравнению с потенциальными выгодами от оставшихся затронутых кошельков. В настоящее время эти кошельки содержат около 88 300 долларов США на ~500 затронутых кошельках с балансом выше 10 долларов США в токенах. Кроме того, уязвимость теперь явно выявлена и устранена.

Процесс возмещения

Несмотря на все наши усилия, произошло два взлома, в результате чего общий убыток составил около 170 000 долларов США на момент атаки.

Мы продолжим поддерживать наших пользователей и призываем любых оставшихся затронутых пользователей предпринять шаги по защите своих кошельков 1 и/или запросить возмещение.

Мы знаем точный список затронутых кошельков. Пожалуйста, проверьте ваше браузерное расширение Trust Wallet, чтобы узнать, получили ли вы уведомление, и внимательно прочитайте процесс возмещения 6, чтобы узнать, подходите ли вы в качестве пострадавшего, чтобы запросить возмещение.

Если вы не получили уведомление в своем браузерном расширении Trust Wallet, ваш кошелек не был затронут уязвимостью вообще и можете использовать его безопасно.

Хронология событий

Ноябрь 2022 года

17 ноября исследователь по безопасности обнаружил и сообщил нам о уязвимости через программу вознаграждений за обнаружение ошибок Trust Wallet.
Уязвимость была проверена и подтверждена командой как критическая, требующая немедленных действий.
В течение 1 дня после проверки уязвимости мы применили патч к модулю на сервере (WAS), расположенному в открытом репозитории wallet core, для устранения проблемы.
В течение 2 дней было выпущено расширение браузера v0.0.183. Новые кошельки, созданные с этой версии, больше не являются уязвимыми. Пользователи с затронутыми версиями были автоматически обновлены до новой защищенной версии.
Было выпущено расширение браузера v0.0.187, добавив возможность показа предупредительного баннера владельцам пораженных кошельков. Предупреждение указывало на риск существующих адресов кошельков и призывало владельцев переместить свои активы на другие безопасные кошельки, следуя пошаговой инструкции.
В дополнение к предупреждающему уведомлению в приложении для пораженных пользователей, сканер безопасности Trust Wallet начал предупреждать пользователей о том, чтобы не переводить активы в пораженные кошельки, чтобы не увеличивать риск для пользователей.
Мы отправляли несколько уведомлений на мобильные приложения Trust Wallet, которые были связаны с пораженными адресами кошельков.
Мы предоставили возмещение газовых сборов для пользователей, которые перевели свои активы из-за происшествия, и продолжаем это делать.
Мы подготовили заявление о публичном разглашении. Однако мы рассмотрели, что после публикации разглашения злоумышленник мог бы использовать оставшиеся кошельки и получить владение оставшимися средствами. Поэтому мы дали затронутым пользователям больше времени для защиты своих средств, вместо того, чтобы делать преждевременное раскрытие.

Декабрь 2022 года

Было выпущено расширение браузера v0.0.200. Добавлен значок предупреждения на затронутые кошельки.
Отправлено еще одно круговое уведомление на мобильные устройства.
Опубликован обзор безопасности Trust Wallet, чтобы помочь нашим пользователям понять, что предупреждающий баннер в приложении не является мошенничеством.
Обнаружен первый эксплойт. Получены заявки от пользователей, пострадавших от уязвимости. Начат процесс возмещения.

Февраль 2023 года

Переоценен график раскрытия информации об уязвимости. Решено дать пользователям затронутых кошельков больше времени, чтобы защитить свои средства.

Март 2023 года

Вознаграждение за нахождение уязвимости было выплачено исследователю по безопасности.
Обнаружен второй эксплойт. Получены заявки от жертв, пострадавших от эксплойта. Начат процесс возмещения.
Встреча с командой Ledger для анализа предшествующих случаев в отрасли по работе с подобными ситуациями.

Апрель 2023 года

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

Что будет дальше

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

Обеспечение безопасного кошелька для защиты средств наших пользователей - это приоритетная задача для Trust Wallet. Мы вложили значительные усилия в улучшение наших мер безопасности, чтобы лучше защищать наших пользователей и их средства. Давайте рассмотрим некоторые вещи, которые мы делаем для обеспечения безопасности наших пользователей.

Аудиты безопасности

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

Внутренний обзор безопасности

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

Внешние аудиторы

Мы привлекли несколько сторонних экспертов по безопасности верхнего уровня, чтобы оценить безопасность нашего приложения. Эта проверка гарантирует, что мы имеем независимую оценку наших протоколов и мер безопасности и выявляем любые возможности для улучшения, которые нам нужно решить. Последние отчеты по аудиту безопасности вы можете прочитать здесь.

Обучение внутренней безопасности

У нас есть обучение в области безопасности для сотрудников всей компании, чтобы повысить осведомленность о безопасности и улучшить практики безопасности.

Безопасность пользователей

Не непосредственно из-за этого инцидента, но мы всегда делаем прогресс в области функций, чтобы помочь пользователям обезопасить себя.

Расширение браузера Trust Wallet было интегрировано с аппаратным кошельком Ledger в январе 2023 года. Это добавляет еще один уровень безопасности для защиты частных ключей пользователей.

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

Реализуя эти меры, мы уверены, что предпринимаем все необходимые шаги для улучшения нашей безопасности, обеспечивая защиту кошельков пользователей и предотвращая подобные инциденты в будущем.

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

Мы искренне благодарим сообщество за поддержку, которую оно оказало, чтобы сделать Trust Wallet безопасной платформой. Мы глубоко сожалеем о том, что произошел этот инцидент, и приносим извинения за любые неудобства, которые он мог причинить нашим пользователям. К счастью, ни один из наших пользователей не пострадал. Пожалуйста, продолжайте сообщать нам, как мы можем лучше улучшать безопасность, снижать риски и улучшать нашу поддержку, чтобы мы могли продолжать заслуживать ваше доверие.

Особая благодарность

Мы хотели бы выразить нашу искреннюю благодарность исследователю по безопасности Жан-Батисту Бедруну, который обнаружил и сообщил нам о уязвимости. Его вклад был неоценимым в помощи обеспечения безопасности кошельков пользователей. В знак благодарности мы уже наградили исследователя по безопасности самым высоким уровнем вознаграждения за нашу программу вознаграждения.

Мы хотели бы поблагодарить команду по безопасности Ledger, особенно их главного технического директора Шарля Гийоме, за усердную работу с нами, чтобы дать обратную связь и предложения о том, как подходить к этой ситуации, чтобы получить лучший результат для наших пользователей и сообщества.

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