DeFiオラクル攻撃の手口を振り返ると、この6つのセキュリティ対策を理解する必要があります。

DeFiの道
2020-12-26 15:57:52
コレクション
Paradigmの研究パートナーであるSamczsunは、価格予言者攻撃に関する5つの実際のケースを分析し、この種の攻撃に対抗する6つの方法をまとめました。

翻訳者注:価格オラクルは分散型金融(DeFi)の重要な要素ですが、このプロセスに存在する可能性のある脆弱性が、多くのDeFiプロジェクトに壊滅的な損失をもたらしました。損失は数千万ドルに達することもありますが、これらの攻撃は一体どのようなものでしょうか?また、どのようにそれらを防ぐことができるのでしょうか?この記事では、著名なホワイトハッカーであり、Paradigmの研究パートナーであるSamczsunが、価格オラクル攻撃に関する5つの実際のケーススタディを分析し、これらの攻撃に対抗するための6つの方法をまとめました。

2019年末、私は「低担保を利用した利益」というタイトルの投稿を発表しました。この投稿では、EthereumのdAppに対する経済的攻撃の一例を説明しました。この攻撃は、1つまたは複数のトークンの正確な価格データに依存しています。現在は2020年末ですが、不幸にも多くのプロジェクトが同様の過ちを犯しており、最近の例としてHarvest Financeがハッキングされ、プロトコルのユーザーが合計3300万ドルの損失を被りました。

開発者たちは再入可能性などの脆弱性に慣れていますが、オラクルの操作は明らかに頻繁に考慮される問題ではありません。実際、再入可能性に基づく攻撃は過去数年で減少している一方、価格オラクルの操作に基づく脆弱性の利用は現在増加しています。したがって、価格オラクルの操作に関する確実な情報を発表する時期だと考えています。

この記事は3つの部分に分かれています。第一部では、このテーマに不慣れな方々にオラクルとオラクル操作について簡単に紹介します。第二部では、過去のオラクルに関連する脆弱性や攻撃事件を振り返るケーススタディをいくつか紹介します。知識を試したい方は、これらをスキップできます。最後に、開発者がオラクル操作からプロジェクトを保護するために使用できる技術をまとめました。

現実世界におけるオラクル操作

時間を2015年12月1日(水曜日)に戻しましょう。あなたの名前はDavid Spargoで、オーストラリアのメルボルンでPeking Dukのコンサートに参加しています。あなたはこのバンドのメンバーに直接会うために、バックヤードの休憩室に行きたいと思っていますが、2人の警備員があなたの前に立ちはだかっています。普通の人が直接入ることはできません。

あなたは、Peking Dukの親族のように振る舞った場合、警備員がどのように反応するかを知りたいと思っています。なぜなら、家族は確実にバンドのバックヤードにアクセスできるからです。あなたがするべきことは、警備員に自分がバンドの親戚であると信じ込ませることです。しばらく考えた後、あなたは「天才的」または「完全に狂った」としか表現できない計画を思いつきました。

すべてを迅速に手配した後、あなたは自信を持って警備員の前に歩み寄ります。あなたは自分がDavid Spargoであり、Peking Dukの家族の一員であると自己紹介します。警備員が証拠を求めると、あなたは無可辩驳な証拠を示します------ウィキペディア。

p1

警備員は手を振ってあなたを通過させ、少々お待ちくださいと言います。1分が経過し、2分が経過し……5分後、あなたは法執行機関が現れる前に逃げるべきかどうか考え始めます。諦めかけていたその時、Peking DukのメンバーであるReuben Stylesが近づいてきて、あなたは彼と一緒に休憩室に入ります。バンドはあなたの機知に感心し、最後に一緒にビールを飲み、その後、彼らはFacebookページでその夜の出来事を共有しました。

p2

価格オラクルとは?

価格オラクルとは、あなたが価格情報を尋ねるための何かを指します。PamがDwightにSchrute元の現金価値を尋ねると、Dwightは価格オラクルの役割を果たします。

Ethereumでは、すべてがスマートコントラクトであり、価格オラクルも同様です。したがって、価格オラクルが価格情報を取得する方法を区別することがより有用です。1つの方法では、価格APIや取引所から既存のオフチェーン価格データを取得し、それをオンチェーンに持ち込むことができます。もう1つの方法では、オンチェーンの分散型取引所(DEX)に問い合わせて即時価格を計算することができます。

p4

この2つの選択肢にはそれぞれ利点と欠点があります。オフチェーンデータはボラティリティに対する反応が通常遅く、これはあなたがそれを使用しようとしている目的によって良いか悪いかが決まります。また、この方法は通常、少数の特権ユーザーがデータをオンチェーンにプッシュする必要があるため、これらの人々が悪事を働かない、または悪い更新を強制されないと信じる必要があります。一方、オンチェーンデータは特権アクセスを必要とせず、常に最新ですが、これは攻撃者によって操作されやすく、壊滅的な失敗を引き起こす可能性があります。

何が問題になる可能性があるのか?

価格オラクルの統合に関する問題が原因でDeFiプロジェクトに重大な財務損失をもたらしたいくつかの例を見てみましょう。

1、Synthetix sKRWオラクルの故障

Synthetixは、ユーザーが他の通貨などの資産にアクセスできるデリバティブプラットフォームです。これを実現するために、当時のSynthetixはカスタムのオフチェーンフィードを利用しており、そのフィードデータは固定の時間間隔でオンチェーンに公開されていました。これらの価格は、ユーザーがサポートされている資産をロングまたはショートすることを可能にしました。

2019年6月25日、Synthetixが依存していたフィードレポートは、韓国ウォンの価格が実際の為替レートの1000倍であると報告しました。価格オラクルシステムの他の部分のエラーにより、この価格はシステムによって受け入れられ、オンチェーンに公開され、その後、取引ボットが迅速にsKRW市場に出入りしました。

p5

Synthetixチームは取引者と交渉し、資金を返還させることができました(脆弱性報酬と引き換えに)が、全体としてこのボットは10億ドル以上の利益を得る能力を持っていました。

Synthetixは価格オラクルを正しく実行し、価格を複数のソースから取得して、取引者が価格変動がオンチェーンに公開される前に予測するのを防ぎました。しかし、孤立した上流のフィードの故障が壊滅的な攻撃を引き起こしました。これは、オフチェーンデータを使用する価格オラクルのリスクを示しています:価格がどのように計算されているかはわからないため、システムはすべての潜在的な失敗パターンを正しく処理できるように慎重に設計される必要があります。

低担保借入

上記で述べたように、私は2019年9月に、オンチェーンデータの価格オラクルに関連するリスクを概説した記事を発表しました。この長い記事を読むことを強くお勧めしますが、技術的な詳細が多く、理解が難しいかもしれません。したがって、ここで簡略化した説明を提供します。

想像してみてください。あなたは分散型の貸付をブロックチェーン上に置いています。ユーザーは資産を担保として預け入れることができ、他の資産を借り入れることができ、借り入れ可能な最大金額は彼らが預け入れた資産の価値によって決まります。あるユーザーがETHを担保として使用し、USDを借り入れると仮定します。現在、ETHの価格は400ドルで、担保率は150%です。

ユーザーが375 ETHを預け入れると、その担保の価値は15万ドルになります。1.5ドルの担保で1ドルを借り入れるルールに基づくと、そのユーザーはシステムから最大10万ドルを借り入れることができます。

p6

もちろん、ブロックチェーン上では、1 ETHが400ドルであると単に宣言するだけでは済みません。悪意のあるユーザーは1 ETHが1000ドルであると宣言し、システムからすべてのお金を持ち去ることができます。したがって、開発者はUniswap、Kyber、または他の分散型取引所(DEX)の現物価格を接続することが容易です。

p7

一見すると、これは正しいアプローチのように思えます。結局のところ、ETHを買ったり売ったりする際、Uniswapの価格は常に大体正しいからです。なぜなら、アービトラージャーがすぐにどんな偏差も修正するからです。しかし、実際には、分散型取引所(DEX)の即時価格は取引中に非常に不正確になる可能性があります。以下の例を見てみましょう。

Uniswapのストレージ機能を考えてみてください。価格は準備資産の量に基づいて計算されますが、ユーザーがETHとUSDの間で取引を行うため、準備金が保持する資産が変化します。悪意のあるユーザーがプラットフォームから借り入れる前後に取引を行った場合、どうなるでしょうか?

ユーザーは借り入れる前に200万USDで5000ETHを購入し、現在、Uniswap取引所で計算された価格は1ETH = 1,733.33USDです。375ETHは担保として使用でき、最大433,333.33ドルの資産を借り入れることができます。最後に、彼らは200万ドルを5000ETHに戻し、価格をリセットし、あなたの貸付プラットフォームは333,333.33ドルの損失を被ります。

image-32

このケーススタディは、分散型取引所(DEX)を価格オラクルとして使用する際に直面する最も一般的なエラーを示しています。攻撃者は取引中に価格をほぼ完全に制御しており、その価格を正確に読み取ろうとすることは、決済前にスケールの重さを読み取るようなものです。

あなたは間違った数字を得る可能性があり、具体的な状況によっては、多くのお金を失うことになります。

2、Synthetix MKR操作

2019年12月、Synthetixは再び価格オラクル操作攻撃を受けました。この攻撃は、オンチェーンデータとオフチェーンデータの境界を越えたものであることに注目すべきです。

Redditユーザーu/MusaTheRedGuardは、攻撃者がsMKRとiMKRに対して非常に疑わしい取引を行っていることを観察しました。攻撃者はまずsMKRを購入してMKRをロングし、その後UniswapのETH/MKR資産取引ペアから大量のMKRを購入しました。しばらく待った後、攻撃者はsMKRをiMKRのショートポジションに交換し、MKRをUniswapに売却しました。そして、このプロセスを繰り返しました。

裏で、攻撃者がUniswapで行った取引により、Synthetix上のMKRの価格を自由に動かすことができました。これは、Synthetixが依存しているオフチェーンフィードが実際にはMKRのオンチェーン価格に依存しており、アービトラージャーが市場を最適な条件にリセットするための十分な流動性を持っていなかったためです。

p9

この事件は、オフチェーン価格データを使用していると思っていても、実際にはオンチェーン価格データを使用している可能性があり、これらのデータを使用することで複雑な攻撃に遭遇する可能性があることを示しています。

3、bZxハッキング事件

2020年2月、bZxは数日間にわたり2回のハッキング攻撃を受け、約100万ドルの損失を被りました。2回のハッキング攻撃に関する優れた技術分析記事はこちらで見つけることができますが、私たちはここでは2回目の攻撃に焦点を当てます。

2回目のハッキング攻撃では、攻撃者はまずETHを使用してKyber上のほぼすべてのsUSDを購入し、その後、Synthetixプラットフォームから2回目のsUSDを購入し、bZxに預け入れました。sUSDを担保として利用し、攻撃者は許可された最大数量のETHを借り入れ、その後、sUSDをKyberに売却しました。

お気づきかもしれませんが、これは本質的に同じ低担保借入攻撃ですが、異なる担保と異なる分散型取引所を使用しています。

4、yVaultの脆弱性

2020年7月25日、私はyEarnが新しいyVaultコントラクトを導入した際の脆弱性を報告しました。この脆弱性に関する公式発表はこちらで読むことができますが、以下に簡単にまとめます。

yVaultシステムは、ユーザーが自分で管理することなくトークンを預け入れて利益を得ることを可能にします。内部では、この金庫は発行されたyVaultトークンの総額と預け入れられた基礎トークンの総額を追跡します。単一のyVaultトークンの価値は、発行されたトークンと預け入れられたトークンの比率によって決まります。金庫が得た利益は、すべての発行されたyVaultトークンに分配されます(したがって、すべてのyVaultトークン保有者にも分配されます)。

最初のyVaultは、ユーザーがBalancerのMUSD/USDC流動性プールに流動性を提供することでUSDCの利益を得ることを可能にします。ユーザーがBalancerに流動性を提供すると、彼らはBPTを受け取り(プール内の資産を引き換えるために使用できます)、したがって、yVaultはそのBPTで引き換え可能なMUSD/USDCの金額に基づいてその保有価値を計算します。

これは正しい実装のように思えますが、不幸なことに、前述の原理と同様に------取引中、Balancerプールの状態は不安定であり、信頼できません。この場合、Balancerが選択した共同曲線により、USDCとMUSDの間で交換するユーザーは1:1の為替レートを得ることはできず、実際にはプールにいくつかのMUSDを残すことになります。これにより、BPTの値が一時的に膨張し、攻撃者が価格を自由に操作し、その後金庫を枯渇させることが可能になります。

p10

この事件は、価格オラクルが常に信頼できるわけではなく、開発者はどのようなデータを取り込んでいるかに注意し、そのデータが特権のないユーザーによって簡単に操作される可能性があるかどうかを考慮する必要があることを示しています。

5、Harvest Financeのハッキング攻撃

2020年10月26日、匿名のユーザーが(今あなたが推測しているかもしれない)技術を使用してHarvest Financeの流動性プールを攻撃しました。公式の分析報告書をここで読むことができますが、再度要約します:攻撃者は取引を実行してCurveプール内のUSDC価格を下げ、その後、下がった価格でHarvestプールに入り、以前の取引を逆転させて価格を回復し、より高い価格でHarvestプールから退出しました。これにより、ユーザーは3300万ドルの損失を被りました。

自己防衛の方法は?

さて、あなたが価格オラクル操作攻撃について理解したことを願っています。さらに、適切な防御策を講じない場合、攻撃者はあなたのプロトコルを欺いてお金を奪う可能性があります。現在、すべての状況に適用できる解決策はありませんが、他のプロジェクトで効果を上げた解決策がいくつかあります。その中の1つがあなたに適しているかもしれません。

提案1: 浅い市場に飛び込まない

浅い水域に飛び込むのと同じように、浅い市場に飛び込むことも痛みを伴い、巨大な損失を引き起こし、あなたの人生を永遠に変える可能性があります。具体的な価格オラクルプランを考える前に、トークンの流動性があなたのプラットフォームとの統合を保証するのに十分かどうかを考慮してください。

提案2:手元の鳥1羽は林の中の2羽に勝る(手に入れたものが本物)

Uniswapでの潜在的な為替レートを見ることは魅力的かもしれませんが、実際に「取引」ボタンをクリックし、トークンをウォレットに移すまでは、すべてが最終的なものではありません。同様に、2つの資産間の為替レートを確認する最良の方法は、資産を直接交換することです。この方法は良いですが、取り消しもなく、仮定もありません。しかし、貸付プラットフォームのようなプロトコルにとっては、元の資産を保持する必要があるため、機能しない可能性があります。

提案3:ほぼ分散型のオラクル

オンチェーンデータオラクルに依存することの1つの問題を要約すると、それらの更新が少し早すぎることです。そうであれば、なぜ少しの人為的な遅延を導入しないのでしょうか?契約を作成し、分散型取引所(例えばUniswap)の最新価格で自分を更新しますが、少数の特権ユーザーを通じて行います。これにより、攻撃者が価格を操作できたとしても、それを利用することはできません。

この方法は実装が簡単で、効果が見えやすいですが、いくつかの欠点もあります------ブロックチェーンが混雑しているときに、あなたが望むように価格を迅速に更新できない可能性があり、依然としてサンドイッチ攻撃(sandwich attacks)に対して脆弱です。また、今やあなたのユーザーは、あなたが価格の更新を維持することを信頼する必要があります。

提案4: 最短遅延を増やす

価格オラクルを操作することは時間に敏感な操作であり、アービトラージャーは常に観察しており、次の最適でない市場を最適化する機会を探しています。攻撃者がリスクを最小限に抑えたい場合、彼らは単一の取引で価格オラクルを操作するために必要な2つの取引を完了しようとするでしょう。これにより、アービトラージャーは間に入る機会を持たなくなります。プロトコル開発者として、システムがそれをサポートしている場合、ユーザーがシステムに入る前と出る後の間に最短の遅延を実装するだけで十分です。

もちろん、これはコンポーザビリティに影響を与える可能性があり、マイナーと取引者の協力が増加しています。将来的には、不正行為者が複数の取引で価格オラクルを操作する可能性があり、彼らはマイナーが誰も間に入って利益を得ることができないようにすることを知っています。

提案5:時間加重平均価格(TWAP)

Uniswap V2は、オンチェーン開発者が使用できる時間加重平均価格(TWAP)オラクルを導入しました。この文書では、このオラクルが提供する正確な安全保証について詳しく説明されています。一般的に、長時間チェーンが混雑していない大型資産プールに対して、このTWAPオラクルはオラクル操作攻撃に対して非常に強い抵抗力を持っています。しかし、その実装の性質上、市場が激しく変動する瞬間に十分に迅速に反応できない可能性があり、オンチェーン流動性を持つトークン資産にのみ適用されます。

提案6: M-of-N報告者メカニズム

時には人々が言います、「物事をうまくやりたいなら、自分でやれ」と。では、信頼できる友人をN人集めて、彼らが正しいと思うオンチェーン価格を提出させ、M個の最良の回答を集めて現在の価格を形成したらどうなるでしょうか?

現在、多くの大規模プロジェクトがこの方法を使用しています。Makerは信頼できるエンティティによって運営されるフィードを実行し、CompoundはOpen Oracleを作成し、Coinbaseのようなオラクルの価格提供者が存在し、ChainlinkはChainlinkオペレーターからの価格データを集約し、オンチェーンで公開しています。これらの解決策の1つを選択する場合、あなたはすでに信頼を第三者に委託しており、あなたのユーザーもそうしなければなりません。価格提供者にオンチェーンで最新情報を手動で公開させることは、市場が大きく変動し、ブロックチェーンが混雑している時期に、価格更新が時間通りに行われない可能性があることを意味します。

結論

価格オラクルはDeFiの安全性にとって重要ですが、しばしば見落とされがちな要素です。価格オラクルを安全に使用することは難しく、あなたやあなたのユーザーを驚かせる方法がたくさんあります。この記事では、価格オラクルが操作された例をいくつか議論し、取引中に価格情報を読み取ることが不安全である可能性があることを確認しました(これにより、壊滅的な財務損失が発生する可能性があります)。また、過去に他のプロジェクトが採用した、オラクル価格操作に対抗するためのいくつかの技術についても議論しました。最後に、すべての状況はユニークであり、価格オラクルを正しく使用しているかどうか不安に感じるかもしれません。その場合は、遠慮なくアドバイスを求めてください。

特にDan RobinsonとGeorgios Konstantopoulosにこの文章をレビューしていただいたことに感謝します。

ChainCatcherは、広大な読者の皆様に対し、ブロックチェーンを理性的に見るよう呼びかけ、リスク意識を向上させ、各種仮想トークンの発行や投機に注意することを提唱します。当サイト内の全てのコンテンツは市場情報や関係者の見解であり、何らかの投資助言として扱われるものではありません。万が一不適切な内容が含まれていた場合は「通報」することができます。私たちは迅速に対処いたします。
チェーンキャッチャー イノベーターとともにWeb3の世界を構築する