投稿
avatar

リエントランシーを解明する – 2026年もスマートコントラクトのバグが数百万ドルを継続して吸い取っている理由、そしてそれをコードで防ぐ「チェック・エフェクト・インタラクション」パターン リエントランシーは魔法ではない。これは順序のバグである:あなたのコントラクトが外部呼び出しを行った後に自身の状態を更新し、その隙間に攻撃者が再呼び出しを行う。順序を正せば、バグは消える。 2016年6月17日、The DAOはこの正確なミスにより約360万ETH(当時約6,000万ドル、存在していたETH全体の約5%)を失った。この影響でイーサリアムはETHとETCに分岐した。 10年経った今でも、資金は引き続き奪われている。2026年3月5日、Solv Protocolはリエントランシー攻撃により273万ドルを失い、2026年5月にはオンチェーンプロトコル全体で約5,200万ドルが盗まれた(DeFiLlama、CryptoTimes、2026年5月31日)。 脆弱なパターン:残高を読み取り、低レベルの呼び出しでETHを送信し、その後で残高をゼロに設定する。攻撃者のreceive()関数は、そのゼロが適用される前にwithdraw()を再入力し、コントラクトが空になるまでループする。 二つの対策(併用すること): チェック・エフェクト・インタラクション。検証を行い、すべての状態を更新した後、外部呼び出しを最後に行う。balances[msg.sender] = 0を呼び出しの上に移動させると、再入力された呼び出しはゼロを読み取り、リバートする。 OpenZeppelinのnonReentrantガード。ストレージ上のミューテックス(NOT_ENTEREDからENTEREDへ)が再入力を検知してリバートする。一方だけではなく、両方を使用すること。 開発者が今も間違えがちな二つの点: 1. .transfer()はもはや盾ではない:2019年のEIP-1884でSLOADのガスが引き上げられたことで、2,300ガスの補助金が安全な前提ではなくなった。CEIとともに.call{value:}("")を使用すること。 2. 読み取り専用のリエントランシーは標準的なガードを回避する。更新中のview関数の読み取りは破損した状態を返し、価格オラクルを汚染する可能性がある(dForce、364万ドル)。 教育目的のみ。金融アドバイスではありません。 日々のインサイトをお見逃しなく – ブロックチェーンとAIが出会う場所、一つの満足感あるスワイプずつ。 #Solidity #SmartContractSecurity #Web3Security #Ethereum #DeFi #SmartContracts #BlockchainDeveloper #SolidityDev #EVM #OpenZeppelin #Reentrancy #Web3Dev #BlockchainSecurity #DeFiSecurity #SmartContractAudit #CodeSecurity #OnChain #BlockchainEducation

このコンテンツは情報提供および教育目的のみに使用されます。第三者の見解、スポンサー付きコンテンツ、または作成者が報酬を受け取る可能性のあるプロモーション資料が含まれる場合があります。このフィードの内容は投資助言や収益の保証を構成するものではありません。投資判断はすべてご自身の責任で行ってください。取引を行う前に必ずご自身で調査を行い、慎重に行ってください。当社は第三者情報の正確性を保証するものではなく、発生した損失について一切責任を負いません。過去の実績は将来の結果を示すものではありません。詳細は、当社のコミュニティ利用規約およびリスク開示声明をご覧ください。

avatar返信を投稿する

コメント