Кошелёк-расширение для браузера — это небольшая программа, которая живёт внутри вашего веб-браузера — Chrome, Firefox, Brave или Edge — и хранит ключи от вашей криптовалюты. Вы устанавливаете его так же, как блокировщик рекламы: из магазина дополнений браузера, в один клик. После установки рядом с адресной строкой появляется значок кошелька, готовый к работе всякий раз, когда вы заходите на сайт, которому нужно работать с криптовалютой.
Это руководство объясняет, как именно работает такой кошелёк, какова его модель безопасности и где находятся реальные риски. Если вы совсем новичок в кошельках, начните с материала что такое криптокошелёк, а затем прочитайте более широкое сравнение программного кошелька и аппаратного кошелька — эта статья посвящена именно браузерной разновидности.
Что такое «расширение» на самом деле
Расширение браузера — это программа, добавляющая функции в ваш браузер. Браузер — это программа-хозяин; расширение — гость, которому хозяин разрешает работать внутри себя. Расширения могут читать и изменять веб-страницы, которые вы посещаете, показывать собственные всплывающие окна и хранить данные на вашем компьютере. Именно эта возможность делает кошелёк-расширение удобным — и именно её вам нужно понять, прежде чем доверять ему деньги.
Кошелёк-расширение использует эту возможность для трёх задач. Он хранит ваши ключи в локальном хранилище браузера, обычно под защитой пароля. Он показывает всплывающее окно, когда вам нужно что-то одобрить. И он общается с веб-страницами с помощью техники под названием инъекция.
Как работает инъекция
Инъекция означает, что кошелёк помещает небольшой фрагмент кода в каждую открываемую вами веб-страницу. Представьте, что кошелёк оставляет телефон на столе каждого сайта, который вы посещаете. Когда сайт хочет что-то сделать с криптовалютой — подключиться к вашему кошельку, показать ваш баланс или попросить вас отправить транзакцию — он берёт этот телефон и делает запрос.
Ваш кошелёк получает запрос и не действует молча. Он открывает всплывающее окно и спрашивает вас. «Этот сайт хочет подключиться». «Этот сайт хочет, чтобы вы подписали транзакцию на отправку 0,2 ETH». Ничего не движется, пока вы не нажмёте «одобрить». Сайт может попросить; только вы можете согласиться. Этот шаг одобрения — самая важная привычка при работе с любым браузерным кошельком: читайте всплывающее окно, прежде чем нажать.
Именно этот подход позволяет децентрализованному приложению — dApp, то есть сайту, работающему на блокчейне — функционировать прямо в обычной вкладке браузера без дополнительного ПО. Это по-настоящему полезно. Но поскольку кошелёк доступен с каждой страницы, каждая страница тоже становится частью картины, когда речь идёт о безопасности.
Поверхность атаки
«Поверхность атаки» — это простой термин для всех мест, через которые что-то можно атаковать. Парадная дверь, чёрный ход и открытое окно — всё это часть поверхности атаки дома. У браузерного кошелька их несколько.
Вредоносные или скомпрометированные веб-страницы. Поскольку кошелёк внедряется в каждый сайт, враждебный сайт может отправлять ему запросы. Кошелёк всё равно сначала спрашивает вас, поэтому вредоносная страница не может перемещать средства сама по себе — но она может составить запутанный запрос и надеяться, что вы одобрите его не читая.
Фишинговые dApp. Фишинговый сайт — это подделка, созданная, чтобы выглядеть как настоящий сайт. Копия популярной биржи или маркетплейса NFT может попросить вас «подтвердить ваш кошелёк» и предъявить транзакцию, которая на самом деле его опустошает. Всплывающее окно честно говорит о том, что оно сделает; сайт солгал о том, зачем.
Слишком широкие разрешения. Когда вы устанавливаете любое расширение, браузер перечисляет, к чему оно может получить доступ. Многие кошельки запрашивают разрешение читать и изменять данные на всех сайтах — это нужно им, чтобы внедряться повсюду. Цена в том, что кошелёк с широким охватом — более крупная добыча, если его когда-либо обратят против вас.
Риск цепочки поставок. Это самый тонкий риск. Атака на цепочку поставок нацелена не на вас, а на то, от чего вы зависите. Современное ПО собирается из сотен меньших блоков с открытым исходным кодом, называемых зависимостями. Если злоумышленник подсунет плохой код в один из таких блоков — отравленную зависимость — или перехватит обновление, которое доставляет новую версию расширения в ваш браузер, вредоносный код приходит по каналу, которому вы уже доверяете. Вы установили безопасное расширение; более позднее обновление или скрытый внутри него компонент — нет.
Чтобы глубже и без привязки к конкретному поставщику разобраться, как создаются и защищаются браузерные расширения, документация веб-расширений MDN от Mozilla — авторитетный справочник, а проект OWASP публикует общие рекомендации по перечисленным выше веб-угрозам.
Как SSP снижает риск
Ничто из этого не означает, что браузерными кошельками небезопасно пользоваться. Это означает, что хорошо построенный кошелёк должен планировать с учётом поверхности атаки, а не делать вид, что её не существует. SSP делает это двумя конкретными способами.
Изоляция во время выполнения с LavaMoat. Песочница — это замкнутое пространство, где что-то может работать, не имея возможности дотянуться до остальной системы — так настоящая песочница удерживает песок в одном месте. LavaMoat применяет эту идею к тем сотням зависимостей. Каждая зависимость работает в собственном запечатанном отсеке с доступом только к тому, что ей действительно нужно. Так что если отравленная зависимость всё-таки проникнет внутрь через атаку на цепочку поставок, она оказывается зажата: она не может тихо дотянуться через кошелёк до ваших ключей, потому что стены её отсека этого не позволяют. Атака сдерживается вместо того, чтобы стать катастрофой. Мы подробно рассказываем об этом в материале пресс-центра о приходе LavaMoat в SSP.
Схема 2 из 2. Это более крупная структурная защита. Большинство браузерных кошельков хранят весь ключ — одобрите плохое всплывающее окно, и средств нет. SSP разделяет подпись между двумя устройствами: браузерное расширение хранит один ключ, а приложение SSP Key на вашем телефоне хранит второй. Транзакция действительна только тогда, когда её подписывают оба. Расширение само по себе не может сдвинуть ни одной монеты.
Это полностью меняет расчёт. Даже если вредоносная страница обманет расширение, даже если до него дойдёт скомпрометированное обновление, злоумышленник контролирует лишь один из двух необходимых ключей. Ваш телефон — отдельное устройство с отдельным экраном, показывающим детали транзакции — всё равно должен одобрить. Атака, которая опустошила бы обычный браузерный кошелёк, упирается в стену, которую не может преодолеть.
Так безопасны ли браузерные кошельки?
Браузерный кошелёк достаточно безопасен для повседневного использования, когда верны две вещи: кошелёк построен так, чтобы сдерживать описанные выше сбои, и вы относитесь к всплывающему окну одобрения как к настоящему решению, а не как к рефлексу. Устанавливайте расширения только из официальных магазинов, держите кошелёк отдельно в браузере, которому вы доверяете, и замедляйтесь всякий раз, когда сайт просит вас что-то подписать.
Самая большая слабость браузерного кошелька — что он живёт в загруженном, подключённом к интернету браузере — реальна. Ответ SSP не в том, чтобы игнорировать её, а в том, чтобы предположить, что браузер может быть скомпрометирован, и сделать это переживаемым: LavaMoat сдерживает плохую зависимость, а схема 2 из 2 означает, что одного расширения никогда не достаточно, чтобы потерять ваши средства. Далее в этой серии мобильные криптокошельки рассматривают вторую половину этой пары — телефон, который должен подписывать совместно.