Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Replacement Cycling Attack
Search
shigeyuki azuchi
March 21, 2024
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Replacement Cycling Attack
GBECの解説動画のスライドです。
https://goblockchain.network/2024/03/replacement-cycling-attack/
shigeyuki azuchi
March 21, 2024
More Decks by shigeyuki azuchi
See All by shigeyuki azuchi
FORS
azuchi
0
7
クラスターmempool
azuchi
0
31
W-OTS+
azuchi
0
34
Shorのアルゴリズム
azuchi
0
56
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
42
Fiat-Shamir変換と注意点
azuchi
0
220
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
55
BIP-374 離散対数の等価性証明
azuchi
0
71
BIP-353 DNS Payment Instructions
azuchi
0
88
Other Decks in Technology
See All in Technology
ご挨拶「10周年を迎える共創ラボのこれまでとこれから」
iotcomjpadmin
0
140
本当の”仕事”を手放せる未来が見えた
mu7889yoon
0
150
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
210
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
180
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
580
Fabricをフル活用する AI Agent Hub -製造業特化AIエージェントの設計
iotcomjpadmin
0
150
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
230
從觀望到全公司落地:AI Agentic Coding 導入實戰 — 流程整合與安全治理
appleboy
0
100
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
140
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
2
420
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
150
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
290
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
430
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
400
Context Engineering - Making Every Token Count
addyosmani
9
980
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
A Modern Web Designer's Workflow
chriscoyier
698
190k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
870
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Transcript
Replacement Cycling Attack
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 RBF(Replace by Fee) 未承認のトランザクションを置換するための仕組み 参考:RBFを使ったトランザクションの置換 https://goblockchain.network/2021/07/rbf/
置換する際のルール: • 置換可能性のシグナルがある(Opt-in RBFの場合は) • 新しいトランザクションは元のトランザクションより手数料が高いこと ◦ ノードの最小リレー手数料率が加味されていること デフォルト:1 sat/byte • 置換されるトランザクションとその子孫の個数の合計が100未満であること (大規模な置換が発生しないように)
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 攻撃方法 攻撃者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 攻撃方法 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 攻撃方法 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 攻撃方法 一通りの攻撃が終わると、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 攻撃を成立させるための条件 • 攻撃者は被害者との間に2つのチャネルを開く • そのチャネルを介して支払いを転送する • 被害者が攻撃者のプリイメージを確認できない
◦ 被害者はローカルmempoolを積極的に監視できる ◦ 攻撃者は被害者のノードにプリイメージが渡らないようTxをブロードキャストし、 被害者が気付かない内に置換を終わらせる
9 LNノードに導入された緩和策 • 再ブロードキャストの頻度を上げる 1ブロック(約10分)毎に再ブロードキャストしてたのを、高頻度に ◦ 被害者は同じTimeout Txをブロードキャストするだけ
手数料を増やして攻撃者の手数料負担を促進するということも考えられる ◦ 攻撃者は置換の度に少なくとも最小中継手数料分の手数料負担が発生し、 ブロードキャスト回数が増えるほどコスト負担に繋がる • CLTV Expire Delta(Δ)の値を増やす Δが大きいほど被害者はTxを再ブロードキャストする機会が増える • mempoolのスキャン mempoolを積極的に監視することで、攻撃者のプリイメージを確認する 再ブロードキャスト回数が多いほど、その機会は増加する ※ 緩和策であって根本的な対応索ではない。 ※ 実際にこのような攻撃は観測されていない。