2020年7月、仮想通貨ウォレット企業の Ledger は、セキュリティ侵害 を受け、その結果9,500人の顧客名と連絡先情報が漏洩したことを発表しました。この発表では、認証情報を窃取するフィッシング攻撃 が発生していることについてユーザーに注意喚起し、同社が「ユーザーに24語のリカバリフレーズを尋ねることは絶対にない」と通知しました。
2020年10月25日、プルーフポイントの調査で、仮想通貨ウォレットのLedger を装ったメールが数千通も発見されました。これらのメールでは「あなたの Ledger Live クライアントに不正アクセスがありました」や「Ledger 内のあなたの資産に悪影響がある可能性があります」などといった件名が用いられていました。これらのメールは特定の業界や地域を狙ったものではないようでした。
おとり文面
図1:Ledger から送られてきたように見せかけたメール
このメールは、Ledger が攻撃を受けた影響でユーザーの「仮想通貨資産が盗まれる可能性がある」ため気を付けるように、と注意喚起をします。そして最新バージョンの Ledger Live をダウンロードして新しい PIN を設定するように推奨しています。6月に侵害を受けた後に Ledger が発信した正規の通知内容と一致させるために、このメールではリカバリフレーズを聞かれることについては言及されていません。代わりに、メールの末尾に Ledger Live の [Download latest version (最新バージョンをダウンロードする)] というボタンをつけ、ダウンロードを促します。
図2:Ledger を装ったおとりメール
ランディングページと悪意のあるファイル
この[Download latest version (最新バージョンをダウンロードする)] ボタンを押下すると、Ledger Live になりすました、Windows、MacOS、Linux 用ダウンロードページに誘導されます。この偽のダウンロード ページのURLは「hxxps://xn--ledgr-9za[.]com/ledger-live/download/」です。Punycode がユーザーのブラウザでレンダリングされると、正規のダウンロードページに酷似した URL が表示されます。
図3:Punycode を使った悪意のある URL
図4:Ledger Live ダウンロードの正規の URL
URL 以外にも、このランディングページは Ledger の正規のページに非常によく似せてあり、さまざまな PC プラットフォームやモバイル用のダウンロードが提供されているように見せかけています。しかし一つ大きな違いがあります。
図5:悪意のある実行可能ファイルへのリンクのついた、なりすましの Ledger Live ダウンロードページ
正規のページでは、以下のように「偽の Ledger Live アプリケーションにご注意ください」という警告が表示されますが、このなりすましのページではそれが表示されません。
図6:Ledger Live の正規のダウンロードページ
なりすましのページでダウンロードボタンをクリックすると、ユーザーのマシン上にインストーラがダウンロードされます。
偽のインストーラと偽の Ledger Live には以下のデジタルシグネチャが用いられています。
図7:インストーラとなりすましの Ledger Live ダウンロードのシグネチャ
プルーフポイントではこのマルウェアを完全に分析はしていませんが、このバックドア Ledger Live アプリケーションにはリカバリフレーズを盗む機能があることが分かっています。このキャンペーンは Ledger ハードウェア ウォレット自体は標的にしていません。代わりに、ソーシャル エンジニアリング を用いてユーザーのリカバリフレーズを聞き出そうとします。リカバリフレーズが盗まれると、ユーザーの秘密鍵を複製されて、その秘密鍵に関係するデジタル通貨が盗まれてしまう可能性があります。
攻撃者はこれを目的として Ledger Live アプリケーションを変更し、ユーザーに [Restore device from Recovery phrase (リカバリフレーズでデバイスをリストアする)] オプションを選択させようとします (図8)。正規の Ledger Live アプリケーションでは通常、「Get started with your Ledger device (Ledger デバイスの使用を開始)」ページで、[Set up as new device (新しいデバイスとしてセットアップする)] と [Skip device setup (デバイスセットアップをスキップする)] という2つの追加オプション (図9) を提供していますが、これはバックドア アプリケーションでは削除されています。
図8:オプションが削除された、バックドア Ledger Live の「Get started with your Ledger device (Ledger デバイスの使用を開始)」ページ
図9:正規の Ledger Live の「Get started with your Ledger device (Ledger デバイスの使用を開始)」ページ
[Restore device from Recovery phrase (リカバリフレーズでデバイスをリストアする)] を選択して、Ledger ウォレットを選択すると、バックドア アプリケーションでは [Recovery phrase (リカバリフレーズ)] (図10) のステップに進みますが、正規のアプリケーションではこれは3つ目のステップで行われます (図11)。騙されてここでリカバリフレーズを入力してしまうと、攻撃者のインフラにフレーズが送信され、そのフレーズを使ってデジタル通貨が盗まれてしまうことがあります。
図10:バックドア Ledger Live の第2ステップの「リカバリフレーズ」
図11:正規の Ledger Live の第2ステップの「PIN」
攻撃者はアプリケーションにバックドアを仕込むために悪意のある JavaScript コードを renderer.bundle.js に挿入します。これは Ledger Live の app.asar ファイルにあります。Ledger Live のバージョン 2.15.0 がバックドア アプリケーションのベースとして使われたと考えられます。このバージョンの正規の renderer.bundle.js は405,057行ですが、バックドアの render.bundle.js は6,679行多く、411,736行あります。
この悪意のあるコードは「Get started with your Ledger device (Ledger デバイスの使用を開始)」ページに提示されるオプションの数を、攻撃者のコマンド&コントロール (C2) サーバーでインストールが「登録」されているかどうかで変更します。これはまず C2サーバーへの HTTP GET リクエストで実行され、「Unregistered (未登録)」レスポンスストリングを確認します(図12) 。サーバーのレスポンスが「Unregistered (未登録)」だった場合、[noDevice (デバイスなし)] および [restoreDevice (デバイスをリストア)] のオプションだけが表示されます (図8)。そうでない場合はすべてのオプションが表示されます (図9)。このリクエストはまた、オンボーディング チェックでも送られます (図13)。
図12:バックドア Ledger Live の GET リクエストとレスポンス (dogcowbat[.]com)
図13:バックドア Ledger Live の OnboardingOrElse (loldevs[.]com)
ユーザーが騙されてリカバリフレーズを入力した場合、悪意のあるコードは、入力された単語をハードコードされた有効な BIP-39単語リストと照合します。その単語がリスト内にあった場合 (図14)、完全な短文を作成するのに十分な単語が入力されるまで、悪意のある「work()」機能が実行され続けます。すべての単語が入力されると、この完成した短文は HTTP POST リクエストを介して攻撃者の C2 に送信されます (図15)。攻撃者は一旦リカバリフレーズを盗んでしまえば自由に秘密鍵を生成できるようになり、その秘密鍵につながるデジタル通貨を自分のウォレットに転送することができます。
図14:バックドア Ledger Live のハードコードされた BIP-39 単語
図15:バックドア Ledger Live POST リクエスト (dogcowbat[.]com)
2020年10月31日より前のどこかの時点で新しい攻撃キャンペーンが開始されました。これもまた、標的からリカバリフレーズを騙し取ることを目的としています。しかしこのキャンペーンはバックドア Ledger Live は使用せず、純粋に Web ベースの攻撃を行います。このブログ執筆時点では、このキャンペーンはメールは利用していません。主にSMS メッセージを使って、リカバリフレーズを盗む Web ページにつながるランディングページが送付されます。リカバリフレーズを盗む Web サイトのうちの一つは、hxxps://xn--ldgr-vvac[.]com/update/ という punycode URL にホストされていました (図16) 。なりすましの Ledger Live ダウンロードページと同様に、punycode ドメインからデコードされたテキストは、正規の Ledger Web サイト (ledger[.]com) に似せて、lėdgėr[.]com になっています。
図16:リカバリフレーズを盗むために使用された偽の Ledger ウォレット ランディング ページ
ウォレットを選択するとタイムロックされたページに移動し、デバイスを接続するよう求められます (図17)。そしてデバイスが接続されたかどうかに関わらず、最終的に [続行] ボタンのロックが解除されます。ユーザーがそのボタンをクリックすると、偽のエラーメッセージが表示され、リカバリフレーズの長さを選択するよう求められます (図18)。最後のページでは、単語を一つずつ入力するように求められ (図19)、すべての単語が入力されると POST リクエストを介して同じサーバーに送信されます。
図17:偽の「Connect your device (デバイスを接続してください)」ページ