泥棒は設計図を読んだだけ。金庫は、書かれたとおりに開いた
その金庫は、路上に置かれています。設計図は、誰でも読めるように隣の壁に貼ってあります。ずいぶん不用心に聞こえますが、これが安全の証だとされてきました。イーサリアムの上で動く、お金のプログラムの話です。
プログラムがお金を握っている
その金庫の中身は、お金そのものです。イーサリアムの上では、お金を貸す、借りる、交換するといった銀行のような仕事を、銀行員のいないプログラムが回しています。「スマートコントラクト」と呼ばれるこのプログラムは、コードに書かれた条件がそろえば、人の審査を待たずにお金を動かします。DeFi(分散型金融)と呼ばれる世界です。
そしてそのコードは、原則として誰でも読めるように公開されています。中身の見えない仕組みにお金を預けろと言われても困る。誰でも検算できることが、信頼の根拠だからです。冒頭の金庫の正体は、これです。金庫は誰でも触れる場所に置かれたプログラム、設計図は公開されたコード。
ふつうのアプリなら、バグの多くは「ボタンが効かない」「画面が崩れる」といった不便で済みます。スマートコントラクトのバグは、プログラム自体がお金を直接握っているぶん、そのまま流出口になります。そして設計に穴があれば、その穴も設計図ごと、世界中に公開されています。
約6,000万米ドルは、正しく出ていった
この危うさを世界に知らしめたのが、2016年の「The DAO事件」です。
The DAO(ザ・ダオ)は、イーサリアム上の投資ファンドのようなプロジェクトでした。世界中から資金を集め、それをどこへ投じるかは出資者の投票で決める。集金も、投票の集計も、払い戻しも、運営会社ではなく、ここまで見てきたスマートコントラクトが処理していました。組織の運営ルールがまるごとコードに書かれ、そのコードは誰でも読める場所に置かれていたわけです。
集まった資金は約1億5,000万米ドル相当。そこから、約6,000万米ドル相当のイーサ(ETH)が抜き取られました。
手口は「再入攻撃」と呼ばれています。The DAOのお金を引き出す仕組みは「払い出す→残高を減らす」の順で動いていて、残高を減らし終える前に、もう一度払い出しを呼び出せる隙がありました。ATMにたとえるなら、現金が出てきてから残高が減るまでのわずかな間に、もう一度引き出しボタンを押せてしまう。残高が減らないうちに何度も押せば、預けた額を超えてお金が出てきます。
攻撃者は、鍵も壊さず、パスワードも盗んでいません。公開されていた設計図を読み、書かれたとおりの手順で、書かれていた穴を突いた。プログラムは正しく動き続けたまま、お金だけが出ていきました。この事件は、記録を巻き戻すかどうかの大論争に発展し、最終的にイーサリアムというチェーンそのものが二つに分かれる結末まで行き着きます。多数派になったチェーンでは記録が巻き戻され、お金の大半は出資者のもとへ戻りました。生まれて間もないイーサリアムを、土台から揺るがした事件でした。
元手ゼロで来る泥棒
もっと新しい型もあります。「フラッシュローン」を使う手口です。
フラッシュローンは、担保なしで巨額を借りられるDeFiの仕組みです。ひとつの取引の中で「借りて、使って、返す」まで終えれば成立します。ほんの一瞬だけ、大金を握れるわけです。
攻撃者はその一瞬で、ほかのプログラムが値付けの目安にしている市場価格を力ずくで動かします。たとえるなら、借りた大金で、ある市場の値札を一瞬だけ書き換える。その値札を信じている別の窓口に持ち込んで、差額を抜く。借りたお金は、その場で返す。手元にほとんどお金がなくても実行できてしまう。まっとうな使い道もある仕組みなのですが、この身軽さが攻撃の道具にもなっています。
ふたつの手口に共通するのは、どこも壊していないことです。プログラムは、書かれた条件のとおりに正しく動いた。ただ、その条件に穴があった。泥棒は、バールもドリルも持ってきません。持ってくるのは、壁の設計図を読み込む根気だけです。
「直せない」ことも、信頼のうち
ふつうのソフトなら、バグが見つかればすぐ修正版を配れます。スマートコントラクトはそうはいきません。「あとから勝手に書き換えられない」ことが信頼の根拠のひとつなので、世に出たコードを直すのは難しい場合が多いのです。発見が遅れれば、攻撃者のほうが先に見つけていた、ということが起こります。
対策は進んでいます。設計図が誰にでも見えるのは、守る側にとっても同じです。公開前にプロがコードの弱点を探す点検(監査)は広く行われるようになり、穴を見つけた人に報奨金を払う仕組みも広がりました。それでも2023年には、6回の監査を受けていたプロジェクトから約1億9,700万米ドルが流出しています。コードが複雑になるほど、見落とされる組み合わせは増える。集まるお金が大きくなるほど、設計図を読み込む側の根気も強くなる。いたちごっこは続いています。
「人ではなくプログラムが動かすから安心」。その安心の根拠だった透明さは、同時に、攻撃者への案内図でもあります。金庫は今日も路上に置かれ、設計図は壁に貼ってあります。それを眺めているのは、守る側だけではありません。