Search

Solanaにおける暗号資産の不正移転事件からみえた「鍵管理」の難題 - ITpro

全4829文字

 2022年8月3日の朝、「暗号資産が身に覚えのないアドレス宛に勝手に移転された」という報告がSNS(交流サイト)で相次いだ。日本時間午前7時37分ごろから4時間程度の間に9232のアドレスから暗号資産が不正に移転された。世界全体で被害総額は400万ドルを超えると推定されている。

被害推定を報告するツイート

被害推定を報告するツイート

画像:Twitterの画面をキャプチャー(https://twitter.com/osec_io/status/1555087555351420928)

[画像のクリックで拡大表示]

 被害に遭ったのは、Solana(ソラナ)ブロックチェーン上の暗号資産を自分自身で管理するためのウォレットソフトウエアを利用していた人々だ。暗号資産を移転するには、暗号資産を保有するアドレスにひもづく署名鍵(秘密鍵)によるデジタル署名が必要だ。ウォレットソフトウエアで管理されていた署名鍵が悪意を持った者の手に渡り、暗号資産が不正に移転されたとみられる。

 事件発生当時、暗号資産が不正に移転された原因についてSNSでは様々な臆測が飛び交った。被害範囲の広さから、多くのウォレットで共通して利用されている暗号ライブラリーに脆弱性やマルウエア混入があったのではないか、Solanaブロックチェーン自体に脆弱性が存在するのではないか、といった考察までみられた。被害者の共通点がなかなか見いだされず、原因が特定されない状況が続いた。

ウォレットソフトウエアが署名鍵を開発元サーバーに送信していた

 翌4日の午前5時ごろ、スイスに拠点を置くソラナ財団(The Solana Foundation)が運営するTwitterアカウント(@SolanaStatus)から、被害に遭ったアドレスはある時点でスマートフォン向けウォレットソフトウエアであるSlope Wallet(以下、モバイル版Slope Wallet。他にChrome Extension版がある)を利用して作成されたアドレス、またはモバイル版Slope Walletにインポートされたアドレスであるようだ、というアナウンスがあった。

@SolanaStatusによるアナウンスのツイート

@SolanaStatusによるアナウンスのツイート

画像:Twitterの画面をキャプチャー(https://twitter.com/SolanaStatus/status/1554921396408647680)

[画像のクリックで拡大表示]

 モバイル版Slope Walletの開発元が事件後に公開した記事(https://slope-finance.medium.com/slope-update-11-august-2022-31d678d7cd97)によると、開発元はオンプレミスで動作するサードパーティー製のアプリケーションモニタリングサービス(以下、モニタリングサービス)を利用していた。そして7月28日から8月3日までの間、モバイル版Slope Walletでエラーイベントが発生すると、署名鍵とニーモニックコード*(以下、ウォレットの秘密情報)を含むログを、モニタリングサービスに送信していたという。

*暗号資産の分野におけるニーモニックコードとは、人間が認識できる単語の羅列によってデータを表すもので、署名鍵の生成に用いるシードを表すために用いられる。ニーモニックコードを記憶しておけば、署名鍵を再生成することができる。

 モニタリングサービスは開発元のドメインでホストされていたが、開発元は問題の発見後、すぐにモニタリングサービスのホストをDNSレコードから削除する措置をとった模様だ。4日中には、モニタリングサービスのサーバーの名前解決に失敗してアプリからの通信が発生しなくなり、モニタリングサービスへログが送信されることはなくなっていた。

画面遷移時に受け渡されるウォレットの秘密情報がモニタリング用のログに収集されてしまう

 筆者は、手元の環境をモニタリングサービスのホストの名前解決が疑似的に成功するように設定した上で、モバイル版Slope Walletを実際に操作し、プロキシーを用いてモバイル版Slope Walletから発生する通信の内容を観察してみた。

 すると、アプリ内で何らかのエラーイベントが起きると、アプリがログを送信する様子を確認できた。エラーイベントが生じるのは必ずしも重大な問題が生じた場合に限られるわけではなく、イベントの発生自体は必ずしも不具合がある状態とは言えないように見受けられた。エラーイベントは内部的なもので、アプリを操作している利用者からは、エラーイベントが生じてログが送信されたことには気づけない。

 アプリが送信するログの中には、画面遷移の履歴や、画面遷移の際に画面間で受け渡した情報が記録されていた。いくつかの画面間ではウォレットの情報を受け渡しており、その中には、署名鍵などのウォレットの秘密情報が含まれている。ウォレットの秘密情報の受け渡しが生じる画面遷移をした後にエラーが発生してしまえば、モニタリングサービスにウォレットの秘密情報が送信されてしまう。

 少なくとも筆者の環境*で確認した限りでは、アプリの初回起動時の場合、セットアップを完了した時点で必ず、ウォレットの秘密情報がモニタリングサービスに送信された。新規のウォレットを作成するか、他のウォレットソフトウエアで作成したウォレットをインポートしてセットアップを完了し、ウォレットの残高画面に遷移したところで、通信関係のエラーイベントが生じ、ログが送信されるためだ。このとき、作成・インポートしたばかりのウォレットの秘密情報が、送信対象のログに記録されていた。

*iOS版をMac上で動作確認した。Appleシリコン搭載のMacではiOSアプリを動作させることができる。

 さらにセットアップ時の画面以外でも、一部の画面遷移ではウォレットの秘密情報の受け渡しが生じることが確認できた。既存ユーザーについても、一部の特定の画面を開いた後にエラーイベントが生じれば、ウォレットの秘密情報が送信されていたと考えられる。

モニタリングサービスのSDKが自動で画面遷移のイベントを収集

 どうしてこのような実装になってしまったのか。モニタリングサービスにはエラー監視ツール「Sentry」が使用されていた。アプリケーションからSentryにログを送信するには、SentryのSDK(ソフトウエア開発キット)をアプリケーションに導入する必要がある。

 モバイル版Slope Walletはモバイルアプリ用フレームワーク「Flutter」を使って開発されている。そこで筆者は実際にFlutter製のアプリを用意してSDKを組み込んでみた。SentryはFlutter製アプリ向けのSDKを用意している。アプリケーションのソースコード中に数行のコードを書き足すだけでSDKの導入が完了した。

Adblock test (Why?)



from "鍵" - Google ニュース https://ift.tt/0K3N1aY
via IFTTT

Bagikan Berita Ini

0 Response to "Solanaにおける暗号資産の不正移転事件からみえた「鍵管理」の難題 - ITpro"

Post a Comment

Powered by Blogger.