DERP例3:Uniswap MEV

Satopin
HOPR Japanese
Published in
17 min readAug 12, 2022

HOPR DERPツールは、標準のRPCプロバイダーの複製ですが、ユーザーに対して、送られたリクエストの正確な数や、共有され潜在的に悪用され得るデータとメタデータの量を見える化します。

最初のショーケースでは、パスワードを入力する前であっても、どの様にMetamaskがすべてのアカウント間のリンクを公開してしまうのかを説明しました。 2つ目の例では、ガス代を見積もるための関数コール内に共有されたデータペイロードをコピーする事によって、NFTマーケットプレイスやその他のサービスでフロントラン攻撃を実行するのがいかに簡単かを示しました。

Our third DERP showcase explores how using Uniswap and other DEXs exposes you to potential exploits, including a particular type of MEV (maximal extractable value) attack.3つ目のDERPショーケースでは、Uniswapやその他のDEXを使用することで、特定の種類のMEV(Maximal Extractable Value)攻撃など、潜在的なエクスプロイトの危険にどのようにさらされるかを探ります。

UniswapのようなDEXは複雑であり、UIを合理化して通貨交換を理解しやすく、使いやすくするために多くの改善が施されています。しかし、すべてのDERPの例と同様に、この合理化により、さまざまなRPCエンドポイントとの間でやり取りされる情報の正確な量を分かりづらくしてしまいます。

スワップを行うとき、UIはさまざまなフィールドにデータを入力する方法を知っている必要があります。簡単そうに見えますが、舞台裏では多くの作業が行われています。アプリは、交換したいトークンの相対価格と、受け入れても構わないと思っているスリッページの量を知る必要があります。 スリッページは取引の規模と利用可能な総流動性の比率に依存するため、この数値はキーストロークごとに再計算する必要があります。 このすべての情報は、ほぼリアルタイムでブロックチェーンからフェッチされ、新しいブロックごとに更新される必要があります。

取引を行うときは、ウォレットが完了するために費やす必要のあるガスを見積もる必要があります。これを行うために、計画されたトランザクションの全詳細がRPCプロバイダーに送信されます。

つまり、Uniswapを使用する度に、ウォレットアドレス、残高、そして非常に重要なIPアドレスなどの識別情報が世界中に開示されます。

ETHをHOPRトークンに交換することを計画している場合の典型的なeth_estimateGasコールを見てみましょう。

[

{

“value”: “0x2386f26fc10000”,

“from”: “0x2402da10a6172ed018aeea22ca60ede1f766655c”,

“to”: “0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45”,

“data”: “0x5ae401dc000000000000000000000000000000000000000000000000000000006239d5f00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000124b858183f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000002402da10a6172ed018aeea22ca60ede1f766655c000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000082350d2bca3206beb0000000000000000000000000000000000000000000000000000000000000042c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000bb86b175474e89094c44da98b954eedeac495271d0f000bb8f5581dfefd8fb0e4aec526be659cfab1f8c781da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000”

}

]

これを理解するためには、チャンク(通常64文字)毎に分解する必要があります。

0x5ae401dc
000000000000000000000000000000000000000000000000000000006239d5f0
0000000000000000000000000000000000000000000000000000000000000040
0000000000000000000000000000000000000000000000000000000000000001
0000000000000000000000000000000000000000000000000000000000000020
0000000000000000000000000000000000000000000000000000000000000124
B858183f
0000000000000000000000000000000000000000000000000000000000000020
0000000000000000000000000000000000000000000000000000000000000080
0000000000000000000000002402da10a6172ed018aeea22ca60ede1f766655c
000000000000000000000000000000000000000000000000002386f26fc10000
0000000000000000000000000000000000000000000000082350d2bca3206beb
0000000000000000000000000000000000000000000000000000000000000042
C02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
000bb8
6b175474e89094c44dA98b954eedeac495271d0f
000bb8
F5581dfefd8fb0e4aec526be659cfab1f8c781da
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000

そして、先行するゼロとほんの数個の数字で終わる行を取り除きます(これらは単にパディングと位置合わせに使用されています)。

0x5ae401dc
6239d5f0
B858183f
2402da10a6172ed018aeea22ca60ede1f766655c
2386f26fc10000
82350d2bca3206beb
C02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
000bb8
6b175474e89094c44dA98b954eedeac495271d0f
000bb8
F5581dfefd8fb0e4aec526be659cfab1f8c781da

4byte directoryで0x5ae401dcを検索することは、あまり有益ではありません。これは単なるマルチコール関数であり、スマートコントラクトの複数の関数を同時に呼び出すために使用されます。何らかの理由で、Uniswapでは、呼び出されている関数が1つだけの場合でもこれが使用されます。

これは、2022年3月22日火曜日13:58:08 GMT + 0000のUnixタイムスタンプであり、未完了の場合にこのトランザクションが期限切れになる時刻を表します。

b858183fは、exactInput(tuple params)と呼ばれる実際に呼び出される関数です。

2402da10a6172ed018aeea22ca60ede1f766655cは送信元アドレスです。

2386f26fc10000を16進数から変換すると 10000000000000000、つまりスワップを行う0.01ETHです。

82350d2bca3206beb は 150118718086773238763。実際のHOPRの見積もり額は187を超えているため、これは少し謎です。この不一致について誰か教えていただけるのであれば、ぜひご連絡ください。

Uniswapには直接のETH/HOPRペアリングがないため、次の行はペア間のルートの説明です。

c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 はWETHコントラクトです

6b175474e89094c44da98b954eedeac495271d0f はDAIコントラクトです

F5581dfefd8fb0e4aec526be659cfab1f8c781da はHOPRトークンのコントラクトです

繰り返されるbb8は10進数で3000、つまりユニスワップが課す0.3%の手数料です。

ご覧のとおり、このトランザクションに必要なガス代の見積もりは、計画されたスワップの全詳細を送信することによって達成されます。

超能力MEV

なぜこれが問題なのでしょうか?

この情報はすべて、Uniswapを機能させるために不可欠であり、必ずしも悪ではありませんが、Uniswapがどの様に処理を選択するかに関して非常に不快な結果が生じます。 これらには2種類のエクスプロイトがあります:

  • 実行予定のトランザクションに基づくエクスプロイト
  • IPアドレスに基づいくエクスプロイト

これらのコールには、送信される前であっても今後のトランザクションに関するすべての情報が含まれているため、情報にアクセスできる人は誰でも、一般的な高度なMEV攻撃を実行する機会があります。

最初のタイプのエクスプロイトは単純なフロントランです。価格を動かす大規模なトランザクションが差し迫っていることを確認した場合、それを先取りしてスリッページを利用することができます。

攻撃のバックファイアのリスクが高すぎるため、マイナーの協力なしにこれが発生する可能性はほとんどありません。インジェクトされたトランザクションがターゲットトランザクションの前に来ることを確認する必要がありますが、この時点ではまだ架空のものです。

しかし、私たちがコラボレートするとしたらどうでしょうか?これにより、悪用可能な追加情報が提供され、MEVを取り巻く環境が一変する可能性があります。

これは、今や斬新なMEVの世界ではなぜならスピードが全てであるからです。以下はReturn to the Dark Forestからの抜粋です:

最速のフロントランナーが常に勝利します。

イーサリアムの手数料の公開市場により、マイニングプールは最高入札者に取引のファイナリティを与えます。フロントランナーは、mempoolでのトランザクションを監視し、同じトランザクションをより高い料金で送信して、取引の価格を引き上げます。

しかし、高いガス代でさえ、トランザクションを迅速に処理するための信頼できる方法ではありません。トランザクションには共通のボトルネックがあります。それはトランザクションが伝播される速度です。

基本的に、フロントランニングはレースです。イーサリアムのピアツーピアネットワークの流砂で行われる早撃ちです。 フロントランナーは最初にプレーするためにプレミアムを支払います。

現在、この戦いは力ずくで行われています。支出が増えることはマイナーの協力が増えることを意味します。D.E.R.P. は未来を見据え、この一か八かの高速戦争で優位に立つための新しい方法を見出しています。

すべてのRPCコールがトランザクションにつながるわけではありませんが、多くの場合はそうなります。また、どのトランザクションがmempoolにヒットする可能性があるかについての情報があれば、MEV攻撃を事前に計算できます。そうすれば後は、その場で計算して解決する代わりに、収集したデータが実際にアイドル状態のUIクリックから実際の署名済みトランザクションに送られたことを確認するだけです。あなたは数ミリ秒後にはそれをエクスプロイトする準備ができています。

MEVの競争が激化し、抜け穴が塞がれるにつれて、MEV探索者は、価値を引き出すために得ることができるあらゆる手段を講じようとしています。確かに、UniswapのようなRPCプロバイダーへの賄賂は、マイニングプールへの賄賂とは非常に異なる企てのように見えるかもしれません。しかしクリプトというのは、この種の信頼の仮定をする必要がないということなのではなかったでしょうか?コラボレーション以外にも、このRPC情報にアクセスする方法は他にもあります。

IPリンカビリティ

MEVのエクスプロイトについて、少し異なる角度から理解するのは難しいように思われるかもしれません。結局のところ、実際のトランザクションになる運命にあるすべてのRPCコールは、とにかくmempoolに行き着き、同じ種類のMEV攻撃の糧となります。

ただし、各RPCコールはIPアドレスにもリンクされているため、同じIPにリンクされた以前のトランザクションに基づいて、コールがトランザクションにつながる可能性について評価される世界は想像できます。 これで特定の個人を対象としたMEVが可能となりました。突然、物事はもっと不吉になります。

収益性の高いMEV攻撃にリンクされた候補IPアドレスのデータベースを構築することを想像してみてください。RPCコールがタグ付きIPから発信される場合は常に、MEVメカニズム全体が機能し、それを活用するための最良の方法が計算されます。もちろん、すべてのコールがトランザクションにつながるわけではありませんが、トランザクションが発生した場合、攻撃者はmempoolに到達した瞬間にそれをエクスプロイトする準備ができています。

MEVの抜け穴を塞ぐことは、長く、そしておそらく勝てない闘いです。それは私たちが勝ちたいものでさえないかもしれません:MEVについて詳しく調べると、DeFiエコシステムにとって実際に健全な特定の種類のアービトラージ取引があることは明らかです。

しかし、ぶら下がっている果物を取り除く事でMEV探索者がただ荷造りして家に帰るわけではないことも明らかです。彼らは、mempoolの暗い森をエクスプロイトするためますます独創的な方法を見つけるでしょう。そして、不適切に実装されたRPCコールから収集されたIPメタデータを使用することについて何の躊躇もありません。MEVの戦いはまもなくmempoolをはるかに超えて拡大し、プライバシーに焦点を当てた堅牢なアプローチのみがそれに取り組むことができると予測しています。

そしてこれは、公開されたIPアドレスの他のすべての危険なリスク(チェーン上でインタラクトしなくてもリンクされるアドレス、トランザクションとリンクされる実世界のアイデンティティ、そして場所に基づいたトランザクションを検閲等)の上に存在します。HOPRが思い描くトランスポートレベルのセキュリティは、この豊富な情報を確実にマイニングできないようにする1つの方法です。

これが今回のD.E.R.Pシリーズ投稿最後のショーケースとなります。ツールをリリースして以来、この問題を真剣に受け止め始めた人やプロジェクトの数を見て驚いています。今後数ヵ月から数年にわたって、彼らと緊密に連携して、プライバシーがweb3デザインの最前線で正当な位置を占めるよう努めます。

Sebastian Bürgel,
HOPR Founder

本記事はこちらの記事の日本語訳です。翻訳に関して誤りや助言等ございましたらどうぞご連絡ください。

Website: https://www.hoprnet.org
Twitter: https://twitter.com/hoprnet
Telegram: https://t.me/hoprnet
Telegram(日本語): https://t.me/HOPRJapanese
Discord: https://discord.gg/dEAWC4G

Forum: https://forum.hoprnet.org
Staking: https://stake.hoprnet.org
Bounties: https://bounties.hoprnet.org

--

--