Co se stane, když je váš směrovací uzel Lightning Network napájen nesmyslnými transakcemi, které se nikdy nevyřeší? Stručně řečeno, způsobuje to spoustu zármutku pro směrování uzlů. Kdysi hladký globální platební systém lze uzamknout triviálním úsilím důvtipného spisovatele scénářů.
Při práci v malém týmu směrovacích uzlů jsme úspěšně provedli test útoku se skutečnými prostředky a předvedli „truchlení”Útok popsal Joost Jager. Útok se nazývá zármutek, protože nejde o krádež finančních prostředků, ale způsobuje zmrazení finančních prostředků Lightning oběti: velké rozrušení. Zjistili jsme, že truchlení je vážnou hrozbou pro velké kanály „wumbo“, které očekávají výnos ze svých bitcoinů, jen aby jim na určitou dobu byly zmrazeny finanční prostředky.
Jedná se většinou o zármutek: žádná ztráta finančních prostředků, ale oběť může být nucena zaplatit za uzavření drahé síly kanálu. Jedná se o známou chybu zabezpečení na síti Mainnet Lightning, kterou je třeba chápat a upřednostňovat, zejména v této rané fázi trhu bitcoinové bleskové sítě.
Děkujeme Clarkovi Burkhardtovi a Phillipu Sheppardovi za ochotu účastnit se tohoto testu a Jagerovi za jeho neúnavnou práci, která této pozornosti poskytla pozornost a prioritu. Jager pro naši demonstraci hrál roli útočníka, zatímco Burkhardt a Sheppard se ke mně připojili jako uzly pro směrování obětí.
Jak útok funguje
Útočník nasytí jeden (nebo několik) kanálů pomocí Hashed Time Locked Contracts (HTLC), které se nevyřeší jako finální platba. Jedná se o speciální plemeno HTLC známé jako faktury HODL. Pouze 483 z těchto nevyřešených HTLC je zapotřebí k přemožení kanálu v každém směru. Jakmile jsou tyto HTLC v kanálu, jsou nemožné jakékoli transakce využívající stejný směr kanálu, včetně transakce, která tento kanál kooperativně uzavře..
Teoreticky by útočník mohl kontaktovat oběť (například prostřednictvím zprávy s klíčem nebo „cibulovou kapkou“) a požadovat výkupné za zastavení útoku. Jakmile je výkupné zaplaceno, mohl útočník nevyřešené platby odstranit a útok ukončit. Útok lze udržovat na neurčito a zastavit veškeré směrování a platební aktivity v tomto kanálu. Tím se zmrazí prostředky v kanálu Lightning.
Oba směry plateb lze v kanálu zastavit pomocí 483 HTLC v každém směru, příchozích i odchozích.
Thunderhub pohled na můj vyvážený kanál k Burkhardtovi pod útokem. Kanál se zobrazuje jako „Neaktivní“, jako by byl Burkhardt offline, ale nebyl. Částka v modré barvě je místní zůstatek v sats, částka v zelené barvě je vzdálený zůstatek v sats ve vlastnictví Burkhardta. Zdroj: Thunderhub.
Proč by útočník dělal něco takového?
První motiv, který mě napadne, je požadovat výkupné. Tento útok způsobí oběti bolest a zaplacení výkupného může být pro oběť přitažlivé, a to i bez záruky, že útok skončí. Kontaktování oběti může být pro útočníka riskantní, ale výkupné nemusí být jediným důvodem, proč by to někdo udělal.
Sekundárním podnětem k zahájení smutného útoku by bylo narušení směrování konkurence. Zaseknutí trasy konkurenta by mohlo vytvořit větší poptávku po trase vlastněné útočníkem.
Jako měřítko zvažte, že uzel Loop Lightning Labs má trvalou poptávku po likviditě, za kterou někdy zaplatí 2500 dílů na milion z poplatkové sazby (ppm) (0,25 procenta). Podle mých zkušeností by za dva týdny normálně vyčerpali likviditu v hodnotě 16 milionů sats (roční procentní sazba 5,2 procenta), ale to je za současné konkurence.
Pokud by útočník mohl deaktivovat jakoukoli konkurenční trasu s nižšími sazbami poplatků, Loop může být ochoten zaplatit vyšší sazbu poplatků (protože nabídka likvidity je nyní snížena). Řekněme, že Loop zaplatí 3 000 ppm (0,3 procenta) a také tuto likviditu použije rychleji, protože žádné jiné kanály nefungují. Loop může tuto likviditu použít za polovinu času, řekněme jeden týden. Útočník by v tomto příkladu více než zdvojnásobil svůj obvyklý výnos na 15,6 procenta RPSN. Jedinou cenou pro útočníka jsou náklady na spuštění skriptu na stávajícím kanálu a psychologické náklady na něco, co je pro Lightning Network něco nemorálního / škodlivého. S jediným útočníkovým kanálem mohl nebezpečný herec zaseknout asi devět kanálů (viz Jagerovy tweety o tom).
Co by zažila oběť tohoto útoku?
Oběť tohoto útoku by ve skutečnosti nevěděla, že k tomuto útoku došlo, pokud by neměla nastavena nějaká speciální upozornění na nevyřízené HTLC. Pro uživatele Thunderhub (vysoce doporučený nástroj) se na domovské obrazovce zobrazí tabulka čekajících HTLC a varování, že kanály mohou obsahovat pouze 483 čekajících HTLC.
Zdroj: Thunderhub
V praxi se můj uzel rychle stal nespolehlivým a zažil několik pádů aplikací, včetně Thunderhub, což byla jediná aplikace, která mě na problém upozornila. Poté jsem díky robotovi „Balance of Satoshi“ Telegram dostal oznámení o uzavření kanálu. Kanál pod útokem se silou uzavřel! To nemělo být součástí experimentu. (Další technické informace o zavírání nedobrovolné síly naleznete níže, kde jsou uvedeny další údaje o zavírání síly.)
Zkušební platba pomocí kanálu u Burkhardta (salmiak) kvůli útoku selhala. Toto varování hlásí, že uzel Burkhardta je offline, ačkoli byl online. Zdroj: Thunderhub.
Co může oběť udělat, aby zastavila smutný útok?
Jakmile útok začne, oběť v podstatě nemůže udělat nic, aby ho zastavila. Jedinou dostupnou alternativou k zastavení probíhajícího útoku by bylo násilné uzavření napadeného kanálu, což znamená, že teroristé vyhrají.
Chcete-li přidat urážku zranění, vynucené uzavření kanálu bude tlačit nevyřešené platby na data transakcí v řetězci a spustí sekundární transakce v řetězci pro iniciátora uzavření síly. Při 50 sat / vbyte a 483 transakcích v řetězci je to snadno 1 milion sat cenovka, která vynutí uzavření jednoho kanálu pod útokem (poplatek za uzavření kanálu 368 $ za dnešní ceny). K vícenásobným transakcím v řetězci dochází pouze v případě, že je výstup nad limitem minimální „prašnosti“ plateb. (Vidět tento příklad na testnet.)
Iniciátor Lightning kanálu platí závěrečný poplatek.
Dalším důvodem, proč možná nebudete chtít 483 (bez prachu) htlcs, je to, že potenciální transakce uzavření síly na 50 sat / vB vypadá takto: https://t.co/z6mAGZxvrC.
Závěrečný poplatek se zvyšuje na více než 1 milion sat.
– Joost Jager (@joostjgr) 28. září 2023
Jak zabránit smutnému útoku
Jager pracuje na programu proof-of-concept, který má pomoci izolovat a bojovat proti útočníkům. Říká svému programu „Jistič.„Circuitbreaker pracuje na síťové úrovni, což bohužel znamená, že každý musí být zapojen, aby byl efektivní.
Kromě toho vyžaduje tento problém stanovení priorit a pozornost vyhrazených techniků / vývojářů, aby našel lepší řešení. Proběhly také dobré diskuse o úpravě protokolu v bulletinu Bitcoin Optech (číslo 122 nebo # 126).
Tento útok lze provést dnes. Je zázrak, že ještě nebyl použit zlomyslně. Je to odraz pobídek pro ty, kdo Lightning dnes používají, aby se mohl stát otevřenou univerzální platební sítí. Sdílejte prosím tento příspěvek, jak uznáte za vhodné, abyste povzbudili a inspirovali více práce k vyřešení tohoto problému, než způsobí skutečné škody.
Další technické informace o Involuntary Force-Close
Zde jsou protokoly z mého uzlu se spuštěním LND 0.11 v okamžiku, kdy došlo k výše zmíněnému nedobrovolnému uzavření síly:
2023-11-26 21: 24: 47,374 [ERR] HSWC: ChannelLink (657759: 561: 0): není-li odkaz: ChannelPoint (c37bec006b18df172698a84739ca47128935e0a8666fecd1a843e49b01db207c: 0): přijaté chyba od serveru: chan_id = 7c20db019be443a8d1ec6f66a8e035891247ca3947a8982617df186b00ec7bc3, err = zamítnut závazek: commit_height = 455, invalid_commit_sig = 3044022076fd65191eb6305b723fa6012be378413b6326e2786c38db58b4c02e1f3999d202307605ca31de8b4c5b1d9cd20dc1581dfa2383e0b4e06c8ad4f718ab5c434d8cf5, commit_tx = 02000000017c20db019be443a8d1ec6f66a8e035891247ca3947a8982617df186b00ec7bc300000000008a792e8002210d0000000000002200201031cf10a1efef261edd3d0a1a6a953b27bc25bd7150bb2b07afdc69805e02157213000000000000160014de650929042bef58b71783ae1a44834a902a8f2d542ca720, sig_hash = 4e0fb804c74376020e4c44a60969b9206eb0aaa9a89b76017d60f23ad5cf63e5 s chybou: chyba vzdáleného
Protokoly zobrazují „invalid_commit_sig“, což je známý problém v LND. Pravděpodobně k tomu může dojít po opětovném připojení a není to přímý důsledek rušení kanálu. Objem nevyřízených HTLC bohužel zvyšuje pravděpodobnost jeho výskytu. Jager pomohl vysvětlit proces jako rušení kanálu -> nekonečná platební smyčka (chyba) -> uzel dolů -> znovu připojit -> neplatné potvrzení sig (chyba) -> nucené uzavření kanálu.
„Nekonečná“ chyba ve smyčce je známá chyba, ke které dochází, když je dosaženo limitu HTLC a je odeslána další HTLC. Místo ukončení selhání platby bude LND pokračovat v pokusu o platbu ve smyčce. Chcete-li pomoci s touto chybou, podívejte se LND číslo 4656.