# NFTコントラクトのセキュリティ分析:2022年上半期のイベントの振り返りとよくある質問の議論2022年上半期、NFT分野では安全事件が頻発し、巨大な経済的損失を引き起こしました。統計によると、この半年間に10件の重大なNFT安全事件が発生し、総損失は6490万ドルに達しました。攻撃手段は主に契約の脆弱性の悪用、秘密鍵の漏洩、フィッシングなどです。特に、Discordプラットフォーム上でのフィッシング攻撃が横行しており、ほぼ毎日サーバーが攻撃を受け、多くのユーザーが悪意のあるリンクをクリックしたために損失を被っています。! 【上半期のNFTセキュリティインシデントの分析:警戒すべき典型的なケースは何か】 ](https://img-cdn.gateio.im/social/moments-f85923b3f0a55ae7230fc5950c904d1e)## 典型的なセキュリティ事件の分析### TreasureDAOイベント3月3日、TreasureDAO取引プラットフォームが攻撃を受け、100以上のNFTが盗まれました。問題はTreasureMarketplaceBuyerコントラクトのbuyItem関数にありました。この関数は総価格を計算する際にトークンの種類を判断せず、数量と単価を直接掛け算していました。これにより、攻撃者はERC-20トークンの支払い額が0の状態でTreasureMarketplaceコントラクトのbuyItem関数を呼び出してトークンを購入できるようになりました。根本的な原因は、ERC-1155とERC-721トークンの混用によって引き起こされた論理の混乱です。ERC-721トークン自体には数量の概念がありませんが、契約は数量を用いて購入価格を計算し、最終的な転送の実現において論理的な分離が行われていません。### APE Coinエアドロップイベント3月17日、ハッカーはフラッシュローンを通じて6万枚以上のAPE Coinエアドロップを取得しました。問題はAirdropGrapesTokenエアドロップ契約にありました。契約はalpha.balanceOf()とbeta.balanceOf()を使用して呼び出し元のBAYC/MAYC NFTの所有権を判断しますが、この方法ではユーザーのNFT所有権の瞬間的な状態しか取得できず、その状態はフラッシュローンによって操作可能です。攻撃者はこの脆弱性を利用して、フラッシュローンでBAYC NFTを借り入れ、対応するエアドロップを取得しました。### Revest Financeイベント3月27日、Revest Financeプロジェクトが攻撃を受け、約12万ドルの損失が発生しました。これは典型的なERC-1155再入攻撃です。問題はRevest契約にあります。ユーザーがdepositAdditionalToFNFT()を使用してFNFT担保資産を追加する際、契約はまず古いFNFTを破棄し、その後新しいFNFTを鋳造する必要があります。しかし、鋳造プロセス中にmin()関数は、鋳造されるFNFTが既に存在するかどうかを確認せず、fnftId状態変数は_mint()関数の後に自動的に増加します。そして、_min()の中にはERC-1155の隠れた外部呼び出し_doSafeTransferAcceptanceCheck()が存在し、これが再入脆弱性を引き起こしました。### NBAウールピッキング事件4月21日、NBAプロジェクトが攻撃を受けました。問題はThe_Association_Sales契約の署名検証メカニズムにあります。主に2つのセキュリティリスクがあります:署名の盗用と署名の再利用です。署名の再利用は、契約が使用済みの署名を保存していないため、攻撃者が同じ署名を何度も繰り返し使用できることに起因します。署名の盗用は、vDataメモリパラメータinfoの引数渡しの際にmsg.senderの検証が行われていないため、署名が盗用される可能性があります。### Akutarイベント4月23日、NFTプロジェクトAkutarのAkuAuction契約が脆弱性により11539ETH(約3400万ドル)がロックされました。契約には2つの論理的脆弱性があります。1. 返金関数processRefundsはcall関数を使用して返金を行い、返金結果をrequireの判定条件として使用します。攻撃者はfallback内で悪意のあるrevertを行うことで、全体のコントラクトの返金操作が実行できなくなります。2. 返金関数の2つの判断条件は、ユーザーが複数のNFTに入札できる状況を考慮しておらず、プロジェクトチームがその後の返金操作を永遠に実行できない原因となっています。### XCarnival イベント6月24日、NFTレンディングプロトコルXCarnivalが攻撃を受け、ハッカーは3087枚のイーサリアム(約380万ドル)を得ました。問題はXNFTコントラクトのpledgeAndBorrow関数にありました。この関数はNFTを質入れする際に、攻撃者が渡したxTokenアドレスがプロジェクトのホワイトリストにあるかどうかを確認せず、借り入れの際に担保記録の状態を検査しなかったため、攻撃者は無効な担保記録を繰り返し使用して借り入れを行うことができました。! 【上半期のNFTセキュリティインシデントの分析:警戒すべき典型的なケースは何か】 ](https://img-cdn.gateio.im/social/moments-1888562fb8639d0fb586b639d3e5eb87)## NFT契約監査のよくある質問1. 署名のなりすましと再利用: - 署名データに重複実行の検証が欠けており、ユーザーのnonceが不足しているため、再利用可能な署名データでNFTを鋳造することができます。 - サインチェックが不合理であり、署名者がゼロアドレスである場合をチェックしていないため、任意のユーザーがチェックを通じてコインを鋳造できる。2. ロジックの欠陥: - コントラクト管理者は特別な方法でコインを鋳造でき、総量制限を受けず、NFTの実際の量が予想を超える可能性があります。 - NFTオークション時、勝者は取引順序依存攻撃を利用して入札価格を変更し、低価格でNFTを取得できます。3. ERC721/ERC1155 リエントランシー攻撃: - onERC721Received関数を使用して転送通知機能を使用する場合、NFTコントラクトが転送先コントラクトに呼び出しを送信すると、再入攻撃の原因となる可能性があります。4. 権限の範囲が広すぎる: - ステーキングまたはオークション時に_operatorApprovalsの承認が必要であり、個別のトークンの承認ではなく、NFTの盗難リスクが増加します。5.価格操作: - NFTの価格は特定の契約のトークン保有量に依存し、攻撃者はフラッシュローンを利用してトークン価格を引き上げ、質押されたNFTが異常に清算される可能性があります。NFT契約のセキュリティ事件が頻発していることを考慮すると、監査プロセス中に発見された脆弱性が実際の攻撃と一致することが多いため、専門のセキュリティ会社にNFT契約の包括的な監査を依頼することが特に重要です。! 【上半期のNFTセキュリティインシデントの分析:警戒すべき典型的なケースは何か】 ](https://img-cdn.gateio.im/social/moments-d101c45dd9b43f58f7f9c7919dd3918)
NFT契約の安全リスク分析:2022年上半期の事件回顧と監査のポイント
NFTコントラクトのセキュリティ分析:2022年上半期のイベントの振り返りとよくある質問の議論
2022年上半期、NFT分野では安全事件が頻発し、巨大な経済的損失を引き起こしました。統計によると、この半年間に10件の重大なNFT安全事件が発生し、総損失は6490万ドルに達しました。攻撃手段は主に契約の脆弱性の悪用、秘密鍵の漏洩、フィッシングなどです。特に、Discordプラットフォーム上でのフィッシング攻撃が横行しており、ほぼ毎日サーバーが攻撃を受け、多くのユーザーが悪意のあるリンクをクリックしたために損失を被っています。
! 【上半期のNFTセキュリティインシデントの分析:警戒すべき典型的なケースは何か】 ](https://img-cdn.gateio.im/webp-social/moments-f85923b3f0a55ae7230fc5950c904d1e.webp)
典型的なセキュリティ事件の分析
TreasureDAOイベント
3月3日、TreasureDAO取引プラットフォームが攻撃を受け、100以上のNFTが盗まれました。問題はTreasureMarketplaceBuyerコントラクトのbuyItem関数にありました。この関数は総価格を計算する際にトークンの種類を判断せず、数量と単価を直接掛け算していました。これにより、攻撃者はERC-20トークンの支払い額が0の状態でTreasureMarketplaceコントラクトのbuyItem関数を呼び出してトークンを購入できるようになりました。
根本的な原因は、ERC-1155とERC-721トークンの混用によって引き起こされた論理の混乱です。ERC-721トークン自体には数量の概念がありませんが、契約は数量を用いて購入価格を計算し、最終的な転送の実現において論理的な分離が行われていません。
APE Coinエアドロップイベント
3月17日、ハッカーはフラッシュローンを通じて6万枚以上のAPE Coinエアドロップを取得しました。問題はAirdropGrapesTokenエアドロップ契約にありました。契約はalpha.balanceOf()とbeta.balanceOf()を使用して呼び出し元のBAYC/MAYC NFTの所有権を判断しますが、この方法ではユーザーのNFT所有権の瞬間的な状態しか取得できず、その状態はフラッシュローンによって操作可能です。攻撃者はこの脆弱性を利用して、フラッシュローンでBAYC NFTを借り入れ、対応するエアドロップを取得しました。
Revest Financeイベント
3月27日、Revest Financeプロジェクトが攻撃を受け、約12万ドルの損失が発生しました。これは典型的なERC-1155再入攻撃です。問題はRevest契約にあります。ユーザーがdepositAdditionalToFNFT()を使用してFNFT担保資産を追加する際、契約はまず古いFNFTを破棄し、その後新しいFNFTを鋳造する必要があります。しかし、鋳造プロセス中にmin()関数は、鋳造されるFNFTが既に存在するかどうかを確認せず、fnftId状態変数は_mint()関数の後に自動的に増加します。そして、_min()の中にはERC-1155の隠れた外部呼び出し_doSafeTransferAcceptanceCheck()が存在し、これが再入脆弱性を引き起こしました。
NBAウールピッキング事件
4月21日、NBAプロジェクトが攻撃を受けました。問題はThe_Association_Sales契約の署名検証メカニズムにあります。主に2つのセキュリティリスクがあります:署名の盗用と署名の再利用です。署名の再利用は、契約が使用済みの署名を保存していないため、攻撃者が同じ署名を何度も繰り返し使用できることに起因します。署名の盗用は、vDataメモリパラメータinfoの引数渡しの際にmsg.senderの検証が行われていないため、署名が盗用される可能性があります。
Akutarイベント
4月23日、NFTプロジェクトAkutarのAkuAuction契約が脆弱性により11539ETH(約3400万ドル)がロックされました。契約には2つの論理的脆弱性があります。
XCarnival イベント
6月24日、NFTレンディングプロトコルXCarnivalが攻撃を受け、ハッカーは3087枚のイーサリアム(約380万ドル)を得ました。問題はXNFTコントラクトのpledgeAndBorrow関数にありました。この関数はNFTを質入れする際に、攻撃者が渡したxTokenアドレスがプロジェクトのホワイトリストにあるかどうかを確認せず、借り入れの際に担保記録の状態を検査しなかったため、攻撃者は無効な担保記録を繰り返し使用して借り入れを行うことができました。
! 【上半期のNFTセキュリティインシデントの分析:警戒すべき典型的なケースは何か】 ](https://img-cdn.gateio.im/webp-social/moments-1888562fb8639d0fb586b639d3e5eb87.webp)
NFT契約監査のよくある質問
署名のなりすましと再利用:
ロジックの欠陥:
ERC721/ERC1155 リエントランシー攻撃:
権限の範囲が広すぎる:
5.価格操作:
NFT契約のセキュリティ事件が頻発していることを考慮すると、監査プロセス中に発見された脆弱性が実際の攻撃と一致することが多いため、専門のセキュリティ会社にNFT契約の包括的な監査を依頼することが特に重要です。
! 【上半期のNFTセキュリティインシデントの分析:警戒すべき典型的なケースは何か】 ](https://img-cdn.gateio.im/social/moments-d101c45dd9b43f58f7f9c7919dd3918)