Blog

Przetłumaczono automatycznie · Czytaj po angielsku

SSO Moduł 2 - Luki w zabezpieczeniach smart kontraktów: głębokie zanurzenie w ataki reentrancy

Smart kontrakty oferują przejrzystość, ale niosą ryzyko. Ten artykuł ujawnia luki takie jak reentrancy, ze stratą 150 mln USD DAO jako przykładem. Integer Overflow doprowadził do straty 900 mln USD BeautyChain. DAOMaker stracił 4 mln USD z powodu wad kontroli dostępu. Ataki FlashLoan spowodowały stratę 38 mln USD w Harves Finance.

Autor: Markos Mebellis

SSO Moduł 2 - Luki w zabezpieczeniach smart kontraktów: głębokie zanurzenie w ataki reentrancy
Na tej stronie

Smart kontrakty rewolucjonizują globalne branże dzięki swojej wydajności, przejrzystości i niezmiennym cechom. Jednak ich otwarta i zautomatyzowana konstrukcja naraża je również na ryzyko. Aby zmaksymalizować ich potencjał przy jednoczesnym minimalizowaniu zagrożeń, kluczowe jest zrozumienie ich luk i możliwych dróg ataku. Tworzenie i utrzymywanie tych kontraktów wymaga staranności i przestrzegania najlepszych praktyk. Ten artykuł zagłębia się w typowe luki, ilustrując je rzeczywistymi przypadkami, aby poprawić zrozumienie. Spójrzmy na poniższy artykuł, dzięki uprzejmości Salus Security.

Kluczowe luki:

**Reentrancy:** Tutaj atakujący wykorzystują lukę, ponownie wchodząc do funkcji przed zakończeniem kluczowych operacji lub aktualizacją wartości.

Reentrancy pojedynczej funkcji: Występuje, gdy kontrakt wchodzi w interakcję ze złośliwym kontraktem, pozwalając temu drugiemu na ponowne wejście do funkcji. Na przykład złośliwe kontrakty mogą wielokrotnie wchodzić do funkcji 'withdrawBalance', wyprowadzając więcej etheru przed aktualizacją sald.

Znane ataki:

  • The DAO (2016): Po zebraniu 150 milionów dolarów został zhakowany z powodu luk w kodzie. Doprowadziło to do podziału sieci Ethereum.
  • PolyDex (2021): Stracił 500 tys. dolarów w wyniku ataku reentrancy na inteligentny kontrakt PLX Locker.
  • Bacon Protocol (2022): Poniósł stratę 1 mln dolarów z powodu błędu reentrancy w funkcji lend().
  • Lendf.Me (2020): Stracił około 24,7 mln USD w wielu kryptowalutach.

**Reentranczność między funkcjami:** Wynika ze współdzielonych stanów między różnymi funkcjami i słabej ochrony przed ponownym wejściem. Powyższy przykład z 'balances' pokazuje, że mimo ochrony w 'withdrawAll' atakujący nadal mogą wykorzystać funkcję 'transfer'.

Słynne incydenty:

  • DFX Finance (2022): Stracił ponad 7 mln USD w wyniku ataku wykorzystującego funkcję bez ochrony przed reentrancznością.
  • Hundred Finance (2022): Stracił około 6,5 mln USD po ataku reentranczności, który wykorzystał funkcję borrowFresh.
  • Fei Protocol (2022): Utracono około 80 mln USD w wyniku ataku wykorzystującego lukę Reentrancy.

**Cross-Contract Reentrancy:** Wynika ze współdzielonych stanów między różnymi kontraktami i błędnych sekwencji modyfikacji zmiennych. Nawet jeśli funkcje mają zabezpieczenia, inne funkcje, takie jak „burnAccount”, nadal mogą zostać wykorzystane.

Znaczące ataki:

  • Rari Capital (2021): Utracono około 10 mln USD (~2600 ETH) w ciągu niespełna godziny.
  • ValueDefi (2021): Utracono 5345,314 WBNB z powodu nieprawidłowych obliczeń udziałów, które opierały się na danych zewnętrznych.

Read-Only Reentrancy:

Read-only reentrancy wykorzystuje funkcję, która choć nie zmienia stanu kontraktu, może nadal generować błędne wyniki, gdy stan nie jest spójny.

Warte uwagi ataki:

  • QuickSwap (2022): Exploitatorzy wykorzystali pożyczkę błyskawiczną do manipulacji ceną spot aktywa, wyłudzając 138 ETH i 700 tokenów MATIC. Było to możliwe z powodu luki w oracle Curve LP.
  • dForce (2023): Błąd read-only reentrancy znajdował się w kodzie uzyskującym dostęp do oracle cen na łańcuchach Arbitrum i Optimism z Curve Finance.
  • Sentimente (2023): Atak wykorzystujący lukę read-only reentrancy doprowadził do kradzieży 1 miliona dolarów. Na szczęście 90% zwrócił sprawca.
  • Sturdy (2023): utracono około 442 ETH z powodu problemu read-only reentrancy w Balancerze, gdzie cena B-stETH-STABLE została zmanipulowana.

Zapobieganie podatnościom reentrancy:

  1. Zawsze stosuj wzorzec check-effect-interaction.
  2. Stosuj ochronę przed re-entry dla wszystkich wrażliwych operacji.
  3. Obsługuj każde wywołanie zewnętrzne starannie.

Przepełnienie liczb całkowitych:

Gdy obliczenia przekraczają limity, następuje przepełnienie, często prowadzące do bardzo małych lub ogromnych wartości.

Przykładowe ataki:

  • BeautyChain (2018): Atakujący zdobyli 10^58 BEC poprzez przepełnienie liczb całkowitych, pozbywając się oszałamiających 900 milionów dolarów.
  • Poolz (2023): Skutkowało stratą około 665 000 dolarów w sieciach Ethereum, Binance i Polygon.

Środki zaradcze przeciw przepełnieniu liczb całkowitych:

  1. Stosuj bezpieczne metody obliczeń, takie jak biblioteka safeMath.
  2. Priorytetowo traktuj sprawdzanie zakresu, aby upewnić się, że wyniki pozostają w dozwolonym przedziale.
  3. Przyjmij wersję kompilatora Solidity 0.8.0 lub nowszą w celu wbudowanego wykrywania przepełnienia.

Kontrola dostępu:
Luki w kontroli dostępu wynikają z braku rygorystycznych ograniczeń dostępu do funkcji obsługujących kluczowe operacje.

  • Znaczące ataki:
  • DAOMaker (2021): Zgarnięto aż ~4 mln USD, gdy init funkcja pozostała podatna.
  • GymNetwork (2022): Exploitatorzy wykorzystali lukę w uwierzytelnianiu w depositFromOtherContract(), umożliwiając nielegalne zwiększenie salda bez żadnej rzeczywistej płatności. Strata? Około 2,475.91 WBNB.
  • Tempdao (2023): Niestaranne podejście do kontroli dostępu w funkcji migrateStake doprowadziło do straty przekraczającej 2,34 mln USD.

Luka w kontroli dostępu

  • Opis: Luki wynikające z nieodpowiednich mechanizmów ograniczających, które regulują dostęp i uprawnienia do określonych operacji w systemie.

Środki zapobiegawcze:

  1. Ścisła weryfikacja uprawnień: Zawsze egzekwuj ścisłe protokoły uprawnień dla funkcji, zwłaszcza tych, które obsługują wrażliwe operacje.
  2. Mechanizm wielopodpisowy: W przypadku zadań wymagających wspólnego podejmowania decyzji stosuj protokoły wielopodpisowe, które wymagają wielu zatwierdzeń przed wykonaniem wrażliwych operacji.

Typowe wektory ataków

  • Opis: Różne metody lub kanały, za pomocą których atakujący wykorzystują luki w systemie, głównie w smart kontraktach.

Znane przykłady:

  • Ataki Flash Loan: Wykorzystuje funkcję natychmiastowego pożyczania w systemach zdecentralizowanych finansów do przeprowadzania złośliwych działań.
  • Front-Running: Atakujący zdobywają wiedzę o oczekującej transakcji innego użytkownika i działają na jej podstawie, oferując wyższą opłatę za gas.

Atak Flash Loan

  • Opis: Choć z natury nie jest atakiem, FlashLoan to funkcja DeFi, która pozwala użytkownikom natychmiast pożyczać duże kwoty bez zabezpieczenia. Była wykorzystywana z powodu błędów logicznych w interakcjach i relacjach między kontraktami.

Znaczące ataki:

  1. Harves Finance (2020.10.26): Skutkowało stratą 38 milionów dolarów.
  2. InverseFinance (2022.6.16): Doprowadziło do straty 53,2445 WBTC i 99 976,29 USDT.
  3. NewFreeDAO (2022.9.8): Wyprowadzono 4481 WBNB, co odpowiada około 1,25 mln USD.
  4. Lodestar (2022.12.11): Wykorzystano poprzez manipulację ceną oracle.
  5. 0vix (2023.4.28): Spowodowało stratę 2 mln USD w łańcuchu Polygon.

Zalecenia zapobiegawcze:

  1. Rozpoznawaj cechy Flashloan podczas tworzenia projektu.
  2. Aby dokładnie określić cenę, stosuj średnią ważoną czasowo lub wiele oracle.

Front-running

  • Opis: Atakujący zdobywa wiedzę o transakcji innego użytkownika z memPool i wykorzystuje ją, oferując wyższą opłatę za gas.

Znane ataki:

  1. Sushi Badger Digg (2021.1.25): Skutkowało stratą 81.68 ETH.
  2. Pula Sushiswap Ape-ETH (2022.5.17): Atakujący zyskał około 0.3 ETH.
  3. Uniswap (2023.4.2): Spowodował stratę około 25 milionów dolarów w wyniku ataku typu sandwich.

Zalecenia prewencyjne:

  1. Stosuj ochronę przed poślizgiem podczas handlu.
  2. Wykonuj transakcje poza godzinami szczytu, zwłaszcza na zmiennych rynkach.
  3. Używaj FlashBot rpc od 1inch, aby wysyłać transakcje bezpośrednio do górników, omijając w ten sposób memPool.

Podsumowanie

Gratulacje! Ukończyłeś Moduł 2 - Luki w zabezpieczeniach inteligentnych kontraktów: Dogłębna analiza ataków reentrancyjnych i typowych exploitów

Podsumujmy Twoją wiedzę:

Podatności na reentrancy - Atakujący wykorzystują luki, ponownie wchodząc do funkcji, zanim te w pełni się zakończą.

  • Reentrancy w pojedynczej funkcji: Złośliwy kontrakt ponownie wchodzi do funkcji w innym kontrakcie.
  • Reentrancy między funkcjami: Współdzielone stany między różnymi funkcjami są wykorzystywane z powodu słabej ochrony przed ponownym wejściem.
  • Reentrancy między kontraktami: Wykorzystuje współdzielone stany między różnymi kontraktami.
  • Reentrancy tylko do odczytu: Wykorzystuje funkcję generującą błędne wyniki, gdy stan nie jest spójny.

Przepełnienie liczb całkowitych - Obliczenia przekraczające ustalone limity, skutkujące skrajnymi wartościami.

Podatności kontroli dostępu - Wynikają z braku ścisłych ograniczeń dostępu do kluczowych funkcji.

Typowe wektory ataków - Metody, za pomocą których atakujący wykorzystują luki w systemie.

**Atak FlashLoan** – funkcja DeFi umożliwiająca natychmiastowe duże pożyczki bez zabezpieczenia, wykorzystywana z powodu błędów logicznych.

Atak front-running- Atakujący zdobywają wiedzę o oczekujących transakcjach i czerpią korzyści, oferując wyższe opłaty za gas.

Ten artykuł został przygotowany przez:

Podsumowanie — ilustracja