Haker ukradł 7,8 mln dolarów, ale miał pecha. Ubiegł go bot na Ethereum i zeżarł mu cały łup

Haker ukradł 7,8 mln dolarów, ale miał pecha. Ubiegł go bot na Ethereum i zeżarł mu cały łup

Wczoraj (15 września) aż 2900 tokenów rsETH powiązanych z kryptowalutą Ethereum o wartości prawie 8 milionów dolarów wyprowadzono z portfela Safe. Haker miał jednak pecha. Pieniądze przejął ostatecznie bot o aliasie „Yoink”, który bezczelnie ubiegł atakującego. Program wykorzystał wyznaczoną przez niego drogę do środków i zapewnił sobie pierwszeństwo wykonania transakcji. Oto kulisy jednego z najbardziej absurdalnego exploita na sieci Ethereum.

Haker wykradł miliony z portfela Safe, ubiegł go bot kanapkowy

Safe pozwala zarządzać kryptowalutami tak, aby wykonanie przelewu wymagało kilku podpisów (tzw. multisig). Przypomina to firmowe konto, z którego pieniądze można wysłać dopiero po uzyskaniu zgody kilku najwyżej postawionych dyrektorów.

Do portfela można jednak dołączyć dodatkowe programy, nazywane modułami. Służą one między innymi do automatycznego zarządzania inwestycjami. Po nadaniu odpowiednich uprawnień wykonują operacje bez zbierania nowych podpisów przy każdej transakcji, co z czasem robi się uciążliwe. To wygodne, ale oznacza że bezpieczeństwo środków jest tak bezpieczne jak bezpieczne są same moduły.

W tym przypadku zawiodło sprawdzenie kto może wydawać polecenia oprogramowaniu obsługującemu moduły. Osoba nieupoważniona z zewnątrz uzyskała dostęp do ścieżki, którą portfel traktował jako zaufaną. Nie trzeba było kraść klucza właściciela ani zdobywać jego podpisu. Problem przypominał sytuację, w której bank prawidłowo sprawdza podpisy zarządu, ale przyjmuje też dyspozycje od źle zabezpieczonego pełnomocnika.

Według analizy Bitquery środki wyprowadzono przez przygotowany przez napastnika rynek wymiany na Uniswap. Po jednej stronie znajdowały się wartościowe aktywa poszkodowanego, po drugiej token utworzony na potrzeby ataku. W rezultacie z portfela odpłynęły aktywa, a pozostało w nim bezwartościowe potwierdzenie udziału w całej operacji. Pełna analiza przebiegu ataku znajduje się pod tym linkiem.

Dlaczego bot był szybszy od hakera?

Transakcja wysłana do Ethereum nie musi zostać wykonana natychmiast. Zanim trafi do zatwierdzanego bloku, czyli paczki operacji zapisywanych w sieci, może jeszcze musieć poczekać w publicznej poczekalni zwanej mempoolem. Inne programy mogą zobaczyć jej treść jeszcze przed wykonaniem, o ile wcześniej nie zabezpieczono jej w odpowiedni sposób.

Boty kanapkowe, bo tak nazywa się ten typ oprogramowania, obserwują uważnie w poczekalnię, szukają opłacalnych operacji i sprawdzają, czy da się je wykorzystać na własną korzyść. Następnie próbują uzyskać wcześniejsze miejsce w bloku płacąc odpowiednią sumę pieniędzy walidatorom. Wysłanie transakcji wcześniej nie gwarantuje bowiem samo w sobie, że zostanie ona wykonana jako pierwsza.

Takie zachowanie nazywa się front-runningiem. Należy do mechanizmów MEV, od angielskiego maximal extractable value, czyli dodatkowej wartości możliwej do uzyskania dzięki wpływowi na dobór i kolejność transakcji. Więcej: wyjaśnienie jak działa MEV w dokumentacji Ethereum.

Bot „Yoink” zajął pierwsze miejsce w bloku. Z przejętych tokenów 17,63 rsETH wymieniono na 18,95 ETH, a 18,93 ETH przekazano podmiotowi budującemu blok. Była to płatność za korzystne umieszczenie transakcji, oszacowana przez analityków łańcucha bloków na około 46 tysięcy dolarów. Pozostałe 2882,37 rsETH wysłano na osobny adres.

Bot wygrał więc wyścig o cudze pieniądze, a złodziej okradł złodzieja.

Redakcja BitHub.pl poleca również: