Braveリサーチは、“Web3.0におけるプライバシーやセキュリティの問題”というテクニカルレポートをarXivに掲載しました。このブログは、この調査結果を要約し、Braveユーザーの皆様に紹介したものの日本語訳です。
DeFiは、金融のワイルドウェストに似ています。毎日のように新しいサイトが登場し、また別のサイトは姿を消し、人々は大金を稼いだり失ったりしますが、セーフティネットや健全なガバナンスは存在していません。このような状況において、セキュリティやプライバシーはどのような役割を果たせるのでしょうか?私たちの論文は、この疑問に答えられることを目的としています。
調査
私たちはまず、トータル・バリュー・ロック上位50サイトを含む78のDeFiサイトのリストを作成し、それらのサイトにおけるセキュリティやプライバシーの問題について分析するクローラーをつくりました。
軽量なフロントエンドとして構築されているにもかかわらず、いくつかのDeFiサイトはサードパーティに依存しており、時折、Ethereumアドレスをサードパーティ(主にAPIや分析プロバイダー)にリークしていることがわかりました。イーサリアムアドレスのGoogleへの漏洩が特に問題なのは、Googleがすでにお客様のPII(Personally Identifiable Information/個人を特定できる情報)を持っている可能性が高く、それをイーサリアムアドレスにリンクさせ、ブロックチェーン上のお客様の取引履歴とリンクさせることができるからです。広告事業者であるGoogleには、そのデータを収益化したいというインセンティブがあります。
また、多くのサイトでサードパーティのスクリプトが埋め込まれていることがわかりました。これは常にセキュリティ上のリスクではありますが、DeFiでは資産を扱うため、このリスクが特に顕著になります。また、サードパーティのスクリプトは、不正なウォレット取引に誘導したり、DeFiサイトのDOMを操作して、ユーザが不正取引を受け入れてしまいかねない環境をつくるなどにより、フィッシングをする可能性があります。今回調査した78のDeFiサイトのうち、66%となる48のDeFiサイトが少なくとも1つのサードパーティ製スクリプトを組み込んでおり、合計でサードパーティ製スクリプトは34個となりました。驚くことではありませんが、これらのスクリプトの中ではGoogleの存在が大きく、56%となる41のDeFiサイトがGoogleが提供するスクリプトを少なくとも1つ埋め込んでいました。
このブログ記事の下部にある一覧に、詳細な数字を記載しています。
Braveユーザへの影響
Braveユーザは、デフォルトでGoogle Analyticsをブロックしているため、DeFiサイトにGoogleの存在があったとしても基本的には影響を受けません。つまり、GoogleはあなたがどのDeFiサイトを訪れたかを知ることはできず、あなたのEthereumアドレスを知ることもできません。これは、いくつかのDeFiサイトで見つかったHotjarやFacebookのような他のトラッカーにも当てはまります。
対策
Braveがトラッキングスクリプトをブロックすることは、プライベートな環境でDeFiを使用する上で大きな意味を持ちますが、万能ではありません。例えば、あなたのEthereumアドレスがサードパーティに漏れる可能性はゼロとは言い切れません。自分のEthereumアドレスを自分で安全に管理しながらDeFiを利用する方法はないのでしょうか?
このプロジェクトの一環として、私たちはMetaMaskのproof-of-concept(概念実証)パッチを作成しました(MetaMaskはポピュラーなので使用しました)。”connect wallet(ウォレット接続)” ボタンをクリックした後、このパッチはユーザーの “本当の” Ethereumアドレスを、アドレスから派生した各サイト固有の仮のEthereumアドレスに置き換えます(詳細は論文のセクション5をご覧ください)。
例えば、あなたの本当のEthereumアドレスが “0x123…def” であった場合、我々のパッチによって、Uniswapでは0x321…789とみせて、Compoundでは0xabc…987とみせて、というようなイメージです。これにより、DeFiサイトやサードパーティがあなたの本当のEthereumアドレスを知ることや、DeFiサイト間であなたのブラウジングアクティビティをリンクしたりすることが難しくなります。(難しくはなりますが、完全に不可能ということにはなりません!)
上記を実現するためには、いくつかの仕掛けをする必要がありました。例えば、DeFiサイトに偽のアドレスを渡すと、サイトに誤った残高が表示され、取引が行えなくなるかもしれません。私たちのパッチでは、ウォレットの残高やEthereumアドレスを透過的に置き換えることで、DeFiサイトが正常に利用できるようになります。下の図は、ユーザーがexample.financeを訪れ、MetaMaskがサイトに仮のEthereumアドレスを渡していますが、残高が正しく表示されることを確認する、という一連の流れです。私たちのパッチは、ユーザーの実際のEthereumアドレスを含むようにトランザクションを書き換えてから、ブロックチェーンに反映させます。
なお、このパッチは現時点ではPoC(概念実証)段階であり、本番運用には適用していません。とはいえ、DeFiにはプライバシーを改善する余地があることを示しており、今後リリースされるBrave Walletでもその水準を高めていく予定です。
結論
Ethereumアドレスは、クレジットカードや銀行口座番号と同様に、機密性の高いプライベートな情報です。DeFiのサイトでは、これらの情報を適切に扱い、よほどの理由がない限り、Ethereumアドレスを第三者に公開するべきではありません。DeFiの “De “は “decentralized(分散化)”を意味しており、中央集権的なAPIや分析プロバイダーの使用を控えることで、DeFiがそれに応えることが重要ではないでしょうか。
また、この論文ではサードパーティのスクリプトを埋め込むような確立されたウェブ開発手法が、DeFiの文脈では特に問題となり、結果的にGoogleがDeFiユーザーを複数のサイトでトラッキングすることが可能となり、EthereumアドレスをGoogleがすでに保有している可能性のあるPII(個人を特定できる情報)に結びつけることができることを強調しています。
補足資料
次の表は、53のDeFiサイトを一覧化しており、2列目は埋め込んでいるのサードパーティスクリプトの数、3列目はユーザーのEthereumアドレスをリークしているサードパーティの数を集計しており、それぞれの項目に少なくとも一つ以上該当しているサイトを一覧にしています。2021年8月27日にデータを収集しています。なお、これらの数字は、私たちがアドレスのリークを見逃している可能性があるため、下限値としての表示になります。
Origin | No. of Scripts | No. of Leaks |
---|---|---|
zerion.io | 9 | 3 |
1inch.io | 8 | 1 |
dydx.exchange | 6 | 0 |
o3swap.com | 5 | 0 |
opensea.io | 4 | 0 |
instadapp.io | 4 | 0 |
bancor.network | 4 | 2 |
airswap.io | 4 | 0 |
rarible.com | 3 | 1 |
balancer.fi | 3 | 0 |
swapswap.org | 2 | 0 |
sushi.com | 2 | 0 |
saddle.exchange | 2 | 0 |
opyn.co | 2 | 0 |
notional.finance | 2 | 0 |
jelly.market | 2 | 1 |
idle.finance | 2 | 0 |
foundation.app | 2 | 0 |
dodoex.io | 2 | 2 |
bifi.finance | 2 | 3 |
alphafinance.io | 2 | 0 |
aave.com | 2 | 0 |
zapper.fi | 1 | 0 |
yield.is | 1 | 0 |
yearn.finance | 1 | 4 |
wing.finance | 1 | 0 |
wasabix.finance | 1 | 0 |
warp.finance | 1 | 0 |
vesper.finance | 1 | 0 |
uniswap.org | 1 | 0 |
truefi.io | 1 | 0 |
synthetix.io | 1 | 0 |
sablier.finance | 1 | 1 |
ribbon.finance | 1 | 0 |
reflexer.finance | 1 | 1 |
rari.capital | 1 | 0 |
rampdefi.com | 1 | 0 |
pickle.finance | 1 | 0 |
pancakeswap.finance | 1 | 0 |
oasis.app | 1 | 0 |
moonswap.fi | 1 | 0 |
maple.finance | 1 | 0 |
inverse.finance | 1 | 0 |
indexcoop.com | 1 | 0 |
impermax.finance | 1 | 1 |
for.tube | 1 | 0 |
dmm.exchange | 1 | 0 |
dfyn.network | 1 | 0 |
debank.com | 1 | 0 |
codefi.network | 1 | 0 |
boringdao.com | 1 | 0 |
loopring.io | 0 | 2 |
defisaver.com | 0 | 3 |