![](/img/bg-single.png)
Opis detektora proxy
![](https://lotusmarket.io/storage/files/proxy-detector-description/cover.png)
Kontynuujemy serię artykułów poświęconych opisywaniu oszukańczych schematów w inteligentnych kontraktach. Dzisiaj porozmawiamy o inteligentnych kontraktach z funkcją kontroli proxy (Proxy).
Inteligentne kontrakty proxy zyskały popularność w przestrzeni blockchain ze względu na ich modernizację i elastyczność. Jednak takie kontrakty niosą ze sobą również duże niebezpieczeństwo, zwłaszcza gdy są wykorzystywane przez złośliwych użytkowników. Oszuści często wykorzystują zwodnicze schematy w inteligentnych kontraktach proxy, aby oszukać użytkowników. Aby zidentyfikować takie zagrożenia, musisz zrozumieć możliwe ryzyko i posiadać wiedzę techniczną.
Przyjrzyjrzyjmy się bliżej opisowi potencjalnych niebezpieczeństw, typowym schematom oszustw i sposobom identyfikacji takich zagrożeń w inteligentnych kontraktach proxy.
Niebezpieczeństwa związane z inteligentnymi kontraktami proxy:
-
Nieautoryzowana aktualizacja:
. Kontrakty proxy pozwalają właścicielowi na aktualizację kontraktu bazowego. Jeśli jednak mechanizm ten nie zostanie zaimplementowany w bezpieczny sposób, może to prowadzić do nieautoryzowanych aktualizacji, umożliwiając atakującym wstrzyknięcie złośliwego kodu do kontraktu. -
Niesprawdzone wywołania zewnętrzne:
Nieuczciwi programiści mogą używać zewnętrznych wywołań do niezaufanych kontraktów bez odpowiedniej weryfikacji. Może to prowadzić do luk w zabezpieczeniach, w tym ataków reentrancy, w których złośliwe kontrakty wielokrotnie wywołują kontrakt proxy, co może wyczerpać jego fundusze. -
Brak przejrzystości:
Kod źródłowy kontraktu menedżerskiego zwykle nie jest weryfikowany. -
Fałszywe projekty:
Oszuści tworzą fałszywe projekty. Oszuści tworzą fałszywe projekty, które obiecują atrakcyjne cechy, takie jak wysokie zyski lub unikalną funkcjonalność. Mogą oni wykorzystywać umowy proxy, aby stworzyć pozory legalności, ukrywając jednocześnie złośliwe intencje. -
Schematy Ponzi:
Oszuści tworzą schematy Ponzi oparte na kontraktach proxy, wabiąc użytkowników obietnicami wysokich zysków. Takie schematy mogą mieć aktualizowalne komponenty, aby utrzymać iluzję wiarygodności. -
Sklonowane kontrakty:
Oszuści klonują legalne projekty. Oszuści klonują legalne projekty i wprowadzają luki lub zmiany do sklonowanej umowy. Niczego niepodejrzewający użytkownicy mogą wchodzić w interakcje z takimi klonami, myląc je z oryginałem.
Jak można niezależnie określić, czy takie zagrożenia są obecne w inteligentnych kontraktach?
Warto zauważyć, że jeśli docelowy kod inteligentnego kontraktu zawiera odniesienie do zewnętrznego kontraktu (Proxy), to w prawie 100% przypadków ten kontrakt Proxy będzie miał ukryty kod źródłowy. W takim przypadku zewnętrzny kontrakt kontrolny może wykonywać absolutnie dowolne działania z kontraktem docelowym (na przykład: zmiana sald użytkowników, włączanie i wyłączanie handlu, uruchamianie emisji itp.).
W związku z tym warto zrozumieć, że praca z inteligentnym kontraktem Proxy jest grą w ruletkę w najprawdziwszym tego słowa znaczeniu (kasyno zawsze wygrywa).
Znalezienie inwokacji Proxy w inteligentnym kontrakcie jest dość łatwe. I, jak powiedzieliśmy wcześniej, implementacja złośliwych funkcji znajduje się w kontrakcie kontrolnym - a docelowy inteligentny kontrakt wydaje się "biały i puszysty" (tj. jest generalnie wolny od jakichkolwiek metod, które mogłyby wzbudzić podejrzenia).
Jeśli chcesz samodzielnie ustalić, czy funkcje proxy są obecne w inteligentnych kontraktach, pomocne będą następujące wskazówki.
- Przeprowadź audyt kontraktu: Przed rozpoczęciem pracy z jakimkolwiek inteligentnym kontraktem, przejrzyj jego kod źródłowy i funkcjonalność. Zwróć uwagę na istnienie dobrze udokumentowanych procesów aktualizacji, mechanizmów kontroli dostępu i przejrzystości projektu.
- Upewnij się, że inteligentny kontrakt został poddany zewnętrznemu audytowi bezpieczeństwa przez renomowane firmy. Raport z audytu może zapewnić wgląd w potencjalne luki w zabezpieczeniach.
- Zbadaj zespół opracowujący projekt. Przejrzyste i godne zaufania zespoły są mniej skłonne do angażowania się w oszustwa.
- Konsultuj się ze społecznością projektu i uzyskaj opinie od innych użytkowników, którzy mają doświadczenie z kontraktem. Oszuści często unikają publicznej dyskusji.
- Podczas pracy z kontraktami korzystaj ze znanych programów i narzędzi portfelowych, które zapewniają dodatkowe funkcje bezpieczeństwa i ochrony transakcji.
- Bądź ostrożny w kontaktach z nowymi i niesprawdzonymi kontraktami, zwłaszcza tymi, które obiecują wysokie zyski lub wykazują nietypowe zachowanie.
- Jeśli coś w umowie wydaje się zbyt piękne, aby mogło być prawdziwe lub jest podejrzane, zaufaj swojej intuicji i unikaj tego.
- Bądź na bieżąco z najnowszymi osiągnięciami naszej społeczności (kanał Telegram) i najlepszymi praktykami w zakresie wykrywania oszustw (nasz blog i kanał YouTube).
Skaner bezpieczeństwa Lotus Market znajduje wszystkie popularne (w tym ukryte) funkcje kontroli zewnętrznej (Proxy). Skorzystaj z naszej subskrypcji premium i chroń swoje fundusze przed zagrożeniami.
Poniżej znajdują się przykłady typowych czerwonych flag i podejrzanych wzorców, których należy szukać podczas badania inteligentnych kontraktów w celu zidentyfikowania potencjalnie złośliwej funkcjonalności. Ważne jest, aby zrozumieć te znaki, aby chronić siebie i innych przed potencjalnymi oszustwami. Przyjrzyjmy się niektórym wariantom wzorców kodu i wskazówkom, które pomogą zidentyfikować podejrzaną funkcjonalność w inteligentnym kontrakcie:
Główną zasadą jest to, że jeśli kod kontraktu zawiera wywołanie funkcji Call, CallCode lub DelegateCall, oznacza to, że kontrakt wywołuje zewnętrzny kod i przekazuje mu kontrolę nad swoimi danymi.
Przyjrzyjrzyjmy się głównym przykładom użycia kontraktów Proxy.
1. Niezainicjalizowane zmienne przechowywania.
Jedną z najczęstszych luk w kontraktach proxy jest niewłaściwe użycie zmiennych przechowywania. Gdy umowa proxy jest używana z DelegateCall do wywoływania funkcji w umowie implementacyjnej, zmienne przechowywania umowy proxy są modyfikowane. Jeśli jednak magazyn kontraktu proxy ma niezainicjalizowane wartości lub wartości domyślne, może to prowadzić do nieoczekiwanego zachowania.
contract Implementation {
address public owner;
constructor() {
owner = msg.sender;
}
}
W tym przykładzie, jeśli zmienna owner w kontrakcie proxy jest niezainicjalizowana, wywołanie owner() na kontrakcie proxy zwróci zmienną owner kontraktu implementacyjnego, co może nie być tym, czego oczekuje użytkownik.
2. Niezweryfikowane wywołania zewnętrzne.
Nieuczciwe kontrakty mogą wykorzystywać zewnętrzne wywołania do niezaufanych kontraktów bez odpowiednich kontroli. Jeśli umowa proxy bezpośrednio lub pośrednio wywołuje złośliwą umowę za pośrednictwem DelegateCall, złośliwa umowa może wykonywać dowolne działania, w tym ataki reentrancy, bez odpowiednich zabezpieczeń.
contract Proxy {
function execute(address target, bytes memory data) external {
target.delegatecall(data);
}
}
Jeśli użytkownik wyśle arbitralną umowę i złośliwe dane jako adres docelowy, może to spowodować wykonanie nieautoryzowanych działań w imieniu użytkownika.
3. Niewłaściwa kontrola dostępu.
Nieuczciwe umowy mogą mieć nieodpowiednią kontrolę dostępu, umożliwiając nieautoryzowanym użytkownikom wykonywanie funkcji administracyjnych. W przypadku korzystania z umowy proxy należy dokładnie kontrolować, kto ma uprawnienia do aktualizacji umowy wdrożeniowej. Niezastosowanie się do tego wymogu może skutkować nieautoryzowanymi zmianami w zachowaniu kontraktu.
contract Proxy {
address public owner;
address public implementation;
function upgrade(address newImplementation) external {
require(msg.sender == owner, "Only the owner can upgrade.");
implementation = newImplementation;
}
}
W tym przykładzie, jeśli adres właściciela nie jest odpowiednio kontrolowany lub nie ma kontroli nad tym, kto może wywołać funkcję aktualizacji, nieautoryzowane strony mogą zmienić implementację na złośliwy kontrakt.
4. Ryzyko związane z wersjonowaniem i zarządzaniem.
Kontrakty proxy często wykorzystują mechanizmy wersjonowania i zarządzania do aktualizacji logiki kontraktu. Jeśli mechanizmy te nie zostaną zaimplementowane w bezpieczny sposób, mogą stać się podatne na ataki lub manipulacje ze strony złośliwych stron.
contract Proxy {
address public owner;
address public implementation;
address public pendingImplementation;
function upgrade(address newImplementation) external {
require(msg.sender == owner, "Only the owner can upgrade.");
pendingImplementation = newImplementation;
}
function claimUpgrade() external {
require(msg.sender == owner, "Only the owner can claim the upgrade.");
implementation = pendingImplementation;
}
}
W tym przypadku atakujący może zaoferować nową "czystą" umowę, a następnie natychmiast dokonać aktualizacji, skutecznie uruchamiając swój złośliwy kod.
Na co powinienem zwrócić uwagę podczas studiowania umów proxy i jakie zagrożenia one stwarzają?
-
Nieautoryzowany transfer środków:
. Jednym z najczęstszych sposobów kradzieży pieniędzy przez oszustów jest przelewanie środków przez posiadacza umowy na siebie lub inny adres bez autoryzacji. -
Ukryte "backdoory":
Oszuści mogą ukrywać złośliwy kod za zaciemnionymi lub wprowadzającymi w błąd nazwami funkcji, utrudniając użytkownikom wykrycie ich prawdziwych intencji. Niejasne lub wprowadzające w błąd nazwy funkcji. Operatory warunkowe przyznające specjalne uprawnienia określonym adresom. -
Fałszywe tokeny i wymiany:
Oszuści często tworzą fałszywe tokeny lub fałszywe platformy wymiany, aby nakłonić użytkowników do przeniesienia swoich aktywów do złośliwego kontraktu. Zwróć uwagę na kontrakty tokenowe, których zachowanie jest podejrzane, takie jak bicie nieograniczonej liczby tokenów lub akceptowanie nieautoryzowanych transferów. -
Nieautoryzowane funkcje emisji lub transferu własności:
Zewnętrzny kontrakt może zmienić posiadacza tokena lub uruchomić nową emisję, powodując inflację cen. -
Wprowadzająca w błąd dokumentacja lub komentarze niezgodne z zachowaniem
kodu:
Oszuści mogą dostarczać wprowadzającą w błąd lub niedokładną dokumentację lub komentarze w swoim kodzie, aby wprowadzić użytkowników w błąd co do prawdziwej funkcjonalności umowy. Zawsze sprawdzaj dokumentację z rzeczywistym zachowaniem kodu. -
Brak inspekcji bezpieczeństwa:
. Należy uważać na kontrakty, w których brakuje odpowiednich kontroli bezpieczeństwa, kontroli dostępu lub które nie wdrażają zabezpieczeń przed typowymi lukami w zabezpieczeniach, takimi jak reentrancy. Rozważając zawarcie inteligentnego kontraktu, zawsze dokładnie analizuj kod, szukaj dobrze udokumentowanych i przejrzystych projektów, sprawdzaj zewnętrzne audyty bezpieczeństwa i badaj opinie społeczności. Ponadto należy zachować ostrożność podczas interakcji z kontraktami, które wykazują którykolwiek z tych atrybutów, ponieważ mogą one być zaprojektowane w celu kradzieży środków lub wykonywania innych złośliwych działań. -
Złożone wyrażenia warunkowe:
Oszuści mogą używać złożonych wyrażeń warunkowych lub logiki, która jest trudna do naśladowania, co utrudnia zrozumienie prawdziwej funkcjonalności umowy. Zwróć uwagę na niepotrzebnie zagmatwany kod: zbyt złożoną lub niejasną logikę oraz warunki, które są nieistotne dla celu umowy. -
Niejasne wzorce zarządzania i własności (Ownership):
Oszuści często wykorzystują kontrakty proxy z niejasnymi mechanizmami zarządzania lub ukrytymi strukturami własności, co utrudnia użytkownikom ustalenie, kto kontroluje kontrakt. -
Unikanie znanych projektów:
Oszuści często tworzą umowy, które naśladują funkcjonalność lub wygląd znanych, legalnych projektów. Zawsze sprawdzaj autentyczność projektu i upewnij się, że nie jest on fałszywy. Zwróć uwagę na drobne różnice w nazwach, logo lub brandingu. Projekty, które twierdzą, że są oficjalne, ale nie mają odpowiedniej walidacji. -
Pośpieszne lub anonimowe wdrażanie:
Oszuści mogą wdrażać umowy w pośpiechu, bez wyraźnej identyfikacji i z minimalnymi informacjami o projekcie lub jego twórcach. Zwracaj uwagę na umowy wdrożone bez należytej staranności i planowania, wydane przez nieznany zespół. -
Brak publicznej weryfikacji lub audytu:
Jeśli umowa nie oferuje publicznego przeglądu kodu źródłowego lub nie została poddana audytowi bezpieczeństwa strony trzeciej, należy podejść do niej z najwyższą ostrożnością. -
Nietypowe lub ukryte przechowywanie danych:
Oszuści mogą wykorzystywać niekonwencjonalne lub ukryte schematy przechowywania danych w celu zamaskowania złośliwej funkcjonalności. Należy pamiętać, że dane mogą być przechowywane w nieoczekiwanych miejscach w kontrakcie. -
Fałszywe pule płynności:
W przypadku projektów DeFi należy uważać na pule płynności obiecujące wysokie zyski. Oszuści mogą tworzyć fałszywe pule, aby przyciągnąć płynność, a następnie wykorzystywać użytkowników. Niespójnie wysokie przychody z dostarczania płynności. Brak przejrzystości i dokumentacji mechanizmu działania puli.
W celu ochrony przed takimi podatnościami, umowy wykorzystujące szablony proxy i DelegateCall powinny być dokładnie sprawdzane i audytowane, należy wdrożyć mechanizmy kontroli dostępu, a połączenia zewnętrzne powinny być zabezpieczone. Użytkownicy powinni zachować ostrożność podczas interakcji z umowami, zwłaszcza tymi ze złożonymi mechanizmami aktualizacji, i zawsze powinni zachować należytą staranność przed interakcją z inteligentną umową w łańcuchu bloków.
W szybko ewoluującym świecie Blockchain konieczne jest zachowanie czujności i informacji, aby chronić siebie i swoje aktywa przed potencjalnymi oszustwami i lukami w zabezpieczeniach związanymi z umowami proxy i funkcjami DelegateCall.
Mamy nadzieję, że te informacje pomogły ci lepiej zrozumieć zarządzane (proxy) schematy inteligentnych kontraktów.
Ponieważ wszystkie informacje w łańcuchu bloków są jawne (oczywiście pod warunkiem, że kod źródłowy kontraktu jest zweryfikowany), uzbrojony w tę wiedzę możesz niezależnie studiować inteligentne kontrakty i identyfikować różne schematy oszustw.
Jednak już zrobiliśmy to wszystko za ciebie! Zarejestruj się w subskrypcji premium i uzyskaj dostęp do ekskluzywnych filtrów funkcji inteligentnych kontraktów oraz nowych analiz. Zwiększ swoje szanse na udane inwestycje w dochodowe tokeny.
Regards, Lotus Market team.