Каждый месяц директор по безопасности MetaMask Лукер публикует отчёт о последних атаках в сфере криптовалют и новых угрозах, о которых вам необходимо знать.
Апрельский отчёт 2022 года команды безопасности MetaMask охватывает достижение Endo milestone совместимости с CommonJS для нашей цепочки зависимостей npm, новую нотацию именования пакетов 'a'a в LavaMoat v6, сокращающую время выполнения metamask-extension примерно в 600 раз — с 10 минут до менее 1 секунды, переход MetaMask Extension на защиту цепочки поставок LavaMoat v6, достижение lockdown() в LavaMoat совместимости с React Native, открывающее путь к MetaMask Mobile, а также рекомендации по резервному копированию iCloud для данных хранилища MetaMask. Подробности — ниже, но сначала...
Выдающийся пионер STEM: Батлер Лэмпсон, отец компьютерной безопасности на основе возможностей (capability-based security)
Батлер Лэмпсон — американский учёный в области информатики, формализовавший принципы управления доступом программного обеспечения к ресурсам. Его модель матрицы доступа, разработанная в начале 1970-х годов, объединила capabilities и списки управления доступом в единую систему — и принесла ему премию Тьюринга в 1992 году. Изолирование на основе возможностей (capability-based isolation), которое он разработал, является теоретической основой для изоляции compartment sandboxing, которую Endo и LavaMoat используют для защиты MetaMask сегодня.
Endo достигает совместимости с модулями CommonJS и выявляет оставшиеся пробелы при загрузке пакетов npm
Поддержка CommonJS в Endo достигла важного milestone в апреле 2022 года. Сквозные тесты на реальных пакетах из экосистемы npm — преимущественно выбранных из зависимостей MetaMask — выявили случаи, где поддержка CommonJS была недостаточной, и помогли продвинуть реализацию. Тест, сравнивающий несколько форм экспорта из CommonJS, импортированного в ESM, в Endo, Node.js и ряде бандлеров, помог определить цели и избежать регрессий.
Наиболее значимые изменения в поддержке CommonJS в Endo за этот период включали: подключение exports к import * и введение неявного default export, улучшение лексера для обнаружения всех вхождений require и перенос ошибок об отсутствующих пакетах на время выполнения, рефакторинг обработки exports для установки module.exports в качестве значения по умолчанию и идентификации именованных экспортов, а также добавление поддержки вложенного package.json с type:module и массивов необязательных значений в exports package.json.
Прогресс отслеживается в CommonJS tracking epic.
Endo теперь корректно поддерживает загрузку модулей CommonJS. Все оставшиеся проблемы при загрузке реальных пакетов из npm делятся на четыре категории: использование отсутствующих функций (например, require.resolve или import.meta), изменение глобальных переменных и intrinsics, срабатывание фильтров, защищающих от внедрения imports или HTML-комментариев, а также некорректное сопоставление экспортов и определение типа модуля в Endo.
Экспериментальная команда endo run выполняет JS-файлы с изоляцией compartment
На основе существующих инструментов, используемых для настройки сквозных тестов Endo, экспериментальная команда endo run теперь может выполнять JS-файл с compartments — аналогично node app.js, но с применением модели изоляции Endo.
В настоящее время все основные модули Node.js доступны для require/import кодовой базой и зависимостями. Дальнейшая работа должна добавить поддержку политик из LavaMoat.
Нотация именования пакетов 'a'a в LavaMoat v6 сокращает время выполнения metamask-extension в 600 раз — с 10 минут до менее 1 секунды
LavaMoat v6 вышел с новой нотацией идентификаторов пакетов для предотвращения проблем, связанных с имперсонацией и повторным использованием имён пакетов. Нотация, получившая название 'a'a, теперь используется в качестве ключей в файлах политик.
Производительность первоначальной реализации была существенно снижена из-за неэффективности Node.js при поиске и доступе к файлам. Первая попытка улучшения производительности — ограниченная двумя случаями простой мемоизации — сократила наихудшее время выполнения 'a'a в metamask-extension с 10 минут до 30 секунд. Однако стоимость пиков потребления памяти оказалась слишком высокой.
Вторая итерация диагностики и улучшений производительности обеспечила более чем 25-кратное сокращение времени и потребления RAM по сравнению с результатами первой итерации благодаря новому алгоритму, устранению рекурсии и локальным улучшениям производительности разрешения модулей Node.js.
В целом улучшение времени выполнения составило примерно 600 раз между первой полной реализацией и текущей версией.
MetaMask Extension переходит на защиту цепочки поставок LavaMoat v6
MetaMask Extension теперь работает под защитой LavaMoat v6, а развёртывание отслеживается в PR #14488.
lockdown() в LavaMoat достигает совместимости с React Native, открывая путь к MetaMask Mobile
Фундаментальным шагом для обеспечения работы LavaMoat в приложениях React Native является запуск функции SES lockdown(). Функция lockdown() защищает программное обеспечение от атак на цепочку поставок, перечисляя primordials в JavaScript и замораживая прототипы, что делает маловероятным выполнение злоумышленником атаки на загрязнение прототипа (prototype pollution attack).
Подробное описание выводов, сделанных в ходе этой работы, содержится в React Native Compatibility Tracker. Ключевые условия для достижения совместимости: разрешение Metro запускать SES bundle путём выполнения .cjs файлов, добавление специфических параметров lockdown, удаление плагинов Babel и удаление полифила Promise. Другие проблемы специфичны для приложения MetaMask Mobile, например зависимости Sentry и EthereumJS.
Результатом стал pull request в репозиторий приложения MetaMask Mobile. Следующие шаги включают запуск сквозных тестов для подтверждения того, что lockdown() не нарушил дополнительную функциональность, прежде чем перейти к следующему этапу: интеграции LavaMoat в MetaMask Mobile.
Обнаружено, что резервная копия iCloud включает зашифрованные паролем данные хранилища MetaMask
Пользователи Apple, включившие резервное копирование данных приложений в iCloud, могут непреднамеренно создавать резервные копии своего зашифрованного паролем хранилища MetaMask. Если ваш пароль недостаточно надёжен и кто-то похитит ваши учётные данные iCloud с помощью фишинга, это может привести к краже средств. MetaMask опубликовал рекомендации в X с инструкциями по управлению этой настройкой на устройствах пользователей.
Апрельский отчёт MetaMask по криптобезопасности за 2022 год охватил достижение Endo milestone совместимости с CommonJS для цепочки зависимостей npm MetaMask, 600-кратное улучшение производительности LavaMoat v6 в metamask-extension благодаря новой нотации именования пакетов 'a'a, а также рекомендации по резервному копированию iCloud для данных хранилища MetaMask. Просматривайте предыдущие выпуски отчёта MetaMask по криптобезопасности для получения информации о новых угрозах, тенденциях и советах по обеспечению безопасности в экосистеме.