Hva skjer når rutingnoden til Lightning Network mates med søppeltransaksjoner som aldri løser seg? Kort fortalt forårsaker det mye sorg for ruting av noder. Det som en gang var et jevnt, globalt betalingssystem, kan låses opp med triviell innsats fra en kunnskapsrik manusforfatter.
Arbeidet i et lite team med rutingnoder, kjørte vi en test av angrepet med virkelige midler og demonstrerte “sorg”Angrep beskrevet av Joost Jager. Angrepet kalles et sorgangrep siden det ikke er tyveri av midler, men det fører til at offerets lynmidler blir frosset: en stor opprør. Det vi fant er at sorg er en alvorlig trussel mot store “wumbo” -kanaler som forventer å tjene et avkastning på bitcoin, bare for å få pengene frosset i en periode..
Dette er for det meste et sorgangrep: ingen tap av midler, men offeret kan bli tvunget til å betale for en kostbar kanalstyrke i nærheten. Dette er en kjent sårbarhet på mainnet Lightning, og det må forstås og prioriteres, spesielt på dette tidlige markedsstadiet i Bitcoins Lightning Network..
Takk til Clark Burkhardt og Phillip Sheppard for deres vilje til å delta i denne testen og til Jager for hans utrettelige arbeid for å bringe oppmerksomhet og prioritet til denne sårbarheten. Jager spilte rollen som angriperen for demonstrasjonen vår, mens Burkhardt og Sheppard ble med meg som tilkoblede rutingnoder for offeret.
Hvordan angrepet fungerer
Angriperen metter en (eller flere) kanaler med Hashed Time Locked Contracts (HTLCs) som ikke løses som en endelig betaling. Dette er en spesiell type HTLC-er kjent som HODL-fakturaer. Bare 483 av disse uløste HTLC-ene kreves for å overvelde en kanal per retning. Når disse HTLC-ene er i kanalen, er eventuelle transaksjoner som bruker samme kanalretning umulig, inkludert en transaksjon for å lukke den kanalen.
I teorien kan en angriper kontakte offeret (kanskje via en tastesendemelding eller i en “løkblokk”) og kreve at det blir betalt løsepenger for å stoppe angrepet. Når løsepenger er betalt, kan angriperen fjerne de uløste betalingene og avslutte angrepet. Angrepet kan opprettholdes på ubestemt tid, og stopper all ruting og betalingsaktivitet i den kanalen. Dette fryser midlene i Lightning-kanalen.
Begge betalingsretningene kan stoppes i en kanal ved å bruke 483 HTLC i hver retning, både inngående og utgående.
Thunderhub utsikt over min balanserte kanal til Burkhardt under angrep. Kanalen vises som “Ikke aktiv”, som om Burkhardt var frakoblet, men det var han ikke. Mengden i blått er den lokale saldoen i sats, mengden i grønt er den eksterne saldoen i sats eid av Burkhardt. Kilde: Thunderhub.
Hvorfor ville en angriper gjøre noe slikt??
Det første motivet som kommer opp i tankene dine er å kreve løsepenger. Dette angrepet forårsaker smerte for offeret, og det kan være attraktivt å betale løsepenger for et offer, selv uten forsikring om at angrepet ville stoppe. Å kontakte offeret kan være risikabelt for en angriper, men en løsepenger er kanskje ikke den eneste grunnen til at noen vil gjøre dette.
Et sekundært insentiv for å sette i gang et sorgangrep ville være å forstyrre rutekonkurransen. Å knuse en konkurrents rute kan skape mer etterspørsel etter en rute som eies av en angriper.
Tenk som et mål, at Lightning Labs ‘Loop-node har en kontinuerlig etterspørsel etter likviditet som den noen ganger vil betale 2500 deler per million av avgiftssatsen for betaling (ppm) (0,25 prosent). Etter min erfaring ville de normalt tømme 16 millioner sats av likviditet på omtrent to uker (5,2 prosent årlig prosentsats), men det er med konkurransen til stede.
Hvis en angriper kan deaktivere en konkurrerende rute med lavere avgiftssatser, kan Loop være villig til å betale en høyere avgiftssats (siden tilførselen av likviditet nå er redusert). La oss si at Loop ville betale 3000 ppm (0,3 prosent), samt bruke den likviditeten raskere siden ingen andre kanaler fungerer. Loop bruker kanskje den likviditeten på halvparten av tiden, si en uke. Angriperen ville mer enn doblet sitt vanlige utbytte til 15,6 prosent april i dette eksemplet. Den eneste kostnaden for angriperen er kostnadene ved å kjøre et skript på en eksisterende kanal og den psykologiske kostnaden ved å gjøre noe umoralsk / skadelig for Lightning Network. Med en enkelt angrepskanal kan en ondsinnet skuespiller jamme rundt ni kanaler (se Jager’s tweets om dette).
Hva ville offeret for dette angrepet oppleve?
Offeret for dette angrepet ville egentlig ikke vite at dette angrepet skjedde med mindre de hadde satt inn noen spesielle varsler for ventende HTLC-er. For Thunderhub-brukere (et sterkt anbefalt verktøy) vil startskjermen vise et diagram over ventende HTLC-er, samt en advarsel om at kanaler bare kan holde 483 ventende HTLC-er.
Kilde: Thunderhub
I praksis ble noden min raskt upålitelig og opplevde flere appkrasj, inkludert Thunderhub, som var den eneste appen som varslet meg om problemet. Så, takket være min “Balance of Satoshis” Telegram-bot, fikk jeg en varsling om avslutning av kanalen. Kanalen under angrep styrket seg selv! Det skulle ikke være en del av eksperimentet. (For mer teknisk informasjon om den ufrivillige styrken lukkes, se nedenfor for ytterligere kraftdette data.)
En testbetaling med kanalen med Burkhardt (salmiak) mislyktes på grunn av angrepet. Denne advarselen rapporterer at Burkhardts node er frakoblet, selv om den var online. Kilde: Thunderhub.
Hva kan offeret gjøre for å stoppe et sorgangrep?
Når et angrep starter, kan et offer i det vesentlige ikke gjøre noe for å stoppe det. De eneste alternativene som er tilgjengelige for å stoppe et pågående angrep, er å tvinge ned kanalen som blir angrepet, noe som betyr at terroristene vinner.
For å legge fornærmelse mot skade, vil tvangsstenging av kanalen presse de uløste betalingene til transaksjonsdataene i kjeden, og utløse sekundære on-chain-transaksjoner for initiativtakeren til styrken. Ved 50 sats / vbyte og 483 on-chain transaksjoner, er det lett en 1 million lørpris for å tvinge lukke en enkelt kanal under angrep (en kanalavgift på $ 368 til dagens priser). Flere on-chain transaksjoner skjer bare hvis produksjonen er over minimumsgrensen for “støv” for betaling. (Se dette eksemplet på testnet.)
Initiativtakeren til en lynkanal betaler avslutningsgebyret.
En annen grunn til at du kanskje ikke vil ha 483 (ikke-støv) htlcs, er at en potensiell kraft-lukketransaksjon ved 50 sat / vB ser slik ut: https://t.co/z6mAGZxvrC.
Avslutningsgebyret blir dyrt på over 1 million lørdag.
– Joost Jager (@joostjgr) 28. september 2020
Hvordan forhindre et sorgangrep
Jager har jobbet med et proof-of-concept-program for å hjelpe til med å isolere og bekjempe angripere. Han kaller programmet sitt “Kretsbryter.”Circuitbreaker jobber på nettverksnivå, som dessverre betyr at alle må delta for at den skal være effektiv.
Utover det trenger denne saken prioritering og oppmerksomhet fra dedikerte ingeniører / utviklere for å finne bedre løsninger. Det har også vært noen gode diskusjoner om å endre protokollen i Bitcoin Optech-nyhetsbrevet (utgave nr. 122 eller nr. 126).
Dette angrepet kan utføres i dag. Det er et mirakel at det ikke allerede har blitt brukt skadelig. Det er en refleksjon av insentivene for de som bruker lyn i dag, slik at det kan bli et åpent, universelt betalingsnettverk. Vennligst del dette innlegget etter eget ønske for å oppmuntre og inspirere til mer arbeid for å løse dette problemet før det forårsaker reell skade.
Ytterligere teknisk informasjon om den ufrivillige kraftstengingen
Her er loggene fra noden min som kjører LND 0.11 for øyeblikket at den ovennevnte ufrivillige kraftstengingen skjedde:
2020-11-26 21: 24: 47,374 [ERR] HSWC: ChannelLink (657 759: 561: 0): sviktende kobling: ChannelPoint (c37bec006b18df172698a84739ca47128935e0a8666fecd1a843e49b01db207c: 0): mottatt feil fra node: chan_id = 7c20db019be443a8d1ec6f66a8e035891247ca3947a8982617df186b00ec7bc3, err = forkastet satsing: commit_height = 455, invalid_commit_sig = 3044022076fd65191eb6305b723fa6012be378413b6326e2786c38db58b4c02e1f3999d202207605ca31de8b4c5b1d9cd20dc1581dfa2383e0b4e06c8ad4f718ab5c434d8cf5, commit_tx = 02000000017c20db019be443a8d1ec6f66a8e035891247ca3947a8982617df186b00ec7bc300000000008a792e8002210d0000000000002200201031cf10a1efef261edd3d0a1a6a953b27bc25bd7150bb2b07afdc69805e02157213000000000000160014de650929042bef58b71783ae1a44834a902a8f2d542ca720, sig_hash = 4e0fb804c74376020e4c44a60969b9206eb0aaa9a89b76017d60f23ad5cf63e5 med feil: ekstern feil
Loggene viser en “ugyldig_kommisjon_sig” som er et kjent problem i LND. Angivelig kan dette skje ved tilkobling på nytt, og er ikke et direkte resultat av kanalstopp. Volumet av ventende HTLC-er gjør det dessverre mer sannsynlig å skje. Jager hjalp til med å forklare prosessen som kanalstopp -> endeløs betalingssløyfe (bug) -> node nede -> koble til igjen -> ugyldig commit sig (bug) -> kanal kraftstenging.
Den “endeløse” sløyfefeilen er en kjent feil som oppstår når HTLC-grensen er nådd og en ekstra HTLC sendes. I stedet for å ende i en betalingssvikt, vil LND fortsette å prøve betalingen i en løkke. For å hjelpe med denne feilen, se LND-utgave # 4656.