Чужой сервер. Что легкие биткоин-кошельки рассказывают о владельце и как это исправить
18 октября разработчикам Electrum написал пользователь, который потерял биткоины при попытке ускорить транзакцию. Зависшую операцию ему показал сервер кошелька. Она оказалась подделкой, а повышение комиссии превратило ее в настоящий перевод злоумышленнику.
5 ноября Electrum исполнилось 15 лет. Все эти годы программа запрашивает баланс у стороннего сервера, и его оператор знает о владельце больше, чем видно в блокчейне. Так же устроены Sparrow и Trezor Suite.
Вместе с командой биткоин-миксера Mixer.Money разбираемся, что раскрывают легкие кошельки, чем грозит зависимость от чужих серверов и как снизить эти риски.
Доверь мне свой кошелек
Полный узел вроде Bitcoin Core хранит и проверяет около 780 ГБ истории сети. Легкий кошелек получает эти сведения со стороны. Еще в анонсе 2011 года создатель Electrum Томас Фогтлин обещал запуск без ожидания, потому что программа не скачивает блокчейн.
В тот же день участник форума Bitcointalk спросил, может ли сервер подделать транзакцию клиента, например подставить в нее неверный адрес получателя или сумму.
«Нет. Это совершенно невозможно, потому что у сервера нет ваших приватных ключей», — ответил Фогтлин.
Сегодня Electrum держит связь примерно с десятью серверами, но роли у них разные. Почти все лишь присылают оценки комиссий и заголовки новых блоков, то есть короткие сводки: в каждой записан общий отпечаток всех транзакций, но не они сами. Сравнивая эти данные, клиент замечает, если один из источников отстает или сеть раскололась.
Все, что касается денег владельца, Electrum поручает одному из этих серверов, выбранному произвольно. В документации его называют главным, а в настройках — сервером истории. Ему программа сообщает адреса кошелька, у него узнает о платежах и через него отправляет переводы в сеть.
Подтвержденные переводы кошелек проверяет сам: главный сервер присылает доказательство, что операция учтена в отпечатке блока, и остается сличить его с заголовком. Этот способ называют SPV. Утаить платеж сервер все равно может: о том, чего он не показал, программа не узнает.
С неподтвержденными транзакциями так не выйдет: в блок они еще не попали, и сопоставить их не с чем. Тут Electrum «верит на слово» главному серверу. Разработчики называют это задокументированной особенностью архитектуры, и на ней построена октябрьская атака.
Ключи не понадобились
Вредоносный сервер перехватывал исходящую транзакцию и не передавал ее в сеть. Вместо нее он показывал кошельку другую, которая тратила те же монеты, но отправляла их злоумышленнику. Адрес получателя в ней совпадал с настоящим по последним четырем символам. По словам разработчиков, так действовали сразу несколько серверов.
Подписи у подделки были недействительными, но Electrum их не проверял и отображал операцию как неподтвержденную. Дальше атакующие рассчитывали на нетерпение владельца. Механизм Replace-by-Fee (RBF) позволяет заменить висящую в мемпуле транзакцию версией, которая платит майнерам больше. Когда пользователь ускорял подделку, программа собирала уже действительный перевод на подставной адрес.
Приватные ключи злоумышленникам так и не понадобились: подпись ставил сам владелец.
24 октября команда опубликовала описание уязвимости и призвала всех пользователей обновиться до версии 4.8.3. Теперь Electrum проверяет подписи неподтвержденных транзакций, которые расходуют средства пользователя. Входящие платежи программа по-прежнему показывает в том виде, в каком их прислал сервер. Разбирать каждую операцию легкий клиент не способен. Разработчики объясняют, что для этого ему пришлось бы применять все правила сети, как полному узлу.
Аппаратный кошелек сам по себе от такой подмены не спасает: устройство покажет получателя, но подтверждает перевод владелец.
Тем, кто еще не обновился, разработчики советуют сверять адрес и сумму перед каждой подписью, включая повышение комиссии. Проверять нужно все символы: совпадение последних четырех рассчитано на беглый взгляд.
Что видит сервер
Легкий кошелек раскрывает серверу не только адреса с деньгами, но и пустые. Программа выводит их из сид-фразы по порядку и держит запас неиспользованных, размер которого называют лимитом пропусков (gap limit).
В Electrum он составляет 20 адресов для приема и 10 для сдачи, и все они уходят серверу еще до первого платежа.
Вместе со списком оператор получает историю и остатки, время запросов и IP владельца. IP видят все серверы, к которым подключена программа, а биткоин-адреса — только главный: Electrum подписывается на них, то есть просит сообщать о каждом новом платеже. После этого оператор может обоснованно предположить, что все эти адреса принадлежат одному лицу.
Sparrow выводит предупреждение в самих настройках подключения: «Использование публичного сервера означает, что он может видеть ваши транзакции». В рекомендациях разработчики уточняют, что такой сервер узнает баланс, а по IP — и местоположение. По их словам, это может сделать пользователя мишенью.
Представим фрилансера с двумя кошельками в Electrum. На «рабочий» приходят платежи, его адреса знают заказчики и биржа, через которую он выводит деньги. На «личном» лежат накопления, и в блокчейне у кошельков нет ни одной общей транзакции.
Но если открыть оба в одной программе, они обратятся к одному главному серверу с одного IP и через одно соединение. Даже без единого платежа оператор получит разом 60 адресов. Кластерный анализ ему не нужен: связь между кошельками сообщит сам владелец. То же касается счетов в приложении аппаратного устройства, если они обращаются к серверу с одного IP.
Кто на другом конце
Чем это грозит, зависит от того, в чьих руках сервер. Стартовый список, зашитый в код Electrum, насчитывает 84 записи (на ноябрь 2026 года). Две из них — домены компании Blockstream, у 12 вместо имени стоит IP-адрес, а 14 работают как скрытые сервисы Tor.
Анонимность операторов уже оборачивалась кражами. В декабре 2018 года вредоносные серверы Electrum показывали пользователям при отправке перевода «ошибку» со ссылкой на фальшивое обновление.
Схема работала годами. В октябре 2020 года журналисты ZDNet нашли на адресах злоумышленников 1980 BTC. Из них 1400 BTC принес один случай: в августе инвестор установил «обновление», которое ему предложила старая версия кошелька.
Свою инфраструктуру строят и те, кто зарабатывает на слежке за транзакциями. В 2021 году на одном из сайтов даркнета всплыла презентация блокчейн-аналитической компании Chainalysis для итальянской полиции. Из нее следовало, что фирма держит собственные узлы сети биткоина. Легкий кошелек, подключившись к ним, раскрывает IP, версию программы и полный набор адресов, включая неиспользованные.
От адреса к имени: как OSINT вскрывает блокчейн
В приложениях производителей оператор известен заранее. Trezor Suite по умолчанию берет историю и балансы у серверов Blockbook, которые обслуживает сама Trezor из группы SatoshiLabs. Компания заявляет, что не записывает активность пользователей, но проверить это со стороны нельзя.
Как обойтись без посредника
Разработчики Electrum советуют всем, кому важна приватность, запустить собственный сервер. Такая система состоит из двух частей: полного узла Bitcoin Core и надстройки, которая отвечает кошелькам по протоколу Electrum. Тех, кто работал через свой сервер, октябрьская атака не затронула.
Распространены три такие программы. Самая легкая из них — Electrum Personal Server: она следит только за адресами владельца и работает даже с узлом, который ради экономии места удаляет старые блоки. Расплачиваться приходится тем самым мгновенным запуском: давно используемый кошелек при восстановлении нужно сначала импортировать, а иногда и пересканировать блокчейн.
electrs и Fulcrum строят индекс по всей истории сети и сразу находят операции по любому адресу. У electrs он занимает около 10% от объема данных Bitcoin Core, а программа рассчитана на личное использование. Fulcrum требует узла с полным архивом блоков и индексом всех транзакций.
Sparrow можно подключить к Bitcoin Core и напрямую. Разработчики кошелька предупреждают, что тогда узел хранит публичные ключи и баланс в незашифрованном виде на компьютере, где он запущен.
Когда свой сервер готов, остается переключить на него кошелек. Сделать это лучше заранее, до того как создавать или восстанавливать его в программе: иначе адреса успеют уйти к чужому оператору. В каждом приложении эта настройка находится в своем разделе.
Electrum. При первом запуске программа предлагает настроить подключение: отметьте Select Electrum Server, и откроются те же параметры, что и в окне Network. Позже его можно вызвать через меню Tools — Network или кликом по круглому значку в правом нижнем углу. На вкладке Server выберите в списке Connection mode пункт Connect only to a single server, а в поле Server впишите адрес и порт своего сервера.
В этом режиме Electrum больше ни с кем не соединяется, и чужие серверы вашего IP не увидят. Взамен программа перестает замечать расколы сети: заголовки не с чем сравнивать. Поэтому в подсказке к настройке разработчики предупреждают, что режим рассчитан только на собственный сервер, а с публичным небезопасен.
Промежуточный вариант — Manual server selection. Историю Electrum будет брать только у выбранного сервера, а заголовки по-прежнему получать примерно от десяти публичных. Ваших адресов они не узнают, но IP увидят.
Sparrow. В настройках (Settings) откройте вкладку Server и в поле Type выберите Bitcoin Core или Private Electrum вместо Public Server. Укажите адрес узла и проверьте подключение кнопкой Test Connection.
Trezor Suite. Откройте Settings → Networks и кликните по значку с ползунками рядом с Bitcoin. В списке типов сервера выберите Custom Blockbook server или Custom Electrum server вместо Trezor (default), укажите адрес и нажмите Confirm.
Полумеры
Без собственного узла можно закрыть часть утечек, но не все.
Tor. Эта сеть скрывает IP-адрес от всех серверов, к которым обращается кошелек. В Electrum ее подключают на вкладке Proxy окна Network: отметьте Use proxy и нажмите Detect Tor proxy. Программа сама найдет запущенный Tor Browser или службу Tor. Включить прокси стоит еще при первом запуске: тот же пункт есть на стартовом экране, рядом с выбором сервера. В Sparrow для этого есть поле Use Proxy в настройках Server, а в Trezor Suite — встроенный переключатель в разделе Settings → Application.
Список адресов Tor не прячет: главный сервер получит его целиком и по-прежнему поймет, что у них один владелец. Не поможет Tor и двум кошелькам, открытым в одной программе: их подписки уйдут по одному соединению.
Ручная настройка. По умолчанию Electrum сам выбирает главный сервер и меняет его, если тот отстает или не отвечает (режим Auto-connect). Каждая такая смена отдает весь список адресов новому оператору. Режим Manual server selection это исключает. Отказаться от автоматического выбора команда Electrum советовала еще в 2019 году, во время DDoS-атак на ее серверы.
Разные приложения. Кошельки, которые не должны пересекаться, лучше развести по программам и серверам. «Рабочий» может жить в BlueWallet на телефоне, а «личный» — в Sparrow (в связке с аппаратным устройством) на ноутбуке, который через Tor обращается к другому оператору. Тогда ни один из них не увидит оба кошелька сразу.
Связь вернется, если кошельки встретятся в общей транзакции или оба сервера окажутся в одних руках. Второе исключить сложнее, чем кажется: стартовые списки у приложений пересекаются. Из восьми публичных серверов Sparrow семь есть и у Electrum. Поэтому подключение для каждого кошелька лучше настроить вручную, а не доверять случайному выбору.
А что же в блокчейне?
Общей транзакции не избежать, если фрилансеру из примера выше нужно отправить часть дохода с «рабочего» кошелька на «личный». Прямой перевод оставит ончейн-след, и заказчики с биржей узнают, где лежат накопления. Эту нить разрывают биткоин-миксеры: они принимают монеты и возвращают владельцу другие, с новой историей.
В Mixer.Money для этого есть режим «Полная анонимность». По описанию команды, входящие биткоины дробятся и уходят трейдерам на биржи, а клиенту платят другие участники с иных площадок. Сроки, число частей и распределение средств между адресами выбирает система, и прямой транзакции между депозитом и выплатой не остается.
Но приватность, за которую пользователь заплатил отдельно, способен свести на нет все тот же сервер. Допустим, фрилансер по-прежнему открывает оба кошелька в одном Electrum без своего узла. Он отправляет в миксер 0,3 BTC с «рабочего», а реквизиты для выплаты берет в «личном». Тогда оператор увидит обе стороны операции: депозит и поступления.
Поэтому получать монеты лучше на отдельный кошелек, подключенный к своему узлу или хотя бы через Tor к другому серверу. В заявке можно указать до двух его адресов: по данным сервиса, качество смешивания выше, если заполнить оба поля. Открывать этот кошелек в одной программе с отправляющим нельзя. В Mixer.Money советуют и на сайт заходить через Tor: иначе настоящий IP-адрес клиента свяжется с фактом микширования.
Миксер не скроет того, что пользователь сообщает сам. Если свести выплату с «рабочими» средствами в одной транзакции, связь появится уже в блокчейне. Типичные ошибки после микширования ForkLog разбирал вместе с командой сервиса.
Как сохранить приватность в сети биткоина после микширования — рассказывает Mixer.Money
***
За 15 лет Electrum пережил волну фишинга и подмену транзакций, но цена, которую легкий кошелек платит за удобство, осталась той же. Быстрый запуск и низкое потребление ресурсов достигаются за счет приватности. Октябрьское обновление закрыло одну лазейку, а доверять чужому серверу по-прежнему приходится.
В блокчейне видны только транзакции. Какие адреса принадлежат одному владельцу, откуда он выходит в сеть и когда открывает приложение, знает оператор. Собственный узел избавляет от этой зависимости, а без него стоит хотя бы не отдавать все данные в одни руки.
Подписывайтесь на ForkLog в социальных сетях
Telegram (основной канал) Facebook X