Kaj se zgodi, ko je vaše usmerjevalno vozlišče Lightning Network polnjeno s transakcijami smeti, ki se nikoli ne rešijo? Skratka, povzroča veliko žalosti za usmerjanje vozlišč. Nekdanji gladki, globalni plačilni sistem lahko pametni pisec scenarijev zaklene.
Z delom v majhni skupini usmerjevalnih vozlišč smo uspešno izvedli test napada z resničnimi sredstvi in pokazali:žalovanje”Napad, ki ga opisuje Joost Jager. Napad se imenuje žalostni napad, saj ne gre za krajo sredstev, ampak povzroči, da se žrtev sredstva Lightning zamrznejo: velika motnja. Ugotovili smo, da žalovanje resno ogroža velike “wumbo” kanale, ki pričakujejo zaslužek na svojih bitcoinih, le da bodo njihova sredstva zamrznjena za določen čas.
To je večinoma žalosten napad: brez izgube sredstev, vendar je žrtev morda prisiljena plačati drago silo v bližini. To je znana ranljivost mainnet Lightning in jo je treba razumeti in ji dati prednost, zlasti v tej zgodnji tržni fazi Bitcoinove mreže Lightning.
Zahvaljujemo se Clarku Burkhardtu in Phillipu Sheppardu za pripravljenost, da sodelujejo v tem testu, ter Jagerju za njegovo neumorno delo pri opozarjanju in prednostni nalogi na to ranljivost. Jager je igral vlogo napadalca za naš prikaz, medtem ko sta se Burkhardt in Sheppard pridružila kot povezana vozlišča za usmerjanje žrtev.
Kako deluje napad
Napadalec nasiči enega (ali več) kanalov s hashed time Locked Contracts (HTLC), ki se ne razrešijo kot dokončano plačilo. To so posebna vrsta HTLC-jev, znanih kot računi HODL. Le 483 teh nerešenih HTLC-jev je potrebno za preobremenitev kanala na smer. Ko so ti HTLC-ji v kanalu, so kakršne koli transakcije, ki uporabljajo isto smer kanala, nemogoče, vključno s transakcijo za skupno zapiranje tega kanala.
Teoretično lahko napadalec stopi v stik z žrtev (morda prek sporočila s ključem ali v “čebulni kapljici”) in zahteva plačilo odkupnine za zaustavitev napada. Ko je odkupnina plačana, lahko napadalec odstrani nerešena plačila in napad konča. Napad je mogoče nadaljevati za nedoločen čas in ustaviti vso usmerjevalno in plačilno dejavnost v tem kanalu. To zamrzne sredstva v kanalu Lightning.
Obe smeri plačil lahko zaustavimo v kanalu z uporabo 483 HTLC-jev v obe smeri, tako vhodni kot izhodni.
Thunderhub pogled na moj uravnoteženi kanal do Burkhardta na udaru. Kanal je prikazan kot »Neaktiven«, kot da Burkhardt ni na zvezi, vendar ne. Znesek v modri barvi je lokalno stanje v satovih, znesek v zeleni pa je oddaljeno stanje v satovih v lasti Burkhardta. Vir: Thunderhub.
Zakaj bi napadalec naredil kaj takega?
Prvi motiv, ki mi pade na pamet, je zahtevati odkupnino. Ta napad žrtvi povzroča bolečino, plačilo odkupnine pa je za žrtev privlačno tudi brez zagotovila, da se napad ustavi. Vzpostavitev stika z žrtev je za napadalca morda tvegana, vendar odkupnina morda ni edini razlog, da bi nekdo to storil.
Sekundarna spodbuda za napad na žalovanje bi bila motnja tekmovalnih poti. Motenje konkurentske poti bi lahko ustvarilo večje povpraševanje po poti, ki je v lasti napadalca.
Kot merilo upoštevajte, da ima vozlišče Lightning Labs ‘Loop nenehno povpraševanje po likvidnosti, za katero bo včasih plačalo 2.500 delov na milijon plačilne stopnje (ppm) (0,25 odstotka). Po mojih izkušnjah bi običajno v približno dveh tednih izčrpali likvidnost v vrednosti 16 milijonov satov (5,2-odstotna letna odstotna stopnja), vendar je to ob prisotni konkurenci.
Če bi lahko napadalec onemogočil katero koli konkurenčno pot z nižjimi stopnjami provizij, je Loop morda pripravljen plačati višjo stopnjo provizije (ker je ponudba likvidnosti zdaj zmanjšana). Recimo, da bi Loop plačal 3000 ppm (0,3 odstotka), pa tudi to likvidnost uporabil hitreje, saj noben drug kanal ne deluje. Loop lahko to likvidnost uporabi v polovici časa, recimo en teden. V tem primeru bi napadalec več kot podvojil svoj običajni donos na 15,6 odstotka APR. Edini strošek napadalca je strošek izvajanja skripta na obstoječem kanalu in psihološki stroški, da naredi kaj nemoralnega / škodljivega za Lightning Network. Z enim napadalnim kanalom lahko zlonamerni igralec zatakne približno devet kanalov (glej Jagerjevi tviti o tem).
Kaj bi bila žrtev tega napada?
Žrtev tega napada v resnici ne bi vedela, da se ta napad dogaja, če nima nastavljenih posebnih opozoril za čakajoče HTLC-je. Za uporabnike Thunderhub (zelo priporočljivo orodje) bo na začetnem zaslonu prikazan grafikon čakajočih HTLC-jev in opozorilo, da lahko kanali sprejmejo le 483 čakajočih HTLC-jev..
Vir: Thunderhub
V praksi je moje vozlišče hitro postalo nezanesljivo in je doživelo več zrušitev aplikacij, vključno s Thunderhubom, ki je bil edina aplikacija, ki me je obvestila o težavi. Nato sem po zaslugi mojega bota Telegram “Balance of Satoshis” dobil obvestilo o zapiranju kanala. Kanal pod napadom se je sam zaprl! To naj ne bi bil del eksperimenta. (Za več tehničnih informacij o prisilnem zapiranju sile glejte spodaj za dodatne podatke o zapiranju sile.)
Testno plačilo prek kanala z Burkhardtom (salmiak) ni uspelo zaradi napada. To opozorilo poroča, da je Burkhardtovo vozlišče brez povezave, čeprav je bilo v spletu. Vir: Thunderhub.
Kaj lahko stori žrtev, da ustavi napad žalovanja?
Ko se napad začne, žrtev v bistvu ne more storiti ničesar, da bi ga ustavila. Edina alternativa za zaustavitev trenutnega napada bi bila prisilno zapiranje napadenega kanala, kar pomeni, da teroristi zmagajo.
Če želite povzročiti žalitev, bo zapiranje kanala s silo potisnilo nerešena plačila k podatkom o transakcijah v verigi, kar bo sprožilo sekundarne transakcije v verigi za začetnika sile. S 50 sats / vbyte in 483 transakcijami v verigi je to zlahka 1 milijon satov, ki prisili zapiranje enega napadanega kanala (provizija za zapiranje 368 USD po današnjih cenah). Več transakcij v verigi se zgodi le, če je rezultat nad minimalno mejo prahu plačila. (Glej ta primer na testnet.)
Pobudnik kanala Lightning plača zapornino.
Drug razlog, zakaj morda ne želite 483 (neprašnih) htlcs, je, da je potencialna transakcija prisilnega zapiranja pri 50 sat / vB videti tako: https://t.co/z6mAGZxvrC.
Zaključna provizija postaja draga in znaša več kot 1 milijon satov.
– Joost Jager (@joostjgr) 28. september 2020
Kako preprečiti napad na žalost
Jager dela na preizkusnem programu za izolacijo napadalcev in boj proti njim. Pokliče svoj program “Varovalka.”Circuitbreaker deluje na omrežni ravni, kar na žalost pomeni, da morajo vsi sodelovati, da bo učinkovit.
Poleg tega je treba temu vprašanju dati prednost in pozornost namenjenih inženirjev / razvijalcev, da bi našli boljše rešitve. Prav tako je bilo nekaj dobrih razprav o spreminjanju protokola v glasilih Bitcoin Optech (številka 122 ali 126).
Ta napad lahko izvedemo danes. Čudež je, da ga še niso uporabili zlonamerno. To je odraz spodbud za tiste, ki danes uporabljajo Lightning, da lahko postane odprto, univerzalno plačilno omrežje. Prosimo, delite to objavo, kot se vam zdi primerno, da spodbudite in spodbudite več dela za odpravo te težave, preden povzroči resnično škodo.
Dodatne tehnične informacije o neprostovoljnem zapiranju sile
Tu so dnevniki iz mojega vozlišča, ki se izvaja LND 0,11 v trenutku, ko je prišlo do zgoraj omenjenega nehotenega zapiranja sile:
2020/11/26 21: 24: 47,374 [ERR] HSWC: ChannelLink (657.759: 561: 0): ni povezave: ChannelPoint (c37bec006b18df172698a84739ca47128935e0a8666fecd1a843e49b01db207c: 0): prejela napaka od vzajemnega: chan_id = 7c20db019be443a8d1ec6f66a8e035891247ca3947a8982617df186b00ec7bc3, ERR = zavrnjen obveza: commit_height = 455, invalid_commit_sig = 3044022076fd65191eb6305b723fa6012be378413b6326e2786c38db58b4c02e1f3999d202207605ca31de8b4c5b1d9cd20dc1581dfa2383e0b4e06c8ad4f718ab5c434d8cf5, commit_tx = 02000000017c20db019be443a8d1ec6f66a8e035891247ca3947a8982617df186b00ec7bc300000000008a792e8002210d0000000000002200201031cf10a1efef261edd3d0a1a6a953b27bc25bd7150bb2b07afdc69805e02157213000000000000160014de650929042bef58b71783ae1a44834a902a8f2d542ca720, sig_hash = 4e0fb804c74376020e4c44a60969b9206eb0aaa9a89b76017d60f23ad5cf63e5 z napako: daljinsko napaka
Dnevniki prikazujejo “invalid_commit_sig”, kar je znana težava v LND. Menda se to lahko zgodi ob ponovni povezavi in ni neposredna posledica zastoja kanala. Obseg čakajočih HTLC-jev na žalost poveča verjetnost, da se bo to zgodilo. Jager je postopek razložil kot motenje kanalov -> neskončna plačilna zanka (napaka) -> vozlišče navzdol -> ponovno povezati -> neveljaven zapis za prijavo (napaka) -> prisilno zapiranje kanala.
“Neskončna” zanka zanke je znana napaka, ki se pojavi, ko je dosežena omejitev HTLC in poslana dodatna HTLC. Namesto da bi se plačilo končalo z neuspehom, bo LND še naprej poskušal plačilo opraviti v zanki. Za pomoč pri tej napaki glejte Številka LND # 4656.