はじめに
エクリプス攻撃は、悪意のある人間がネットワーク上のノードを妨害する比較的単純な攻撃です。その名前が示すように、この攻撃の目的はピアツーピアネットワークの参加者の視界を(日食の影のように)隠し、全体的な混乱を引き起こしたり、またはより高度な攻撃への準備を行ったりすることです。
エクリプス攻撃は、表面的にはシビル攻撃(Sybil Attack)と似ていると思われるかもしれません。悪意のある人間が偽のピアでネットワークを氾濫させるという点では似ていますが、最終的な目的は異なります。エクリプス攻撃は単一のノードを狙う(理由は後述)一方、シビル攻撃はプロトコルのレピュテーションシステムを欺くことを狙うネットワーク全体への攻撃となります。
この概念は、2015年の論文「Eclipse Attacks on Bitcoin's Peer-to-Peer Network(ビットコインのピアツーピアネットワークに対するエクリプス攻撃)」で詳しく説明されています。この論文では、ボストン大学とヘブライ大学の研究者が、エクリプス攻撃の実装実験から得られた発見と、それに対する可能な対策について報告しています。
エクリプス攻撃の仕組み
Bitcoinマイナーには新しいブロック生成のための特別な装置が必要ですが、非マイニング(またはフル)ノードは最小限の計算能力で簡単に実行できます。誰でも低スペックのデバイスでノードを立ち上げられるため、これがBitcoinの分散化の助けになります。このソフトウェアは、ネットワーク内にとどまる目的で直近のピアと同期するための、トランザクションのデータベースを維持します。
多くのノードの制限要因は、帯域幅となります。ソフトウェアを実行しているデバイスの数は膨大になりますが、Bitcoinソフトウェアの制限(最大125接続までのみを許可)により、平均的には多くのデバイスに直接接続することはできません。
エクリプス攻撃では、攻撃者は自分が支配しているノードにすべての標的が接続するように仕向けます。攻撃者はまず、自身のIPアドレスを標的に対して大量に送り付けます。標的とされた被害者はソフトウェアの再起動時に、その攻撃者のIPアドレスに接続することになります。再起動を強制的に行うこともできますし(ターゲットへのDDoS攻撃など)、単に再起動を待つこともできます。
いったん再起動が起こると、何も知らない被害者は悪意のあるノードのなすがままとなり、攻撃者によって不正なデータが送り込まれる可能性があります。
エクリプス攻撃の結果
攻撃者が正当なネットワークからピアを排除しようと工作する場合、おそらく他の動機が隠れています。ノードが息の根を止められると、連続攻撃がよりに簡単に行うことができるようになります。
ゼロ承認二重支払い
もし承認なしでトランザクションを受け入れると、二重払いのリスクがあります。トランザクションはブロードキャストされたとしても、それがブロックに含まれる(つまりブロックチェーンにコミットされる)までは、送信者はその同じ資金を使い他のところで新しいトランザクションを簡単に作成できます。新しいトランザクションの手数料のほうが高ければ、マイナーはおそらくそのトランザクションを組み込み、元のトランザクションを無効にするでしょう。なぜなら、手数料はマイナーへの報酬になるからです。
一部の企業や個人は、このようなゼロ承認のトランザクションを受け入れています。高級車販売業者のボブを例に見てみましょう。彼はアリスが自分のノードを隠したことに気づかず、彼女が高級スポーツカーを注文しても何も疑いません。彼女はトランザクションを作成し、ボブはそれをネットワークにブロードキャストします。支払いに満足したボブは車のキーを渡し、アリスは走り去ります。
もちろん、このトランザクションはネットワークにブロードキャストされたわけではありません。ボブはそれをアリスの悪意のあるノードに中継しただけで、悪意のあるノードはそれを正常なノードに中継していません。このトランザクションが宙ぶらりんになっている間に、アリスは同じ資金を(本当の)ネットワーク上で使います。ボブへの最初のトランザクションが最終的に見つかったとしても、その暗号資産はすでに使われているため、拒否されます。
N回承認の二重支払い
N回承認二重支払いはゼロ承認二重支払いと似ていますが、より多くの準備が必要になります。多くの事業者では、一定の承認回数を経てから支払いを有効と判断します。攻撃者はこれを回避するために、マイナーと販売業者の両方に目隠しをする必要があります。攻撃者は販売業者への注文をセットアップすると、(目隠しされた)マイナーにトランザクションをブロードキャストします。トランザクションは承認され、ブロックチェーンに含まれます。しかし、このブロックチェーンではそのマイナーが遮断されており、大多数が観察しているネットワークのチェーンではありません。
攻撃者はこのブロックチェーンの内容を販売業者に伝え、販売業者はトランザクションが承認されたと思い込んで商品を販売します。(日食つまりエクリプスのように)覆い隠されたノードが実際のネットワークに再参加すると、販売業者が有効だと誤って信じていたブロックチェーンはネットワークの残りのノードが処理していたブロックチェーンから疎外された「孤児」になってしまいます(これは51%攻撃と類似していると言えます)。
競合マイナー弱体化
覆い隠されたノードは、そのノードがネットワークから分離されているという事実に気づかずに動作し続けます。マイナーは孤立したノードでプロトコルによって定められた規則に従ってブロックをマイニングし続けるものの、追加されたブロックは正規のピアと同期すると、破棄されてしまいます。
理論的に、主要なマイナーに対する大規模なエクリプス攻撃により51%攻撃が実現することとなります。現状では、Bitcoinのハッシュパワーの大部分を乗っ取るには、どれほどのリソースを持った攻撃者にとってもコストが高すぎます(~80トランザクションハッシュ / 秒)。このような操作を試みるには、少なくとも40トランザクションハッシュ / 秒以上が必要になります。
このハッシュパワーが10の異なるマイナー(それぞれが8トランザクションハッシュ / 秒を所有している状況)に分散されていると仮定します。攻撃者は、これらのマイナーのいくつかをネットワークから切り離すことで、51%攻撃の要件を大幅に引き下げられます。例えば、5つのマイナーが排除された場合、40トランザクションハッシュ / 秒分は次のブロックを見つける競争から除外されます。攻撃者は20トランザクションハッシュ / 秒をわずかに上回るだけで、ブロックチェーンを支配できます。
他のマイナーが標的となるその他の妨害工作には、利己的なマイニングへのノード操作や、次のブロックを見つけるマイナー間の競争への妨害工作などがあります。
軽減策
十分なIPアドレスがあれば、攻撃者はあらゆるノードを攻撃できます。これを防ぐ最も簡単な方法は、運用者が受信接続をブロックし、特定のノード(他のピアによってホワイトリストに登録されたノードなど)へのみ送信接続を行うことです。しかし、この研究論文が指摘しているように、これは大規模ネットワークでは実用的な方法ではありません。すべてのマイナーがこのような対策を採用すると、新しいノードがネットワークに参加できなくなるからです。
この論文の発表以来、著者たちはBitcoinソフトウェアへの修正を提案しており、いくつが採用されています。新しい接続をランダムに選択、アドレスの保存容量の増加など、プログラムコードへの小さな修正により、エクリプス攻撃のコストをさらに引き上げることとなりました。
まとめ
エクリプス攻撃は、ピアツーピアネットワークレベルで実行されます。単体の攻撃として展開すると、厄介なものとなり得ます。エクリプス攻撃が狙う真の目的は、標的に対して金銭的な影響を与えたり、攻撃者がマイニングの面で有利になるような別の攻撃を行うことなのです。
実際のところ、エクリプス攻撃による深刻な被害は出ていません。しかし、ネットワークに対応策が導入されたにもかかわらず、脅威は依然として存在しています。Bitcoinや他の暗号資産で存在するほとんどの攻撃に言えることですが、最強の防御策となるのは、攻撃することへのコストを引き上げ、攻撃を試みることを金銭的に無意味にすることとなります。