2020年7月2日 5 min read

LNの脆弱性”Flood & Loot"の解説

LNの脆弱性”Flood & Loot"の解説
Photo by Mikki Seifu / Unsplash

先月Cryptography and Securityという学術誌に投稿された”Flood & Loot: A Systemic Attack On The Lightning Network"という論文においてLNにおける資金の盗難につながる脆弱性が記されていました。

今日の記事では、その脆弱性についてわかりやすく解説し、2月にも解説したLNの残高の大部分を数日間ロックさせる攻撃との類似点などに触れ、どのような影響があるか軽く考察します。

FLOOD & LOOTの概要

おそらく読者の皆さんの多くは、LNでの送金はHTLCという2者間取引のバケツリレーで成り立っていることをご存知かと思います。Flood & LootはHTLCの仕組みと、HTLCを解決できない場合の最終手段であるオンチェーン決済の仕組みを悪用した攻撃です。

① まず、攻撃者は2つのライトニングノードを用意します。これを「送金元ノード」「送金先ノード」とします。送金先ノードは送金元ノードで使用する金額と同程度のインバウンドリクイディティ(受け取り可能額)が必要です。

② 攻撃者は、送金元ノードから多数のチャネルを開き、なるべく様々なノードを経由するような経路で自身の持つ送金先ノードへ大量の少額送金を開始します。この際、経由する各ノードでそれぞれの送金についてHTLCが作成されていきます。

③ 攻撃者は送金先ノードからそれぞれの取引に関する最後のHTLCに対応するプレイメージを返すことで各送金を受け取り、送金先ノードのチャネルを全て決済します。ここまでは通常のLNトランザクションと同じ流れです。送金先ノードが正常に取引を完了しオンチェーンに決済することで、攻撃者は元本(-少額の手数料)を確保しました。

④ HTLCが送金の逆順に解決されていき、それぞれのチャネルの残高が更新されていきますが、最後に攻撃元ノードと直接チャネルで繋がっているノード(被害者ノード)がプレイメージを送ってきても、攻撃元ノードは無視をします(反応を返さない)。HTLCが期限を迎えるともらえるはずだった残高が攻撃元ノードのものとなってしまう(*)ため、被害者ノードはHTLCが期限(LNDなら通常10ブロック)を迎える前にプレイメージを使ってオンチェーンで強制決済する必要があります。

*…HTLCが期限切れになると、この場合は攻撃者がHTLCタイムアウトというトランザクションを発行して、そのHTLCの送金を巻き戻すトランザクション(攻撃者が資金を取り戻す)がブロックチェーンに決済されます。

⑤ 実は攻撃者は自身が関わる大量のHTLCについて、全てが同時に期限を迎えてオンチェーン決済になるように期限を設定していたので、被害者ノードたちによるオンチェーン決済トランザクションが同時に大量発生することによってメモリプールが混雑し、HTLCの期限到達までにブロックチェーンで承認されない取引が出てきます。
攻撃者は期限切れを待ち、未承認のHTLC決済についてHTLCタイムアウトトランザクションを発行し、被害者より手数料をほんの少し多く支払うことで、そのHTLCで送金先ノードに送ったはずの金額を自分のものにできます。

根本的な原因

この攻撃を可能にする根本的な原因はいくつかあります。

まず、ブロックサイズが限られているため、同時に期限を迎えるHTLCに関する大量のオンチェーン決済トランザクションが発生すると時間内に捌けないことです。特に、手数料水準が高い場合は、攻撃のタイミングによっては多くが承認されないでしょう。

【追記7/3】ちなみにブロックサイズが無制限だったとしても、捌けるトランザクション数には実質的な上限があるので、それを超えるオンチェーン決済を発生させれば同じ問題が発生します。

Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to ビットコイン研究所.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.