Przejdź do treści

Hakerzy ukradli 38 milionów dolarów w Bitcoinie w zaledwie 25 minut. Poważna luka w portfelach Coldcard

3 minuty czytania

Odkryty po latach błąd w kodzie portfeli Coldcard sprawił, że w ręce złodziei trafiły Bitcoiny o wartości 38 milionów dolarów.

Krytyczny błąd w generatorze liczb losowych w oprogramowaniu układowym portfeli sprzętowych Coldcard umożliwił odgadnięcie kluczy prywatnych i ogołocenie kilkuset kont ze znajdujących się na nich środków. Jak podaje portal CoinDesk, w zaledwie 25 minut z około 500 portfeli skradziono 594 Bitcoiny o łącznej wartości blisko 38 milionów dolarów.

Błyskawiczna czystka na 500 portfelach

Wedle relacji, do zmasowanego ataku doszło w piątek między godziną 01:31 a 01:56 UTC (czyli ok. 3.30 rano w Polsce). W tym 25-minutowym oknie czasowym, obejmującym zaledwie trzy bloki sieci Bitcoin, sprawcy przeprowadzili 500 transakcji, wyprowadzając środki z około 500 niezależnych portfeli. Łącznie skradziono około 594 BTC, z czego 562 sztuk waluty zostało natychmiast zebranych pod jednym, nienaruszonym do tej pory adresem.

Wszystkie dotknięte atakiem portfele charakteryzowały się kilkoma wspólnymi cechami, a mianowicie:

  • Atak wycelowany był w konta zabezpieczone pojedynczym kluczem prywatnym;
  • Na każdym z przejętych portfeli znajdowało się ponad 0,15 BTC (czyli uboższym inwestorom złodzieje postanowili oszczędzić zmartwień);
  • Skradzione Bitcoiny pochodziły z lat 2021–2026, a wiele kont pozostawało nieaktywnych od dłuższego czasu.

Nie taka losowa losowość

Portfele sprzętowe Coldcard, produkowane przez kanadyjską firmę Coinkite, służą do bezpiecznego przechowywania kluczy prywatnych bez dostępu do sieci. Ich najważniejszym zadaniem jest generowanie zapasowej frazy bezpieczeństwa (tzw. seeda) z tak ogromnej puli losowych kombinacji, by ich odgadnięcie było z matematycznego punktu widzenia praktycznie niemożliwe. Gdyby jednak urządzenia wywiązywały się wzorowo z powierzonego im obowiązku, niniejszy tekst by wcale nie powstał.

Usterka została przybliżona w raporcie przygotowanym przez Block. Okazało się, iż jedno z ustawień kompilacji nakazywało urządzeniu pominąć wbudowany sprzętowy generator liczb losowych, przez co kod weryfikował jedynie, czy dana flaga istnieje w konfiguracji, a nie czy została fizycznie włączona. W związku z tą bolączką, proces generowania klucza korzystał z prostego algorytmu programowego bazującego na numerze seryjnym układu scalonego oraz rejestrach zegara.

Jako że zarówno ów numer seryjny, jak i wartości zegara są danymi, które potencjalny napastnik może bez trudu ustalić lub odtworzyć na własnym urządzeniu, złamanie haseł nie okazało się wielkim wyzwaniem. Z ustaleń wynika, że błąd w kodzie pojawił się 1 marca 2021 roku i trafił on do oprogramowania 4.0.0. Coinkite ostrzegło użytkowników, którzy generowali frazy seed na modelu Mk3 z oprogramowaniem 4.0.1 lub nowszym, zaznaczając przy tym, że według wstępnych analiz nowsze modele (Mk4, Q oraz Mk5) nie są dotknięte tą luką.

Środki zarządzane za pomocą klucza początkowego wygenerowanego w wersjach Mk2 lub Mk3 od 4.0.1 (marzec 2021 r.) do 4.1.9 włącznie są narażone na ryzyko, jeśli klucz ten został utworzony bez co najmniej 50 uczciwych, niezależnych i prywatnych rzutów kostką, a portfel, na którym znajdują się środki, nie jest chroniony silnym, unikalnym hasłem zgodnym ze standardem BIP-39. Problem dotyczy również seedów wygenerowanych w wersjach Mk4, Q i Mk5 przed wydaniem poprawionych wersji oprogramowania sprzętowego, które charakteryzują się entropią wynoszącą około 72 bitów zamiast oczekiwanych 128 bitów.

Coinknite

Co dalej?

Eksperci z Block podkreślili, że wyniki ich badań zostały przekazane do Coinknite. Zaznaczono przy tym, iż testy zostały przeprowadzone naprędce, albowiem ataki z wykorzystaniem odkrytej luki były już w toku.

0 komentarzy

Zostaw komentarz