DeFiの急速に進化する世界では、プロトコルの安定性とセキュリティを確保することが重要です。最近のCDPプロジェクトのセキュリティレビューで、特定の構成下で脆弱性が生じる可能性について観察しました。現在のこのプロジェクトのパラメータ設定は強固ですが、これらの潜在的なリスクを理解することはプロトコルの完全性を維持するために重要です。
この記事では、一度だけの借入手数料と償還手数料がこの文脈で果たす重要な役割を探求することを目的としています。これらの手数料がない場合に発生する特定の攻撃シナリオを検討することで、適切な手数料体制が不安定な攻撃を防ぐのにどれほど重要かを示し、それにより、プロトコルの長期的なセキュリティと持続可能性を確保することを目指します。
元のプロトコルの1つであるLiquityとその派生物からインスピレーションを得て、多くのCDP(担保付債務ポジション)モデルは過剰担保化を通じて分散型のステーブルコインを生成します。これらのモデルは、しばしば複雑で洗練されたメカニズムのセットを取り入れており、米ドルとのペッグを維持しながら、様々な条件下でプロトコルのセキュリティを確保し、不良債権リスクを効果的に最小限に抑えるように設計されています。これらのプロトコルは、特定の目標により密接に合致するように調整された経済的インセンティブを含む、主要なカスタマイズによって差別化されます。
償還手数料は、ユーザーがプロトコルのステーブルコインをその基礎となる担保と交換する際に適用される手数料です。この手数料は、頻繁な償還が行われると償還プロセスがより高額になり、プロトコルを不安定化させる可能性のある過度の償還を防ぐことで、ステーブルコインの価値を安定化させるために設計されています。
償還手数料は、プロトコルのbaseRateに基づいて計算されます。これは、システム内の最近の活動を反映する動的に調整されるパラメータです。具体的には、償還ごとにbaseRateが増加し、その結果、後続の償還がより高価になります。
この増加は、償還される安定コイン総供給の割合に比例しています。時間の経過とともに、償還が発生しない場合、ベースレートは徐々にゼロに減衰し、半減期は約12時間です。
償還手数料は以下の式を使用して計算されます:
たとえば、baseRateが1%であり、ユーザーが担保の価格が$50,000のときに100のステーブルコインを償還した場合、償還手数料は次のとおりです:
したがって、償還手数料を考慮すると、ユーザーはわずかに少ない担保を受け取ることになります。このメカニズムにより、償還が経済的に合理的でありながら、プロトコルを不安定にする裁定取引活動から保護されます。
借入手数料は、ユーザーが担保に対してステーブルコインを借りる際に請求される、もう1つの一時手数料です。この手数料はベースレートに基づいていますが、ユーザーのトローブ(ユーザーの担保と債務を保持するボルト契約)からステーブルコインが引き出される際に適用されます。
借入手数料は以下のように計算されます:
例えば、ユーザーが4,000のステーブルコインを借りたいと希望し、ベースレートが0.5%に設定されている場合、手数料は次の通りです:
この手数料はユーザーの借金に追加され、借金総額は借りた金額に手数料を加えたものになります(例:4,000のステーブルコイン+20のステーブルコイン=4,020のステーブルコイン)。
これらの手数料は、ソフトペッグとしても機能し、特定の条件下で借り入れや償還が魅力的でなくなることにより、ステーブルコインの市場価格に間接的に影響を与え、ステーブルコインを$1に近づけるのに役立ちます。
さて、これらの重要な手数料が削除されるか、ゼロに設定された場合に何が起こるかを探ってみましょう。
ワンタイムの償還手数料がないと、プロトコルは意図せずにゼロスリッページのスワップDEXに変わる可能性があります。このようなシナリオでは、大口のステーブルコイン保有者は償還メカニズムを悪用して、膨大なコストを負担することなくステーブルコインを担保物と交換し、事実上大規模なアービトラージ取引を行うことができます。これにより、ゼロスリッページ環境では、大規模な償還がプロトコルの流動性を減少させるだけでなく、借り手に対して現在の市場価格で担保物を売却することを強制する可能性があります。彼らの負債はそれに応じて減少しますが、この強制清算により、特にステーブルコインが1ドル未満で取引されている場合、ユーザーの運用コストが増加する可能性があります。
また、オラクルのフロントランニングのリスクもあります。ユーザーがトランザクションが行われる直前に担保価格オラクルを更新して高い価格を反映することに気付いた場合、価格更新前に大量のステーブルコインを迅速に償還することができます。担保価格が更新されて上昇した後、ユーザーは償還された担保を利益を上げて売却し、アービトラージサイクルを完了することができます。この慣行はプロトコルを悪用するだけでなく、借り手を不利な立場に置く可能性があります。なぜなら、彼らはより不利な価格で彼らの担保を売却することを余儀なくされるかもしれないからです。
最もわかりやすい攻撃シナリオの1つは、償還手数料を操作してコストを削減することです。一回限りの借入手数料がないプロトコルでは、ユーザーは大量のステーブルコインを借りることができ、プロトコルの総負債を人為的に膨らませることができます。負債が膨らんだ後、彼らは総負債に対する償還サイズの比率に基づいて償還手数料が計算されるため、より低い手数料でステーブルコインを償還することができます。
この操作は、プロトコルの意図した手数料構造を損ない、プロトコルの収益が減少し、システムが不安定になる可能性があります。例えば、攻撃者はフラッシュローンを利用して大量の担保を借り、それを利用して大量のステーブルコインを発行することができます。これにより、システムの総債務が増加します。そして、インフレーションによる手数料の減少により、償還操作を行い、最後にフラッシュローンを返済して、プロトコルの収益が予想よりも少なくなり、償還の対象になるとは予想していなかったユーザーにとってさらなる不安定性をもたらすことがあります。
別の重要な脆弱性は、単一のブロックでプロトコルを強制的にリカバリーモードにすることができることから生じます。これにより、以前に健全な担保比率を持つポジションの清算が可能になります。この攻撃は、フラッシュローンを活用し、オラクル価格の更新時に攻撃をタイミングすることに依存しています。
攻撃は次のように展開されます:
攻撃者はまず、フラッシュローンを利用して大量の担保を借り、それをプロトコルに担保として預けます。この担保を使って、攻撃者は最低担保比率(MCR)でステーブルコインを借ります。攻撃者はこの行動を取ることで、総担保比率(TCR)を150%まで低下させ、リカバリーモードをトリガーするためのしきい値に達することができます。
攻撃者は、担保価格の下落を反映するオラクルの更新を待ちます。新しい低い価格がシステムに更新されると、担保の価値が下がり、TCRが150%を下回ることになります。
TCRが現在150%未満になると、プロトコルは自動的に回復モードに入ります。この状態では、プロトコルは新しいTCR以下の担保比率(CR)を持つトローブの清算を許可します。攻撃者は、TCR以下のCRを持つ他のユーザーのトローブを清算して、彼らに損失を与え、清算報酬を得ることができます。
前の攻撃シナリオを元にして、この高度なエクスプロイトでは、注意深く作成された償還プロセスを介してプロトコルを回復モードに強制することができます。前の攻撃とは異なり、システムを通常モードに一時的に戻す可能性がある前の攻撃とは異なり、この方法では、システムが回復モードに残り、攻撃者が脆弱性を繰り返し悪用することができます。
システムが複数の種類の担保をサポートし、それぞれが異なるTrove Managersによって管理される場合に生じる中心的な問題は、償還後にシステム全体の総担保比率(TCR)が低下する可能性があることです。個々のTrove Managersの健全性が改善されるにつれて、この直感に反する結果が生じます。この非直感的な結果は、グローバルとローカルの担保比率との複雑な相互作用の結果です。
例えば、システムのTCRが150%になっているシナリオを考えてみましょう。
もしユーザーが160%の担保率でTroveに対して償還を行い、それによってTroveが閉じられる場合、その結果の計算によってTCRが150%を下回り、回復モードがトリガーされます。
攻撃は次のように展開されます:
攻撃者は、慎重に選択されたトローブで担保比率がわずかに150%を上回る最小のポジションを開く。このセットアップは、次のステップでの償還がTCRを臨界閾値以下に効果的に押し下げることを確実にするために重要です。
攻撃者は、フラッシュローンを使用して、任意のTroveマネージャで最小担保比率(MCR)が110%の別のポジションを開き、システムの総担保比率(TCR)をちょうど150%に下げます。このステップにより、システムは回復モードに設定されます。
攻撃者はその後、最初のステップで開かれたポジションを償還します。このポジションはCRが150%をわずかに超えているため、償還するとTCRが150%未満に下がり、それによって回復モードがトリガーされます。償還は償還される特定のトローブに影響を与えるだけでなく、TCRを回復モードに押し込むシステム全体の影響も引き起こします。
システムが現在回復モードになっているため、攻撃者は担保比率が150%未満のポジションを清算することができます。これらの清算によってTCRが150%を超える可能性があります。
攻撃者は必要に応じてステップを繰り返し、システムを回復モードの状態に保ちながら、担保比率が150%以下のトローブを継続的に悪用することができます。
一度の償還手数料と借入手数料は、上記で説明した攻撃ベクトルに関連するリスクを緩和する上で重要な役割を果たします。借入と償還にコストを導入することで、これらの手数料は、攻撃者がほとんどの場合において大規模で利益を上げる操作を経済的に不可能にします。
たとえば、償還手数料操作のシナリオでは、1 回限りの借入手数料によってシステムの負債を膨らませるコストが増加し、攻撃者が償還手数料を悪用することは不利益になります。同様に、攻撃者がリカバリーモードを発動しようとするシナリオでは、借入手数料は、TCRを操作するために多額の債務を引き受けるコストを上昇させることで、抑止力として機能します。
DeFiが進化するにつれて、プロトコルはますます洗練された攻撃に直面することになります。先を見越していくためには、異なる機能がどのように相互作用して脆弱性を作り出す可能性があるかを理解することが重要です。効果的なセキュリティには、さまざまなシステムコンポーネントがどのように相互作用するかを深く理解することが必要です。また、これらの相互作用を制御する設定やパラメータにも注意を払う必要があります。機能が組み合わさって脆弱性を作り出す方法を事前に予測することで、設計者は安全でありながら将来の課題にも対応できるプロトコルを構築することができます。
DeFiの急速に進化する世界では、プロトコルの安定性とセキュリティを確保することが重要です。最近のCDPプロジェクトのセキュリティレビューで、特定の構成下で脆弱性が生じる可能性について観察しました。現在のこのプロジェクトのパラメータ設定は強固ですが、これらの潜在的なリスクを理解することはプロトコルの完全性を維持するために重要です。
この記事では、一度だけの借入手数料と償還手数料がこの文脈で果たす重要な役割を探求することを目的としています。これらの手数料がない場合に発生する特定の攻撃シナリオを検討することで、適切な手数料体制が不安定な攻撃を防ぐのにどれほど重要かを示し、それにより、プロトコルの長期的なセキュリティと持続可能性を確保することを目指します。
元のプロトコルの1つであるLiquityとその派生物からインスピレーションを得て、多くのCDP(担保付債務ポジション)モデルは過剰担保化を通じて分散型のステーブルコインを生成します。これらのモデルは、しばしば複雑で洗練されたメカニズムのセットを取り入れており、米ドルとのペッグを維持しながら、様々な条件下でプロトコルのセキュリティを確保し、不良債権リスクを効果的に最小限に抑えるように設計されています。これらのプロトコルは、特定の目標により密接に合致するように調整された経済的インセンティブを含む、主要なカスタマイズによって差別化されます。
償還手数料は、ユーザーがプロトコルのステーブルコインをその基礎となる担保と交換する際に適用される手数料です。この手数料は、頻繁な償還が行われると償還プロセスがより高額になり、プロトコルを不安定化させる可能性のある過度の償還を防ぐことで、ステーブルコインの価値を安定化させるために設計されています。
償還手数料は、プロトコルのbaseRateに基づいて計算されます。これは、システム内の最近の活動を反映する動的に調整されるパラメータです。具体的には、償還ごとにbaseRateが増加し、その結果、後続の償還がより高価になります。
この増加は、償還される安定コイン総供給の割合に比例しています。時間の経過とともに、償還が発生しない場合、ベースレートは徐々にゼロに減衰し、半減期は約12時間です。
償還手数料は以下の式を使用して計算されます:
たとえば、baseRateが1%であり、ユーザーが担保の価格が$50,000のときに100のステーブルコインを償還した場合、償還手数料は次のとおりです:
したがって、償還手数料を考慮すると、ユーザーはわずかに少ない担保を受け取ることになります。このメカニズムにより、償還が経済的に合理的でありながら、プロトコルを不安定にする裁定取引活動から保護されます。
借入手数料は、ユーザーが担保に対してステーブルコインを借りる際に請求される、もう1つの一時手数料です。この手数料はベースレートに基づいていますが、ユーザーのトローブ(ユーザーの担保と債務を保持するボルト契約)からステーブルコインが引き出される際に適用されます。
借入手数料は以下のように計算されます:
例えば、ユーザーが4,000のステーブルコインを借りたいと希望し、ベースレートが0.5%に設定されている場合、手数料は次の通りです:
この手数料はユーザーの借金に追加され、借金総額は借りた金額に手数料を加えたものになります(例:4,000のステーブルコイン+20のステーブルコイン=4,020のステーブルコイン)。
これらの手数料は、ソフトペッグとしても機能し、特定の条件下で借り入れや償還が魅力的でなくなることにより、ステーブルコインの市場価格に間接的に影響を与え、ステーブルコインを$1に近づけるのに役立ちます。
さて、これらの重要な手数料が削除されるか、ゼロに設定された場合に何が起こるかを探ってみましょう。
ワンタイムの償還手数料がないと、プロトコルは意図せずにゼロスリッページのスワップDEXに変わる可能性があります。このようなシナリオでは、大口のステーブルコイン保有者は償還メカニズムを悪用して、膨大なコストを負担することなくステーブルコインを担保物と交換し、事実上大規模なアービトラージ取引を行うことができます。これにより、ゼロスリッページ環境では、大規模な償還がプロトコルの流動性を減少させるだけでなく、借り手に対して現在の市場価格で担保物を売却することを強制する可能性があります。彼らの負債はそれに応じて減少しますが、この強制清算により、特にステーブルコインが1ドル未満で取引されている場合、ユーザーの運用コストが増加する可能性があります。
また、オラクルのフロントランニングのリスクもあります。ユーザーがトランザクションが行われる直前に担保価格オラクルを更新して高い価格を反映することに気付いた場合、価格更新前に大量のステーブルコインを迅速に償還することができます。担保価格が更新されて上昇した後、ユーザーは償還された担保を利益を上げて売却し、アービトラージサイクルを完了することができます。この慣行はプロトコルを悪用するだけでなく、借り手を不利な立場に置く可能性があります。なぜなら、彼らはより不利な価格で彼らの担保を売却することを余儀なくされるかもしれないからです。
最もわかりやすい攻撃シナリオの1つは、償還手数料を操作してコストを削減することです。一回限りの借入手数料がないプロトコルでは、ユーザーは大量のステーブルコインを借りることができ、プロトコルの総負債を人為的に膨らませることができます。負債が膨らんだ後、彼らは総負債に対する償還サイズの比率に基づいて償還手数料が計算されるため、より低い手数料でステーブルコインを償還することができます。
この操作は、プロトコルの意図した手数料構造を損ない、プロトコルの収益が減少し、システムが不安定になる可能性があります。例えば、攻撃者はフラッシュローンを利用して大量の担保を借り、それを利用して大量のステーブルコインを発行することができます。これにより、システムの総債務が増加します。そして、インフレーションによる手数料の減少により、償還操作を行い、最後にフラッシュローンを返済して、プロトコルの収益が予想よりも少なくなり、償還の対象になるとは予想していなかったユーザーにとってさらなる不安定性をもたらすことがあります。
別の重要な脆弱性は、単一のブロックでプロトコルを強制的にリカバリーモードにすることができることから生じます。これにより、以前に健全な担保比率を持つポジションの清算が可能になります。この攻撃は、フラッシュローンを活用し、オラクル価格の更新時に攻撃をタイミングすることに依存しています。
攻撃は次のように展開されます:
攻撃者はまず、フラッシュローンを利用して大量の担保を借り、それをプロトコルに担保として預けます。この担保を使って、攻撃者は最低担保比率(MCR)でステーブルコインを借ります。攻撃者はこの行動を取ることで、総担保比率(TCR)を150%まで低下させ、リカバリーモードをトリガーするためのしきい値に達することができます。
攻撃者は、担保価格の下落を反映するオラクルの更新を待ちます。新しい低い価格がシステムに更新されると、担保の価値が下がり、TCRが150%を下回ることになります。
TCRが現在150%未満になると、プロトコルは自動的に回復モードに入ります。この状態では、プロトコルは新しいTCR以下の担保比率(CR)を持つトローブの清算を許可します。攻撃者は、TCR以下のCRを持つ他のユーザーのトローブを清算して、彼らに損失を与え、清算報酬を得ることができます。
前の攻撃シナリオを元にして、この高度なエクスプロイトでは、注意深く作成された償還プロセスを介してプロトコルを回復モードに強制することができます。前の攻撃とは異なり、システムを通常モードに一時的に戻す可能性がある前の攻撃とは異なり、この方法では、システムが回復モードに残り、攻撃者が脆弱性を繰り返し悪用することができます。
システムが複数の種類の担保をサポートし、それぞれが異なるTrove Managersによって管理される場合に生じる中心的な問題は、償還後にシステム全体の総担保比率(TCR)が低下する可能性があることです。個々のTrove Managersの健全性が改善されるにつれて、この直感に反する結果が生じます。この非直感的な結果は、グローバルとローカルの担保比率との複雑な相互作用の結果です。
例えば、システムのTCRが150%になっているシナリオを考えてみましょう。
もしユーザーが160%の担保率でTroveに対して償還を行い、それによってTroveが閉じられる場合、その結果の計算によってTCRが150%を下回り、回復モードがトリガーされます。
攻撃は次のように展開されます:
攻撃者は、慎重に選択されたトローブで担保比率がわずかに150%を上回る最小のポジションを開く。このセットアップは、次のステップでの償還がTCRを臨界閾値以下に効果的に押し下げることを確実にするために重要です。
攻撃者は、フラッシュローンを使用して、任意のTroveマネージャで最小担保比率(MCR)が110%の別のポジションを開き、システムの総担保比率(TCR)をちょうど150%に下げます。このステップにより、システムは回復モードに設定されます。
攻撃者はその後、最初のステップで開かれたポジションを償還します。このポジションはCRが150%をわずかに超えているため、償還するとTCRが150%未満に下がり、それによって回復モードがトリガーされます。償還は償還される特定のトローブに影響を与えるだけでなく、TCRを回復モードに押し込むシステム全体の影響も引き起こします。
システムが現在回復モードになっているため、攻撃者は担保比率が150%未満のポジションを清算することができます。これらの清算によってTCRが150%を超える可能性があります。
攻撃者は必要に応じてステップを繰り返し、システムを回復モードの状態に保ちながら、担保比率が150%以下のトローブを継続的に悪用することができます。
一度の償還手数料と借入手数料は、上記で説明した攻撃ベクトルに関連するリスクを緩和する上で重要な役割を果たします。借入と償還にコストを導入することで、これらの手数料は、攻撃者がほとんどの場合において大規模で利益を上げる操作を経済的に不可能にします。
たとえば、償還手数料操作のシナリオでは、1 回限りの借入手数料によってシステムの負債を膨らませるコストが増加し、攻撃者が償還手数料を悪用することは不利益になります。同様に、攻撃者がリカバリーモードを発動しようとするシナリオでは、借入手数料は、TCRを操作するために多額の債務を引き受けるコストを上昇させることで、抑止力として機能します。
DeFiが進化するにつれて、プロトコルはますます洗練された攻撃に直面することになります。先を見越していくためには、異なる機能がどのように相互作用して脆弱性を作り出す可能性があるかを理解することが重要です。効果的なセキュリティには、さまざまなシステムコンポーネントがどのように相互作用するかを深く理解することが必要です。また、これらの相互作用を制御する設定やパラメータにも注意を払う必要があります。機能が組み合わさって脆弱性を作り出す方法を事前に予測することで、設計者は安全でありながら将来の課題にも対応できるプロトコルを構築することができます。