Podsumowując: Trinity to portfel softwarowy dla aktywów cyfrowych IOTA, który został opracowany dla stacjonarnych i mobilnych systemów operacyjnych. Zarządzany przez Fundację IOTA, projekt oprogramowania open-source umożliwia użytkownikowi zarządzanie tokenami w sieci IOTA. 12 lutego 2020 roku portfel Trinity został zaatakowany za pośrednictwem osoby trzeciej zależnej od Moonpay, co doprowadziło do kradzieży około 8,55 Ti w tokenach IOTA.
Ten post na blogu jest podzielony na 3 części:
- Część 1: Podsumowuje serię wydarzeń, które doprowadziły do ataku i działań podjętych przez Fundację IOTA.
- Część 2: To plan migracji seedów mający na celu ochronę użytkowników, którzy mogli zostać dotknięci atakiem. Można przeczytać o tym tutaj.
- Część 3: Przedstawia przegląd kluczowych elementów, działań i środków, które Fundacja IOTA wdrożyła w celu zapewnienia najwyższych standardów bezpieczeństwa dla całego rozwoju naszego oprogramowania. Możesz przeczytać o tym tutaj.
Poniżej przedstawiamy podsumowanie ataku na Trinity oraz środki podjęte przez Fundację IOTA w celu ochrony tokenów użytkownika.
Seria wydarzeń
W środę, 12 lutego 2020 roku, około godziny 15:00 CET, moderatorzy na serwerze IOTA Discord zaczęli otrzymywać raporty od użytkowników, którzy zauważyli nieautoryzowane transakcje wychodzące na swoich portfelach. Stało się jasne, że nie był to odosobniony incydent, i zespoły inżynierów Fundacji IOTA rozpoczęły pracę nad identyfikacją przyczyny.
W ciągu pierwszych czterech godzin dochodzenia, Fundacja podjęła decyzję o zatrzymaniu koordynatora, który został wprowadzony jako tymczasowy mechanizm bezpieczeństwa w fazie dojrzewania sieci. Decyzja o wstrzymaniu pracy koordynatora nie jest podejmowana pochopnie, ponieważ wyłączenie go wstrzymuje zatwierdzenie transakcji z wartością w sieci. Niemniej jednak, aby uniemożliwić hakerowi transfer kolejnych tokenów, był to niezbędny krok. W rezultacie napastnik nie był w stanie pomyślnie zdobyć wszystkich docelowych tokenów, a wiele transferów zostało wstrzymanych.
W celu zwiększenia przejrzystości wokół zaistniałego incydentu, Fundacja wdrożyła plan, który zawierał regularne aktualizacje statusu za pośrednictwem specjalnej strony internetowej.
Pozwoliło to nam na publikowanie aktualizacji, ale także na kontynuowanie pracy za kulisami, w celu zbadania różnych scenariuszy, w tym:
- Możliwe naruszenie protokołu głównego IOTA:
- Złośliwa modyfikacja dostępnego instalatora Trinity, we wszystkich lub pojedynczych wersjach systemu operacyjnego;
- Przechwycenie DNS, gdzie zmodyfikowana wersja Trinity byłaby pobierana z serwera hakera;
- Atak wirusem/trojanem wynikający z ataków phishingowych;
- Zdalne wstrzykiwanie kodu, np. poprzez zależności;
- Fałszywe generowanie seedów (podobne do incydentu phishingu z początku 2019 roku);
- Zorganizowany atak typu social-engineering (w związku z niedawno ogłoszonym przez Binance 50x IOTA margin trading).
Wczesne analizy i badania (schematy ataków, dogłębne skanowanie systemów użytkowników, rozbudowane skanowanie/przeglądy zależności kodu, różnego rodzaju porównań użytkowników), jak również proces eliminacji, pozwoliły zespołom na zidentyfikowanie prawdopodobnej przyczyny: była to integracja serwisu zewnętrznego (Moonpay), który umożliwił bezpośredni zakup tokenów IOTA w ramach Trinity. MoonPay natychmiast został poinformowany o możliwym, eksploicie.
W momencie jego integracji z Trinity, Moonpay był dostępny tylko jako kod dostarczany w pakiecie przez CDN (rozproszony system dostarczania treści), więc IOTA Foundation zintegrowała go jako taki. Chociaż jest on szeroko stosowany w technologiach internetowych, dostawa CDN wiąże się z nieodłącznym ryzykiem. Jednym z tych zagrożeń jest to, że kod oczekiwany przez urządzenie może zostać nieświadomie zastąpiony kodem, który nie jest pożądany. Fundacja IOTA oznaczyła związane z tym ryzyko i poprosiła NPM (domyślny manager pakietów dla środowiska Node.js) o jego ograniczenie. Zostało to później opublikowane przez Moonpay, po tym jak większość prac integracyjnych została już wykonana, ale presja wydania i błąd ludzki przyczyniły się do tego, że Fundacja nie przełączyła się na bardziej bezpieczny pakiet NPM. Była to słabość, którą wykorzystał haker i która prawdopodobnie mogłaby zostać rozwiązana, gdyby Fundacja miała bardziej rozbudowany, między-zespołowy proces przeglądu większych aktualizacji.
W ciągu następnych 48 godzin Fundacja, przy udziale wielu poszkodowanych, zebrała informacje i uzyskała pliki Trinity. Przeprowadzona przez Fundację wewnętrzna analiza pamięci podręcznych Trinity znalazła niezbity dowód na to, że zostały one zainfekowane kodem przez jedną z kilku nielegalnych wersji Moonpay’s software development kit (SDK), która była ładowana automatycznie z serwerów Moonpay (ich sieć dystrybucji treści), gdy użytkownik otworzył Trinity. Kod został załadowany do lokalnej instancji Trinity, a po odblokowaniu portfela użytkownika, odszyfrował seed-a użytkownika i wysłał seed oraz hasło do serwera kontrolowanego przez hakera. Przed wysłaniem tokenów napastnik oczekiwał na wydanie nowej wersji Trinity, która nadpisze pliki w pamięci podręcznej Trinity i tym samym usunie pozostałe ślady exploita . Z tą realizacją i próbkami kodu w ręku, Fundacja IOTA natychmiast złożyła raport do Cyberwydziału Policji Berlińskiej.
Poprzez analizę ataku, przeprowadzoną przez Fundację IOTA, stało się jasne, że wzór konsoliduje wielokrotne pakiety 28 Gi. Podejrzewamy, że wartość ta została wybrana w celu utrzymania wartości USD jednego pakietu poniżej 10 000 USD i uniknięcia uruchomienia procedur identyfikacji KYC giełdy. Natychmiast skontaktowaliśmy się ze wszystkimi giełdami. Z wynikami analizy wzorca poprosiliśmy je o zablokowanie powiązanych kont giełdowych. Pierwsza odpowiedź od prawie wszystkich giełd była taka, że nie otrzymały one żadnego ze skradzionych pakietów tokenów. Ze względu na strukturę przetwarzania pakietów, trudno było pozbyć się podejrzeń, że pakiety te zostały wysłane na adres giełd. Po wielokrotnej ewaluacji otrzymaliśmy zestawy logów transakcji depozytu giełdowego. Kiedy analizowaliśmy te logi przy pomocy naszych narzędzi analitycznych Tangle, niestety okazało się, że kilka adresów było własnością giełd. Ponownie zwróciliśmy się do giełd z prośbą o natychmiastowe zablokowanie kont i obecnie jesteśmy w dalszej korespondencji z nimi, aby ocenić pełny obraz ilości tokenów, które haker był w stanie wymienić i przelać z giełdy.
Następne rewelacje przyszły wraz z udostępnieniem plików z logami do Fundacji IOTA 15 lutego od dostawcy DNS zakontraktowanego przez Moonpay: Cloudflare. Dzięki współpracy z Moonpay, udało nam się uzyskać logi z ostatnich 18 miesięcy ich konta w Cloudflare. To, wraz z analizą bezpieczeństwa, stworzyło bardzo wyraźny obraz etapów ewoluującego ataku, który rozpoczął się 27 listopada 2019 roku.
Integracja Moonpay z Trinity rozpoczęła się oficjalnie we wrześniu 2019 roku, a pierwsza zamknięta beta została otwarta 11 listopada 2019 roku. W wyniku przecieku w okresie testowym, 12 listopada 2019 roku, nadchodząca integracja z Trinity stała się dobrze znana w naszej społeczności. Integracja została opublikowana na naszym otwartym repozytorium Github 26 listopada rano.
Atak rozpoczął się 27 listopada 2019 roku od próby przechwycenia DNS który użył klucza API Cloudflare do przepisania punktów końcowych api.moonpay.io, przechwytując wszystkie dane płynące do api.moonpay.io w celu potencjalnej analizy lub eksfiltracji. Kolejne bardziej rozbudowane próby ataku wystąpiły miesiąc później, 22 grudnia 2019 roku. 25 stycznia 2020 roku rozpoczął się aktywny atak na Trinity, gdzie haker rozpoczął wysyłkę nielegalnego kodu przez dostawcę DNS Moonpay’a w Cloudflare.
W ciągu następnych dwóch tygodni napastnik udoskonalił złośliwy kod i techniki eksfiltracyjne, wykorzystując zaciemnianie kodu i modyfikację punktów końcowych Moonpay API. W tym okresie, seedy IOTA zostały skradzione. Proces powielania kodu i kradzieży seedów trwał do 10 lutego (choć istnieją oznaki, że złośliwe SDK-y były serwowane nawet do 14 lutego), w którym to momencie Moonpay dowiedział się o nielegalnych ścieżkach i podjął działania mające na celu usunięcie klucza API, zmianę danych do logowania oraz usunięcie nieaktywnych użytkowników. Niestety, Fundacja IOTA nie została poinformowana o nieautoryzowanym dostępie do API aż do momentu kiedy sama nie zauważyła tego w dziennikach Cloudfare otrzymanych od Moonpay 15 lutego.
Bez dostępu do API haker zorientował się, że ścieżka ataku została przerwana – i następnego dnia, 11 lutego, rozpoczął wykonywanie transakcji z wykorzystaniem skradzionych seedów. 12 lutego koordynator został zatrzymany co uniemożliwiło kradzież dalszych środków z seedów. Obecnie Fundacja IOTA wie o 50 niezależnych seedach, których tokeny zostały skradzione podczas tego ataku, co daje w sumie kwotę 8,55 Ti.
Użytkownicy Trinity będą musieli skorzystać z nadchodzącego narzędzia do migracji, aby chronić swoje tokeny przed dalszymi kradzieżami.
Charakter tego ataku wprowadził kilka utrudnień dla sieci IOTA. W związku z tym, aby pomyślnie wznowić pełne funkcjonowanie sieci bez powodowania dalszych potencjalnych strat dla posiadaczy tokenów, którzy korzystali z portfela Trinity, fundacja podjęła dodatkowy krok w celu opracowania szczegółowego planu migracji oraz dedykowanego narzędzia do ochrony użytkowników, którzy mogli zostać dotknięci tą kradzieżą i zaoferowania wszystkim użytkownikom Trinity bezpiecznego sposobu na migrację ich tokenów do nowego seeda. Dokładne szczegóły tego planu migracji zostaną udostępnione społeczności w kolejnym wpisie na blogu (Część 2).
Kroki podjęte w celu zajęcia się incydentem:
- Fundacja utworzyła stronę z aktualizacją statusu, na której ofiary i opinia publiczna miały dostęp do regularnych aktualizacji.
- IF zbudowała nowy zestaw narzędzi analitycznych Tangle (wykorzystujący nasz permanode), który śledzi tokeny w czasie rzeczywistym. Narzędzie to pomoże wesprzeć trwające dochodzenie karne.
- Przydzielono wszystkie dostępne zasoby do pomocy w badaniu zaatakowanych seedów i analizowaniu wzorca ataku, przy użyciu zestawu nowo opracowanych narzędzi, a także osobnej, równoległej, ręcznej analizy i weryfikacji (w celu potwierdzenia wiarygodności narzędzi).
- Opublikowano nową wersję Trinity Desktop dla użytkowników, którzy mogą ją instalować na aktualnej wersji z usuniętym wektorem ataku, co pozwoli użytkownikom na bezpieczne sprawdzanie sald portfela. Możesz go pobrać tutaj.
- Wydano nowe wersje Trinity Mobile na iOS i Android z usuniętym MoonPay. Można je pobrać odpowiednio z App Store i Play Store.
- Opracowanie planów naprawczych ataku, który obejmuje zbudowanie narzędzia do bezpiecznej migracji środków między seedami
- Pozyskano wielu ekspertów i firm zajmujących się bezpieczeństwem, aby pomóc w analizie i dochodzeniach w zakresie cyberprzestrzeni, a także opracować plan naprawczy.
- Skontaktowano się z policją brytyjską, niemiecką, maltańską oraz FBI aby zgłosić ten incydent, oraz dostarczyć dokumentację i aktualizacje o postępach z śledztwie.
- Zebranie informacji od poszkodowanych użytkowników i stworzenie dla nich kanału na Discord
- Zebranie i przeanalizowanie plików aplikacji zarówno użytkowników dotkniętych problemem, jak i użytkowników, których nie dotyczy problem, sklasyfikowano typy złośliwego kodu i opracowano harmonogram wdrażania tego złośliwego kodu.
- Skontaktowanie się ze wszystkimi giełdami, aby uzyskać wgląd w to, gdzie tokeny zostały przeniesione i aby zablokować ich sprzedaż.
- Współpraca z MoonPay w celu zbadania źródła tego włamania i uzyskania informacji niezbędnych do dochodzenia.
Wiadomość do naszej społeczności i użytkowników
Chcemy podziękować naszej niezwykle wspierającej społeczności za oferowanie pomocy w tym kluczowym okresie. Zdajemy sobie sprawę, że kradzież tokenów jest bardzo stresującym i emocjonalnym czasem dla osób dotkniętych tym problemem, dlatego traktujemy ten incydent bardzo poważnie. Osiągnęliśmy duży postęp w dotarciu do sedna tego ataku w krótkim czasie, a nasi inżynierowie pracują z organami ścigania, aby przeanalizować wszystkie zdarzenia prowadzące do ataku i zidentyfikować winowajcę. Doceniamy cierpliwość naszej społeczności i użytkowników podczas opracowywania i wdrażania narzędzi, które pomogą w odzyskiwaniu skradzionych tokenów.
Podsumowanie
Ze względu na bieżącą współpracę i dochodzenie prowadzone przez organy ścigania i zewnętrznych wykonawców ds. bezpieczeństwa nadal analizujemy konkretne szczegóły i zdarzenia kradzieży i jako takie nie są jeszcze w stanie zapewnić społeczności pełnego przedstawienia zdarzenia. Mamy nadzieję, że w nadchodzących tygodniach i we współpracy z zaangażowanymi stronami będziemy w stanie zapewnić każdemu szczegółowy wgląd w przebieg wydarzeń. Choć niektórzy mogliby powiedzieć, że „wallet-hack” jest rytuałem przejścia w przemyśle kryptograficznym, to jednak w żaden sposób nie zmniejsza to rozczarowania, jakie odczuwają ludzie w Fundacji IOTA z powodu niespełnienia standardów, które sobie wyznaczyliśmy. Nie udało nam się w pełni zweryfikować portfela Trinity po nowych integracjach i przepraszamy za zawiedzenie naszej społeczności. Obecnie pracujemy nad planem naprawczym dla ofiar, których tokeny zostały skradzione przez hakera i nadal jesteśmy w bezpośrednim kontakcie z nimi. Zamierzamy publicznie ogłosić konkretny plan w przyszłym tygodniu. Niezależnie od tego, Fundacja nadal pozostaje w kontakcie z zaangażowanymi giełdami i organami ścigania, aby – miejmy nadzieję – znaleźć sprawcę i odzyskać jak najwięcej skradzionych tokenów.
W części 3 tej serii postów na blogu zostaną omówione najważniejsze osiągnięcia, sposoby i działania na rzecz rozwoju i procedur bezpieczeństwa Fundacji. Mamy nadzieję, że pozytywne rezultaty tego incydentu (a mianowicie ulepszone i zaostrzone procedury bezpieczeństwa) nie tylko przyczynią się do poprawy rozwoju IOTA, ale także przyniosą korzyści szerszemu ekosystemowi DLT.
Przejdź do części 2 tej serii, aby uzyskać więcej informacji na temat ataku i planu migracji.
Powyższy tekst jest tłumaczeniem postu z języka angielskiego który oryginalnie ukazał pod tym adresem.