fbpx

72. Atak Ponownego Wejścia (Reentrancy Attack) na inteligentnych kontraktach: zagrożenie dla bezpieczeństwa blockchain!

Blockchain to rewolucyjna technologia, która wprowadziła wiele innowacji w dziedzinie finansów i nie tylko. Jednak podobnie jak każda technologia, jest podatna na różne zagrożenia, w tym na tzw. Atak Ponownego Wejścia (Reentrancy Attack) na smart contractach. Podczas dzisiejszej lekcji zajmiemy się dokładnie tym, czym jest atak ponownego wejścia, jak działa i jak można się przed nim bronić.

Czym jest Reentrancy Attack?

Jak sama nazwa wskazuje, reentrancy ro rodzaj ataku, który może wystąpić w inteligentnych kontraktach. Z naszych poprzednich lekcji wiesz, że smart kontrakty pozwalają na wykonanie niezaufanego kodu zewnętrznego, w ramach wykonania danego kontraktu. Taka sytuacja może mieć miejsce wtedy, gdy sam inteligentny kontrakt wywoła kontrakt zewnętrzny, a ten zewnętrzny kontrakt w następstwie wywoła oryginalny kontrakt, powodując działanie niekończącej się pętli.

Atak reentrancy wykorzystuje takie luki w smart kontraktach i pozwala atakującemu na wielokrotne wywołanie danej funkcji w inteligentnych kontraktach. Powoduje to w efekcie niekończącą się pętlę działania i kradzież danych środków.

Przykład takiego ataku? Proszę bardzo. Może być nim umowa w inteligentnych kontraktach, która pozwala użytkownikom na wpłacenie środków, a następnie ich wypłacenie, tylko w późniejszym terminie. W tym przypadku haker może wywołać funkcję wypłaty wiele razy z rzędu, jeszcze na długo przed wywołaniem funkcji wypłaty. W ten sposób skutecznie skradnie środki z danej umowy.

Drugi przykład, aby jeszcze lepiej zrozumieć, na czym polega atak ponownego wejścia, oprzemy o kryptowaluty. Wyobraźmy sobie smart kontrakt, który pozwala użytkownikom przesyłać sobie wzajemnie kryptowaluty. Kontrakt ten może zawierać funkcję do przekazywania środków innym użytkownikom. Jednak problem pojawia się, gdy funkcja przekazywania środków nie jest odpowiednio zabezpieczona.

Atakujący, korzystając z tej luki, może wysłać transakcję do kontraktu, która wywołuje funkcję przekazywania środków, a następnie natychmiast wywoła tę samą funkcję 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 pozwala atakującemu wielokrotnie wypłacić środki z kontraktu.

Jak działa atak ponownego wejścia?

W praktyce Reentrancy Attack działa następująco:

  1. Haker znajduje inteligentny kontrakt, który odpowiada za wpłatę i wypłatę środków w późniejszym czasie.
  2. Atakujący tworzy złośliwy smart kontrakt, który zapętli i wywoła funkcję depozytową właściwego smart kontraktu.
  3. Następnie haker wywoła funkcję „withdraw” podanego kontraktu i wypłaci zdeponowane środki.
  4. Ponieważ dana funkcja depozytowa danego kontraktu nie jest odpowiednio chroniona przed tego typu atakiem, haker wielokrotnie wywoła funkcję depozytową przed wywołaniem funkcji wypłaty. W efekcie skutecznie skradnie środki ze smart kontraktu.
  5. Atakujący będzie powtarzał cały proces do momentu, aż nie ukradnie tyle środków, ile chce.

Rodzaje Reentrancy Attack

Jeśli myślisz, że istnieje tylko jeden typ ataku ponownego wejścia, to jesteś w błędzie. W świecie kryptowalut istnieje ich kilka rodzajów. Oto one:

  1. Frontrunning Attack. To przykład ataku, w którym haker śledzi blockchain pod kątem dokonywanych transakcji, które wywołują podatny na atak kontrakt. Kiedy atakujący wyłapie takową lukę, szybko przesyła transakcję, która wywoła ten sam kontrakt, zanim ta pierwotna zostanie przetworzona.
  2. Reentrancy Attack w zależności od znacznika czasu. To typ ataku, w którym haker manipuluje czasem bloku. W efekcie powoduje wykonanie podatnego na atak kontraktu w sposób dla niego korzystny (na przykład kradzież środków).
  3. Wywołanie rekurencyjne. Metoda, w której atakujący wywołuje podatny smart kontrakt wiele razy z rzędu, Powoduje tym samym, że kontrakt wykona niezamierzoną wcześniej funkcję wiele razy z rzędu.
  4. Atak Cross-Function Call. W tym przypadku haker wywołuje wiele funkcji w podatnym na atak kontrakcie. Wszystko oczywiście w określonej kolejności, aby w efekcie wywołać niezamierzone wcześniej działanie, które przyniesie mu korzyść.

Jak chronić inteligentne kontrakty przed tego typu atakami?

Aby uchronić się przed tego typu atakami, najlepiej używać blokady muteksowej lub funkcji wzajemnego wykluczenia. Blokada zapobiega wywołaniom tej samej funkcji wiele razy w tym samym czasie.

Możesz też użyć warunku ochronnego. Jeśli taki warunek zostanie ustawiony na Twoim smart kontrakcie, nie wykona on żadnego, zewnętrznego wywołania i zapobiegnie atakowi reentrancji.

Kolejnym sposobem, aby zapobiec atakom ponownego wejścia, jest sprawdzanie głębokości stosu wywołań. Tym sposobem upewnisz się, że kontrakt nie jest w żaden sposób wywoływany rekursywnie. Jeśli zaś kontrakt przekroczy określony próg głębokości, smart kontrakt przestanie być wykonywany.

Do ochrony inteligentnych kontraktów przed Reentrancy Attack możesz wykorzystać też instrukcję „require”. Dzięki niej sprawdzisz stan danego kontraktu przez zezwoleniem na wykonanie danej funkcji.

Dobrym sposobem na ochronę jest również ciągłe monitorowanie inteligentnych kontraktów i ich aktualizacja.

Ważne jednak, abyś pamiętał, że to tylko niektóre ze sposobów ochrony. Aby w pełni chronić się przed atakami ponownego wejścia, smart kontrakty muszą być audytowane przez ekspertów z branży. Do tego szeroko testowane, co jeszcze bardziej skaluje ich bezpieczeństwo.

Przykłady ataków ponownego wejścia na inteligentne kontrakty

  1. Atak na protokół pożyczkowy Lendf.me. Zdecentralizowana platforma była zbudowana na blockchainie Ethereum. Atak miał miejsce w 2019 roku, kiedy to atakujący odkrył lukę w inteligentnym kontrakcie. Luka pozwoliła mu wielokrotnie pożyczać i spłacać tę samą pożyczkę. Atakujący jednocześnie manipulował ceną aktywów bazowych i tym zabiegiem zwiększał kwoty swoich pożyczek. W efekcie ukradł aktywa kryptowalutowe o wartości ponad 350 000 USD.
  2. Siren Protocol. To kolejna platforma pożyczkowa, zbudowana na blockchainie Ethereum. Atakujący zrobił dokładnie to samo, co w przypadku Lendf.me. Efekt? Wielokrotna pożyczka i spłata tej samej pożyczki i kradzież kryptowalut o wartości ponad 30 milionów USD.
  3. BurgerSwap. To zdecentralizowana giełda, zbudowana na Binance Smart Chain. Atak miał miejsce w 2021 roku, gdzie atakujący wykorzystał lukę w inteligentnych kontraktach i wielokrotnie pożyczał i spłacał tę samą pożyczkę. Skradł także z platformy aktywa o wartości ponad 2 milionów dolarów.
  4. DAO Hack. Był to atak na zdecentralizowany fundusz inwestycyjny, zbudowany na blockchainie Ethereum. Haker wykrył lukę w kontrakcie DAO i wielokrotnie wywoływał funkcję „split”. Nieświadomi inwestorzy wycofywali środki z DAO, zanim smart kontrakt aktualizował wewnętrzne salda. Przy wykorzystaniu tej luki, haker wielokrotnie wywoływał funkcję podziału i opróżnił organizację z Ethero o wartości około 50 milionów USD.
  5. Cream Finance. Platforma DeFi, która umożliwia użytkownikom pożyczanie aktywów. Atak na inteligentny kontrakt miał miejsce w 2020 roku, gdzie atakujący wielokrotnie pożyczał i spłacał tę samą pożyczkę. Jednocześnie, jak w pozostałych przypadkach, manipulował cenami aktywów bazowych. Zabieg pozwolił mu na kradzież środków o wartości ponad 30 milionów USD.

Podsumowanie

Atak Ponownego Wejścia to poważne zagrożenie dla smart kontraktów na blockchainach. Zrozumienie, jak działa ten rodzaj ataku, oraz podjęcie odpowiednich środków ostrożności i praktyk programistycznych jest kluczowe dla zabezpieczenia smart kontraktów przed potencjalnymi atakami. Ochrona przed atakami ponownego wejścia to krytyczny element budowania bezpiecznego i godnego zaufania ekosystemu blockchain.

  • 3. Poziom zaawansowany

  • Kurs Home Rozwiń wszystko
    4 z 4
  • Zapisz się do newslettera!

    Otrzymuj co tydzień najnowsze informacje o kryptowalutach na swój e-mail.