Давно хотел заглянуть под капот Метамаска, посмотреть как он устроен, очень любопытно было узнать как и в каком виде хранятся сид-фразы и приватники. Нужно это для того, чтобы понять как обезопасить себя и попутно извлечь некоторую пользу, но об этом позже.
Вы наверное уже встречали сообщения в чатах, когда люди жаловались на то, что у них угнали приватник и все средства с кошелька вывели или оставили часть активов и установили дрейней. Чаще всего это происходит после того, как пользователь скачивает какой-нибудь пиратский софт или крек для какого-нибудь коммерческого софта или через социальную инженерию пользователя обманом вынуждают запустить какой-нибудь файл, который собирает чувствительную информацию с компьютера.
Метамаск (для Google Chrome) хранит базу данных с приватниками в файлах, которые находятся в папках:
Mac: /Users/USER_NAME/Library/Application Support/Google/Chrome/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn
Windows: C:\Users\USER_NAME\AppData\Local\Google\Chrome\User Data\Default\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn
Файл с хранилищем имеет минимальный номер и расширение .ldb
, он зашифрован, ключ для расшифровки файла - ваш пароль от Метамаска.
Давайте попробуем установить свежий Метамаск и настроить новый аккаунт. Устанавливаем новый пароль, для примера это будет 9kdaolfg
Создаём новую сид-фразу:
emotion honey what lens hand harbor wide humor select oppose perfect way
Наш основной аккаунт: 0x67f4ADFc62211867d65d7FdB06Eaf28FBd9EEB73
Добавим второй аккаунт с именем Second который будет выведен из нашей сид-фразы: 0x301Df961c3522A99fE7E8A6723FB3D49678B3D01
И добавим приватник, сгенерированный https://cointool.app/createWallet/ethЭто так называемый импортированный аккаунт, он не выводится из базовой сид-фразы. Приватник: 0x9d0cd31ecaf0a1f876b96b8c0e8674ce32d2d07199b00f51512be1eee86d2685
Назовём его Third, его адрес: 0xf0e93c050e8448bec3cde46af402a7a453a385a6
Переходим в папку ~/Library/Application Support/Google/Chrome/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn
Файл 000005.ldb
это наше хранилище. Вот так выглядит его содержимое:
Попробуем расшифровать его при помощи веб-утилиты https://metamask.github.io/vault-decryptor/ для расшифровки потребуется наш пароль
Как мы видим, в этом файле есть наша сид-фраза, но нет информации о втором аккаунте и нет информации об импортированном по приватному ключу аккаунте.
Давайте откроем файл с расширением .log
, в нашем случае это 000063.log
и найдём в нём строку KeyringController
, скопируем выделенную часть:
Почистим от ненужных обратных слешей, чтобы это был валидный json
Вставим этот json на страницу Vault Decryptor и введём пароль:
Как видите, мы опять получили сид-фразу, информацию о том, что у нас 2 аккаунта, первый будет выведен из сид-фразы по пути m/44'/60'/0'/0
, второй по пути m/44'/60'/0'/1
, так же мы видим наш приватник от импортированного аккауна.
Если у вас нет пароля или вы забыли пароль от Метамаска, его можно подобрать при помощи утилит:
BTCRecover проще в использовании, написана на питоне
Hashcat немного сложнее в использовании, написана на Си, очень быстрая, можно задействовать GPU
У меня нет тестового стенда с Hashcat и ригом из N видеокарт, но подозреваю, что у тех, кто ворует пароли он есть и такой пароль как 9kdaolfg
подбирается если не за считанные минуты, то за часы.
Вот почему стойкий пароль является обязательным условием безопасного использования Метамаска. Меня самого сильно утомляет ввод сложного пароля в Метамаск и я хотел бы как-то упростить этот процесс.
Я вижу такое решение, так как Метамаск это опенсорсный кошелёк, можно скачать исходники и пропатчить их, добавив префикс к паролю. Пользователь продолжает вводить 9kdaolfg, но внутри кода этот пароль превращается в {P~Nyqa@bj[j0gP_][@NTb]$/Tb9&!46H(Lp/:'t9kdaolfg Такой пароль подобрать нереально, а текущие инструменты для кражи данных не выгружают с компьютеров пользователей исходные коды браузерных расширений.
Если развить эту мысль далее, то можно сделать специальные пропатченные версии Метамаска, которые можно относительно безопасно устанавливать на компьютеры воркеров. Можно отправлять уведомления, если воркер пытается посмотреть сид-фразу или экспортировать приватник, можно показывать неправильный приватник/сид. Опять таки, можно дополнять пароль и тогда воркер знает часть пароля, которая даёт пользоваться Метамаском, но не расшифрует логи, если он выгрузит их с компьютера.
На этом я заканчиваю первую статью, если тема окажется интересной и я получу достаточно позитивных откликов, напишу продолжение, про то как пропатчить и собрать Метамаск.
Статья написана специально для приватки FACKBLOCK RESEARCH