BTC
ETH
HTX
SOL
BNB
View Market
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

サイン盗まれた? Uniswap Permit2 署名フィッシングに注意してください

星球君的朋友们
Odaily资深作者
2023-06-10 08:30
この記事は約3999文字で、全文を読むには約6分かかります
Uniswap とやり取りしたアドレスはリスクにさらされる可能性があります。
AI要約
展開
Uniswap とやり取りしたアドレスはリスクにさらされる可能性があります。

*この記事は、Beosin のゲスト独立研究者 Spinach Spinach によって後援されました。 (twitter@wzxznl) Beosin セキュリティ研究者の Sivan との共著投稿。

ハッカー、これは Web3 エコシステムのすべての人を怖がらせる存在です。プロジェクト側にとって、世界中のハッカーがあなたを睨むかもしれないとき、コードのオープンソースの性質により、プロジェクト側は、間違ったコード行を書くことを恐れます。抜け穴を放置しておくと、一度セキュリティインシデントが発生すると、その影響に耐えることが難しくなります。

個人的には、自分が何をしているのか理解していなければ、チェーン上のあらゆるやり取りや署名は資産を盗まれる可能性があります。そのため、暗号化の世界においてセキュリティ問題は常に最も厄介な問題の一つであり、ブロックチェーンの特性上、一度資産が盗まれてしまうと回復する方法がほとんどないため、セキュリティに関する知識を身に付けることが特に重要となります。暗号化の世界では。

つい最近、Beosin さんの親友であるほうれん草さんが新しい漁法を発見し、2 か月近く活動を続けています。署名が盗まれる限り、その方法は極めて隠蔽されており、防ぐことは困難です。さらに、Uniswap とやり取りしたアドレスはリスクにさらされる可能性があります。この記事では、Beosin と独立研究者の Pincai が、誰もがこれ以上の資産損失を回避できるように、この特徴的なフィッシング手法を普及させます。

最初のレベルのタイトル

プロセス

最近、友人 (仮にリトル A と名付けられました) が、財布の中の資産が盗まれた後、ホウレンソウを見つけました。一般的な盗難方法とは異なり、リトル A は秘密鍵を公開せず、フィッシング Web サイトのコントラクトを操作しませんでした。そのため、ホウレンソウは、財産の窃盗が捜査された。

ブロックチェーンブラウザでは、スモールAウォレットから盗まれたUSDTがTransfer From関数を通じて転送されたことがわかります。ここで科学を普及させましょう. イーサリアムでトークンを転送するとき、実際にはトークン スマート コントラクトの転送機能を呼び出します. 2 つの違いは単に、転送が資産所有者自身の操作であり、トークンを他のアドレスに転送することです。 Transfer From は、サードパーティがアドレス内のトークンを他のアドレスに転送します。これは、ウォレットの秘密鍵が漏洩したのではなく、盗まれた資産が別のアドレスから転送されたことも意味します。

トランザクションの詳細をクエリすると、いくつかの重要な手がかりが見つかります。

f d5 1 で終わるアドレスは、Little A の資産を a 0 c 8 で終わるアドレスに転送します。

この操作は Uniswap の Permit 2 コントラクトと連携します。

ここで疑問が生じます。f d5 1 で終わるアドレスはどのようにしてこのアセットの許可を得たのでしょうか?なぜUniswapと関係があるのでしょうか?

まず、Transfer From 関数を正常に呼び出すための前提条件は、呼び出し元がこのトークンのクォータ権限、つまり承認を持っている必要があることを知っておく必要があります。 Dapp を使用する場合、資産の譲渡が含まれる場合、Dapp 契約が資産を譲渡する権利を有するように、最初に承認 (承認) 操作を実行する必要がある場合があります。

この謎を解くためには、掘り下げ続ける必要があります。答えは f d5 1 で終わるアドレスの対話記録にあります。Little A の資産を転送するためのアドレスからの転送の前に、アドレスは Permit 操作も実行していることがわかります。これら 2 つの操作の相互作用オブジェクトは Uniswap の Permit 2 コントラクトであり、この Permit 関数と Uniswap Permit 2 とは何ですか状況?

Uniswap Permit 2 コントラクトは、Uniswap が 2022 年末に開始した新しいスマート コントラクトです。公式声明によると、これはトークン承認コントラクトであり、トークン承認をさまざまなアプリケーションで共有および管理できるようになり、より統合された、より多くのアプリケーションを作成できます。コスト効率が高く、より安全なユーザー エクスペリエンス。

そして将来的には、Permit 2 と統合するプロジェクトが増えるにつれて、Permit 2 はすべてのアプリケーションで標準化されたトークンの承認を達成できるようになります。 Permit 2 は、スマート コントラクトのセキュリティを強化しながら、トランザクション コストを削減することでユーザー エクスペリエンスを向上させます。

画像の説明

画像ソース: https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit 2

Permit 2 のローンチは、Dapp エコシステム全体のゲーム ルールを変える可能性があります。簡単に言うと、従来の方法では、アセット転送のために Dapp と対話するたびに承認する必要がありますが、Permit 2 ではこのステップを保存できます。ユーザーのインタラクションコストを非常に効果的に削減し、より良いユーザーエクスペリエンスをもたらします。

解決策は、Permit 2 がユーザーと Dapp の間の仲介者として機能することです。ユーザーは、Permit 2 コントラクトに対するトークンの許可を承認するだけで済みます。Permit 2 コントラクトを統合するすべての Dapp は、この承認量を共有できます。ユーザーの場合インタラクション コストが削減され、ユーザー エクスペリエンスが向上します。Dapp にとって、ユーザー エクスペリエンスの向上は、より多くのユーザーと資金をもたらします。これは双方にとって有利な状況ですが、同時に両刃の剣になる可能性もあります。問題は 2 つの対話型にあります。

画像の説明

画像ソース: https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit 2

Permit 2 の登場により、将来 Dapp ゲームのルールが変わる可能性がありますが、これは強力な諸刃の剣であることがわかり、ユーザーにとって、オフチェーン署名は防御を解除する最も簡単なリンクです。例えば、ウォレットを使って一部のDappsにログインする際、接続に署名が必要になりますが、ほとんどの人は署名の内容をよく確認せず、署名の内容を理解していません。これが最も怖い部分です。

Permit 2 コントラクトを理解した後、小規模な A インシデントに戻ると、盗まれた資産が Permit 2 コントラクトと相互作用する理由が理解できるため、ほうれん草にこの Permit 2 署名フィッシング手法を再現してもらいます。最初のものが非常に重要です。前提条件は次のとおりです。フィッシングされたウォレットには、Uniswap の Permit 2 コントラクトに対して承認されたトークンが必要であることを Spinach は、Permit 2 と統合された Dapp または Uniswap でスワップが実行される限り、Permit 2 コントラクトに対して承認される必要があることを発見しました (下の写真は Spinach A セキュリティです)プラグインが使用されます)。

もう 1 つの恐ろしい点は、どれだけスワップしたいとしても、Uniswap の Permit 2 コントラクトでは、デフォルトでトークンの残高全体を承認できることです。MetaMask では入力量をカスタマイズできますが、ほとんどの人は直接クリックすると思います最大値またはデフォルト値に基づいており、Permit 2 のデフォルト値は無制限のクォータです。

これは、Uniswap とやり取りし、2023 年以降に Permit 2 契約への金額を承認している限り、このフィッシング詐欺のリスクにさらされることも意味します。

最初のレベルのタイトル

副題

許可機能:

Permit 機能は、オンラインで契約に署名する方法と考えることができます。この機能を使用すると、(PermitSingle)"契約"、他の人(支出者)が将来のある時点であなたのトークンの一部を使用できるようにします。

同時に、これを証明するために、紙の契約書に署名するのと同じように、署名(署名)を行う必要もあります。"契約"署名したのは本当にあなたです。

では、この機能はどのように機能するのでしょうか?

  1. まず、現在時刻が署名の有効期限 (sigDeadline) を超えているかどうかがチェックされます。署名した契約に有効期限があるのと同じように、現在時刻が有効期限を超えている場合は、"契約"使用できなくなり、プログラムが直接停止します。

  2. 次に、あなたの署名が本当にあなたのものであるかどうかがチェックされます。プログラムは特別なメソッド (signature.verify) を使用して署名をチェックし、その署名が本当にユーザーによって署名されており、他人によって偽造されていないことを確認します。

  3. 最後に、チェックに合格すると、プログラムはレコードを更新して、他の人にトークンの一部の使用を許可したことを記録します。

副題

検証関数:

副題

_updateApproval 関数:

署名の検証に合格すると、_updateApproval 関数が呼び出されて認証値が更新されます。これは、アクセス許可が転送されたことを意味します。このとき、以下のコードのように、transferfrom関数を呼び出して認可後にトークンを指定アドレスに転送すると便利です。

さて、許可機能を説明した後、チェーン上の実際のトランザクションを見てみましょう。この対話の詳細を確認できます。

所有者はリトル A のウォレットアドレス (末尾番号 308a)

詳細では、認可されたトークン契約アドレス (USDT) と金額、その他の情報が表示されます。

Spender は、末尾番号 f d5 1 を持つハッカーのアドレスです。

sigDeadlineは署名の有効時刻、signatureはLittle Aの署名情報です。

そして、リトルAの交流記録を振り返ると、次のことがわかります。A 君は以前 Uniswap を使用したとき、デフォルトの認証制限 (ほぼ無制限) をクリックしました。

ただ再生してみると、Little A は以前 Uniswap を使用する過程で Uniswap Permit 2 の無制限の USDT クォータを承認しましたが、Little A はウォレット操作を実行する際にハッカーが設計した Permit 2 シグネチャのフィッシング トラップに誤って陥り、ハッカーは Little A の署名を取得しました。その後、次の 2 つの操作が行われました。 Permit と Transfer From は、Little A の資産を譲渡するために、Little A の署名を使用して Permit 2 契約で実行されました。画像の説明

出典: https://etherscan.io/address/0x000000000022d473030f116ddee9f6b43ac78ba3

画像の説明

最初のレベルのタイトル

文章

Uniswap Permit 2 コントラクトが将来的により一般的になる可能性があり、より多くのプロジェクトが認可共有のために Permit 2 コントラクトを統合することを考慮すると、次のような効果的な防止方法が考えられます。

1 署名の内容を理解し、特定します。

Permit の署名形式には、通常、Owner、Spender、value、nonce、および期限のキー形式が含まれていますが、Permit 2 の利便性と低コストを享受したい場合は、この署名形式を認識できるようにする必要があります。 (セキュリティプラグインをダウンロードすることをお勧めします)

以下の Beosin Alert フィッシング対策プラグインを読者や友人にお勧めします。これは、Web3 分野のほとんどのフィッシング Web サイトを識別し、ウォレットと資産のセキュリティを保護します。

フィッシング対策プラグインのダウンロード:

https://chrome.google.com/webstore/detail/beosin-alert/lgbhcpagiobjacpmcgckfgodjeogceji? hl=en

2 アセットウォレットとインタラクティブウォレットは別々に使用されます。

大量の資産をお持ちの場合は、すべての資産をコールド ウォレットに保管し、少量の資金をチェーン上のインタラクティブ ウォレットに保管することをお勧めします。これにより、フィッシング詐欺の場合の損失を大幅に軽減できます。

3 許可 2 契約に過剰な金額を許可しないでください。または許可を取り消してください。

Uniswap で Swap を実行する場合は、対話したい金額のみを承認するため、各対話には再承認が必要となり、ある程度の対話コストが発生しますが、Permit 2 の署名フィッシングを回避できます。クォータをすでに承認している場合は、対応するセキュリティ プラグインを見つけて承認をキャンセルできます。

4 トークンの性質と、トークンが許可機能をサポートしているかどうかを確認します。

将来的には、ますます多くの ERC 20 トークンがこの拡張プロトコルを使用して許可機能を実現する可能性があります。保有しているトークンがこの機能をサポートしているかどうかに注意する必要があります。サポートしている場合は、トランザクションや操作は行われません。十分に注意して、未知の署名が許可機能の署名であるかどうかを厳密に確認してください。

5 騙された後に他のプラットフォームにトークンが保存されている場合は、包括的な救済計画を策定する必要があります。

ハッカーによって詐欺に遭い、トークンが流出したことがわかったものの、プレッジなどの方法で他のプラットフォームにトークンが保存されている場合は、トークンを引き出して安全なアドレスに転送する必要があります。今度は、ハッカーが常にあなたを監視している可能性があることを知っておく必要があります。アドレスのトークン残高は、ハッカーがあなたの署名を持っているため、盗まれたアドレスにトークンが表示されている限り、ハッカーはそれを直接転送できます。現時点では、完全なトークンレスキュープロセスを策定する必要がある トークンの抽出とトークンの転送という 2 つのプロセスを同時に実行する必要がある ハッカーのトランザクションを挿入することはできない MEV 転送を使用できるため、ブロックチェーンの知識とある程度の知識が必要コード スキル: トランザクション プリエンプション スクリプトを使用してこれを実現する Beosin チームなどの専門のセキュリティ会社を見つけることができます。

今後、許可2に基づいた漁業が増えてくると思いますが、副題

Reference:

https://t.co/G9Mnq8eUle

https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit2

安全性
Uniswap
財布