イーサリアムやEVMを実装したEVM経済圏、Rollupを採用したL2などではイーサリアムのコントラクトをそのまま使用できるという利点があります。一方でイーサリアムとEVM経済圏ではコントラクト利用が一般化した現在において、署名時の不注意で資産を盗まれる事例が後を耐えません。
自分の仮想通貨資産を守るにはスマートコントラクト自体を理解し、開発されたコードを読むのが最も確実となっていますが、監査企業でさえバグに気づかずに巨額の損失が出ていることから現実的ではありません。
ですがイーサリアムの仕組みを前提知識に理解しておけば、自分が今からはじめて利用しようとしているDeFiやNFTコントラクトでも安全かどうかを検証/確認することができるのです。
EVM(イーサリアムヴァーチャルマシン)の難しい話が少し入りますが、本リサーチレポートでは非エンジニアの投資家向けに実例をあげつつ安全なコントラクト実行をするためのスマートコントラクトの検証と確認方法についてわかりやすく解説を行います。
- 1 DeFiとNFTのセキュリティ対策一覧
- 2 多様化するDeFiとNFTの盗難事例
- 3 イーサリアムのコントラクト監査問題
- 4 DeFiやNFTコントラクトが正しいこと確認するには?
- 5 コントラクトの動作が正しいかを検証/確認する
- 6 コントラクト実行の前提知識
- 7 EVMのFunction(関数)のコール
- 8 トランザクションを解析する
- 8.1 Badger DAOで被害にあったConvex Financeの例
- 8.2 実際のコントラクト実行例を分析
- 9 Method IDとは?
- 10 署名前のコントラクト検証方法
- 10.1 ERC20トークンスタンダード
- 10.2 署名時の確認方法
- 11 墨汁うまいに質問する
DeFiとNFTのセキュリティ対策一覧
DeFiやNFTのフィッシングはその仕組みを理解するとほぼ100%防ぐことができます。DeFiやNFTの仮想通貨投資家が知るべきセキュリティ対策については下記リサーチレポートでわかりやすく解説しています。
・99%が知らないイーサリアムDeFiやNFTのコントラクト検証と確認方法Pt.1Approveの危険性を理解する
・99%が知らないイーサリアムDeFiやNFTのコントラクト検証と確認方法Pt.2フィッシングを避ける安全な署名方法とは?
・99%が知らないイーサリアムDeFiやNFTのコントラクト検証と確認方法Pt.3Solidityの背景から理解するUniswapの動作
・99%が知らないイーサリアムDeFi/NFTコントラクト検証と確認方法
Pt.4コントラクトリストを使用した安全な利用方法・ツール:DeFi及びNFTのコントラクトリスト
多様化するDeFiとNFTの盗難事例
DeFiとNFTアートにつきものが盗難であり、DeFiであれば高いAPY(年間利回り)と資産価値、NFTアートであれば価格面での資産価値があるのに対し、様々なハッキング手法でハッカーは仮想通貨を狙っています。
主な攻撃事例としては
1.コントラクトのバグによる価格操作などの攻撃
2.開発運営元の秘密鍵流出による盗難
3.サポートを装ったフィッシング
4.公式サイトのハッキングによるコントラクトアドレスの書き換え
5.DNSハックによる公式サイトのすげ替え
6.Google広告などのフィッシングサイト
7.ハッキング目的の偽トークン送りつけ
など数多く存在します。
1と2はハイリスクなプロジェクトを避ければある程度防げますが、4~7はDeFiやNFTマーケットプレイスなどのスマートコントラクトを実行する際の署名が原因となっているのです。
つまりDeFiやNFTで高い利益を得るには
「盗難を避けるためにスマートコントラクトが安全であるかを確認し、どれだけ自分の利用しようとしているコントラクト把握しているか」
が鍵となるということになります。
イーサリアムのコントラクト監査問題
イーサリアムにおいてDeFi黎明期の2018~2019年を経て、2020年にCompoundのCOMPのイールドファーミングからDeFiブームが巻き起こりました。その中で2018年までにはあまり見られなかった”スマートコントラクトの監査”が重要視されるようになり、2020年までにコントラクト監査企業は乱立していったのです。
これに伴いDeFiのコントラクト監査はまるで○○○セレクション受賞のような、監査済みというただのラベル状態となっているのです。これまでの急激なDeFiのローンチや事故を見ても、監査の信頼度は低いということがわかるでしょう。
出典:墨汁マガジンVol.469「最近のイーサリアムDeFiの動向を理解する DeFiの歴史と事件から学ぶリスク」
またTerraのLUNAとUST崩壊までイーサリアムDeFiにおけるTVLトップを誇っていたConvex Financeでさえ約1.8億円のLPトークンが盗まれる可能性があったバグが監査で判明しており、その前に2件の監査が入っていたにもかかわらず見つけることはできなかったのです。本来はイーサリアム上のコントラクトのコードを理解することが重要ですが、それがいかにハードルが高く投資家には不可能であることかがわかるでしょう。
Convex Financeの重大なバグと修正内容については墨汁マガジンVol.690「Convex Financeの監査で判明した約1.8兆円のLPトークンが危険に晒されるバグの詳細を理解する」を参照してください。
DeFiやNFTコントラクトが正しいこと確認するには?
NFTアートにおいてはOpenSeaなどの”NFTマーケットプレイス”である程度の利用するコントラクトが決まっています。一方で高いイールドファーミングのAPYを求めたり、2021年から本格化した新しいDeFiコントラクトの組み合わせによるアグリゲーターの場合、常に新しいプロジェクトの発足や流動性プールの移動を頻繁にすることになるでしょう。
このような場合、
「新規で使うスマートコントラクトが正しいかどうかを判断できなければ、初回の署名で資産をすべて盗まれるというようなこともイーサリアムやEVM経済圏、L2ではあり得るということになる」
のです。
従って利用する前に事前に署名するコントラクトが正しいかを検証、または確認する必要があり、これらの主な方法としては
1.スマートコントラクトのコードを読む
2.スマートコントラクトの署名後の動作が正しいかを検証する
3.TVLが高いなどの多くの利用者がいるかをざっくり確認する
という3つの大まかな内容に分類できるでしょう。
コントラクトの動作が正しいかを検証/確認する
上記3つの方法は上に行くほど精度はいいものの、難易度が跳ね上がり利用者の9割以上には無理な芸当となるでしょう。理由としてはスマートコントラクトに特化した監査企業でさえ、コントラクトのコードのバグを見落としがちであるからです。
このようなプロでさえ厳しいことを投資家が行うことは無理であり、逆にTVLのロック数の多さで見ても精度はたかが知れているということになります。従ってコントラクトが正しく動いており、フィッシングでないことを確認するには
「コントラクトの署名後に正しく動いているのかを検証/確認する」
ことがベストであるということになります。
3のTVLで大まかに確認する方法はローンチ直後には使えず、精度も悪いのに対してこの方法では予め検証することができ、仕組みさえわかってしまえば非エンジニアの投資家でもかんたんにフィッシングやハッキングを防げるといる大きな利点があるのです。
コントラクト実行の前提知識
ではイーサリアムやEVM経済圏のDeFiやNFTなどのコントラクトに署名後に正しく動作しているかを確認する具体的な方法を見ていきましょう。
まず最初に理解すべきことは
「コントラクトの