Atak na sieć węzłów Bitcoin, cz.1

blockchain
cyberataki
Krzysztof Surgut
26.06.2018 Krzysztof Surgut

Głównym zadaniem w technologii blockchain jest wygenerowanie odpowiedniego łańcucha informacyjnego i przekazanie informacji o wyniku wykonania tej czynności innym węzłom, które wykonują identyczną operację.

Porównanie wyników takiej operacji – przez sieć węzłów – stanowi o decyzji potwierdzenia lub braku potwierdzenia danej operacji, której zdarzenie ma zostać zapisane w łańcuchu informacyjnym.

Jeżeli większość węzłów – powiązanych siecią – potwierdzi wykonanie identycznej operacji, to uznaje się, że łańcuch informacji jest uzgodniony, a tym samym zapisana w łańcuchu informacji operacja/zdarzenie zostaje do takiego łańcucha dopisana na stałe.

Najpopularniejszym zastosowaniem technologii blockchain jest Bitcoin – kryptowaluta, za emisję której nie odpowiada żadna instytucja finansowa.

W przypadku sieci Bitcoin większość ludzi skupia się na poznaniu zasad generowania łańcucha informacyjnego, zrozumienia mechanizmów kryptografii czy praktycznych metod „kopania” Bitcoinów.

Niewiele osób poświęca czas, aby zdobyć wiedzę o tym, jak tworzy się i komunikuje ze sobą sieć węzłów Bitcoin.

Czy w metodach budowania i komunikowania sieci węzłów Bitcoin są jakieś słabe punkty?

Jak to się dzieje, że nowe węzły sieci Bitcoin komunikują się z już istniejącymi węzłami i są włączane do procesu uzgadniania poszczególnych operacji na łańcuchu informacyjnym?

Bitcoin – trochę podstaw

Sieć Bitcoin to w zasadzie sieć peer-to-peer. Co to oznacza w praktyce?

Każdy węzeł sieci peer-to-peer jest tak samo ważny – nie ma w architekturze sieci peer-to-peer węzłów, które mają jakąś wyjątkową rolę, dzięki której stają się zdecydowanie ważniejsze w sieci, przez to, że wykonują jakąś dedykowaną, unikalną funkcję. W sieci Bitcoin wszystkie węzły mają tę samą ważność i każdy z węzłów wykonuje wszystkie wymagane w sieci Bitcoin operacje. Żaden węzeł nie jest nadrzędny czy podrzędny. Każdy węzeł posiada ten sam zestaw funkcji, z których może korzystać w różnych procesach blockchain.

Co istotne, sieć Bitcoin nie jest zamkniętą czy wyizolowaną siecią, ale bazuje na światowych zasobach internetu.

Powstaje zatem pytanie, skąd nowy węzeł w sieci Bitcoin wie, gdzie znajdują się inne węzły? Jak zdobywa adres IP innych węzłów, aby móc się z nimi komunikować?

Aby odpowiedzieć na powyższe pytania, należy przedstawić metody dołączania nowego węzła do istniejącej sieci Bitcoin.

Dołączanie nowego węzła do sieci Bitcoin

Po pierwsze, nowy węzeł bitcoinowej sieci musi poznać swój własny, publiczny adres IP. Ta wiedza niezbędna jest do wymiany informacji w otwartym internecie z innymi węzłami sieci Bitcoin.

Tutaj sposobów na poznanie własnego adresu IP jest parę – począwszy od wykorzystania skryptu (np. ThreadGetMyExternalIP), który automatycznie sprawdzi, pod jakim adresem IP prezentuje się w sieci Internet nasz nowy węzeł, aż po ręczne ustawienie adresu IP, który chcemy przydzielić do naszego nowego węzła.

W tym momencie, teoretycznie, nasz nowy węzeł mógłby np. przeskanować całą adresację IP nasłuchując na porcie 8333 (domyślny port komunikacji w sieci Bitcoin) i kwalifikować automatycznie adresy IP, które komunikują się z naszym nowym węzłem po tym porcie. Jednak w praktyce byłoby to zbyt czasochłonne i mało efektywne.

Co zatem zrobić, aby skrócić ten czas i „odkryć” adresy IP innych węzłów sieci Bitcoin? Metody są dwie.

Metoda 1

Dodać listę znanych adresów IP, z którymi wiadomo, że komunikują się węzły Bitcoin. Podanie choćby jednego poprawnego adresu IP, pozwala uruchomić mechanizm, który „odkryje” nam sieć Bitcoina. To wbudowany mechanizm w klienta Bitcoin Core. Dzięki temu wystarczy, że jeden węzeł dołączony do sieci Bitcoin wymieni z naszym nowym węzłem informacje, a po sieci Bitcoin rozejdzie się informacja o publicznym adresie IP nowego węzła.

Wtedy, co jakiś czas, nasz nowy węzeł będzie „wywoływany” do komunikacji z nieznanych do tej pory węzłów i z czasem zgromadzi swoją własną listę adresów IP aktywnych węzłów sieci Bitcoin.

Metoda 2

W drugiej metodzie, informację o adresach IP węzłów sieci Bitcoin pozyskuje się z serwerów DNS, które w sieciach Bitcoin nazywane są DNS seek.

W tym przypadku do konfiguracji naszego nowego węzła należy wprowadzić adresy DNS seek, np. seed.bitcoin.sipa.be lub dnsseed.bitcoin.dashjr.org (takich serwerów w sieci jest więcej).

Znając adres DNS seek nasz nowy węzeł uzyska listę adresów IP, pod którymi znajdują się poszczególne węzły Bitcoina.

Kiedyś wykorzystywano jeszcze mechanizm bootowania używany przez kanał IRC, jednak od wersji 0.8.2 taka możliwość została zaniechana.

Do kompletu, warto wspomnieć, że w sieci peer-to-peer Bitcoina każdy węzeł inicjuje 8 niekodowanych połączeń TCP z węzłami należącymi do różnych podsieci klasy /16.

Ponadto każdy węzeł akceptuje połączenia przychodzące od nieznanych węzłów (domyślnie po porcie 8333). A wszystko po to, aby osiągnąć liczbę 125 połączeń z innymi węzłami sieci Bitcoin (wartość domyślna), z którymi stale komunikuje się każdy węzeł sieci Bitcoin.

Przy wykorzystaniu powyższych mechanizmów, sieć Bitcoin automatycznie rozbudowuje listę adresów IP nowych węzłów, które przyłączyły się do sieci Bitcoin.

Opisany powyżej mechanizm budowania wiedzy o adresach IP sieci Bitcoin może posłużyć do przeprowadzenia ataku.

Skoro znamy mechanizm wymiany informacji o adresach IP sieci Bitcoin, znamy strukturę protokołów, metody dystrybucji informacji – to nie ma przeszkód, aby zbudować aktualną bazę publicznych adresów IP wszystkich węzłów sieci Bitcoin. Co to daje?

Finger touch smartphone screen with privacy protection

 

Atak na routing Bitcoina

Mając wiedzę, jak komunikują się węzły sieci Bitcoin, opracowane zostały dwie metody ataku na taką sieć. W tym artykule przedstawię jedną z nich, o drugiej napiszę w kolejnej części.

Partycjonowanie sieci Bitcoin

W przypadku tego ataku wykorzystuje się znane metody hakerskie do modyfikacji ścieżek optymalnych tras dla pakietów IP. Ustalanie takich ścieżek w światowej sieci internet odbywa się m.in. z wykorzystaniem protokołu BGP – stąd atak nosi nazwę BGP hijacking.

Atak BGP hijacking polega na modyfikacji optymalnych ścieżek rozpływu pakietów IP w sieciach operatorów ISP – w taki sposób, aby pakiety kierowane były na zaplanowane wcześniej trasy – niekoniecznie zgodnie z oczekiwaniami administratora sieci ISP.

Modyfikacja rejestrów ścieżek pakietów IP ma na celu podzielenie sieci Bitcoin na dużo mniejsze sieci, nazwijmy je „partycjami”.

Generując odpowiednio dużą ilość „partycji” możemy mieć bezpośredni wpływ na to, co w każdej z tych „partycji” zostanie uznane za aktualny łańcuch informacyjny.

Jeżeli w każdej „partycji”, wśród rzeczywistych węzłów, będą także węzły uczestniczące w ataku, to nie ma problemu, aby wpłynąć na ostateczny wynik synchronizacji aktualnego łańcucha informacyjnego. W ten sposób, „sztucznie wymuszając” jak ma zostać rozbudowany aktualny łańcuch informacyjny, można wpływać – na skalę globalną – na ostateczną wartość rozproszonego rejestru łańcucha informacyjnego Bitcoina.

Wszystko dlatego, że ostateczna wartość rejestru łańcucha informacyjnego opiera się na statystyce, zgodnie z zasadą, że większość zawsze ma rację.

Wystarczy więc „przekonać” połowę węzłów w „partycji” sieci Bitcoin do „swojej wersji” łańcucha informacyjnego, aby taki stan został uznany za aktualny. Im mniejsza partycja – tym łatwiej „zdobyć większość”.

Jak wygląda taki atak w praktyce?

Stan początkowy: Wyobraźmy sobie sieć węzłów Bitcoin, która komunikuje się po otwartym internecie, czyli pakiety wędrują przez różne sieci ISP – w naszym przykładzie przyjęliśmy, że tych sieci jest 8 (ISP1 – ISP8). Węzły Bitcoin z lewej strony i z prawej strony sieci komunikują się ze sobą po otwartym Internecie  – połączenia oznaczone kolorem niebieskim przebiegają przez sieci różnych ISP.

Krok 1 ataku: Atakujący zamierza podzielić obecną sieć Bitcoina na 2 mniejsze sieci (np. po prawej węzły A,B,C,D,E i po lewej stronie węzły J, I, H, G, F). Jednocześnie Atakujący przejmuje całkowitą kontrolę nad rozpływem ruchu w sieci ISP8 (pominę w tym artykule opis metod, które do tego służą).

Krok 2 ataku: Atakujący modyfikuje rejestry z zapisanymi optymalnym ścieżkami pakietów IP u wybranych operatorów ISP (wykorzystuje atak BGP hijacking) i zaburza normalny rozpływ ruchu IP połączeń w sieci Bitcoin.

Krok 3 ataku: Na tym etapie wszystkie węzły sieci Bitcoin komunikują się w dalszym ciągu, ale Atakujący wymusił poprzez zmiany w rejestrach optymalnych ścieżek pakietów IP, aby wszystkie połączenia odbywały się poprzez sieć ISP8 (nad którą ma pełną kontrolę). 

Krok 4 ataku: Kiedy wszystkie połączenia pomiędzy węzłami odbywają się przez sieć kontrolowaną przez Atakującego, wówczas Atakujący przerywa istniejące połączenia. W ten sposób dochodzi do podziału sieci Bitcoin na dużo mniejsze „partycje”.

Krok 5 ataku: Od tego momentu węzły sieci Bitcoin komunikują się wyłącznie pomiędzy sobą, w ramach sztucznie wytworzonej „partycji”.

Wykorzystując ten mechanizm można podzielić sieć Bitcoin na małe grupy węzłów, w których dużo łatwiej jest zaburzyć proces uzgadniania ostatecznej wartości łańcucha informacyjnego.

 

Teoria a rzeczywistość

Patrząc na powyższy opis ataku można się uśmiechnąć i pomyśleć, że to tylko teoria.

Jeżeli sieć Bitcoin jest siecią globalną, to powyższe działania musiałyby objąć praktycznie cały Internet. W takim wypadku prawdopodobieństwo przeprowadzenia takiego ataku bliższe jest zeru niż sukcesowi. Tyle teoria.

Jednak rzeczywistość płata figle.

Naukowcy z ETH Zurich postanowili przyjrzeć się sieci Bitcoin i sprawdzić, jak wygląda w praktyce „globalizacja” sieci Bitcoin. Wynik tej analizy może zaskakiwać.

Okazuje się, że większość węzłów Bitcoin jest hostowana w sieciach kilku ISP, a dokładnie:

13 ISP (czyli ok. 0,026% wszystkich ISP na świecie) obsługuje 30% (!) wszystkich węzłów Bitcoin.

Mało tego, analiza ścieżek połączeniowych sieci Bitcoin wykazała, że

60% wszystkich możliwych połączeń sieci Bitcoin przechodzi przez sieci trzech ISP!

Co to oznacza?

Trzech dostawców ISP ma wgląd w 60% całego ruchu IP, jaki odbywa się w sieci Bitcoin. W ten sposób runął mit o „globalizacji” sieci Bitcoin.

Jeżeli połączymy powyższe fakty, to opisany powyżej atak na sieć Bitcoin przestaje być tylko i wyłącznie hipotetycznym scenariuszem ataku.

To może sam atak na BGP jest jakimś wyzwaniem dla hakerów? Tutaj także statystyki są nieubłagane.

BGP hijacking, czyli atak na routing pakietów IP w sieciach ISP, jest bardzo popularnym atakiem. Praktycznie każdego miesiąca dochodzi do setek tysięcy zdarzeń fałszowania tras, jakimi podążają pakiety IP w Internecie.

Okazuje się, że już dziś węzły sieci Bitcoin „odczuwają” tego typu ataki (średnio 100 węzłów Bitcoin, każdego miesiąca, pada ofiarą takich ataków z wykorzystaniem protokołu BGP). W 2015 r. miał miejsce atak, który objął swoim zasięgiem 447 węzłów Bitcoin, co stanowiło 8% wszystkich węzłów w sieci Bitcoin. A trzeba pamiętać, że celem ataku z 2015 r. nie była sieć Bitcoin.

Podsumowanie

Pocieszające jest, że do tej pory nie zauważono, aby powyższy scenariusz ataku na sieć Bitcoin miał miejsce. Jednak analizy praktyczne naukowców z ETH Zurich nie pozostawiają złudzeń.

  1. Przeprowadzili oni realny atak na BGP (BGP hijacking) na swoich własnych węzłach Bitcoin. Atak zajął im… 2 minuty. Po takim czasie mieli pełną kontrolę nad ruchem IP swoich węzłów Bitcoin.
  2. Naukowcy ETH Zurich wyizolowali węzły sieci Bitcoin, w których znajduje się znacząca „moc górnicza” – niezbędna do poprawnego działania sieci Bitcoin. Okazało się, że:
    50% całej „mocy wydobywczej górników” Bitcoin znajduje się tylko w 39 prefiksach adresacji IP!
  3. Obserwacja przez 6 miesięcy tras pakietów w sieci Bitcoin wykazała, że już dziś, regularnie zdarzają się ataki na trasy połączeń w sieci Bitcoin.
  4. Przeprowadzono opisany atak na małej próbce specjalnie dołączonej do sieci Bitcoin liczbie węzłów. Praktyczna obserwacja efektu ataku opisanego powyżej wykazała, że choć podział na „partycje” nie jest trwały, gdy zakończy się atak na ścieżki pakietów IP podział na „partycje” szybko się zaciera – jednak logika synchronizacji i wymiana informacji w na nowo połączonej sieci Bitcoin trwa wiele godzin. Wystarczy więc choć na chwilę zaburzyć logikę działania sieci Bitcoin, aby potrzebne było wiele godzin, aby przywrócić „równowagę informacyjną” w tej sieci.

Powyższe badania naukowe nie pozostawiają złudzeń: atak na sieć Bitcoin nie tylko jest realny, ale wcale nie wymaga olbrzymich zasobów. Pocieszające jest, że dotychczas nie zaobserwowano realizacji opisanego w tym wpisie scenariusza. Nie oznacza to jednak, że wykonanie takiego ataku nie jest możliwe – co wykazały badania naukowców z ETH Zurich.

Z powyższego scenariusza płynie także wniosek dla każdego, kto chce budować własną sieć blockchain.

Jeżeli nie zadba się, aby sieć węzłów blockchain była rozproszona geograficznie w sieci Internet, to stanie się ona podatna na opisany typ ataku. W dodatku im mniejsza sieć, tym łatwiej wykonać taki atak.

Tym samym, zanim zdecydujemy się na wykorzystanie technologii blockchain w firmowych systemach, warto przeanalizować wszystkie ryzyka związane z wdrożeniem nowatorskich narzędzi do obecnie działających procesów w firmach.

W przeciwnym wypadku, zaburzając komunikację w sieci blockchain, można realnie wpłynąć na ostateczne zapisy w łańcuchu informacyjnym, a tym samym zaburzyć realne procesy w firmach. Efekty mogą być różne, w zależności od realnego wpływu danego procesu na działalność firmy.

W kolejnym wpisie przedstawię drugi typ ataku na sieć węzłów Bitcoin.

 

Krzysztof Surgut
Krzysztof Surgut krzysztof.surgut@dataspace.pl Przez ostatnie 15 lat współrealizował zaawansowane, ogólnopolskie projekty telekomunikacyjne i informatyczne (m.in. w Dialog, HAWE). Ekspert z zakresu systemów transmisji danych, VoIP, IPTV, systemów bezpieczeństwa oraz systemów radiowych. Współtwórca pierwszego w Polsce Scrubbing Center.
Bezpieczeństwo IT
Bezpieczeństwo dzieci w internecie, cz.2: metody i narzędzia
Newsy
"Płyny w Centrach Danych" - Data Space z prezentacją na PLNOG 21
   /   Bezpieczeństwo IT   /   Atak na sieć węzłów Bitcoin, cz.1