Lightning Networkの非対称性を突いた攻撃手法
最近はビットコインやライトニングの技術動向を追う時間があまりとれないのですが、ライトニングネットワークの非対称性を突いた攻撃についての記事「Flood & Loot: A Systemic Attack On The Lightning Network」を読んだので、その概要をまとめました。
ちなみにこの攻撃について、ライトニング開発者からのフィードバックがあまり聞こえてこないのですが、c-lightningのコア開発者であるChristian Decker氏がツイッターでコメントしていたので、一応載せておきます。
It's this kind of asymmetry that is really annoying in LN-penalty. While it doesn't solve the mass HTLC drop on-chain, #eltoo removes this kind of asymmetry, making it easier to analyse and to secure.
— Christian Decker (@Snyke) June 28, 2020
Great work by the way @Avivz78 et al. 👍
攻撃手法の概要
この攻撃手法は中継ノードを狙った攻撃なので、登場人物は送信者、中継者、受信者の3人となります。送信者と受信者が攻撃者で、中継者が攻撃のターゲット(以降、犠牲者と呼ぶ)となります。また、攻撃手法は以下の4つのフェーズに分けられます。
- チャネル開設
- HTLC追加(送金フェーズ1)
- 受信者によるHTLC反映(送金フェーズ2)
- 未反映なHTLCの回収
この攻撃を理解するためには、LNの送金方法を知っていると分かりやすいのですが、今回は割愛します。ただ、LNの送金はHTLCの追加と反映という二段階のやり取りが必要だということを覚えておいてください。ちなみにHTLCとは Hash Time Lock Contract の略で、送金するコインがロックされた契約書みたいなものです。
1.チャネル開設
これはライトニングを知っている方には同じみですね。攻撃者と犠牲者の間でペイメントチャネルを開設します。この時、以下の図のように送信者ー犠牲者ー受信者という経路になっている必要があります。
また、現状のネットワークでは、チャネル開設の要求があれば、開設を受ける側(今回の場合は犠牲者)は基本的に拒否はしません。むしろ大半のノードはチャネル開設をしてもらいたいのが現状です。その為、今回の場合も犠牲者は相手が誰であろうと基本的にはチャネル開設の要求を受諾します。
2.HTLC追加(送金フェーズ1)
送信者はたくさんのHTLCを作成し、犠牲者を経由させて受信者へ送信します。通常なら、受信者は受け取ったHTLCを反映するためにシークレットを送り返すのですが、送信者がすべてのHTLCを送信するまで待ちます。
3.受信者によるHTLC反映(送金フェーズ2)
すべてのHTLCを受信したら、そのHTLCを反映させるためにシークレットを犠牲者へ送ります。さらに、それを受け取った犠牲者も自身のHTLCを反映させるために送信者へ送ります。しかし、ここで重要なのが、送信者はこの送られてくるシークレットを受け取らず無視をします。
4.未反映なHTLCの回収
通常なら、送信者はシークレットを受取り、HTLCを反映するのですが、あえて反映しないままペイメントチャネルを閉じます。この時、未反映なHTLCはどうなっているかというと、チャネルが閉鎖されたのでオンチェーン上へ書き込まれることになります。この状態はHTLCにロックされているコインが宙に浮いている状態となります。そのHTLCからコインを取得するたのには以下の条件を満たす必要があります。
- HTLCに記載された時間(timelock)までなら、中継者が取得できる
- timelockの後なら、攻撃者が取得できる
このtimelockはブロック高ベースなので、例えば40であれば、1ブロック10分で計算すると、400分の猶予時間があり、その時間までに中継者がオンチェーン上のHTLCからコインを取り返せば問題ありません。ただし、この時間が過ぎてしまうと、攻撃者によって回収されてしまいます。
ここまでが攻撃手法の概要となります。ここまで読むと、一応中継者はtimelock期間中であればコインを取り戻すことができるのが分かると思います。ただしその猶予期間が短かったり、モバイルLNウォレットのような常にオンラインではないノードの場合、攻撃のターゲットにされやすくなると想定されます。
また、ここまでは攻撃というよりも、このような攻撃があっても犠牲者はHTLCを取り返すことができるので、ライトニングのプロトコルが機能していると言えます。では、この攻撃の本質は何かと言うと、、、手数料調整の非対称性なんです。
手数料調整の非対称性
今回の攻撃手法の本質は、多くの未反映なHTLCを作ってオンチェーン上へブロードキャストさるのですが、一度timelock期間が経過すると、攻撃者がHTLCからコインを回収できてしまいます。これを助長させてしまうプロトコル規約があり、それが以下になります。
- 犠牲者がHTLCのコインを回収するためのトランザクションデータの手数料を設定できないこと。これはチャネル開設時に決定される。
- 攻撃者は、timelockが経過した後であれば、未承認な犠牲者のトランザクションの手数料を変更することができる(RBFポリシー)。
上記のルールを見ると、チャネル開設者の方に優位性があるように見えます。そしてこれを手数料調整の非対称性と呼んでいます。
攻撃者のみが意図的に手数料を安く設定できることで、意図的に承認を遅延させて、timelockが経過するまでの時間を引き延ばすことができます。そしてtimelockが経過したあとに、HTLCのコインを回収するという攻撃ができてしまうというのが本攻撃の本質と思われます。
解決策
- 未反映HTLCの上限数を減らす
- timelockを引き伸ばす
- HTLC回収トランザクションを直ぐにブロードキャストする
未反映なHTLCがオンチェーンへブロードキャストされたら、その承認をまたずに、直ぐにそのHTLCからコインを回収するトランザクションをブロードキャストする。 - 評価ベースによるノード選定する
怪しいノードかを評価するサービスを活用して、根本的にチャネル開設をしない。
最後に
ライトニングは常にオンラインでオフチェーン・オンチェーンを常に監視していないと、様々な攻撃にさらされる危険性があります。そこで有用になるのがWatchtowerという不正行為が行われていないか常に監視してくれるサービス・技術です。Watchtowerにはいくつか実装されたものがありますが、今回のような攻撃には未対応なのが現状です。また、冒頭でも触れましたが、c-lightningのコア開発者が言及しているように、今回の攻撃はライトニングのLNペナルティモデルの非対称性を突いた攻撃で、これはEltooモデルを使えば解決されると想定されています。