150 milionów dolarów zablokowanych w sieci Ethereum - jak się chronić

Złożoność jest wrogiem bezpieczeństwa

Parity to implementacja Ethereum napisana w Rust, kierowana przez bardzo utalentowanego współzałożyciela Ethereum, Gavina Wooda. Implementacja zapewnia łatwy w użyciu interfejs GUI do tworzenia portfeli z wieloma znacznikami. W dniu 19 lipca 2017 r. Stwierdzono, że umowa wielosigowa, która stanowi podstawę tej funkcjonalności, zawiera lukę w zabezpieczeniach, która spowodowała utratę 30 milionów USD. W dniu 7 listopada 2017 r. W umowie dotyczącej portfela znaleziono drugą lukę w zabezpieczeniach, która spowodowała blokadę sieci Ether w wysokości 150 mln USD. Chociaż Ethereum nie oferuje prostego rozwiązania dla portfeli o wysokim poziomie bezpieczeństwa, istnieje kilka kroków, które można podjąć, aby zapobiec padnięciu ofiarą takiego ataku.

Raport o błędzie złożony przez „atakującego”

W tradycyjnym środowisku oprogramowania produkcyjnego jesteśmy w stanie wdrożyć kod w interfejsie publicznym, takim jak strona internetowa. Jeśli wydaje się, że kod nie zawiera funkcji, mamy taką nadzieję, co się stanie? Być może nikt nie zauważa, może kilka osób narzeka, że ​​pod koniec dnia możemy zaktualizować kod i drobne niedogodności zostały rozwiązane. W świecie Ethereum po wdrożeniu fragmentu kodu jest on dostępny na zawsze, aby każdy mógł go zobaczyć i bawić się nim. W idealnym świecie tylko ty masz dostęp do tego kodu, w świecie blockchain każdy ma do niego dostęp. Oznacza to, że jeśli fragment kodu zostanie wdrożony w sieci Ethereum, w większości przypadków nie można go zaktualizować.

Rozmowa z „napastnikiem”

Jeśli umieścimy 1 milion USD w Ether w inteligentnej umowie i okaże się, że inteligentny kontrakt zawiera lukę, może wystąpić kilka rzeczy. Może zostać niezauważony, może zostać zauważony przez hakera, który zdecyduje się go wykorzystać, lub zostanie wykryty przez właściciela kontraktu i będzie on mógł odzyskać środki. W tym przypadku została wykorzystana przez osobę, która twierdziła, że ​​„bada” poprzedni hack z użyciem parytetu.

„Napastnik”

Jak więc możemy się chronić?

Zasada KISS - Niech to będzie głupie

Większość inteligentnych umów wprowadza luki, próbując uwzględnić przypadki narożne i optymalizacje. Pierwsza luka w parzystości była spowodowana próbą zoptymalizowania ilości gazu zużytego podczas wykonywania. Obecna luka w parzystości była spowodowana włączeniem nowej, niesprawdzonej funkcjonalności biblioteki. Zarządzalna inteligentna umowa będzie zawierać minimalną ilość funkcji niezbędnych do wykonania zadania. Wprowadzenie kodu w celu optymalizacji przedwczesnego rozwiązania zwiększa złożoność umowy, a tym samym zmniejsza bezpieczeństwo.

Testy jednostkowe

W przypadku wspólnego tworzenia oprogramowania, a także inteligentnego opracowywania umów, wygodne może być przeoczenie odpowiednich testów jednostkowych. Gdy kod jest nieodwołalny po osiągnięciu produkcji, wymagany jest wyższy poziom staranności. Zasadniczo inteligentna umowa powinna zawierać odpowiednie testy jednostkowe w celu zweryfikowania funkcjonalności inteligentnej umowy, a także przypadków narożnych.

Inteligentne audyty kontraktowe

Każda inteligentna umowa wysyłana do produkcji powinna zostać poddana audytowi bezpieczeństwa. Dobry audytor inteligentnych umów bezpieczeństwa będzie miał doświadczenie w budowaniu inteligentnych kontraktów w prawdziwym świecie, bogactwie projektów w GitHub i udostępni listę kontrolną typowych luk, których szukają. Upewnij się, że biegły rewident może zaangażować się w rozmowę na temat różnych wektorów ataku związanych z Twoją inteligentną umową. To może nie wydawać się formalnym podejściem, jednak branża jest wciąż bardzo młoda i tak właśnie działa.

Przestrzeganie tych wskazówek może pomóc zmniejszyć ryzyko i niepokój związane z wysyłaniem inteligentnych kontraktów do sieci Ethereum.

Testuj, audytuj, wdrażaj.