Zero Time Technology | FEGtokenが攻撃され、130万ドル以上を失ったイベント分析

 0x1 イベントの背景

Zero Hour Technology のブロックチェーン セキュリティ インテリジェンス プラットフォームは、北京時間の 2022 年 5 月 16 日に、BNB チェーンとイーサリアム チェーンの FEGtoken がフラッシュ ローンによって攻撃されたというニュースを監視しました。失われた資金の価値は 130 万米ドルを超え、Zero Hour Technology のセキュリティ チームは時間内にセキュリティ インシデントを分析しました。

0x2 攻撃者情報

  • 攻撃者のウォレット:

0x73b359d5da488EB2E97990619976F2f004e9fF7C

  • 攻撃者契約:

0x9a843bb125a3c03f496cb44653741f2cef82f445

  • 攻撃トランザクション:

https://etherscan.io/tx/0x1e769a59a5a9dabec0cb7f21a3e346f55ae1972bb18ae5eeacdaa0bc3424abd2(イーサリアム)

https://bscscan.com/tx/0x77cf448ceaf8f66e06d1537ef83218725670d3a509583ea0d161533fda56c063(BNBチェーン)

  • FEGexPRO 契約:

https://etherscan.io/address/0xf2bda964ec2D2fcB1610c886eD4831bf58f64948#code(イーサリアム)

https://bscscan.com/address/0x818e2013dd7d9bf4547aaabf6b617c1262578bc7#code(BNBチェーン)

0x3 攻撃分析

BNBチェーンとイーサリアムの2つのチェーンにおける攻撃者の複数の攻撃トランザクションを分析すると、各攻撃トランザクションのプロセスは大まかに次のようになります。

1. 攻撃者はフラッシュ ローンまたは利益を得た資金を攻撃トランザクションの初期資金として使用します。

2. 取得した初期資金の一部をステーキングした後、FEG Wrapped BNB コントラクトから fWrapped トークンを取得します。たとえば、BNB をステーキングして fBNB を取得します。

3. 攻撃者は、コントラクトを攻撃して後続の呼び出しに備えることにより、10 個の新しいコントラクト アドレスを作成し続けます。

 4. 攻撃者は取得した fWrapped トークンを FEGexPRO.depositInternal を介して入金します。この時点で、攻撃者は FEGexPRO コントラクトに資金を入金しています。

5. 攻撃者は、作成した 10 個のコントラクト アドレスをパス `` として 1 つずつ渡します。

FEGexPRO.swapToSwap メソッドは、FEGexPRO.depositInternal と FEGexPRO.swapToSwap を通じて繰り返し呼び出され、最終的に 10 のコントラクトすべてがコントラクト資金を移動する許可を取得しました。

FEGexPRO.swapToSwap

 FEGexPRO.depositInternal

 6. 攻撃者は transfer メソッドを呼び出してコントラクトに承認された資金を取得し、利益を得る (トランザクションの一部がフラッシュ ローンに返される)。

0x4 脆弱性の詳細

攻撃トランザクション プロセスを通じて、攻撃者が成功するための主な操作は、上記の手順 5 によって FEGexPRO.depositInternal と FEGexPRO.swapToSwap の 2 つのメソッドを循環的に呼び出して、契約の承認済み資金を取得することであることがわかります。上記の 2 つの方法のフォローアップを次に示します。

FEGexPRO.swapToSwap 方法

 前のトランザクション プロセスを通じて、攻撃者が一度にdepositInternal メソッドを呼び出して入金した後、swapToSwap メソッドを呼び出して渡されたパス パラメータが、攻撃者によって作成されたコントラクト アドレスであることが明らかになりました。パスは通常交換パスであるため、swapToSwap メソッドのロジックは現在のパスで承認操作を実行し、その後の交換資金の転送を容易にします。ただし、攻撃者が渡したパスは攻撃者が作成したコントラクト アドレスであるため、ここでの swapToSwap メソッドのロジックは攻撃者が渡したコントラクト アドレスも承認しますが、その後のパス呼び出しでは資金が転送されず、ユーザー残高は減少しましたが、契約アドレスの資金は減少しませんでした。(この時点では、攻撃者は利益を上げていません)

その後、攻撃者は引き続きdepositInternalメソッドを呼び出してフォローアップします。

FEGexPRO.depositInternal 方法

 

このメソッドで渡される唯一の制御可能な値は、デポジット額である amt です。初めてdepositInternalメソッドが呼び出され、攻撃者もswapToSwapメソッドを呼び出してコントラクトを承認しているため、通常のロジックに準拠していないのは、FEGexPROコントラクトアドレスの残高が差し引かれていないことだけですこのステップは、攻撃者に機会を与えただけです。

攻撃者が swapToSwap メソッドを呼び出し、FEGexPRO コントラクト残高が差し引かれない場合、攻撃者は引き続き、depositInternal メソッドを呼び出してデポジットを行います. デポジットは、最初に以前のトークン残高を取得し、次に転送し、FEGexPRO コントラクト アドレスを取得します。このとき、攻撃者は少額の資金を送金するため、契約資金に大きな影響はありません. ただし、以前の FEGexPRO 契約アドレスの残高は swapToSwap メソッドで差し引かれていないため、攻撃者は、初回と同じ金額を引き続きご利用いただけます。

その後、攻撃者は、swapToSwap とdepositInternal の循環呼び出しを通じて、FEGexPRO コントラクトのすべての資金を取得します。

0x5 資金のソースと宛先

BNB チェーンとイーサリアム チェーン上の攻撃者の資金源は、Tornado.Cash 通貨ミキシング プラットフォームから来ており、金額はそれぞれ 1 ETH と 1 BNB です。現在、2 つのチェーンの 144.8 ETH と 3278.1 BNB の利益資金は送金されていません。

 

0x6 まとめ

この攻撃から判断すると、FEGexPRO.swapToSwap コントラクトは受信パスのパラメーターを厳密に検証していないため、攻撃者は複数の攻撃コントラクトを循環させ、コントラクト内のすべての資金を奪うことができました。契約コードの検証漏れのリスクについては、コードセキュリティ監査によりリスクを回避できます。

0x7 セキュリティ アドバイス

  • パラメータが制御可能であるという発見によって引き起こされるアセットの損失を避けるために、メソッドパラメータの受け渡しは厳密に制御する必要があります。
  • スマート コントラクトがオンラインになる前に、包括的なセキュリティ監査を実施して、スマート コントラクトのセキュリティ リスクを包括的に調査する必要があります。

おすすめ

転載: blog.csdn.net/m0_37598434/article/details/124844201