This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
BNO攻撃イベントの原理解析
北京時間の2023年7月18日、オーシャンBNOはフラッシュローン攻撃を受け、攻撃者は約50万米ドルの利益を得た。
SharkTeamは、このインシデントの技術分析を初めて実施し、セキュリティ上の注意事項をまとめ、後続のプロジェクトがこのインシデントから学び、ブロックチェーン業界のセキュリティ防御線を共同で構築できることを期待しています。
1. イベント分析
攻撃者のアドレス:
0xa6566574edc60d7b2adbacedb71d5142cf2677fb
攻撃契約:
0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd
攻撃された契約:
0xdCA503449899d5649D32175a255A8835A03E4006
攻撃トランザクション:
0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9
攻撃プロセス:
(1) 攻撃者 (0xa6566574) は、pancakeSwap フラッシュ ローンを通じて 286,449 BNO を借りました。
(2) 次に、攻撃されたコントラクト (0xdCA50344) の stakeNft 関数を呼び出し、2 つの nft をプレッジします。
(3) 次に、攻撃されたコントラクト (0xdCA50344) のプレッジ関数を呼び出し、277856 BNO コインをプレッジします。
(4) 攻撃されたコントラクト (0xdCA50344) のEmergencyWithdraw関数を呼び出し、すべてのBNOを抽出します
(5) 次に、攻撃されたコントラクト (0xdCA50344) の unstakeNft 関数を呼び出し、誓約された 2 つの NFT を取得し、追加の BNO トークンを受け取ります。
(6) 上記のプロセスを繰り返して、追加の BNO トークンを継続的に取得します
(7) フラッシュローンを返済した後、すべての BNO トークンを 50.5W BUSD に交換し、利益を残して市場を離れます。
2 番目、脆弱性分析
この攻撃の根本原因は、攻撃されたコントラクト (0xdCA50344) の報酬計算メカニズムと緊急引き出し機能の対話ロジックに問題があり、ユーザーが元本を引き出した後に追加の報酬トークンを取得することになります。
このコントラクトは、トークンの緊急引き出しのためのEmergencyWithdraw関数を提供し、攻撃者のallstake合計モーゲージとrewardDebt合計負債をクリアしますが、攻撃者のnftAddition変数はクリアせず、nftAddition変数もallstake変数を通じて計算されます。
unstakeNft 関数では、ユーザーの現在の報酬が引き続き計算され、nftAddition 変数がゼロにリセットされていない場合、pendingFit 関数は引き続き追加の BNO 報酬値を返し、攻撃者が追加の BNO トークンを取得することになります。
3 番目、セキュリティに関する推奨事項
この攻撃に対応するには、開発プロセス中に次の予防措置に従う必要があります。
(1) 報酬を計算する際には、利用者が元本を引き出しているかどうかを確認します。
(2) プロジェクトがオンラインになる前に、第三者の専門監査チームから技術支援を求める必要があります。