著者: 考える

背景

TON エコロジー プロジェクトが加熱するにつれて、Web3 フィッシング ギャングも TON エコロジーの戦場に参入し始めています。現在、TonConnect SDK は、クロスプラットフォーム/アプリケーションのウォレット接続と相互作用の問題を解決するために TON エコシステムで使用されています。このようなソリューションでは、クロスプラットフォーム/アプリケーションの通信中にドメイン名の検証をどのように解決するかという問題が必然的に発生します。

通常、ユーザーがウォレットを使用して DApp に接続したり、署名リクエストのソースが信頼できるかどうかを確認したりできるようにするために、ウォレットはリクエストの承認ページでソースのドメイン名を入力するよう求め、ユーザーがより適切に検証できるようにします。リクエストのソースが操作のソースと一致しているかどうかを確認することで、悪意のあるソースからの署名リクエストによる詐欺を回避します。

SlowMist セキュリティ チームは、このタイプのウォレットと DApp の間のクロスプラットフォーム/アプリケーション通信におけるドメイン名検証のセキュリティ問題を以前に発見しました。MetaMask SDK および WalletConnect Web3Modal のプロジェクト チームと連絡を取り合い、この問題に対処するのは難しいことがわかりました。と。したがって、MetaMask と WalletConnect はまだこの問題を完全には解決していません。

最近、TON エコシステムの TonConnect SDK にも同様の問題があることが判明したため、ユーザーがそのようなリスクを特定して防止するのに役立つことを期待して、ここで公開します。

分析する

通常、ブラウザ拡張機能ウォレットが DApp と対話するとき、Web ページとブラウザ拡張機能の間でメッセージを転送するために、JS スクリプト (コンテンツ スクリプト) が Web ページに挿入されます。 Web ページがコンテンツ スクリプトと通信するときは、window.postmessage および window.addEventListener が使用されます。window.addEventListener は、メッセージの発信元を取得することでメッセージをさらに処理できます。この特定の操作には、ブラウザでのメッセージの発信元の表示が含まれます。拡張ウォレットを確認し、メッセージの発信元がブラックリストに含まれているかどうかを判断し、メッセージの発信元に対して認証やその他の操作を実行します。 Origin はブラウザが提供する機能を利用して取得するため、偽造することはできません。

ただし、プラットフォーム/アプリケーション間で通信する場合、メッセージは通常、メッセージ転送サーバーを介して転送され、メッセージ転送サーバーがメッセージの開始元のドメイン名を確認するのは困難です (クライアント データは偽造される可能性があるため)。メッセージのソースが偽造されているという問題がある場合、クロスプラットフォーム/アプリケーションのメッセージ通信には次の 2 つのシナリオがあります。

  • ブラウザ Web ページ <=> メッセージ転送サーバー <=> ウォレット APP

  • 他のアプリ <=> メッセージ転送サーバー <=> ウォレットアプリ

TonConnect SDK を例に挙げると、DApp はウォレットと DApp 間のメッセージ通信のツールとして TonConnect SDK を使用します。ただし、dappMetadata のデータは、悪意のある DApp として偽装される可能性があります。 dappMetadata を変更することで有効な Web サイトを作成し、ユーザーを欺きます。

オリジンを ton.org に偽装するには、manifest.json を次のコンテンツに設定します。

以下は、上記のコードをデプロイした後の PoC です。次に、QR コードをスキャンして解析します。

TonConnect SDK は、メッセージ転送サーバーを介して転送する他の SDK とは異なり、QR コードを介してマニフェスト URL データをウォレット アプリケーションに渡します。ウォレット アプリケーションは、スキャンによって取得されたmanifestUrlデータを解析します。ウォレットと通信するために任意の DApp のオリジンを簡単に偽造できることがわかります。言い換えれば、攻撃者はこの欠陥を利用して既知の DApp を偽造し、フィッシングや詐欺攻撃を実行できる可能性があります。

https://app.tonkeeper.com/ton-connect?v=2&id=24e3f2fdbea19fcd4fe03da3bc3d534d8b988edd01736f0b127a70cf2c531661&r={"manifestUrl":"https://tonconnect.pages.dev/tonconnect-manifest.json","items":[{"名前":"ton_addr"}]}

接続が成功すると、偽造された DApp は TonConnect を通じて署名アプリケーションを開始し、ユーザーが確認すると、ウォレットは署名されたデータをブロックチェーンにブロードキャストします。送信元の偽造は非常に欺瞞的なため、ユーザーが接続や署名リクエストの送信元を特定するのは困難です。

MetaMask SDK では、dappMetadata を変更することで、それをよく知られた DApp に偽装して、フィッシングや詐欺攻撃を実行できます。

同様に、WalletConnectModalSign ではメタデータを変更するだけです。

要約する

現在、主流のウォレットと DApps の間のクロスプラットフォーム/アプリケーション通信におけるドメイン名検証の問題に対する適切な解決策がないため、SDK プロジェクトでは通常、次のような追加の検証方法が追加されます。 WalletConnect の検証メカニズム (https://docs.walletconnect . com/cloud/verify)、DApp がドメイン名の検証に合格した後、ウォレットは Verify API を使用してドメイン名が信頼できるかどうかを判断できます。

ただし、多くの主流 DApp はドメイン名を検証しないため、このソリューションでは偽のオリジンフィッシング攻撃を解決するのは困難です。大多数の DApps が Verify を使用してドメイン名を認証すれば、ユーザーはますます蔓延する偽オリジンフィッシング攻撃からほぼ保護されることになります。また、SlowMist セキュリティ チームは、このような攻撃を回避するために、開いた Web サイトが承認を求められたドメイン名と一致するかどうかを確認することに注意することをユーザーに推奨しています。