
著者: Sun
コミュニティ: Discord
この記事は XREX とWTF Academyに掲載されています。
オンチェーン取引の分析を学び始めた頃、オンラインのリソースは非常に限られていました。しかし、少しずつ情報を集め、テストと分析を重ねることができました。
私の研究から、Web3セキュリティに関する一連の記事を公開し、より多くの人々にWeb3セキュリティに参加してもらい、共に安全なネットワークを構築することを目指します。
このシリーズの初回では、オンチェーン分析の実施方法を紹介し、その後、オンチェーン攻撃を再現します。このスキルは、攻撃プロセス、脆弱性の根本原因、さらにはアービトラージボットがどのようにアービトラージを行うかを理解するのに役立ちます。
分析に入る前に、いくつかの一般的なツールを紹介します。適切なツールは、より効率的に調査を行うのに役立ちます。
Phalcon | Tx.viewer | Cruise | Ethtx | Tenderly
Transaction Viewerは最も一般的に使用されるツールで、関数呼び出しのスタックトレースと、取引中の各関数における入力データを一覧表示できます。Transaction Viewerツールはどれも似ていますが、主な違いはチェーンサポートと補助機能のサポートです。私は個人的にPhalconとSamのTransaction Viewerを使用しています。サポートされていないチェーンに遭遇した場合は、Tenderly を使用します。Tenderlyはほとんどのチェーンをサポートしていますが、可読性が限られており、デバッグ機能を使用すると分析が遅くなることがあります。しかし、Ethtxとともに私が最初に学んだツールの 1 つです。
Phalcon: Ethereum、BSC、Avalanche C-Chain、Polygon、Solana、Arbitrum、Fantom、Optimism、Base、Linea、zkSync Era、Kava、Evmos、Merlin、Manta、Mantle、Holesky testnet、Sepolia testnet
Sam's Transaction Viewer: Ethereum、Polygon、BSC、Avalanche C-Chain、Fantom、Arbitrum、Optimism
Cruise: Ethereum、BSC、Polygon、Arbitrum、Fantom、Optimism、Avalanche、Celo、Gnosis
Ethtx: Ethereum、Goerli testnet
Tenderly: Ethereum、Polygon、BSC、Sepolia、Goerli、Gnosis、POA、RSK、Avalanche C-Chain、Arbitrum、Optimism、Fantom、Moonbeam、Moonriver
JayPeggers の「不十分な検証 + 再入可能」のインシデントを例にとり、TXIDを分析します。
まず、Blocksecが開発したPhalcon ツールを使って説明します。取引の基本情報と残高の変更が下の図に示されています。残高の変更から、攻撃者がどれだけの利益を得たかを素早く確認できます。この例では、攻撃者は15.32 ETHの利益を得ました。

Invocation Flow Visualizationは、トレースレベルの情報とイベントログを含む関数呼び出しの視覚化です。これには、呼び出しの実行、この取引の関数呼び出しレベル、フラッシュローンが使用されたかどうか、関与したプロジェクト、呼び出された関数、およびどのようなパラメータと生データが渡されたかなどが示されます。

Phalcon 2.0では、資金フローとデバッグ+ソースコード分析が追加され、トレースとともにソースコード、パラメータ、戻り値が直接表示されるため、分析がより便利になりました。

次に、同じTXIDを SamのTransaction Viewerで試してみましょう。Samは多くのツールを統合しており、下の図に示すように、ストレージの変更と各呼び出しで消費されたガスを確認できます。
左側のCallをクリックすると、Raw Inputデータがデコードされます。
では、同じTXIDを Tenderlyで分析してみましょう。他のツールと同様に、基本情報を確認できます。しかし、デバッグ機能を使用すると、視覚化されず、ステップバイステップで分析する必要があります。ただし、デバッグ中にコードと入力データの変換プロセスを表示できるという利点があります。
これは、この取引が行ったすべてのことを明確にするのに役立ちます。POCを書く前に、リプレイ攻撃を実行できますか?はい、できます!TenderlyもPhalconもシミュレートされた取引をサポートしており、上の図の右上にRe-Simulateボタンがあります。ツールは下の図に示すように、取引からパラメータ値を自動的に入力します。ブロック番号、From、Gas、入力データなど、シミュレーションの必要に応じてパラメータを任意に変更できます。
Raw Input データの最初の4バイトは関数署名です。Etherscanや分析ツールが関数を識別できない場合、署名データベースを通じて可能な関数を確認できます。
以下の例では、関数0xac9650d8が何であるかわからないと仮定します。
sig.eth でクエリを実行すると、4 バイトの署名がmulticall(bytes[])であることがわかります。

ABI to interface | Get ABI for unverified contracts | ETH Calldata Decoder | ETHCMD - Guess ABI
ABI to interface: POCを開発する際には、他のコントラクトを呼び出すためのインターフェースが必要です。このツールを使用すると、インターフェースを素早く生成できます。Etherscanで ABI をコピーし、ツールに貼り付けると、生成されたインターフェースが表示されます。Example

ETH Calldata Decoder: ABIなしでInputデータをデコードしたい場合は、このツールが必要です。前述のSamのTransaction ViewerもInputデータのデコードをサポートしています。

Obtain ABI for unverified contracts: 検証されていないコントラクトに遭遇した場合、このツールを使用して関数署名を推定できます。

Etherscan-decompile bytecode | Dedaub | heimdall-rs Etherscan には逆コンパイル機能が組み込まれていますが、結果の可読性は低いことが多いです。個人的には、より良い逆コンパイルコードを生成するDedaubをよく使用しています。これは私のおすすめの逆コンパイラです。攻撃された MEV Bot を例に、このコントラクトを自分で逆コンパイルしてみてください。
まず、検証されていないコントラクトのバイトコードをコピーし、Dedaub に貼り付けてDecompileをクリックします。


さらに詳しく学びたい場合は、以下の動画を参照してください。
samczsun's eth txn explorer and vscode extension
Vulnerabilities in DeFi by Daniel V.F.
Tenderly.co - Debug Transaction