Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Безопасность web3: уязвимости на стыке блокчейн...

Arseny Reutov
February 10, 2022

Безопасность web3: уязвимости на стыке блокчейна и веб-технологий

Arseny Reutov

February 10, 2022
Tweet

More Decks by Arseny Reutov

Other Decks in Technology

Transcript

  1. Agenda • What’s web3? • Атаки на фронтенд • Как

    защитить и децентрализовать фронтенд • Слабые стороны взаимодействия с web3 из кошельков • Как улучшить UX веб-кошельков с точки зрения безопасности
  2. Web3 challenges • Пользователь, владея приватным ключом, ответственен за все

    свои действия • Безопасность фронтенда не менее важна, чем безопасность смарт- контрактов, так как любая XSS может иметь серьезные последствия • UX кошельков (особенно Metamask) оставляет желать лучшего, очень легко сделать ошибку
  3. EtherDelta XSS (2017) • EtherDelta - DEX биржа в основой

    сети эфира на ордербуках 😅 • Позволяла импортировать любой токен и переименовывать его • С помощью XSS в имени токена хакер украл приватные ключи прямо из DOM
  4. ENS XSS • Ethereum Name Service - сервис, позволяющий зарегистрировать

    имя в виде NFT и ассоциировать его с адресом в сети Ethereum (e.g. vitalik.eth -> 0xd8da6bf26964af9d7eed9e03e53415d37aa96045) • Имеет множество интеграций с dapp’ами, имя подставляется в DOM вместо адреса
  5. ENS XSS • По документации клиенты сами должны валидировать имя

    согласно uts46 после резолва • В частности использовать https://github.com/danfinlay/eth-ens-namehash • Однако смарт-контракт имя никак не валидирует (Solidity не лучший язык для операций со строками, стоило бы кучу газа) • Можем регистрировать любые имена, в том числе с XSS-векторами (https://github.com/Raz0r/ens-xss)
  6. XSS via NFTs • SSRF • XXE via SVGs •

    CVEs (ImageMagick, GhostScript) • XSS https://github.com/Raz0r/evil-nft Также: Rektosaurus от Бернарда Мюллера (включает вектора из evil-nft, но не self-hosted)
  7. OpenSea XSS • OpenSea позволяет загружать SVG, исследователи из CheckPoint

    обнаружили, что SVG никак не валидируется, т.е. возможна XSS • хакер делает эйрдроп NFT-”подарка” жертве на OpenSea • при просмотре NFT исполняется JS-код, который делает трансфер всех средств с кошелька (требуется подтверждение транзакции) https://research.checkpoint.com/2021/check-point-research-prevents-theft-of-crypto-wallets-on-opense a-the-worlds-largest-nft-marketplace/
  8. XSS Impact • имитация окна MetaMask для кражи сид-фразы или

    приватного ключа • подмена любых данных в DOM, в том числе адресов; жертва даже не будет подозревать, что отправляет транзакцию не на тот адрес • запрос на approve() ERC20 токенов (кейс BadgerDAO, украли 120 миллионов долларов после инжекта кода во фронтенд)
  9. Best practices • Основной риск - DOM XSS • Не

    используйте dangerouslySetInnerHtml() в React • Для всех сторонних JS должен быть использован SRI • Настройте CSP (без unsafe-inline и unsafe-eval) • Используйте Trusted Types для защиты небезопасных синков, например innerHtml
  10. IPFS + ENS • IPFS - p2p-сеть для децентрализованного хранения

    файлов, документы резолвятся по хэшу их содержимого • ENS - децентрализованная система доменных имен в Ethereum • .eth не является DNS-доменом первого уровня • существуют сервисы, которые позволяют по ENS-имени отдавать документы из IPFS (eth.link от Cloudflare и eth.limo) DNS A-record name.eth.link ENS “content” record IPFS contenthash
  11. Skynet Homescreen • Skynet - децентрализованный хостинг на базе блокчейна

    Sia • Sia - децентрализованное файловое хранилище, где пользователи платят за размещение файлов (аналогично Filecoin) • Homescreen - приложение для хранения копий фронтендов, пользователь сам решает какую копию использовать
  12. Right-click & Save • Homescreen все равно полагается на DNS,

    так как и сам Homescreen и копии доступны только из браузера • Для хранения копий необязательно использовать децентрализованное хранилище • Идею “user owns apps” можно реализовать в виде десктопного приложения
  13. Metamask • Самый популярный кошелек - все еще Metamask •

    Все еще расширение браузера • Уязвимость в расширении браузера - потенциальный UXSS и не только. • Возможность supply chain атаки на одну из зависимостей (их 2195!)
  14. Утечка IP в Metamask • Создаем ERC1155-контракт c URI(), указывающим

    на наш сервер со снифером • Минтим NFT на OpenSea и делаем трансфер жертве • Metamask автоматически подтягивает NFT-коллекцию с OpenSea • В результате произойдет обращение жертвы к серверу атакующего Source
  15. Blind signing • В декабре 2020 года CEO Nexus Mutual

    потерял 8 миллионов долларов в результате таргетированной атаки • На его компьютер была установлена модифицированная версия Metamask • Не помог даже хардварный кошелек, так как сложно проверить транзакцию Source
  16. Проблемы UX • В Metamask можно вручную назначать имена адресам

    • Однако при выполнении транзакции нет никакой аналитики по адресу- получателю • Перед отправкой транзакции нельзя узнать, как она исполнится • Нет предупреждений о том, что approve() выполняется для EOA • Нет предупреждения, что пользователь делает бесконечный approve() для прокси-контракта, который может измениться https://twitter.com/bantg/status/1466724441866526726
  17. Metamask Snaps • Metamask начал поддерживать систему плагинов в рамках

    Metamask Flask • Разработчики могут протестировать новые фичи, в том числе систему snaps • Плагины позволяют добавлять новую функциональность, например по аудиту адресов
  18. Идеи улучшения UX • Проверять возраст контракта • Показывать активность

    транзакций к контракту • Добавить интеграцию с API симуляции транзакций, например Tenderly или Blocknative • Использовать Token Lists для распознавания известных адресов • Отображать скоринг DefiSafety