今回は、ERC20トークンを無限に生成できる脆弱性が発覚!?BatchOverflowとは何か!?情報についてまとめてみました。
ERC20とは
ERC20トークンを無限に生成できる脆弱性が発覚!?
Ethereum(イーサリアム)ベースのプロジェクトが使用するERC20準拠のコントラクトの
Batch Transfer関数のバグで取扱い数を超えるトークンをコスト0で生成し送金できるバグが発見され現在ニュースになっています。
この脆弱性をBatchOverflowと呼び、報告によると12以上のプロジェクトがこの脆弱性をコントラクトコードに持つとしています。
今回の事件は、Ethereum(イーサリアム)自体の問題でもなく、ERC20自体の問題でもなく、
一部のERCトークンの作成者が自分のトークンにバグを作ってしまっただけです。
以下は本文を翻訳した内容です。
以前のEOSトークンの分析に基づいて作成されたもので、Ethereumベースの(ERC-20)トークン転送を
スキャンして分析する自動システムを開発しました。
具体的には、不当に大きなトークンなどの不審な取引が発生した場合、自動的にアラートが送信されます。
特に、2010年4月22日、03:28:52 UTCのシステムでは、異常なBECトークントランザクション(図1参照)に関連するアラームが発生しました。
この特定のトランザクションでは、誰かが非常に大量のBECトークン
(0x8000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
(63 0 -実際には、実際には2つのそのような大きなトークン転送があり、
転送ごとに同じBeautyChain契約のトークンと同じ量のトークンが含まれますが、2つの異なるアドレスに対応します)。
この異常は、関連するスマート契約コードを調べる必要性を促しました。
私たちの調査によると、そのような移行は、以前は知られていなかった契約の脆弱性を悪用する「野生の」攻撃からもたらされます。
詳細については、この特定の脆弱性をbatchOverflowと呼びます。
バッチオーバーフローは本質的に古典的な整数オーバーフローの問題であることを指摘します。
以下では、バッチオーバーフローの脆弱性について詳しく説明します。
脆弱な関数はbatchTransferにあり、コードは図2に示されています。行257に示すように、
量ローカル変数はcntと_valueの積として計算されます。2番目のパラメータ、つまり_valueは、任意の256ビット整数、たとえば
0x8000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000(63 0の)。
2持つことにより_receiversに渡さbatchTransferを()という非常に大きなで、_value、我々はオーバーフローする可能量を、それはゼロにします。
量攻撃者は258〜259行目のサニティチェックにパスし、261行目の減算を無関係にすることができます。
最後に、ここで興味深い部分があります:262行目〜265行目に示されているように、2つのレシーバのバランスは、攻
撃者のポケットに一銭もかからずに、非常に大きな_valueによって追加されます。
これにより、他の契約をスキャンして分析するシステムをさらに運用します。
我々の結果は、ERC20契約の十数件以上がbatchOverflowに対しても脆弱であることを示しています。
デモンストレーションのために、私たちは、コンセプト実証エクスプロイト(図3)として、
1つの脆弱な契約(どの取引所でも取引可能ではない)との取引に成功しました。
このブログを書く時までに、我々はまた、この脆弱な契約を持つチームに連絡するよう努めました。
しかし、Ethereumブロックチェーンで宣伝された “コード・オブ・ロー”の原則では、
これらの脆弱な契約を是正するための伝統的なセキュリティレスポンスメカニズムは存在しません。
さらに、これらのトークンに関連する潜在的な価値を伴って、私たちは第三者の独立したセキュリティチームとして、
様々な取引所における脆弱なトークンの取引を中断することによって反応する立場にはありません。
幸運にも、午後4時12分(GMT + 8)に事実上OKEXは、BeautyChain(BEC)、バッチオーバーフローで影響を受けるトークン。
しかし、他のエクスチェンジも調整する必要があり、
バッチオーバーフローの影響を受けやすいトレード可能な他のトークンが存在します。
オフラインの取引サービスとの非集中型取引所の存在は、攻撃者がトークンを洗濯するのを止めることさえできないため、
さらなる課題を引き起こす可能性があります。
一方、私たちはさらに重大な複雑さに直面する可能性があります。
具体的には、攻撃者はこれらの脆弱な契約を悪用して大量のトークンを所有する可能性が非常に高いです。
彼女が暗号暗号交換に行き、ETH、BTC、または米ドルのためにそれらのトークンを交換し始めるとどうなりますか?
非常に大量のトークン(循環中のtotalSupplyよりも大きい可能性が高い)を持つ攻撃は、
関連する暗号化通信の価格を容易に操作する可能性があります。
これは、直近のBinance事件[1]が先月早く起きたことを思い出させるもので、
Binanceの顧客口座を管理してViacoinを運転し、反対側の現金を出すことができました。
BatchOverflowをわかりやすく説明
1度に複数人にトークンを送るbatchTransfer()関数が存在しており
「一人当たり送る量」と「宛先の数」を掛け算して「送る総量」決めてる場所があり
「宛先の数」を2以上「一人当たり送る量」を数値を大きくすると「送る総量」がオーバーフロして0になってしまうという感じです。
大手取引所がERC20トークンの取引を停止している!?
Ethereum(イーサリアム)を基盤とするERC20トークンの batchOverFlowのバグが見つかり
これを受け仮想通貨大手取引所はERC20準拠トークンの入出金を停止してます。
・Poloniex:入出金を停止
・OKex:入金停止
・HitBTC:顧客資金をオフラインに移動
・QUOINE:トークンの取引を停止
・Changelly:トークンの取引を停止
ERC20のBatchOverflowのバグによってハードフォークは行われるのか!?
気になるのは、ERC20のBatchOverflowのバグによってハードフォークは行われるのかという点ですが、
Ethereum(イーサリアム)はデプロイしたコントラクトは不変で変更ができないので、
BatchOverflowの脆弱性を持つトークンコントラクトは変更できません。
なので、ハードフォークは行わないと思われます。
ERC20のBatchOverflowのバグの要点まとめ
・BatchOverflowという脆弱性が発覚した
・コーディングミスが原因
・ERC20のバグではない
・Ethereumのバグではない
・ほとんどのERC20トークンに影響なし
・影響は数種類のトークンのみ
・ハードフォークは行わない可能性が高い
まとめ
今回のERC20のバグであるBatchOverflowはエンジニアが頭が悪いとしか言いようがないですね。
とりあえず、取引所自体も対応が早かったので、問題は食い止められそうです。