サプライチェーン攻撃:悪意あるパッケージと侵害されたウォレットライブラリ
暗号資産のサプライチェーン攻撃は、あなたが信頼するソフトウェアに悪意あるコードを潜ませます。侵害されたパッケージやウォレットライブラリの仕組みと身を守る方法を解説します。
暗号資産のサプライチェーン攻撃とは、ウォレット、アプリ、ウェブサイトが依存しているソフトウェア(オープンソースのパッケージ、ブラウザ拡張機能、アップデートサーバーなど)を犯罪者が侵害し、悪意あるコードを信頼された経路でユーザーに届ける攻撃です。このコードは通常、送金先アドレスをすり替えたり、ウェブサイトにウォレットドレイナーを仕込んだり、シードフレーズを盗んだりします。被害者の多くは、すでに信頼している製品を使っただけで、何も間違ったことはしていません。
この種の攻撃は開発者だけでなく、暗号資産に関わるすべての人にとって重要です。現代のウォレットや分散型アプリは何百ものサードパーティ製コンポーネントで構成されており、たった1つのコンポーネントが侵害されるだけで多くの製品が同時に影響を受けます。このガイドでは、攻撃の仕組み、注意すべき点、そしてユーザーや開発者としてリスクを減らす方法を解説します。
サプライチェーン攻撃の仕組み
暗号資産アプリの「サプライチェーン」とは、アプリを構成するすべてのもの、つまりコードライブラリ、ビルドツール、ホスティング事業者、コンテンツ配信ネットワーク、アップデートサーバーのことです。攻撃は通常、次のような流れで進みます。
- 1アクセスを得る。 攻撃者は人気ライブラリのメンテナーにフィッシングを仕掛けたり、放置されたパッケージを買い取ったり、弱いパスワードを推測したり、ビルドサーバーの脆弱性を突いたりします。
- 2悪意あるコードを仕込む。 隠しコードを含む新バージョンを公開します。このコードは難読化されていることが多く、暗号資産ウォレットが存在する場合など、特定の条件でのみ動作するように作られています。
- 3アップデートで拡散する。 ライブラリの最新版を自動的に取り込むアプリは、次のビルドで悪意あるコードを含めてしまいます。ウェブサイトの場合は、スクリプトが読み込まれた瞬間に影響が出ます。
- 4盗む。 コードはクリップボードにコピーされたアドレスを置き換えたり、偽のトランザクション要求を表示したり、シードフレーズを求めたり、分散型アプリのフロントエンドにドレイナーを仕込んだりします。
- 5痕跡を消す。 攻撃者は使用後すぐにコードを削除することが多く、調査が難しくなります。
このパターンに沿った実際の事例が記録されています。2018年には、人気のJavaScriptパッケージに追加された悪意ある依存関係が、特定のbitcoinウォレットアプリのユーザーから盗むよう設計されていました。2023年12月には、LedgerのConnect Kitライブラリの侵害されたバージョンにより、複数の分散型アプリが短時間ユーザーにウォレットドレイナーを表示する事態が起きました。どちらの事例も、弱点はユーザーではなく共有コードにあったことを示しています。詳しくはバニティアドレスのリスクとそっくりなアドレスをご覧ください。
よくある侵入口
| 侵入口 | 悪用の手口 | 影響を受ける人 |
|---|---|---|
| オープンソースのパッケージ(npm、PyPIなど) | 悪意あるバージョンの公開、または紛らわしい名前のパッケージのアップロード | そのパッケージを使うアプリと開発者 |
| サードパーティから読み込むフロントエンドスクリプト | ドレイナーを仕込むようスクリプトが改変される | サイトのすべての訪問者 |
| ブラウザ拡張機能 | 拡張機能が売却または乗っ取られ、悪意あるコード入りで更新される | その拡張機能をインストールしているユーザー |
| アプリのアップデート | アップデートサーバーや署名鍵が侵害される | アップデートをインストールしたユーザー |
| 開発者ツールとAIが提案するパッケージ | もっともらしく見える偽のパッケージ名 | 確認せずにインストールする開発者 |
人気パッケージとよく似た名前のパッケージをアップロードするタイポスクワッティングは特によく見られます。パッケージ名を打ち間違えた開発者が、気づかないままマルウェアをインストールしてしまうことがあります。
仮想的な例
これは実際の事例ではなく、説明のための架空の複合例です。ある小規模な分散型取引所が、公開パッケージレジストリから人気のウォレット接続ライブラリを読み込んでいるとします。ある朝、そのライブラリのメンテナーがフィッシングに遭い、攻撃者が新しいバージョンを公開します。取引所のウェブサイトは自動的に最新版を読み込みます。
数時間にわたり、ウォレットを接続したユーザー全員に、通常のスワップ要求のように見えるものが表示されます。実際には、自分のトークンを攻撃者のコントラクトに承認する要求です。ウォレットの承認画面を注意深く読んだユーザーは見慣れないコントラクトに気づいて手を止めます。よく読まずにクリックしたユーザーはトークンを失います。取引所のチームはユーザーからの被害報告で問題に気づき警告を出しますが、その時点でコードはすでに削除されています。
ユーザー向けの危険信号
- 使い慣れたアプリが突然、これまで求めたことのないシードフレーズや「ウォレット検証」の手順を求めてくる。
- いつもの操作で、無制限の承認や見知らぬコントラクトへの署名など、普段と違うウォレットの要求が表示される。
- ハードウェアウォレットの画面に表示されたアドレスが、意図したアドレスと一致しない。
- ブラウザ拡張機能が更新され、特にすべてのウェブサイトのデータの読み取りと変更について新しい権限を求めてくる。
- プロジェクトやセキュリティ研究者が、サイトやアプリを使わないよう緊急の警告を出している。
これらの多くは、似た手口を使うクリップボードマルウェアや偽のウォレットアプリとも共通しています。あわせて暗号資産ユーザーを狙う偽のブラウザ更新とCAPTCHAマルウェアもご覧ください。
身を守る方法
ユーザーとして
- 1ハードウェアウォレットを使い、確認する前にその画面でアドレス、金額、コントラクトを読みましょう。
- 2拡張機能は最小限に。 使っていないものは削除し、拡張機能の所有者が変わったときや新しい権限を求められたときは注意しましょう。
- 3資金を分ける。 長期保有分はウェブサイトにほとんど接続しないウォレットに保管し、日常的なDeFiには別のウォレットを使いましょう。
- 4セキュリティ警告が出たら一旦止まる。 問題が解決したと確認されるまで、そのアプリの使用は控えましょう。
- 5不要な承認は定期的に取り消しましょう。
開発者・プロジェクトとして
- 依存関係のバージョンを固定し、ロックファイルを使いましょう。アップグレード前には変更内容をレビューしましょう。
- パッケージ名を慎重に確認し、よくメンテナンスされているライブラリを選びましょう。
- パッケージレジストリやコードホスティングのアカウントには多要素認証を必須にしましょう。
- 署名付きリリースと、可能であれば再現可能なビルドを採用し、ユーザーがバイナリを検証できるようにしましょう。
- サードパーティのスクリプトにはcontent security policyとsubresource integrityを使いましょう。
被害を受けた場合の対処法
- 1影響を受けたアプリや拡張機能の使用をやめ、すべてのウォレットの接続を解除します。
- 2影響期間中の承認や送金がないか、取引履歴を確認します。
- 3不審な承認を取り消し、シードフレーズが漏えいした可能性がある場合は、新しいシードフレーズを使った新しいウォレットに残りの資金を移します。
- 4トランザクションハッシュとアドレスを集め、プロジェクトの公式チャネルと当サイトの詐欺報告フォームから報告します。
ウォレットが侵害されたときにすぐやるべきことにある完全なチェックリストに従ってください。
まとめ
サプライチェーン攻撃は信頼されたソフトウェアを窃盗の経路に変えてしまうため、怪しいリンクを避けるだけでは身を守れません。ハードウェアウォレットの画面とウォレットの要求を最終確認の場と考え、使うソフトウェアを最小限に抑え、公式のセキュリティ警告にはすぐ対応しましょう。最も大きな責任を負うのは開発者です。リリースするものはすべて、固定し、レビューし、署名しましょう。
よくある質問
暗号資産におけるサプライチェーン攻撃とは何ですか?
ユーザーを直接狙うのではなく、コードライブラリ、ブラウザ拡張機能、アプリのアップデートなど、ほかの製品が依存しているソフトウェアを犯罪者が侵害する攻撃です。信頼されたソフトウェアが更新されると、悪意あるコードはそれに依存するすべてのアプリとユーザーに届き、多くの場合、暗号資産を盗んだりアドレスをすり替えたりします。
サプライチェーン攻撃はハードウェアウォレットにも影響しますか?
ハードウェアウォレットの画面は、パソコンやウェブサイトが侵害されていてもあなたを守るよう設計されています。実際のアドレスと金額をデバイス上で確認するからです。ただし、画面を読まなければ、悪意あるトランザクションを承認するよう誘導される可能性はあります。必ずデバイス本体で詳細を確認しましょう。
利用したウェブサイトが影響を受けたかどうかは、どうすればわかりますか?
通常は、影響を受けたプロジェクトの公式発表やセキュリティ研究者からの情報で知ることになります。利用したプロジェクトがライブラリやフロントエンドの侵害を報告した場合は、影響期間中に何かに署名していないか確認し、承認を取り消し、必要に応じて資金を新しいウォレットに移してください。
オープンソースのウォレットはサプライチェーン攻撃に対して安全ですか?
オープンソースは多くの人がコードを検証できるため有効ですが、ソフトウェアを無敵にするわけではありません。悪意あるコードは依存関係、侵害されたメンテナーのアカウント、ビルドシステムを通じて入り込む可能性があります。再現可能なビルド、署名付きリリース、慎重な依存関係管理によってリスクを減らせます。
