Sprytne podejście do bezpieczeństwa kontraktów

blog 1AktualnościDevelopersEnterpriseBlockchain ExplainedWydarzenia i konferencjePrasaBiuletyny

Zapisz się do naszego newslettera.

Adres e-mail

Szanujemy twoją prywatność

HomeBlogBlockchain Development

Sprytne podejście do bezpieczeństwa kontraktów

5 zasad bezpieczeństwa, które każdy programista Ethereum musi znać, oraz podstawowe kompromisy. przez ConsenSys 17 czerwca 2020 Opublikowane w dniu 17 czerwca 2020

Bezpieczeństwo Blockchain

ConsenSys Diligence, nasz zespół ekspertów ds. Bezpieczeństwa blockchain.

Chociaż branża dojrzewa, rozwój inteligentnych kontraktów jest wciąż stosunkowo nową i dojrzewającą dziedziną. Dlatego należy spodziewać się ciągłych zmian w środowisku zabezpieczeń, w miarę odkrywania nowych błędów i zagrożeń bezpieczeństwa oraz opracowywania nowych najlepszych praktyk. Uczenie się i podążanie najlepsze praktyki to dopiero początek pracy związanej z bezpieczeństwem, którą będziesz musiał wykonać jako programista inteligentnych kontraktów.

Programowanie inteligentnych kontraktów wymaga innego podejścia inżynieryjnego niż te, do których jesteś przyzwyczajony. Koszt awarii może być wysoki, a zmiana może być trudna, co pod pewnymi względami bardziej przypomina programowanie sprzętowe lub programowanie usług finansowych niż programowanie internetowe lub mobilne. Dlatego nie wystarczy obrona przed znanymi lukami w zabezpieczeniach. Zamiast tego będziesz musiał nauczyć się nowej filozofii rozwoju.

Przygotuj się na porażkę

Każda nietrywialna umowa będzie zawierała błędy. Twój kod musi zatem być w stanie z wdziękiem reagować na błędy i luki w zabezpieczeniach.

  • Wstrzymaj umowę, gdy coś idzie nie tak („wyłącznik automatyczny”).
  • Zarządzaj kwotą ryzyka (ograniczenie kursu, maksymalne wykorzystanie).
  • Miej skuteczną ścieżkę aktualizacji dla poprawek błędów i ulepszeń.

Ostrożnie wdrażaj

Zawsze lepiej jest wyłapać błędy przed pełną wersją produkcyjną.

  • Dokładnie testuj kontrakty i dodawaj testy po wykryciu nowych wektorów ataku.
  • Zapewniać nagrody za błędy począwszy od wersji alpha testnet.
  • Wdrażanie w fazach, z rosnącym użyciem i testowaniem w każdej fazie.

Utrzymuj proste umowy

Złożoność zwiększa prawdopodobieństwo błędów.


  • Upewnij się, że logika kontraktu jest prosta.
  • Modularyzuj kod, aby ograniczyć liczbę kontraktów i funkcji.
  • Tam, gdzie to możliwe, używaj już napisanych narzędzi lub kodu (np. Nie używaj własnego generatora liczb losowych).
  • Zawsze, gdy to możliwe, wolę przejrzystość od wydajności.
  • Używaj łańcucha bloków tylko w przypadku tych części systemu, które wymagają decentralizacji.

Bądź na bieżąco

Śledź nowe osiągnięcia w zakresie bezpieczeństwa.

  • Sprawdź swoje kontrakty pod kątem nowych błędów, gdy tylko zostaną wykryte.
  • Uaktualnij do najnowszej wersji dowolnego narzędzia lub biblioteki tak szybko, jak to możliwe.
  • Zastosuj nowe techniki zabezpieczeń, które wydają się przydatne.

Uważaj na dziwactwa EVM

Chociaż większość twojego doświadczenia w programowaniu będzie dotyczyła programowania Ethereum, istnieją pewne pułapki, o których należy pamiętać.

  • Zachowaj szczególną ostrożność w przypadku wywołań zewnętrznych umów, które mogą spowodować wykonanie złośliwego kodu i zmianę przepływu kontroli.
  • Zrozum, że Twoje funkcje publiczne są publiczne i mogą zostać nazwane złośliwie iw dowolnej kolejności. Prywatne dane w inteligentnych kontraktach są również widoczne dla każdego.
  • Miej na uwadze koszty gazu i limit gazu blokowego.
  • Należy pamiętać, że znaczniki czasu na blockchainie są nieprecyzyjne: górnicy mogą wpływać na czas wykonania transakcji z marginesem kilku sekund.
  • Losowość jest nietrywialna na blockchainie, większość podejść do generowania liczb losowych jest możliwa do gry na blockchainie.

Podstawowe kompromisy

Oceniając strukturę i bezpieczeństwo systemu inteligentnych kontraktów, należy wziąć pod uwagę wiele podstawowych kompromisów. Ogólnym zaleceniem dla każdego systemu inteligentnych kontraktów jest określenie właściwej równowagi dla tych podstawowych kompromisów.

Idealny inteligentny system kontraktowy oparty na uprzedzeniach inżynierii oprogramowania jest modułowy, ponownie wykorzystuje kod zamiast go powielać i obsługuje komponenty, które można aktualizować. Idealny system inteligentnych kontraktów oparty na bezpiecznej architekturze może podzielać ten sposób myślenia, szczególnie w przypadku bardziej złożonych systemów inteligentnych kontraktów.

Istnieją jednak ważne wyjątki, w których najlepsze praktyki w zakresie bezpieczeństwa i inżynierii oprogramowania mogą nie zostać dostosowane. W każdym przypadku właściwą równowagę uzyskuje się poprzez określenie optymalnej kombinacji właściwości wraz z wymiarami systemu kontraktowego, takimi jak:

  • Sztywność a możliwość rozbudowy
  • Monolityczne a modułowe
  • Powielanie a ponowne wykorzystanie
Sztywność a możliwość rozbudowy

Podczas gdy wiele zasobów, w tym ten, kładzie nacisk na cechy plastyczności, takie jak wzorce podatne na zabijanie, ulepszanie lub modyfikowanie, istnieje fundamentalny kompromis między plastycznością a bezpieczeństwem.

Plastyczność z definicji zwiększa złożoność i potencjalne powierzchnie ataku. Prostota jest szczególnie skuteczna w porównaniu ze złożonością w przypadkach, gdy system inteligentnych kontraktów wykonuje bardzo ograniczony zestaw funkcji przez z góry określony ograniczony czas, na przykład wolny od zarządzania system umów sprzedaży tokenów z ograniczonymi ramami czasowymi.

Monolityczne a modułowe

Monolityczna, samodzielna umowa zapewnia lokalną identyfikację i czytelność całej wiedzy. Chociaż niewiele jest wysoko cenionych systemów inteligentnych kontraktów, które istnieją jako monolity, istnieje argument przemawiający za ekstremalną lokalizacją danych i przepływem – na przykład w przypadku optymalizacji wydajności przeglądu kodu.

Podobnie jak w przypadku innych rozważanych tutaj kompromisów, najlepsze praktyki dotyczące bezpieczeństwa odchodzą od najlepszych praktyk inżynierii oprogramowania w prostych, krótkoterminowych umowach i trend w kierunku najlepszych praktyk inżynierii oprogramowania w przypadku bardziej złożonych systemów z umowami wieczystymi.

Powielanie a ponowne wykorzystanie

Inteligentny system kontraktowy z punktu widzenia inżynierii oprogramowania ma na celu maksymalizację ponownego wykorzystania tam, gdzie jest to uzasadnione. Istnieje wiele sposobów ponownego wykorzystania kodu kontraktu w Solidity. Korzystanie ze sprawdzonych, wcześniej wdrożonych umów, które posiadasz, jest na ogół najbezpieczniejszym sposobem ponownego wykorzystania kodu.

Powielanie jest często stosowane w przypadkach, gdy wcześniej wdrożone kontrakty będące własnością własną nie są dostępne. Wysiłki takie jak Biblioteka Solidity OpenZeppelin starają się zapewnić wzorce, które umożliwią ponowne wykorzystanie bezpiecznego kodu bez jego powielania. Wszelkie analizy bezpieczeństwa kontraktów muszą obejmować każdy ponownie wykorzystany kod, który wcześniej nie ustanowił poziomu zaufania współmiernego do funduszy zagrożonych w docelowym systemie inteligentnych kontraktów.

Tworzenie i uruchamianie aplikacji na Ethereum jest obecnie prawdopodobnie najbardziej ekscytującą granicą dla inżynierów oprogramowania, ale wymaga ciągłego modelowania zagrożeń, audytu bezpieczeństwa i planowania reakcji na incydenty.

Zespół Diligence jest tutaj, aby pomóc Ci zachować czujność i budować zaufanie do swoich wdrożeń.

Zarezerwuj punkt kontroli bezpieczeństwa Blockchain

Nasze jednodniowe przeglądy pomagają wbudować zabezpieczenia w kod łańcucha bloków od samego początku, dzięki czemu można zaoszczędzić czas i pieniądze na dłuższą metę. Zarezerwuj już dziś Bezpieczeństwo Inteligentne umowyNewsletter Zapisz się do naszego newslettera, aby otrzymywać najnowsze wiadomości o Ethereum, rozwiązania dla przedsiębiorstw, zasoby dla programistów i nie tylko.Jak zbudować udany produkt BlockchainWebinar

Jak zbudować udany produkt Blockchain

Jak skonfigurować i uruchomić węzeł EthereumWebinar

Jak skonfigurować i uruchomić węzeł Ethereum

Jak zbudować własny interfejs API EthereumWebinar

Jak zbudować własny interfejs API Ethereum

Jak stworzyć token społecznościowyWebinar

Jak stworzyć token społecznościowy

Korzystanie z narzędzi bezpieczeństwa w tworzeniu inteligentnych kontraktówWebinar

Korzystanie z narzędzi bezpieczeństwa w tworzeniu inteligentnych kontraktów

Przyszłość finansów, aktywów cyfrowych i DeFiWebinar

Przyszłość finansów: aktywa cyfrowe i DeFi

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map