Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Replacement Cycling Attack

Replacement Cycling Attack

GBECの解説動画のスライドです。
https://goblockchain.network/2024/03/replacement-cycling-attack/

shigeyuki azuchi

March 21, 2024
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1 Replacement Cycling Attack
 2023年10月に開示されたLNプロトコルの脆弱性 
 https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-October/021999.html 
 
 


    
 
 
 
 
 
 
 
 
 
 ルーティングノードに対する転送額(HTLC)を盗む攻撃の
 ※ M1とは直接チャネルがつながっていなくてもOK
 ※転送ノードでなければ影響はなし
 攻撃者M2
 攻撃者M1
 被害者 A
 Channel M1 ⇔ A 
 
 • Balance for M1 
 • Balance for A 
 • Forward Payment(HTLC) 
 Channel A ⇔ M2 
 
 • Balance for A 
 • Balance for M2 
 • Forward Payment(HTLC) 

  2. 2 RBF(Replace by Fee)
 未承認のトランザクションを置換するための仕組み 
 
 参考:RBFを使ったトランザクションの置換 
 https://goblockchain.network/2021/07/rbf/

    
 
 置換する際のルール:
 
 • 置換可能性のシグナルがある(Opt-in RBFの場合は) 
 • 新しいトランザクションは元のトランザクションより手数料が高いこと 
 ◦ ノードの最小リレー手数料率が加味されていること 
 デフォルト:1 sat/byte
 • 置換されるトランザクションとその子孫の個数の合計が100未満であること 
 (大規模な置換が発生しないように) 

  3. 3 支払い転送時の動作
 攻撃者M2
 攻撃者M1
 被害者 A
 Channel M1 ⇔ A

    
 
 • Balance for M1 
 • Balance for A 
 • Forward Payment(HTLC 1) 
 Timelock(T + Δ) 
 Channel A ⇔ M2 
 
 • Balance for A 
 • Balance for M2 
 • Forward Payment(HTLC 2) 
 Timelock(T) 
 HTLC 1とHTLC 2はプリイメージが同じハッシュ値Hを使用しており、
 1. M2がプリイメージをAに開示することで、HTLC 2を決済(A→M2に支払い)
 2. Aは開示されたプリイメージを使って、HTLC 1を決済(M1→Aに支払い)
 →下流で決済された情報を使って上流の転送が決済される
 もしくは、あるブロック高Tにおいてタイムアウト
 1. ブロック高Tになったら、HTLC 2を払い戻す(HTLC 2の金額はAの残高に戻る)
 2. ブロック高T+Δになったら、HTLC1を払い戻す(HTLC 1の金額はM1の残高に戻る)
 →下流がタイムアウト後、Δブロック後に上流もタイムアウトする

  4. 4 攻撃方法
 攻撃者M2
 被害者 A
 Channel A ⇔ M2 


    
 • Balance for A 
 • Balance for M2 
 • HTLC 2(Timelock T) 
 ① ブロック高がTになってもM2がプリイメージを公開しない、 
  かつ応答もない場合、AはチャネルのコミットメントTxを 
  ブロードキャストし、チャネルを閉じる。 
 
 ②コミットメントTxが承認されたら、Timeout Txを 
  ブロードキャストして資金を取り戻す。 
 HTLC 2 Timeout Tx 
 
 • HTLC 2の金額をAへ払い戻し 
 Cycle Parent Tx 
 
 • M2の任意のUTXO 
 Cycle Child Tx 
 
 • M2への送金 
 ②攻撃者M2は、その間2つの低手数料の親子Txを作成し 
  ブロードキャスト(チャネルとは無関係なTx) 
 HTLC2 Preimage Tx 
 
 • M2への送金 
 ③ 攻撃者M2は、
  HTLC2 Timeout Txがブロードキャストされた後 
  元々のHTLCのプリイメージを使用して、 
  コミットメントTxとCycle Parent TxのUTXOを回収する 
  高手数料率のHTLC2 Preimage Txをブロードキャストする 

  5. 5 攻撃方法
 mempoolの動作
 Channel A ⇔ M2 
 
 •

    Balance for A 
 • Balance for M2 
 • HTLC 2(Timelock T) 
 HTLC 2 Timeout Tx 
 
 • HTLC 2の金額をAへ払い戻し 
 Cycle Parent Tx 
 
 • M2の任意のUTXO 
 Cycle Child Tx 
 
 • M2への送金 
 HTLC2 Preimage Tx 
 
 • M2への送金 
 競合
 競合
 High Fee
 Low Fee
 RBFにより、Cycle Child TxとHTLC 2 Timeout Txは 
 HTLC2 Preimage Txに置き換わる 
 
 Aの払い戻しTxはネットワーク上から無くなる。 
 一方で、AはHTLC Preimage Txを確認すれば、 
 プリイメージが分かるので上流のHTLC 1を決済できる?
  6. 6 攻撃方法
 mempoolの動作
 Channel A ⇔ M2 
 
 •

    Balance for A 
 • Balance for M2 
 • HTLC 2(Timelock T) 
 Cycle Parent Tx 
 
 • M2の任意のUTXO 
 HTLC2 Preimage Tx 
 
 • M2への送金 
 競合
 High Fee
 RBFにより、Cycle Parent TxとHTLC 2 Preimage Txは、 
 Replace Parent Txに置き換わる。 
 
 結果、Aの払い戻しもプリイメージを使った回収もキャンセルされる。 
 
 Replace Parent Tx 
 
 • M2への送金 
 High Fee
 攻撃者は、AのHTLC2 Timeout Txをmempoolから排除した後、 
 高手数料のCycle Parent Txの競合Txを作成し、ブロードキャストする 
 Aの払い戻しTxはネットワーク上から無くなる。 
 一方で、AはHTLC Preimage Txを確認すれば、 
 プリイメージが分かるので上流のHTLC 1を決済できる? ただ、AのノードにHTLC2 Preimage Txが届かなければ、 
 プリイメージの確認はできない。 
 

  7. 7 攻撃方法
 一通りの攻撃が終わると、mempool内には、HTLC2を使用するTxはなくなる。 
 攻撃者M1
 被害者 A
 Channel M1 ⇔

    A 
 
 • Balance for M1 
 • Balance for A 
 • Forward Payment(HTLC 1) 
 Timelock(T + Δ) 
 T + Δになると、上流のAへの転送(HTLC 1)の払い戻しが発生する。 
 下流の請求に失敗し、上流がタイムアウトするとAはHTLCの金額を失う。 
 攻撃者は、この攻撃を繰り返す。。 
 Channel A ⇔ M2 
 
 • Balance for A 
 • Balance for M2 
 • HTLC 2(Timelock T) 
 被害者 A
 mempoolから消えたことで、Aは再度HTLC 2 Timeout Txを 
 ブロードキャストするが、 
 HTLC 2 Timeout Tx 
 
 • HTLC 2の金額をAへ払い戻し 
 ・・・

  8. 8 攻撃を成立させるための条件
 • 攻撃者は被害者との間に2つのチャネルを開く 
 • そのチャネルを介して支払いを転送する 
 • 被害者が攻撃者のプリイメージを確認できない

    
 ◦ 被害者はローカルmempoolを積極的に監視できる 
 ◦ 攻撃者は被害者のノードにプリイメージが渡らないようTxをブロードキャストし、 
 被害者が気付かない内に置換を終わらせる 

  9. 9 LNノードに導入された緩和策
 • 再ブロードキャストの頻度を上げる 
 1ブロック(約10分)毎に再ブロードキャストしてたのを、高頻度に 
 ◦ 被害者は同じTimeout Txをブロードキャストするだけ

    
 手数料を増やして攻撃者の手数料負担を促進するということも考えられる 
 ◦ 攻撃者は置換の度に少なくとも最小中継手数料分の手数料負担が発生し、 
 ブロードキャスト回数が増えるほどコスト負担に繋がる 
 • CLTV Expire Delta(Δ)の値を増やす 
 Δが大きいほど被害者はTxを再ブロードキャストする機会が増える 
 • mempoolのスキャン
 mempoolを積極的に監視することで、攻撃者のプリイメージを確認する 
 再ブロードキャスト回数が多いほど、その機会は増加する 
 
 ※ 緩和策であって根本的な対応索ではない。 
 ※ 実際にこのような攻撃は観測されていない。