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

CertiK: 傷害保険を販売した保険会社も事故に遭ったのですか?カバープロトコルの脆弱性分析

CertiK
特邀专栏作者
この記事は約2552文字で、全文を読むには約4分かかります
北京時間12月28日夜、CertiKセキュリティ検証チームは、カバープロトコルの無制限のトークン発行に対する脆弱性攻撃を発見した。この記事では、事件の詳細を分析します。
AI要約
展開
北京時間12月28日夜、CertiKセキュリティ検証チームは、カバープロトコルの無制限のトークン発行に対する脆弱性攻撃を発見した。この記事では、事件の詳細を分析します。

最近、地域に野良犬が出没し、近所のお子さんがその犬を見て驚いて逃げたが、追いかけられて逆に犬に噛まれたと聞きました。

幸いなことに、両親は機知に富んで子供に傷害保険をかけてくれたので、狂犬病ワクチンの数回の注射にはそれほど費用はかかりませんでした。

通貨国民として、残念ながら暗号化資産が盗難に遭ったとしても、プロジェクト当事者またはあなたが個人的に保険に加入した場合、保険会社が紛失した資産を返済してくれるので安心できます。

しかし、最悪の状況が存在します。しかし、保険会社ですらセキュリティインシデントが発生し、攻撃されたらどうなるでしょうか?

テクニカル分析

攻撃者は、プロジェクトのスマート コントラクトの誓約と取得を繰り返し、トークンの鋳造操作をトリガーし、カバー トークンを無限に発行し、カバー トークンの価格の暴落を引き起こしました。

テクニカル分析

主な攻撃は次のステップに分かれています。

1. 攻撃者は、攻撃に必要な NOCLAIM トークンをセットアップします。
2. 攻撃者は NOCLAIM トークンを使用してバランサー プールに流動性を提供します。

① 合計2,573 DAIの流動性をバランサープールに提供

②攻撃者は、バランサープールに流動性を提供することで、約132,688個のバランサー流動性証明トークンBPTを取得しました。

3. 攻撃者は、前のステップで取得したすべてのバランサー流動性証明トークンをカバー プロトコルの Blacksmith.sol スマート コントラクトにプレッジ (賭け) します。
図 1 に示すように、ステーキング時に、攻撃者は 0xe0b94a7bb45dd905c79bb1992c9879f40f1caed5 にある Blacksmith.sol スマート コントラクトのデポジット関数を呼び出します。

図1: blacksmith.solのdeposit()関数

デポジット関数を呼び出すことにより、攻撃者は取得した BPT 流動性証明をカバー プロトコルにプレッジします。

まず、図 1 の行 118 を介して現在の流動性プルーフ トークンのプール データをメモリに読み取り、次に行 121 を呼び出して現在のプールのデータを更新します。

図 2: blacksmith.sol の updatePool() 関数
図 2 の 75 行目に示すように、updatePool() 関数で変更された現在の流動性プルーフ トークンのプール データは、ストレージに保存されたデータであり、deposit() でメモリに保存された現在の流動性プルーフと同じです。トークンのプールデータは2つのデータです。
図 2 の 84 行目の lpTotal の値は、現在の契約に預けられた流動性証明トークンの総数を表します。この変数の値が小さいため、84 行目の式 pool.accRewardsPerToken の値が増加し、更新されたaccRewardsPerToken 値はストレージに保存されます。

図 3: blacksmith.sol の _claimCoverRewards() 関数

次に、図 3 の行 318 に示すように、deposit() は、_claimCoverRewards() 関数を呼び出すことによって、一定数のカバー トークンを関数呼び出し元 (msg.sender) にキャストします。

鋳造されたカバー トークンの数は、pool.accRewardsPerToken、CAL_MULTIPLIER、miner.rewardWriteoff の 3 つの変数に関連します。

ここでの pool.accRewardsPerToken の値は、図 2 の update() 関数を使用して更新された値ではなく、メモリに格納されているプール データを使用することに注意してください。

同時に、図 1 のデポジット関数から、miner.rewardWriteoff の値の更新は、_claimCoverRewards() 関数の実行完了後に発生することがわかります。

したがって、元の設計では、miner.rewardWriteoff の更新された値を使用して、鋳造する必要があるカバー トークンの数を計算する必要がありますが、ここでは、miner.rewardWriteoff の未更新のデータが誤って使用され、実際の鋳造数が計算されます。発行されたトークンの数よりもカバートークンの数が多くなり、その数が増加し、最終的にはトークンの発行につながりました。

誓約が成功すると、攻撃者は blacksmith.sol スマート コントラクトのdraw() 関数を呼び出して、誓約された BPT を取得し、追加の鋳造されたカバー トークンを取得して攻撃を完了します。

デポジット() 関数とwithdraw() 関数を実行した後のトークン残高テーブルを比較すると、この一連のデポジット関数と引き出し関数を呼び出した後、攻撃者は約 704 個の COVER トークンを取得できることがわかります。

デポジット()後:

draw()の後:

攻撃者は、入出金機能を繰り返し実行することで、Blacksmith 機能に無限にトークンを鋳造させ、自身のアドレスにトークンを転送して利益を得ることができます。

攻撃後、この記事の時点で、公式カバーは blacksmith を安全なバージョンに移行しました。

脆弱な鍛冶屋の住所:

0xe0b94a7bb45dd905c79bb1992c9879f40f1caed5

一時的な修正後の鍛冶屋の住所:

0x1d5fab8a0e88020309e52b77b9c8edf63c519a26

一時的に修復された鍛冶屋契約は、攻撃者が攻撃を続けるのを防ぐために、すべての誓約および引き出し操作を一時的に禁止します。

この攻撃で、攻撃者は総額 440 万米ドル、つまり約 2,900 万元の利益を得ました。

この脆弱性を利用して同様の攻撃を仕掛ける攻撃者は他にも存在しており、例えば Grap.finance プロジェクト関係者はこの脆弱性を利用した攻撃に参加し、4,350 ETH トークンを獲得しました。

安全上のアドバイス

安全上のアドバイス

デジタル資産が技術的以外の理由で損失を被らないようにするために、プロジェクト当事者は適時にプロジェクト製品の保険に加入し、プロジェクト当事者と投資家のセキュリティ計画を強化し、損失を確実に防ぐ必要があります。攻撃によって引き起こされた問題をタイムリーに補償することができます。
世界トップの監査会社として、CertiK は現在 369 件を超えるセキュリティ監査を実施し、198,000 行以上のコードを監査し、100 億ドル以上の暗号化資産を保護しています。
最近、CeritK は CertiKShield 分散型資金保護プランを開始しました。
CertiKShield は、プロジェクトとそのコミュニティ メンバーに保護を提供するだけでなく、監査を主な業務とするセキュリティ会社として、CertiK は次のことを保証します。保険商品はより安全性が高い
CertiKShield は、純粋な保険会社と比較して、セキュリティ技術の支持とセキュリティと一連の保証を重視したセキュリティ分野で構築された保険であり、大きな成長と発展の余地があります。

ようこそ訪問https://www.certik.foundation/

CertiK セキュリティ製品の詳細情報にアクセスするには、CertiK Foundation の公式 Web サイトにアクセスしてください。

安全
投资
Odaily公式コミュニティへの参加を歓迎します
購読グループ
https://t.me/Odaily_News
チャットグループ
https://t.me/Odaily_GoldenApe
公式アカウント
https://twitter.com/OdailyChina
チャットグループ
https://t.me/Odaily_CryptoPunk
検索
記事目次
Odailyプラネットデイリーアプリをダウンロード
一部の人々にまずWeb3.0を理解させよう
IOS
Android