(Do)druk pieniędzy na masową skalę to nie tylko domena rządów. Okazuje się, że z dużą wiedzą o słabościach poszczególnych sieci można ekspresowo „drukować” również kryptowaluty. I to niekoniecznie będąc ich twórcą czy zarządcą.
Wprowadzenie
Verge – dawniej DogeCoinDark – jest kryptowalutą nastawioną na prywatność użytkowników. Mówiło się o niej trochę więcej na początku roku za sprawą zostania oficjalną formą (anonimowych) płatności w popularnym serwisem oferującym treści dla dorosłych. Wiosną został przeprowadzony na Verge atak (jeden z kilku), w wyniku którego sprawcy weszli w posiadanie kryptomonet o wartości – w zależności od źródła – nawet ponad 1 miliona dolarów (według ówczesnego kursu).
Kolejny atak z takim łupem w tym roku – mogłaby pomyśleć osoba regularnie czytająca Zaufaną Trzecią Stronę. Wracamy jednak do niego ze względu na fakt, że tym razem nie była to „zwykła” kradzież środków z kolejnej (beztroskiej) giełdy. Atakujący, zamiast kraść istniejące pieniądze, wykorzystali kilka słabości samej sieci, aby wygenerować bardzo dużą ich liczbę w krótkim czasie. Zobaczmy, jak do tego doszło.
Element 1. Fałszowanie timestampu
Fałszowanie timestampu – znacznika mówiącego o tym, kiedy dany blok został stworzony – było jedną ze składowych ataku. Podobnie jak w większości sieci zdecentralizowanych, gdzie nie ma jednego punktu mogącego być autorytarnym źródłem czasu, w Verge również dopuszczane są fluktuacje dotyczące czasu tworzenia poszczególnych bloków. Może się zdarzyć, że blok później dołączony do łańcucha będzie miał wcześniejszy czas jego wykopania. Jest to jak najbardziej uzasadnione i zazwyczaj niegroźne. W przypadku sieci Verge okno to miało długość 2 godzin, mimo optymalnego czasu miedzy kolejnymi blokami ustawionego na 30 sekund. W rezultacie przy tworzeniu bloków z dużą prędkością mogły być one spokojnie umieszczane w „odległej” przeszłości, co w połączeniu z następną podatnością dawało atakującym ciekawe możliwości.
Element 2. Manipulowanie trudnością
Najpopularniejszym obecnie sposobem (mechanizmem), mającym zapewnić stabilność sieci blockchainowych, na których oparte są kryptowaluty, a także utrudnić niewłaściwe ich użycie, jest proof-of-work. Osoby chcące dodać kolejny blok do łańcucha (generując przy tym nowe kryptomonety oraz akceptując transakcje na nich) muszą rozwiązać zadany problem algorytmiczny, wymagający odpowiedniej mocy obliczeniowej. Ze względu na fakt, że liczba (i moc obliczeniowa) węzłów „kopiących” nowe bloki w łańcuchu może być zmienna (a transakcje na kryptowalucie powinny móc odbywać się regularnie), używane są algorytmy dostosowujące trudność problemu do aktualnej sytuacji w sieci. Od czasu uruchomienia Bitcoina w 2009 roku nieustannie tworzone i ulepszane są algorytmy mające zapewnić lepszą adaptację do okoliczności oraz odporność na złośliwe działania. W przypadku Verge wykorzystywany był algorytm Dark Gravity Wave, w którym trudność może się zmieniać wraz z każdym blokiem na podstawie liczby bloków wykopanych w ciągu minionych 30 minut. W przypadku (nagłego) zwiększenia mocy obliczeniowej używanej do tworzenia nowych bloków zaczynają się one pojawiać szybciej i algorytm zwiększa trudność zadań, aby powrócić do tworzenia bloku co około 30 sekund. Powinno to uniemożliwić zbyt szybkie tworzenie nowych monet, jednak atakujący byli sprytniejsi.
Algorytm użyty do wyliczania trudności sieci brał pod uwagę timestamp ostatnio dodanych bloków. Dokładniej, uwzględniał (poprzez zadeklarowany timestamp) tylko te wykopane w ciągu ostatnich 30 minut. Atakujący wykorzystali subtelny fakt, że fałszując timestamp dołączanych bloków, mieli do dyspozycji całe okno dopuszczalnego przesunięcia czasowego – 2 godziny. W rezultacie nie mieli skrupułów, aby nowe, szybko dodawane bloki umieszczać poza 30-minutowym okresem branym pod uwagę przy modyfikowaniu trudności. Efektem tego była szybko spadająca trudność sieci (brak nowych bloków z punktu widzenia określania trudności) mimo coraz szybszego wykopywania prawidłowych bloków (generowania nowych pieniędzy).
Uważny czytelnik w tym momencie mógłby zauważyć, że w przypadku spadku trudności wszyscy aktywni górnicy mogliby zacząć generować nowe bloki dużo szybciej, tym samym wpływając na ponowne zwiększanie trudności sieci. Aby temu przeciwdziałać, atakujący musieli zdominować sieć.
Element 3. Zdominowanie sieci
Problem kontrolowania sieci (posiadania przynajmniej 51% aktualnej mocy obliczeniowej) przez osobę lub grupę osób często pojawia się w kontekście manipulowania kolejnymi blokami dodawanymi do łańcucha i w rezultacie umożliwienia wielokrotnego wydawania posiadanych środków (ang. double-spend attack).
W przypadku tego ataku zdominowanie sieci pozwalało na niezakłócone dodawanie bloków do łańcucha z dużą prędkością, z wykluczeniem innych górników. W tym celu atakujący musiał posiadać dużą moc obliczeniową, jednak dzięki specyfice sieci Verge nie musiało to być aż 51%.
W przeciwieństwie do większości sieci opartych o blockchain, które obsługują tylko jeden algorytm haszujący, sieć Verge wspierała ich aż 5. To z kolei implikowało, że do zachowania spójnego czasu generacji kolejnego bloku dla każdego z algorytmów haszujących musiała być utrzymywana osobna trudność. W rezultacie wystarczyło, że atakujący zdominowali tylko jeden algorytm, do czego średnio potrzebne było tylko około 10%, a nie ponad 50%. Atak oczywiście dotyczył najmniej popularnego algorytmu, więc ta wartość była jeszcze niższa.
Przebieg ataku
Podsumowując przebieg właściwego ataku:
- Atakujący użyli fałszywych timestampów i błędu logicznego w konfiguracji algorytmu do obniżenia trudności sieci (trudności kopania).
- Obniżenie trudności tylko dla jednego algorytmu haszującego, znacznie ułatwiło zdominowanie całej sieci.
- Mając znacznie skrócony czas generacji kolejnych bloków i kontrolując sieć, atakujący mogli „drukować” kryptomonety z bardzo dużą szybkością (nie zwiększając przy tym ponownie trudności sieci).
Uwzględniając dodatkowo powolną reakcję deweloperów Verge, było to całkiem opłacalne zadanie.
Przeciwdziałanie atakowi
Reakcja deweloperów Verge była dosyć ospała. Dodatkowo, pierwsza poprawka ograniczająca maksymalną liczbę kolejnych bloków tworzonych z użyciem jednego algorytmu okazała łatwa do obejścia. Atakujący przełączyli się na używanie dwóch algorytmów, generując bloki naprzemiennie. Koniec końców ograniczenie okna czasowego, z jakiego nowe bloki były generowane, umożliwiło rozwiązanie problemu fałszywych timestampów i zapanowanie nad sytuacją. Być może nie jest to jednak ostatni problem z tym łańcuchem.
Autor szczegółowego opisu ataku zauważa, że źródłem całego problemu było oparcie Verge na kodzie blockchainu innej kryptowaluty Peercoin. Licencyjnie jest to jak najbardziej dopuszczalne i zdecydowana większość tworzonych krytowalut realizowana jest w ten sposób. Jednakże w przypadku Verge deweloperzy dostosowali do swoich potrzeb tylko część parametrów, zapominając na przykład, że tak długie okno akceptowalnych bloków może być problematyczne po skróceniu zaplanowanego czasu pomiędzy nimi (wykorzystane w opisywanym ataku). Autor inne dogłębnej analizy pokazuje przykład kolejnej realnej podatności. Być może będziemy mieli okazję więcej o tym napisać przy okazji następnego udanego ataku na tę sieć.
Podsumowanie
Blockchain i kryptowaluty to relatywnie młody mechanizm oparty o sieć Internet, na którym dużo osób chciałoby zarobić. Choć ostatnie spadki ostudziły zapał części osób planujących kupować wirtualne pieniądze, to nowe waluty i tokeny nadal powstają jak grzyby po deszczu, a wszelkie startupy mające w swoim biznesplanie słowo „blockchain” są rozchwytywane przez inwestorów. Gdzie duże pieniądze, tam również pojawiają się osoby chcące uszczknąć coś dla siebie kosztem innych. Najczęściej w mediach słyszymy o spektakularnych kwotowo atakach na giełdy i instytucje obracające kryptowalutami, gdzie przełamywane są zabezpieczenia (albo wykorzystywana beztroska ich twórców), aby zdobyć już istniejące środki. Jednak łatwość i duża popularność tworzonych kryptowalut, która często nie idzie w parze z wiedzą domenową ich twórców powoduje, że równie technicznie ciekawie prezentują się ataki wykorzystujące podatności tkwiące w samym ich algorytmie działania. Świetnym przykładem jest chyba nadal najpopularniejszy atak na The DAO i smartkontrakty w sieci Ethereum z 2016 roku.
Komentarze
Ciekawe czy w gieldzie papierow wartosciowych tez byly podobne luki bezpieczenstwa.
Tak, można było faksem zlecać transakcje gdzieś i w ciągu chyba tygodnia odwoływać :)
A kto policzy wszystkie akcje? Już dawno zostały rozmnożone razy 10.
Ustosunkuje się do startupów rozchwytywanych przez inwestorów: tylko w aplikacjach B2B. Jeżeli chcesz znaleźć inwestora, prócz finansowania ICO w modelu B2C, to równie dobrze możesz nie próbować.
Może trzeba się rozejrzeć po prawdziwe Privacy coins? Cryptonote.. np. $Ryo (ryo-currency). XVG to sh*t, traceable, tak jak BTC i wiele inne 'monety’ które powiadają że, są privacy oriented.
trzeba:
bitcoin ma transparentny blockchain i musisz sobie mixować na własną rękę.
verge ma transparentny blockchain ale połączenia do sieci są tylko przez Tora.
zcash ma adresy transparentne (obecnie ponad 80%) i opcjonalnie ukryte zero-proof (obecnie tylko kilkanaście procent).
monero ma całkowicie ukryty blockchain i mixuje wszystko automatycznie.
ryo to fork monero.
tylko zastanów się czy poprzez te dwie ostatnie krypowaluty rzeczywiście się ukryjesz jeżeli będziesz jedyną osobą która wpłaca i wypłaca z nich duże sumy? sedno problemu to przekonanie wielu ludzi do korzystania z kryptowalut. biznesmenów, przedsiębiorców z realu. ale jak oni nawet bitcoina nie trawią to co dopiero jak usłyszą o jakichś monero i ryo? nie wejdą bo to dla nich dziwne, skomplikowane, ryzykowne
Co do ukrycia się w monero to możesz poprzez małe wypłaty. Np. zamiast wypłacić 100zł (przykład, żeby łatwo było liczyć) od razu, wypłacasz po 20 złotych w przeciągu tygodnia czy miesiąca. Jasne, że np. jeśli od razu 5 milionów się na twoim koncie znajdzie to alarmy w banku zwariują, ale jak będzie to rozłożone na małe wpłaty to już nie. Tylko trzeba być cierpliwym a nie wszystko na już natychmiast.
e tam, jak ktoś chce się ukryć to bierze typa który za karton wódki załozy 10 kont w roznych bankach i potem wypłaci
Chciałbym tylko uściślić, że rządy już dosyć dawno przestały być liderem w tworzeniu/dodruku nowych pieniędzy. Dzisiaj z racji braku regulacji prawnych znaczną większość nowych pieniędzy wprowadzają do obiegu banki udzielając kredytów niemal bez ograniczeń. Za kilkanaście lat przy obecnych tendencjach dodruki rządowe staną się marginesem w skali światowej.
Prawda, ale banki musza miec procentowe pokrycie (nie pamietam ile). W kazdym cywilizowanym kraju takie banki podlegaja kontroli.
Hahaha. A to dobry zart. Dawno sie tak nie usmialem. Gdyby byly kontrolowane to by do zadnego kryzysu finansowego w 2008r nie doszlo.
Żartujesz sobie z tym pokryciem…. Tak muszą mieć 3% aktywów. System bankowy i kredyty to największa piramida finansowa świata. Świat dawno przestał być wypłacalny. Poziom udzielonych kredytów wielokrotnie przekracza wartość materialną. Gdyby nagle każdy miał oddać pieniądze które pożyczył to by się okazało że nikt nie ma pieniędzy :D
Niestety to budzi obawy że albo dojdziemy do pełnego socjalizmu albo będzie globalna wojna która niejako wyzeruje to szaleństwo.
W UK nie muszą mieć żadnego pokrycia (to się nazywa rezerwa cząstkowa).
Gdyby nie mieli zadnego pokrycia to by byla rezerwa zerowa, a ze jest czastkowa to maja czesc pokrycia np. wspomniane 3%.
rezerwa obowiązkowa jest 0% a te 3% to rzeczywista rezerwa utrzymywana dobrowolnie (bo inaczej nie byliby w stanie wypłacać ludziom pieniędzy)
Drukowanie bocianów