batchOverflowの記事(Medium)の日本語訳
どうも、ぺろりんです。
4/22に掲載されたMediumの「New batchOverflow Bug in Multiple ERC20 Smart Contracts (CVE-2018–10299)」という記事の拙訳を載せておきます。
日本語訳があれば他の方の役にも立つかなというのと、個人的な勉強をかねて。
誤訳などありましたらメールフォームからお知らせいただけるととても助かります。
なお、本文や図などは上記リンク先(元記事)をご参照ください。
調べた内容についてはこちらの記事へ。
拙訳
EOSトークン[注1]に対する私たの以前の努力に基づいて、イーサリアム(ERC-20[注2])に基づいたトークン送金を自動的に探査および解析するシステムを開発してきました。特に、私たちのシステムでは何かしらの疑わしい送金(たとえば、明らかにおかしい大量のトークンを含むようなもの)が起きると自動的に警告を出します。
特に、2018年4月22日の午前03:28:52(UTC)、普通でないBEC[注3]トークンの送金について私たちのシステムが警告を上げました(図1)。この特定のトランザクションでは、
(16進数で「0」が63個。実際、たしかにこういう大量のトークン送金が同じビューティーチェーン(BeautyChain)のコントラクトで同じ量という内容の送金が2つありましたが、アドレスは2つで違っていました)という極めて大量のBECトークンを誰かが送金していました。
この異常により、私たちは即座に関連するスマートコントラクトのコードを調査する必要に駆られました。このような送金はコントラクトに関するこれまで知られていない脆弱性を利用した「野放し状態の」攻撃によるものだと、私たちの調査で明らかになりました。推敲のうえ、この脆弱性をバッチオーバーフロー(batchOverflow)と呼ぶことにしました。バッチオーバーフローは基本的に古典的な整数のオーバーフロー問題であるというのが私たちの指摘です。以下では、バッチオーバーフローという脆弱性についてもう少し詳しく調べてみます。
脆弱な関数はbatchTransferの中にあり、そのコードは図2に示した内容です。257行目で示しているように、ローカル変数amountはcntと_valueの積として計算されます。2つ目のパラメータ_valueは、
(63個の「0」がつく)という256ビットの整数値をとれます。極めて大きな_valueとともに2つの_receiversをbatchTransfer()に渡すことで、ローカル変数amountをオーバーフローさせて0にできます。値が0になったamountをもって攻撃者は258–259行目にある値の正常性チェックを通過し、261行目の引き算が無関係になります。最終的に興味ある部分は次のところです:262–265行目に示したように、攻撃者がびた一文支払うことなく、2つの_receiversによるbalanceに極めて大きな値の_valueが足されることになります!
これにより、私たちはこのシステムをさらに走らせて他のコントラクトでも調査および解析しました。結果として、数十以上のERC20コントラクトがbatchOverflowへの脆弱性を持つことが分かりました。実証のため、私たちの検証用コードとして1つの脆弱なコントラクト(どの取引でも交換できないもの)を用いたトランザクションを成功させました(図3)。
このブログ執筆時より、これらの脆弱なコントラクトをもつチームと連絡をとる努力もしてきました。しかしながら、イーサリアムのブロックチェーンでうたわれる「コードこそ法である(code-is-law[注4])」という原則により、このように脆弱なコントラクトに対処するための場所で、慣習的によく知られたセキュリティ対応のやり方がありません!さらに、これらのトークンに関連する潜在的な値に対し、不運にもセキュリティチームとは独立した第三者のような私たちは、多くの取引にある脆弱なトークンによる交換を停止するような対応をとれる立場にありません。幸い、実質午後4:12(GMT+8)にOKEx[注5]が、batchOverflowの影響を受けるトークンであるBeautyChain (BEC)の引き出しと取引を一時停止するというアナウンスを出しました。しかし他の交換でも同様の対応が必要で、batchOverflowに対して脆弱な他の取引可能なトークンがまだ残っています!オフライン取引サービスによる非中央集権的な交換の存在は、それらはまだ攻撃者によるトークンのロンダリングを止められていないという更なる問題を突き付けるかもしれません。
また私たちはさらに、深刻な複雑性にも直面しているかもしれません。特に、このように脆弱なコントラクトを実行することによって、攻撃者が大量のトークンを所有することは非常にありそうなことです。この攻撃者[注6]が暗号通貨取引所に行き、このトークンをETH, BTC, さらにはUSDと交換しはじめたらどうでしょうか?きわめて大量のトークン(ありそうなのは流通している全供給量よりも大きい値)を持つことで、攻撃者が暗号通貨間の価格を簡単に操作できてしまうでしょう。これはつい最近の先月はじめに起きた、犯人がBinance[注7]の顧客アカウントを操作し、アカウントから別のアカウントに売却することでViacoin[注8]の価格をつり上げたというBinance事件[1:Medium記事の引用文献を参照のこと]をすぐに思い起こさせます。
[注1] EOSトークン…イオスという仮想通貨のことみたいです。参考に挙げたCoinOtakuの記事によると「企業の業務サポートで使われることを目的とした、スマートコントラクトを利用して分散型アプリケーションを作ることに特化している仮想通貨」だそうです。
(参考)
・公式サイト
・仮想通貨EOS(イオス・EOS)とは?特徴・買い方・取引所・将来性・チャート・マイニング・ニュースを解説(CoinOtaku)
[注2] ERC-20…Ethereum Request for Comments: Token Standard #20という、イーサリアムベースで作るトークンの技術的な統一規格。この規格に準拠することで、別々のトークンでも同じウォレットで扱えたりする。
(参考)
・ERC20(Wikipedia)
・ERC20とは<初心者向け>(とってもやさしいビットコイン)
・ERC20とは?仮想通貨の名前じゃない?対応するウォレットまで完全解説!(CoinOtaku)
[注3] BEC…Beauty Ecosystem Coinというプラットフォームのことらしい。詳しくは参考に挙げたあたりなどをご参照のこと。
(参考)
・公式サイト
・仮想通貨Beauty Ecosystem Coin(BEC)のAirdrop(無料配布)に参加 テレグラム利用で簡単に貰えるぞ(仮想通貨で自由を買うブログ)
・OKEX上場中のBeautyChain(BEC)がエアドロップを開始(スーファミ世代の仮想通貨ブログ)
[注4] code-is-law(コード・イズ・ロー)…コードがすべてで、(イーサリアムという世界は)コードという自然法則によってできている、というような考え方です。個人的には法「律」というよりも法「則」のニュアンスなのかなと思っています。この(イーサリアムという)世界の自然法則なのでこれは変えられる(変えるべき)ものではないという考え方です。イーサリアムクラシック(ethereum classic)はこっち寄りの考え。
(参考)
・イーサリアムクラシック(ethereum classic)とは~イーサリアムが分裂してできた新たな仮想通貨の全貌~(MOBLOCK)
・イーサリアムクラシックとは?イーサリアムから誕生した背景や違いを紹介(nanairo)
・イーサリアムクラシックが支持され価値がなくならない理由(Code is Law とは)(墨汁の暗号通貨速報)
[注5] OKEx…中国にある仮想通貨取引所の1つ。
(参考)
・公式サイト
・OKEx(オーケーイーエックス)の特徴やメリット/デメリット、口座開設方法をわかりやすく解説!(MOBLOCK)
・海外取引所OKEx(オーケーイーエックス)の登録方法・使い方【画像で解説!】(はじめてのビットコイン)
[注6] ここの「she」ってたぶん直前の文にある「an attacker」のことかと思ったんですが、攻撃者って女性名詞なのだろうか…?教えてエライ人。。
[注7] Binance…中国の仮想通貨取引所の1つ。
(参考)
・公式サイト
・BINANCE(バイナンス)の登録,入金方法と使い方|アプリが使いやすい手数料激安の取引所(ゼロからはじめるビットコイン)
・中国の取引所 Binance (バイナンス) の登録方法を解説(いますぐ始める仮想通貨投資)
[注8] Viacoin…仮想通貨の1つ。詳細は参考に挙げたところなどをご参照のこと。
(参考)
・Viacoin 相場チャート (VIA/JPY)(CoinGecko)
・仮想通貨Viacoin(VIA)の将来性と詳細|Lightning Network対応済みコイン(兼業主夫ふくろうの「好きなことで生きていく?」)
・仮想通貨VIA(Viacoin)とは?特徴や将来性・取引所での買い方 (仮想通貨で稼ぐサイトCOINZ)
4/22に掲載されたMediumの「New batchOverflow Bug in Multiple ERC20 Smart Contracts (CVE-2018–10299)」という記事の拙訳を載せておきます。
日本語訳があれば他の方の役にも立つかなというのと、個人的な勉強をかねて。
誤訳などありましたらメールフォームからお知らせいただけるととても助かります。
なお、本文や図などは上記リンク先(元記事)をご参照ください。
調べた内容についてはこちらの記事へ。
拙訳
EOSトークン[注1]に対する私たの以前の努力に基づいて、イーサリアム(ERC-20[注2])に基づいたトークン送金を自動的に探査および解析するシステムを開発してきました。特に、私たちのシステムでは何かしらの疑わしい送金(たとえば、明らかにおかしい大量のトークンを含むようなもの)が起きると自動的に警告を出します。
特に、2018年4月22日の午前03:28:52(UTC)、普通でないBEC[注3]トークンの送金について私たちのシステムが警告を上げました(図1)。この特定のトランザクションでは、
0x8000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
(16進数で「0」が63個。実際、たしかにこういう大量のトークン送金が同じビューティーチェーン(BeautyChain)のコントラクトで同じ量という内容の送金が2つありましたが、アドレスは2つで違っていました)という極めて大量のBECトークンを誰かが送金していました。
この異常により、私たちは即座に関連するスマートコントラクトのコードを調査する必要に駆られました。このような送金はコントラクトに関するこれまで知られていない脆弱性を利用した「野放し状態の」攻撃によるものだと、私たちの調査で明らかになりました。推敲のうえ、この脆弱性をバッチオーバーフロー(batchOverflow)と呼ぶことにしました。バッチオーバーフローは基本的に古典的な整数のオーバーフロー問題であるというのが私たちの指摘です。以下では、バッチオーバーフローという脆弱性についてもう少し詳しく調べてみます。
脆弱な関数はbatchTransferの中にあり、そのコードは図2に示した内容です。257行目で示しているように、ローカル変数amountはcntと_valueの積として計算されます。2つ目のパラメータ_valueは、
0x8000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
(63個の「0」がつく)という256ビットの整数値をとれます。極めて大きな_valueとともに2つの_receiversをbatchTransfer()に渡すことで、ローカル変数amountをオーバーフローさせて0にできます。値が0になったamountをもって攻撃者は258–259行目にある値の正常性チェックを通過し、261行目の引き算が無関係になります。最終的に興味ある部分は次のところです:262–265行目に示したように、攻撃者がびた一文支払うことなく、2つの_receiversによるbalanceに極めて大きな値の_valueが足されることになります!
これにより、私たちはこのシステムをさらに走らせて他のコントラクトでも調査および解析しました。結果として、数十以上のERC20コントラクトがbatchOverflowへの脆弱性を持つことが分かりました。実証のため、私たちの検証用コードとして1つの脆弱なコントラクト(どの取引でも交換できないもの)を用いたトランザクションを成功させました(図3)。
このブログ執筆時より、これらの脆弱なコントラクトをもつチームと連絡をとる努力もしてきました。しかしながら、イーサリアムのブロックチェーンでうたわれる「コードこそ法である(code-is-law[注4])」という原則により、このように脆弱なコントラクトに対処するための場所で、慣習的によく知られたセキュリティ対応のやり方がありません!さらに、これらのトークンに関連する潜在的な値に対し、不運にもセキュリティチームとは独立した第三者のような私たちは、多くの取引にある脆弱なトークンによる交換を停止するような対応をとれる立場にありません。幸い、実質午後4:12(GMT+8)にOKEx[注5]が、batchOverflowの影響を受けるトークンであるBeautyChain (BEC)の引き出しと取引を一時停止するというアナウンスを出しました。しかし他の交換でも同様の対応が必要で、batchOverflowに対して脆弱な他の取引可能なトークンがまだ残っています!オフライン取引サービスによる非中央集権的な交換の存在は、それらはまだ攻撃者によるトークンのロンダリングを止められていないという更なる問題を突き付けるかもしれません。
また私たちはさらに、深刻な複雑性にも直面しているかもしれません。特に、このように脆弱なコントラクトを実行することによって、攻撃者が大量のトークンを所有することは非常にありそうなことです。この攻撃者[注6]が暗号通貨取引所に行き、このトークンをETH, BTC, さらにはUSDと交換しはじめたらどうでしょうか?きわめて大量のトークン(ありそうなのは流通している全供給量よりも大きい値)を持つことで、攻撃者が暗号通貨間の価格を簡単に操作できてしまうでしょう。これはつい最近の先月はじめに起きた、犯人がBinance[注7]の顧客アカウントを操作し、アカウントから別のアカウントに売却することでViacoin[注8]の価格をつり上げたというBinance事件[1:Medium記事の引用文献を参照のこと]をすぐに思い起こさせます。
[注1] EOSトークン…イオスという仮想通貨のことみたいです。参考に挙げたCoinOtakuの記事によると「企業の業務サポートで使われることを目的とした、スマートコントラクトを利用して分散型アプリケーションを作ることに特化している仮想通貨」だそうです。
(参考)
・公式サイト
・仮想通貨EOS(イオス・EOS)とは?特徴・買い方・取引所・将来性・チャート・マイニング・ニュースを解説(CoinOtaku)
[注2] ERC-20…Ethereum Request for Comments: Token Standard #20という、イーサリアムベースで作るトークンの技術的な統一規格。この規格に準拠することで、別々のトークンでも同じウォレットで扱えたりする。
(参考)
・ERC20(Wikipedia)
・ERC20とは<初心者向け>(とってもやさしいビットコイン)
・ERC20とは?仮想通貨の名前じゃない?対応するウォレットまで完全解説!(CoinOtaku)
[注3] BEC…Beauty Ecosystem Coinというプラットフォームのことらしい。詳しくは参考に挙げたあたりなどをご参照のこと。
(参考)
・公式サイト
・仮想通貨Beauty Ecosystem Coin(BEC)のAirdrop(無料配布)に参加 テレグラム利用で簡単に貰えるぞ(仮想通貨で自由を買うブログ)
・OKEX上場中のBeautyChain(BEC)がエアドロップを開始(スーファミ世代の仮想通貨ブログ)
[注4] code-is-law(コード・イズ・ロー)…コードがすべてで、(イーサリアムという世界は)コードという自然法則によってできている、というような考え方です。個人的には法「律」というよりも法「則」のニュアンスなのかなと思っています。この(イーサリアムという)世界の自然法則なのでこれは変えられる(変えるべき)ものではないという考え方です。イーサリアムクラシック(ethereum classic)はこっち寄りの考え。
(参考)
・イーサリアムクラシック(ethereum classic)とは~イーサリアムが分裂してできた新たな仮想通貨の全貌~(MOBLOCK)
・イーサリアムクラシックとは?イーサリアムから誕生した背景や違いを紹介(nanairo)
・イーサリアムクラシックが支持され価値がなくならない理由(Code is Law とは)(墨汁の暗号通貨速報)
[注5] OKEx…中国にある仮想通貨取引所の1つ。
(参考)
・公式サイト
・OKEx(オーケーイーエックス)の特徴やメリット/デメリット、口座開設方法をわかりやすく解説!(MOBLOCK)
・海外取引所OKEx(オーケーイーエックス)の登録方法・使い方【画像で解説!】(はじめてのビットコイン)
[注6] ここの「she」ってたぶん直前の文にある「an attacker」のことかと思ったんですが、攻撃者って女性名詞なのだろうか…?教えてエライ人。。
[注7] Binance…中国の仮想通貨取引所の1つ。
(参考)
・公式サイト
・BINANCE(バイナンス)の登録,入金方法と使い方|アプリが使いやすい手数料激安の取引所(ゼロからはじめるビットコイン)
・中国の取引所 Binance (バイナンス) の登録方法を解説(いますぐ始める仮想通貨投資)
[注8] Viacoin…仮想通貨の1つ。詳細は参考に挙げたところなどをご参照のこと。
(参考)
・Viacoin 相場チャート (VIA/JPY)(CoinGecko)
・仮想通貨Viacoin(VIA)の将来性と詳細|Lightning Network対応済みコイン(兼業主夫ふくろうの「好きなことで生きていく?」)
・仮想通貨VIA(Viacoin)とは?特徴や将来性・取引所での買い方 (仮想通貨で稼ぐサイトCOINZ)