O kryptowalutach mówi się już od kilkunastu lat. W tym czasie byliśmy świadkami ponad setki dużych włamań na giełdy kryptowalut oraz do innych usług z nimi związanych.
Szczegóły takiego włamania bardzo często pozostają niejasne. Łatwo jest dowiedzieć się, kto został zhakowany, kiedy to się stało i ile pieniędzy zostało skradzione, ale sposób realizacji incydentu pozostaje tajemnicą. Dziennikarze są bardziej zainteresowani wysokością strat, a organizacje będące ofiarami nie spieszą się z ujawnieniem szczegółów incydentu.
Wobec tego postanowiliśmy zapełnić tę lukę i opowiedzieć, jak dochodzi do takich włamań, mając równocześnie nadzieję, że w ten sposób zmniejszymy liczbę ich wystąpień.
Phishing i szkodliwe oprogramowanie jako standardowe narzędzia włamania na giełdy kryptowalut
Kryptogiełdy przechowują kryptowaluty i tradycyjne pieniądze użytkowników na zwykłych kontach bankowych. Kradzież „zwykłych” pieniędzy zawsze wiąże się dla cyberprzestępców z dużym ryzykiem: aby uciec ze skradzionym łupem, muszą go szybko wypłacić, zanim bank zamrozi rachunek. Dlatego zazwyczaj wybierają oni kryptowaluty.
Jeśli chodzi o włamania na giełdy kryptowalut, zwykle wiadomo tylko, że (1) wydarzyły się i (2) że pieniądze klientów zniknęły. Ale co tak naprawdę się stało? Najprawdopodobniej kolejność wydarzeń wygląda następująco: najpierw napastnicy zdobywają listę pracowników i zapoznają się z ich zainteresowaniami (w tym celu korzystają np. z sieci społecznościowych). Następnie do osób, które uznają za najbardziej łatwowierne, wysyłają ukierunkowane wiadomości phishingowe zawierające złośliwe ładunki. W ten sposób cyberprzestępcy dostają się do sieci giełdy.
W kolejnym kroku poznają panujące w firmie zwyczaje (np. jak często księgowa komunikuje się z dyrektorem oraz co sobie wysyłają), studiują architekturę sieci wewnętrznej, miejsce przechowywania kryptoportfeli oraz sposób ich zabezpieczenia. Ten etap może zająć dużo czasu, ale w końcu umożliwia dojście do komputera pracownika posiadającego dostęp do najważniejszych systemów.
Jeśli giełda jest skonfigurowana tak, aby wysyłała kryptowalutę, to osoba posiadająca prawa operatora może wysyłać kryptowaluty do siebie. Podobno taki scenariusz ataku spotkał giełdę Binance.
- Incydent: włamanie na giełdę Binance
- Data: 7 maja 2019 r.
- Skradziona kwota: 40 000 000 dol. (7 000 BTC)
Jak zapewnić sobie bezpieczeństwo przed atakami ukierunkowanymi
Jeśli prowadzisz giełdę wymiany kryptowalut, musisz upewnić się, że koszt ataku przekracza potencjalny zysk pomnożony przez prawdopodobieństwo sukcesu. W tym celu zadbaj o następujące aspekty:
- Zorganizuj szkolenie pracowników w zakresie cyberumiejętności (np. aby nie otwierali życiorysu w formacie DOC).
- Używaj rozwiązania zabezpieczającego zapewniającego ochronę przed atakami ukierunkowanymi — najlepiej takiego, które nie tylko chroni przed zagrożeniami każdy węzeł, ale także wykrywa anomalie w całej organizacji.
- Zamów przeprowadzenie testu penetracyjnego (podczas którego eksperci ds. bezpieczeństwa podejmą próbę przeniknięcia do organizacji i poruszania się po systemie, a następnie poinformują Cię o słabych punktach).
Podwójne wydatki: okradanie bankomatu z bitcoinów przy użyciu telefonu
W innym sposobie kradzieży bitcoinów wykorzystywane są bankomaty. Ludzie zazwyczaj używają ich do wypłaty (lub wpłaty) pieniędzy na istniejące rachunki bankowe, ale bankomat bitcoinowy oferuje coś jeszcze: możliwość kupna i sprzedaży kryptowaluty.
Aby ukraść bitcoiny z bankomatu, ludzie mogą korzystać z maszyn służących do sprzedaży waluty Bitcoin. Po otrzymaniu gotówki mogą anulować transakcje. Brzmi banalnie, ale działa: na przykład w Kanadzie w krótkim okresie czasu z 45 bankomatów akceptujących kryptowaluty złodzieje ukradli 200 000 dolarów.
Jak to się stało? Jak wiadomo, informacje w łańcuchu bloków są przechowywane w blokach (stąd nazwa). Transakcja, w której wysyłane są bitcoiny, nie jest zapisywana w bloku od razu — najpierw jest ona kolejkowana, a nowy blok jest tworzony mniej więcej co 10 minut. Każda niepotwierdzona transakcja jest usuwana z kolejki przez twórcę bloku. Należy zauważyć, że w bloku nie ma wystarczającej ilości miejsca dla wszystkich transakcji, więc priorytet otrzymują te osoby, które opłacają wyższe opłaty (które trafiają do twórcy bloku).
Trudno uwierzyć, ale twórcy logiki kierującej bankomatami nie zadbali o to, aby przed wydaniem gotówki poczekały one, aż transakcja zostanie zapisana w łańcuchu bloków. Kwestie wygody użytkownika pokonały kwestie bezpieczeństwa.
Co więcej, początkowo w przypadku waluty Bitcoin nie można było anulować zakolejkowanych transakcji, co często skutkowało tym, że te z niewielkimi opłatami były zawieszane w systemie na kilka dni, zanim zostały usunięte. Aby rozwiązać ten problem, dodano mechanizm zamiany poprzez opłatę, pozwalający na zastąpienie transakcji oczekującej na inną, zazwyczaj w celu zwiększenia prowizji i zrealizowania transferu. Ale mechanizm ten umożliwia również zmianę odbiorcy i wysłanie bitcoinów z powrotem do nadawcy.
Delikatnie mówiąc, była to podatność, a ujmując rzecz wprost — czysta lekkomyślność, która doprowadziła do poniższej sytuacji:
- Incydent: Włamanie się do bankomatu operującego bitcoinami
- Data: wrzesień 2018 r.
- Skradziona kwota: 200 000 dol.
Jak zapewnić sobie bezpieczeństwo przed włamaniem polegającym na podwójnym wydatkowaniu
Po kradzieży pieniędzy firma odpowiedzialna za bankomaty wprowadziła w nich czas oczekiwania. Teraz użytkownicy muszą wrócić do bankomatu, aby otrzymać gotówkę po dostarczeniu bitcoinów. Jest to o wiele mniej wygodne dla użytkownika, ale to jedyny słuszny sposób, uwzględniający zasadę działania łańcucha bloków.
Z perspektywy czasu oczywiste jest, że aby zapobiec takiej utracie pieniędzy, programiści powinni zamówić przegląd zabezpieczeń aplikacji. Czyli zwrócić się do ekspertów zewnętrznych, aby zbadali architekturę usługi, sprawdzili kod i poszukali luk w zabezpieczeniach.
Atak 51%: opanowanie łańcucha bloków
Prawdopodobnie słyszeliście wiele razy, że „dane w łańcuchu bloków nie mogą być zmieniane”. W niektórych przypadkach nie do końca jest to prawdą. Łańcuch bloków jest taki sam dla wszystkich użytkowników dzięki dwóm zasadom.
Po pierwsze, wszyscy uczestnicy muszą uzgodnić, kto będzie twórcą kolejnego bloku. Prawdopodobieństwo zostania takim szczęśliwcem zależy od zainwestowanych zasobów — im większa siła wydobywcza, tym szanse są większe.
Druga to „zasada najdłuższego łańcucha”, zgodnie z którą w przypadku konfliktu obowiązującą wersją łańcucha bloków jest najdłuższa. Jeśli ktoś tworzy własny łańcuch bloków i próbuje go rozprzestrzeniać, wszyscy go odrzucą, ponieważ poświęcono na niego mniej zasobów, a zatem jest on krótszy.
Ale sytuacja zmienia się, jeśli fałszerz używa więcej niż 50% całej mocy wydobywczej. W czasie, gdy wszyscy inni tworzą na przykład dziewięć bloków, nieuczciwy użytkownik może utworzyć 10 sztuk. Wówczas sfałszowana wersja łańcucha bloków jest najdłuższa, dlatego każdy ją akceptuje, a historia finansowa zostaje skutecznie zmieniona. Użytkownik, który wydał bitcoiny w starej wersji publicznego łańcucha bloków, odzyska je na swoje konto w fałszywym łańcuchu bloków.
To właśnie przydarzyło się giełdzie kryptowalut Gate.io na początku 2019 roku. Napastnik wysłał swoją kryptowalutę do giełdy (i napisał o tym w publicznym łańcuchu bloków) i równolegle zaczął tworzyć własny łańcuch bloków. Kiedy giełda otrzymała przelew i przypisała kwotę do salda osoby atakującej, oszust nadał swój prywatny łańcuch bloków (który nie zawierał powyższej transakcji, pozwalając, aby kryptowaluta do niego wróciła) i poprosił o wycofanie jego salda z giełdy. W rezultacie giełda straciła pieniądze.
Zobaczmy teraz, dlaczego nie zdarza się to codziennie oraz ile mocy obliczeniowej musiał poświęcić atakujący.
Jako przykład użyjemy kryptowaluty Bitcoin. Osoby odpowiedzialne za jej generowanie tworzą sześć bloków na godzinę. Dla każdego bloku wystawiana jest nagroda w wysokości 12,5 BTC (w dniu 6 października 2019 roku 75 BTC kosztowało 600 000 dol.). Tyle w przybliżeniu kosztuje wynajem całej mocy wydobycia Bitcoina na godzinę. Strona Crypto51 pokazuje takie obliczenia:
Ostatnia kolumna określa, ile pojemności jest dostępne do wynajęcia w danej chwili. Jak widać, aby przejąć łańcuch bloków Ethereum Classic (jak zrobił to wyżej wspomniany napastnik), należy wydać około 10 000 dol. na godzinę. Osoby te potrzebowały czterech godzin, aby zebrać 200 000 dol.
Nie jest to pierwszy atak tego typu. Różne inne kryptowaluty przetrwały 51% ataków.
- Incydent: atak ETC 51% Gate.io
- Data: 7 stycznia 2019 r.
- Skradziona kwota: 200 000 dol. (40 000 ETC)
Jak zapewnić sobie bezpieczeństwo przed atakiem 51%
Ogólnie można stwierdzić, że w ataku 51% możliwość przepisania łańcucha bloków i wpłaty gotówki jest nieodłączną cechą tej technologii. Aby atak był jak najbardziej kosztowny, giełdy wymiany kryptowalut próbują czekać tak długo, jak to możliwe, zanim zaktualizują saldo użytkownika po dokonaniu transakcji. Wynika to z tego, że im więcej bloków powstanie od czasu wejścia transakcji do łańcucha bloków, tym mniej prawdopodobne, że łańcuch bloków zostanie zreorganizowany i wycofany. Ale to opóźnienie powoduje poważne niedogodności, bo realizacja przelewów zajmuje kilka godzin.
Tak czy inaczej, na pewno zobaczymy jeszcze tego rodzaju atak.
Kradzież tajnego klucza: sprawdzanie pisowni w haśle
Aby wypłacić kryptowalutę, potrzebny jest tajny klucz. Kluczem jest to, co jest zapisane w kryptoportfelach, tymczasem saldo użytkownika jest przechowywane w łańcuchu bloków.
Po zamianie portfeli kryptowalut należy skopiować klucz ze starego portfela do nowego. Dla wygody klucz składa się z frazy składającej się z 12 prostych słów.
Pewnego razu twórcy kryptoportfela przypadkowo wpisali frazę online w celu sprawdzenia pisowni, a błąd ten wykrył inwestor kryptowalut, gdy skradziono mu 70 000 dol. Naszym zdaniem mało prawdopodobne jest, że to był powód kradzieży, ale w każdym razie historia jest pouczająca.
Stało się tak dlatego, ponieważ w dzisiejszych czasach aplikacje często nie są napisane od podstaw, ale raczej powstają z komponentów, pożyczanych również od twórców zewnętrznych. W ten sposób postąpili twórcy portfela kryptowalut Coinomi. Aby wyświetlić formularz wprowadzania hasła, użyto modułu jxBrowser. Programiści nie wiedzą, czy ten komponent domyślnie sprawdza pisownię całego tekstu wprowadzonego w formularzu. Z kolei aby nie dodawać obciążenia w postaci słowników dla wszystkich znanych języków na świecie, kontrola jest przeprowadzana w chmurze przy użyciu usługi googleapis.com.
W przypadku zwykłych formularzy wprowadzania może to być przydatne, ale jeśli chodzi o pola przeznaczone na hasła i supertajne frazy, to bardzo ryzykowny ruch.
Programiści przekonywali, że fraza została wysłana tylko do firmy Google i została przekazana w formie zaszyfrowanej. W efekcie Google zwrócił błąd. Niemniej jednak ofiara jest pewna, że przyczyną kradzieży była wspomniana luka.
- Incydent: Luka w zabezpieczeniach związana z uwierzytelnianiem portfela Coinomi
- Data: 22 lutego 2019 r.
- Skradziona kwota: 70 000 dol.
Jak zapewnić sobie bezpieczeństwo przed kradzieżą tajnego klucza
Z jednej strony, problem wynika z powszechnej nieostrożności. Funkcja sprawdzania pisowni w komponencie została udokumentowana, a w instrukcji opisano, jak ją wyłączyć. Konwencjonalne testy prawdopodobnie nie zidentyfikowałyby problemu, ale ujawniłby go przegląd zabezpieczeń aplikacji.
Z drugiej strony, problem jest o wiele głębszy. Korzystanie z bibliotek innych firm to narażanie się na potencjalne problemy, zarówno teraz, jak i w przyszłości (ich aktualizacje mogą sprawić, że będą podatne na ataki), a także ryzyko ataku na łańcuch dostaw. W ataku na łańcuch dostaw cyberprzestępca nie musi włamywać się do pierwotnego autora narzędzia, ale do jednego z jego kontrahentów. Często nie mają oni wystarczającej ochrony i nawet mogą nie być świadomi, w których ważnych projektach ich kod zostanie użyty.
Czasami dziwi nas ta lekkomyślność, a czasami współczujemy im bezradności.