ビットコインのハッシュレートが急上昇する中、51%攻撃などは非常に非現実的であまり想定する必要はありません。コストとリターンも比較的はっきりしているため、金額によって何承認待つなどの対策を取ることもできます。むしろ、ビットコインはノード間のネットワーク層での攻撃への対策が遅れているという意見も聞こえます。
今日はビットコインのノードが互いに接続する仕組みを説明した上で、MITM攻撃とConnection Slot Exhaustion Attackについて、攻撃手法の概要と提案されている対策を説明させていただきます。
ノード同士が接続する仕組み
ビットコインノードは、P2P通信によって他のノードと繋がっており、このネットワーク上で未承認のトランザクションを伝播したり、ブロックを送受信したりしています。そしてこれらの通信は、LANやISPなどを経由して行われています。
ビットコインノードの同時接続可能数に上限があることをご存知でしょうか。Bitcoin Coreの既定では外部からの接続(Inbound Connections)を最大117接続、自身から外部への接続(Outbound Connections)を最大8接続、合計で最大125接続を維持することができます。
帯域幅を限定するために上限を引き下げたり、特定のノードとしか接続しないように設定することもできます。
名前から受ける印象とは異なり、どちらの種類の接続も機能は同様で、双方向に通信しています。したがって、外部からの接続を受け入れるノード(Reachable Node)は能動的に接続してくるノードやライトノードに接続先を提供しているネットワークへの貢献者と表現されがちですが、Unreachable Nodeもネットワークに貢献しています。
むしろUnreachable Nodeのほうが攻撃されにくいため(攻撃者は接続されることを待つしかない)、セキュリティにはプラスに作用しているという意見もあります。しかしReachable Nodeが少なすぎるとそこに接続が集中してしまうため、多いに越したことはないでしょう。
自宅でフルノードを動かしていても、基本的にはルーターでポート転送の設定を行っていないと外部からの接続を受け入れることはできないと思います。もし受け付けたいなら設定を確認してみてください。
豆知識ですが、Bitnodesなどで「ビットコインのノード数」として数えられるのは外部から認知できるReachable Nodeのみなので、全てのノードを含めるとその5倍ほどあると推定されています。
ノード間の通信を盗聴・改変する攻撃
ビットコインノード間の通信は既定では暗号化されていません。つまり、ネットワーク経路上の主体、例えばプロバイダー(ISP)や公衆Wifiの設置者などが通信内容を覗くとビットコインノードの通信を検出することができます。
この場合、例えばトランザクションの配信を妨害したり、マイナーによるブロックの配信を妨害したり、特定のユーザーがビットコインを使用していることを認知することができてしまいます。また単に盗聴される他にも、ISPや公衆Wifiのプロバイダーなどによって内容が一部書き換えられることも想定できます。(署名されたトランザクションは改変できませんが、暗号化もしくは電子署名されていないデータは改変できます)
しかも、これらの攻撃をノードは検知できません。通信経路上で改変されたか、最初からおかしな内容が送信されたかわからないためです。
このような通信経路上の第三者による攻撃をMan-in-the-Middle attack = MITM攻撃と呼びます。
無意味な」接続で邪魔をする攻撃
Connection Slot Exhaustion Attackは、前述したInbound Connectionsという限られた資源を何者かが消費しつくすことでビットコインのユーザビリティを低下させたり、シビル攻撃を仕掛けるための環境を作る攻撃です。