setApprovalForAllとは: コレクション全体を流出させるNFT承認
— By Tony Rabbit in Tutorials

setApprovalForAll詐欺は、単一の署名でNFTコレクション全体に対するオペレーター制御を付与するように騙すことで機能します。この機能がどのように動作するか、ERC-20アローアンスとどう異なるか、署名前にリクエストを読み取る方法、そして取り消し方法を学びましょう。
setApprovalForAll詐欺は、NFTコレクションが流出する最も一般的な方法であり、ほとんどの場合、あなたが完全に読んでいない1つの署名から始まります。setApprovalForAll関数は、ERC-721およびERC-1155トークン仕様の標準的な一部です。これを呼び出すと、別のアドレスを「オペレーター」として指定し、そのオペレーターに、特定のコレクションコントラクトから現在および将来にわたって保有するすべてのNFTを移動する許可を与えます。アイテムごとの制限や金額フィールドはありません。攻撃者があなたのオペレーターとして設定されると、彼らは再度署名を求めることなく、そのコントラクトからあなたのコレクション全体を一度に転送できます。このガイドでは、この許可が正確に何をするのか、なぜトークンアローアンスと機械的に異なるのか、悪意のあるサイトがリクエストをどのように偽装するのか、そしてそれを監査および取り消す方法を正確に説明します。
主なポイント
- setApprovalForAllは、単一のアイテムではなく、1つのコントラクトからのNFTコレクション全体に対するオペレーター制御を付与します。
- 数量または金額フィールドがないため、この許可は取り消されるまで実質的に無制限かつ永続的です。
- 偽のミントや偽造マーケットプレイスは、NFTの「有効化」または「出品」を装ってこれを要求します。
- オペレーター承認の取り消しは、ERC-20トークンアローアンスの取り消しとは別の行動です。
setApprovalForAllが実際に付与するもの
setApprovalForAllは、オペレーターアドレスとブール値(trueまたはfalse)の2つの引数を取ります。値をtrueに設定して署名すると、NFTコントラクトは、指定されたオペレーターがそのコントラクト内であなたが所有する任意のトークンIDに対してtransferFromおよびsafeTransferFromを呼び出すことを許可されていると記録します。これはコレクション全体の権限です。今日あるプロジェクトから10個のNFTを保有し、来月さらに5個をミントした場合でも、オペレーターは新しい署名なしで15個すべてを移動できます。
これが理解すべき最も重要なことです。承認は特定のNFTではなく、コレクションコントラクトとオペレーターに紐付けられています。あなたは「この1つの猿」を承認しているわけではありません。あなたは「このオペレーターキーを持つ誰でも、このコントラクトから私が所有するすべてを無期限に持ち去ることができる」と承認しているのです。これは、誰かに部屋のマスターキーを渡し、それを保持させることのNFT版です。この永続性こそが、setApprovalForAllがNFTウォレット流出の大部分の背後にある理由です。
ERC-20の支出上限アローアンスとの違い
ほとんどの人は、ERC-20トークンを通じて「承認」という言葉に初めて出会います。そこでは、approve関数が支出上限を設定します。これは、100 USDCのように、使用者が引き出すことができる数値のアローアンスです。ERC-20のリスクは、dAppsが利便性のために無制限の上限を要求する無限承認パターンです。しかし、無限のERC-20アローアンスであっても、1つのトークンに限定されます。setApprovalForAllは、数値ではなくブールスイッチであり、コレクション内のすべての保有物を一度にカバーするため、異なる形のリスクです。この概念に不慣れな場合は、当社の承認トランザクションガイドで、その根底にあるメカニズムをより深く説明しています。
偽のミントや偽造マーケットプレイスがそれを要求する方法
攻撃者は、文脈を無視してsetApprovalForAllを要求することはほとんどありません。彼らはそれを通常の操作に偽装します。無料または割引ドロップを約束する偽のミントページは、「ミント」をクリックした瞬間にウォレットリクエストをポップアップさせますが、そのリクエストは実際にはあなたがすでに所有しているコレクションに対するsetApprovalForAllです。ハッキングされたソーシャルアカウントや有料広告を通じて宣伝されることが多い偽造マーケットプレイスのクローンは、何かを出品する前に「有効化」または「取引承認」を求めます。正当なマーケットプレイスもsetApprovalForAllを使用するため、偽のバージョンが説得力を持つのはそのためです。
この欺瞞が機能するのは、あなたが期待するアクション(ミント、出品、請求)がもっともらしく、ウォレットがほとんどのユーザーが認識しない関数名を表示するためです。このパターンは、悪意のあるトランザクションが明らかな転送ではなく承認であるアイスフィッシング、およびより広範な署名フィッシング戦術と大きく重複します。署名ステップ中に資産がウォレットから離れることはないため、まだ何も盗まれたようには見えません。流出は、オペレーターがtransferFromを呼び出してコレクションを掃き出す数分または数時間後に発生します。その時までに、承認はすでにその役割を果たしています。
署名前にリクエストを読み取る方法
唯一最善の防御策は、ウォレットのプロンプトを読み取ることを学ぶことです。サイトがトランザクションをトリガーすると、最新のウォレットは呼び出されているコントラクトメソッドを表示します。「setApprovalForAll」と、それを必要としないはずのアクションに対して「true」に設定されたパラメーターが表示された場合は、停止してください。目の前の操作が本当にコレクション全体の許可を必要とするのかどうかを問いかけてください。エアドロップの請求、ギャラリーの閲覧、サイトへの接続には、決してこれを必要とすべきではありません。
3つのことを確認してください。まず、関数名: setApprovalForAllですか?次に、オペレーターアドレス: 使用しようとしたプラットフォームの検証済みコントラクトと一致しますか、それとも未知のアドレスですか?第三に、ブール値: trueは付与、falseは取り消しを意味します。多くのドレイナーサイトは、あなたが自動的にプロンプトをクリックすることを当てにしています。偽造マーケットプレイスは、以前にやり取りしたことのないサイトでコレクションの承認を求めることもよくあります。これは強い危険信号です。何か不明な点があれば、リクエストを拒否し、再度試す前にURLを独自に検証してください。これらのフローのほとんどは、プロンプトを日常的に見せるように設計された既製のウォレットドレイナーキットによって動かされています。
オペレーター承認を監査および取り消す方法
オペレーター承認はERC-20アローアンスとは異なる表面に存在するため、トークンの支出上限のみを表示するツールやダッシュボードでは、それらがまったく表示されない場合があります。適切に監査するには、「approvals for all」とラベル付けされたり、コレクションごとに表示されたりするNFTオペレーター承認を明示的にリストする取り消しツールを使用してください。ウォレットを読み取りモードで接続し、オペレーターが設定されているすべてのコレクションを確認し、認識できない、またはもはや使用していないオペレーターアドレスを特定してください。
取り消すには、同じコレクションコントラクトでsetApprovalForAllを再度呼び出し、今回はそのオペレーターに対してブール値をfalseに設定します。これはオンチェーントランザクションであるため、gasがかかり、コレクションごと、オペレーターごとに行う必要があります。すべてのコントラクトにわたるすべてのNFT承認を一度にクリアする単一のボタンはありません。当社のステップバイステップの取り消しチュートリアルでは、トークンアローアンスとオペレーター承認の両方のプロセスを示しています。特に新しいミントサイトやマーケットプレイスを使用した後は、これを一度限りのクリーンアップではなく、定期的な習慣にしてください。
未知のコントラクトを包括的に承認することを避ける習慣
予防はクリーンアップよりも安価です。積極的に使用している資金とNFTのみを保持する専用の「ミント用」ウォレットを保持し、誤った承認が長期保有資産を危険にさらさないようにしてください。すべてのsetApprovalForAllリクエストを形式的なものではなく、意図的な決定として扱い、広告、ダイレクトメッセージ、または一方的なリンクを通じてアクセスしたサイトでは決して承認しないでください。マーケットプレイスとミントのURLは、ドレイナーオペレーターによって日常的にハイジャックされる検索広告ではなく、公式ソースから検証してください。
最後に、ルーティンを構築しましょう。毎月承認を確認し、古いものは取り消し、一度限りのミントサイトの使用を終えたらすぐに取り消してください。オペレーター承認は自動的に期限切れにならないため、忘れられたプロジェクトからの古い許可は、アクティブなままにしておく限り、生きた攻撃対象として残ります。数分間の監査は、取り消しにかかるgasよりもはるかに価値のある資産を保護します。
この記事は教育目的のみであり、金融アドバイスではありません。