72. Atak Ponownego Wejścia (Reentrancy Attack) na inteligentnych kontraktach: zagrożenie dla bezpieczeństwa blockchain!
Blockchain to innowacyjna technologia, która zrewolucjonizowała wiele obszarów, nie tylko finansów. Jednak, podobnie jak w przypadku każdej technologii, jest ona narażona na różne zagrożenia, w tym na ataki typu “Reentrancy Attack” na smart kontraktach. W dzisiejszej lekcji szczegółowo omówimy, czym dokładnie jest ten rodzaj ataku, jak działa oraz jak można się przed nim bronić.
Czym jest Reentrancy Attack?
Atak typu Reentrancy, jak sama nazwa wskazuje, jest rodzajem zagrożenia, które może wystąpić w inteligentnych kontraktach. Z naszych poprzednich lekcji wiesz już, że smart kontrakty umożliwiają wykonanie niezaufanego kodu zewnętrznego w ramach ich działania. Taka sytuacja może nastąpić, gdy inteligentny kontrakt wywołuje zewnętrzny kontrakt, a ten z kolei powraca do oryginalnego kontraktu, tworząc pętlę działania.
Atak Reentrancy wykorzystuje te luki w smart kontraktach, umożliwiając atakującemu wielokrotne wywołanie danej funkcji w kontrakcie. Efektem tego jest niekończąca się pętla działania oraz możliwość kradzieży środków.
Przykładem takiego ataku może być umowa w inteligentnych kontraktach, która pozwala użytkownikom na wpłatę środków, a następnie ich wypłatę w późniejszym terminie. Haker może wywołać funkcję wypłaty wielokrotnie, jeszcze przed zakończeniem pierwszego wywołania funkcji, co skutkuje skuteczną kradzieżą środków z umowy.
Inny przykład, który pomaga zrozumieć atak Reentrancy, dotyczy smart kontraktu służącego do przesyłania kryptowalut między użytkownikami. Kontrakt taki może zawierać funkcję przekazywania środków. Jednakże, gdy funkcja ta nie jest odpowiednio zabezpieczona, atakujący może wysłać transakcję do kontraktu, która wywołuje funkcję przekazywania środków, a następnie natychmiast ponownie ją wywołać przed zakończeniem pierwszego wywołania. W rezultacie kontrakt nie ma czasu na zaktualizowanie stanu kont użytkowników między dwoma wywołaniami funkcji, co umożliwia atakującemu wielokrotne wypłacanie środków z kontraktu.
Jak działa atak ponownego wejścia?
W praktyce atak typu reentrancy działa w następujący sposób:
- Haker identyfikuje inteligentny kontrakt odpowiedzialny za przyjmowanie i wypłacanie środków w przyszłości.
- Atakujący tworzy złośliwy smart kontrakt, który wprowadza pętlę i wywołuje funkcję depozytową we właściwym smart kontrakcie.
- Następnie haker wywołuje funkcję “withdraw” w danym kontrakcie, wypłacając zdeponowane środki.
- Ponieważ funkcja depozytowa w danym kontrakcie nie jest wystarczająco zabezpieczona przed tym typem ataku, haker wielokrotnie wywołuje funkcję depozytową przed wywołaniem funkcji wypłaty. W rezultacie skutecznie kradnie środki ze smart kontraktu.
Atakujący powtarza ten proces, aż ukradnie żądaną ilość środków.
Rodzaje Reentrancy Attack
Jeśli myślisz, że istnieje tylko jeden rodzaj ataku Reentrancy, to jesteś w błędzie. W świecie kryptowalut istnieje kilka różnych wariantów tego typu ataków. Oto one:
- Frontrunning Attack: Ten rodzaj ataku polega na śledzeniu blockchaina w poszukiwaniu transakcji, które wywołują podatne na atak kontrakty. Gdy haker wykryje taką lukę, szybko przesyła własną transakcję, która wywoła ten sam kontrakt, zanim pierwotna zostanie przetworzona.
- Reentrancy Attack z manipulacją znacznikiem czasu: Ten typ ataku polega na manipulacji czasem bloku, co powoduje wykonanie podatnego na atak kontraktu w sposób korzystny dla hakerów, na przykład umożliwiający kradzież środków.
- Wywołanie rekurencyjne: To metoda, w której haker wielokrotnie wywołuje podatny smart kontrakt, co powoduje niezamierzone wielokrotne wykonanie określonej funkcji.
- Atak Cross-Function Call: W tym przypadku haker wywołuje wiele funkcji w podatnym na atak kontrakcie w określonej kolejności, aby doprowadzić do niezamierzonego działania, które przyniesie mu korzyść.
Jak chronić inteligentne kontrakty przed tego typu atakami?
Aby zabezpieczyć się przed tego typu atakami, warto zastosować różne środki bezpieczeństwa w inteligentnych kontraktach. Oto kilka z nich:
- Użycie blokady muteksowej lub funkcji wzajemnego wykluczenia: Blokada uniemożliwia wywoływanie tej samej funkcji wielokrotnie w tym samym czasie, co skutecznie zapobiega atakom ponownego wejścia.
- Wykorzystanie warunku ochronnego: Ustawienie warunku ochronnego na smart kontrakcie uniemożliwia wykonywanie jakichkolwiek zewnętrznych wywołań, co również zapobiega atakom reentrancy.
- Sprawdzanie głębokości stosu wywołań: Monitorowanie głębokości stosu wywołań zapewnia, że kontrakt nie jest rekursywnie wywoływany. Jeśli kontrakt przekroczy określoną głębokość, zostanie zaprzestane jego wykonania.
- Użycie instrukcji „require”: Instrukcja „require” pozwala sprawdzić stan kontraktu przed zezwoleniem na wykonanie danej funkcji, co może dodatkowo zabezpieczyć przed atakami.
- Ciągłe monitorowanie i aktualizacja: Regularne monitorowanie inteligentnych kontraktów oraz ich aktualizacja pozwala na szybkie wykrywanie i eliminację potencjalnych luk w zabezpieczeniach.
Warto jednak pamiętać, że powyższe środki to tylko niektóre z dostępnych sposobów ochrony. Aby zapewnić pełne bezpieczeństwo przed atakami ponownego wejścia, inteligentne kontrakty powinny być audytowane przez specjalistów z branży oraz poddawane szerokim testom, co dodatkowo zwiększa ich bezpieczeństwo.
Przykłady ataków ponownego wejścia na inteligentne kontrakty
Atak na protokół pożyczkowy Lendf.me miał miejsce w 2019 roku na zdecentralizowanej platformie zbudowanej na blockchainie Ethereum. Atakujący wykorzystał lukę w inteligentnym kontrakcie, która umożliwiła mu wielokrotne pożyczanie i spłacanie tej samej pożyczki. Manipulując jednocześnie cenami aktywów bazowych, zwiększał kwoty swoich pożyczek, co doprowadziło do kradzieży aktywów kryptowalutowych o wartości ponad 350 000 USD.
Podobny atak miał miejsce na platformie Siren Protocol, również zbudowanej na blockchainie Ethereum. Atakujący wykorzystał tę samą metodę, co w przypadku Lendf.me, co skutkowało wielokrotną pożyczką i spłatą tej samej pożyczki, prowadząc do kradzieży kryptowalut o wartości ponad 30 milionów USD.
W 2021 roku doszło do ataku na platformę BurgerSwap, zdecentralizowaną giełdę zbudowaną na Binance Smart Chain. Atakujący ponownie wykorzystał lukę w inteligentnych kontraktach, wielokrotnie pożyczając i spłacając tę samą pożyczkę oraz kradnąc aktywa o wartości ponad 2 milionów dolarów.
W innym przypadku, atak na zdecentralizowany fundusz inwestycyjny DAO, również zbudowany na blockchainie Ethereum, miał miejsce, gdy haker wykrył lukę w kontrakcie DAO. Poprzez wielokrotne wywoływanie funkcji “split”, nieświadomi inwestorzy wycofywali środki z DAO, zanim smart kontrakt aktualizował wewnętrzne saldo, co doprowadziło do kradzieży Etheru o wartości około 50 milionów USD.
W 2020 roku platforma DeFi, Cream Finance, padła ofiarą ataku na inteligentny kontrakt, gdzie atakujący wielokrotnie pożyczał i spłacał tę samą pożyczkę oraz manipulował cenami aktywów bazowych. To pozwoliło mu na kradzież środków o wartości ponad 30 milionów USD.
Podsumowanie
Atak Ponownego Wejścia stanowi znaczące zagrożenie dla smart kontraktów działających na blockchainach. Zrozumienie sposobu działania tego rodzaju ataku oraz wdrożenie odpowiednich środków ostrożności i praktyk programistycznych są kluczowe dla zapewnienia bezpieczeństwa smart kontraktów przed potencjalnymi atakami. Ochrona przed atakami Ponownego Wejścia jest fundamentalnym elementem budowania bezpiecznego i zaufanego ekosystemu blockchain.