シビル攻撃は、フィッシングサイトのような通常の詐欺と何が違うのですか?
最も根本的な違いは、攻撃の対象と手法にある。フィッシング詐欺が狙うのは「人」である——攻撃者は被害者の秘密鍵やシードフレーズ、個人情報を騙し取ろうとし、被害者がすでに保有している資産を直接盗み取る。一方シビル攻撃が狙うのは「仕組み」である——攻撃者は他人から何かを盗むのではなく、システムのルールの抜け穴を利用して自分自身を多数の独立した参加者のように見せかけ、本来「公平に行き渡らせる」「一人一配分」を目的として設計された分配メカニズムから、本来受け取るべき分をはるかに超える取り分を獲得する。
言い換えれば、フィッシング詐欺の被害者は狙われた特定の個人だが、シビル攻撃の被害者は分配メカニズム全体の公平性、そして本来合理的な取り分を受け取るはずだったのに、その取り分が希釈されて少なくなってしまった他の本物のユーザーたちである。これがシビル攻撃が法的にも倫理的にもグレーゾーンに位置づけられがちな理由でもある——他人の財産を盗むわけではなく、ルール設計自体の甘さにつけ込んでいるからだ。
本文で触れられている、エアドロップ受給が確定しているウォレットを狙ったハッカーの攻撃は、具体的にどう機能するのですか?
この攻撃は「トークン承認(approval)」の仕組みを悪用する——ほとんどのブロックチェーンでは、あるスマートコントラクトに自分に代わって特定のトークンを操作させたい場合(例えば分散型取引所での取引など)、まず承認トランザクションに署名し、そのコントラクトがウォレット内のそのトークンを動かすことを許可する必要がある。攻撃者は、あるエアドロップの受給資格がすでに確定しているウォレットのリスト(このリストはスナップショットの時点が決まった後、正式配布の前でも外部分析によって割り出せることが多い)を標的にし、盗んだ秘密鍵や、被害者を騙して署名させた悪意ある承認を通じて、そのウォレットが将来受け取るトークンを動かす権限を事前に取得する。
エアドロップトークンが実際にそれらのウォレットに配布されると、攻撃者は事前に取得しておいた承認を使って、被害者本人が何も行動を起こさなくても、トークンを即座に自分の管理するアドレスへ移動させることができる。被害者はウォレットがすでに侵害されていることに気づかず、エアドロップトークンが忽然と消えた瞬間になって初めて事態を知ることさえある。これは重要なことを示している——承認の管理は、あるプロトコルを能動的に使っている瞬間だけ重要なのではなく、すでに与えて長らく忘れていた古い承認が、将来のまったく予期しない時点で悪用される可能性が常にあるということだ。
Arbitrumが設定した「20を超えるアドレスクラスター」ルールは、なぜこれほど多くのシビルアドレスを防げなかったのですか?
このルールの論理は、大量のアドレス群が互いに頻繁に資金をやり取りしている場合、同一人物が操作している可能性が高く、フラグを立てて除外する価値があるというものだった。しかしこのルールには明白な天井がある——「クラスター規模が20を超える」場合しか検出できず、攻撃者は操作を19個以下のアドレスからなる小さなクラスターに分割するだけで、ルールを完全にすり抜けることができた。たとえ背後で同一人物がこうした小規模クラスターを5つも6つも同時に運用し、合計で数百のアドレスを操作していたとしてもである。
より根本的な問題は、このルールが「資金のやり取り」という単一のシグナルしか見ていなかった点にある。X-exploreの分析によれば、本当に手練れの攻撃者はそもそもアドレス間で直接資金をやり取りすることを避け、意図的にバッチ操作を異なるチェーンに分散させていた(例えばイーサリアムメインネットで一部を操作し、Optimismで別の一部を操作するなど)。こうすることで各チェーン単独で見れば、ばらばらの独立した活動にしか見えなくなる。単一チェーンの範囲内だけでパターンを探すルール設計者は、このようなクロスチェーンに分散した痕跡を完全に見逃してしまう。これは、単一次元のルールがどれほど善意で設計されていても、本質的には不注意な攻撃者しか防げないということを示している。ルールの詳細を本気で研究する攻撃者は、常にルールがカバーしていない隙間を見つけ出すのである。
LayerZeroが約40%のウォレットを除外できたということは、この問題はすでに徹底的に解決されたということですか?
除外率が高いことは、問題が徹底的に解決されたことを意味しない。それは単に、その特定の配布において投入された検出リソースと手法がより包括的だったことを示すにすぎない。40%という数字自体も注目に値する——それは評価対象となったウォレットのうち約4割が、最初は分配に参加資格がありそうに見えたにもかかわらず、最終的にシビルまたは不適格と判定されたことを意味し、この比率自体がシビルファーミング操作の規模がいかに巨大であるかを反映しているのであって、防御側が圧倒的優位を確立したことを示しているわけではない。
より重要なのは、検出手法と回避手法の関係が、本質的には両陣営が互いに学び合いエスカレートし続ける動的なゲームであって、一度きりで解決される静的な問題ではないという点だ。LayerZeroが今回用いたグラフ分析、資金源の追跡、時系列分析といった手法は、確かに当時のArbitrumの単純なルールよりも包括的だったが、これらの手法自体もすでに公に議論され、攻撃者によって研究されている——次の攻撃者は、自分の操作パターンを「クラスター」らしく見えないようにし、タイミングの分布を本物の人間のランダム性に近づける方法を、すでに研究している可能性が高い。つまり、どんな防御手法も最終的な解決策とはみなせず、プロトコル側は攻撃手法の進化に合わせて防御ルール自体も継続的に更新していく必要があると想定すべきであり、一度ルールを設計したらそれで問題が永久に解決されたと考えるべきではない。
2023年3月、Arbitrumは当時の暗号資産史上最大規模の遡及的エアドロップを実施し、その総額は10億ドルを超えた。このエアドロップは本物の初期ユーザーに報いることを目的として設計されていたが、事後のオンチェーン分析により、シビル攻撃と判定された14万8595以上のアドレスと、同一人物が操作していると分類された27万9328のアドレスがArbitrumの防御をすり抜け、合わせて約2億5300万枚のARBトークン——配布総量の21.8%を受け取っていたことが判明した。つまり、配布されたトークンの5枚に1枚以上が、まさにこの仕組みが排除しようとしていた対象の手に渡っていたことになる。これはArbitrum特有の失敗ではなく、分散型システムにおける構造的で長年の問題が、今回異例の規模で表面化しただけである。
「シビル攻撃」という名称は、解離性同一性障害を持つ女性を描いた1973年の小説『Sybil』に由来する。ブロックチェーンの文脈では、一人または一つのチームが、独立しているように見えるが実際にはすべて同一の主体によって制御されている大量のウォレットアドレスを作成し、「一人一票」あるいは「一人一配分」の原則で動く仕組みの中で多数の独立した参加者になりすまし、本来受け取るべき分をはるかに超えるリソースを獲得する行為を指す。この問題が特に解決困難である根本的な理由は、ブロックチェーン自体の設計思想にある。誰でも無料かつ許可不要で無数のウォレットアドレスを作成でき、システムにはネイティブに「これは100人の異なる人物なのか」それとも「これは一人が操作する100個のアドレスなのか」を区別する手段がない。これはまた、多くのプロトコルが直接的な本人確認(KYC)の要求を避けたがる理由でもある——それは多くのユーザーが重視する分散性と匿名性を犠牲にすることになるため、シビル攻撃への防御は、身元を直接検証するのではなく行動パターンから推測するしかない、終わりなき戦いとなっている。
Arbitrumが当時設定した反シビルルールには、20を超えるアドレスのクラスターに属し互いに資金のやり取りがあるアドレスの除外や、同一の資金源から資金供給を受けたアドレスの除外が含まれていた。これらのルールは善意で設計されたものだったが、セキュリティ調査チームX-exploreの事後分析によれば、ルール自体に少なくとも4種類の悪用可能な抜け穴が存在し、その中にはイーサリアムメインネットとOptimismなど異なるチェーン間に意図的に操作を分散させ、単一チェーン上の検出しきい値を回避するバッチ操作行動も含まれていた。さらに露骨だったのは、エアドロップが正式に配布される前に、あるハッカーがすでに受給資格があると判明していた約2,400のウォレットを標的にし、盗んだ秘密鍵やシードフレーズを使ってこれらのウォレットにトークン承認(approval)を署名させ、トークンが上場した瞬間にエアドロップを一掃する準備をしていたことだ。これは単なるシビルファーミングの範囲を超え、既知のエアドロップ受給者を狙った標的型詐欺となっていた。
Arbitrumは唯一の事例でも、最も防御が甘かった事例でもない。クロスチェーンブリッジプロトコルのHop Protocolは、2022年5月のエアドロップで、当初資格ありとされた43,058アドレスのうち10,253アドレスをシビルと判定して除外した——全体の約4分の1に相当する。LayerZeroは2024年6月のトークン配布において、より高度な分析手法を導入し、評価対象となった約208万のウォレットから80万3093のシビルウォレットを除外し、最終的に約128万の適格ウォレットのみを残した。除外率は約40%に達し、これは公開されている事例の中でも最も厳格な防御努力の一つである。これらの数字の差は一つのことを物語っている——シビル検出の精度は、プロトコルがグラフ分析、資金源の追跡、行動パターン認識にどれだけのリソースを投じる意志があるかによって決まるのであって、単一の単純なルールで一度に解決できる問題ではないということだ。
もしあなたがエアドロップハンターなら、複数のウォレットを運用すること自体が必ずしもシビルとみなされるわけではない——Arbitrumのルールに関する複数の分析は、セキュリティ上の合理的な理由から少数(例えば2、3個)のウォレットを分けて保有している場合、通常は特に標的にされないと指摘している。プロトコルが本当に狙っているのは大規模かつ組織的な水増し操作である。ただしリスクは「連結性」に集中する——複数のウォレット間で資金のやり取りがあったり、同じ資金源を共有していたり、極めて似通ったタイミングや行動パターンを示していたりすると、たとえそれが合理的な理由で分けて管理していたウォレットであっても、同一クラスターに分類され一括で除外されやすくなる。もしあなたがプロトコル側であれば、Arbitrumとそれに続く事例が示す教訓は明確だ——反シビルルールはキャンペーン開始前に設計を完了させておく必要があり、単一次元の行動しきい値(例えば「ウォレット残高が一定額を超える」)だけに頼ってはならない。単一のルールは必ず標的を絞って回避されるからだ。実際に効果を発揮するのは、資金源の追跡、時系列分析、クロスチェーンの行動関連性分析を重ね合わせて使うことであり、これこそがLayerZeroの事例がより高い除外率を達成できた理由である。