Ochrona oprogramowania wewnętrznego kontrolerów AVR i PIC

23

Czy ktoś może wyodrębnić plik HEX, który wypalam w dostarczonym mu mikrokontrolerze?

Jeśli to możliwe, w jaki sposób ktoś może zabezpieczyć swój kod w systemach wbudowanych? W przypadku mikrokontrolerów PIC i AVR w jaki sposób można zabezpieczyć oprogramowanie przed kopiowaniem?

Świeżak91
źródło
1
W przypadku nr 1 wydaje się, że sugerujesz, abyś dostarczył plik szesnastkowy swoim klientom, w takim przypadku mogą po prostu zapisać go na kilku klonowanych urządzeniach, nie ma potrzeby rzeczywistej dekompilacji kodu, chociaż jest to możliwe. W przypadku zablokowanego urządzenia (# 2) zazwyczaj zależy od tego, jak zdecydowani są uzyskać kod (innymi słowy, ile są gotowi wydać), ale zazwyczaj jest to możliwe.
alexan_e
1
Kiedyś były to dwa lata, ale ochrona w dzisiejszych czasach jest zwykle pokonana w ciągu jednego lub dwóch dni w przypadku popularnych urządzeń. w zasadzie, gdy ktoś zdecyduje, że warto to zrobić. Jeśli naprawdę chcesz bezpieczeństwa, musisz dostać się do branży chipów, nie dostaniesz żadnej z gotowych części handlowych.
old_timer

Odpowiedzi:

33

Większość mikrokontrolerów ma obecnie metody specyficzne dla części lub producenta w celu ochrony wbudowanego kodu oprogramowania układowego. Zazwyczaj odbywa się to przez zablokowanie obwodów, które normalnie umożliwiają odczyt pamięci kodu. (Musisz znaleźć szczegółowe informacje na temat części w arkuszu danych lub na stronie internetowej producenta w odpowiednich uwagach dotyczących aplikacji).

Po zablokowaniu nie jest możliwe odczytanie pamięci kodu przy użyciu normalnych technik. Zapewnia to odpowiedni poziom ochrony, aby uniemożliwić większości hakerów przeglądanie kodu maszynowego wbudowanej aplikacji.

Wiele urządzeń MCU ma obecnie wbudowaną pamięć FLASH do zapisywania kodu programu. Poprzednio zapisany i chroniony program przechowywany w pamięci FLASH można zwykle zastąpić nowym kodem, ale operacja kasowania pełnego układu FLASH wymaga odblokowania mechanizmu zabezpieczającego. Po skasowaniu część będzie działać tak, jak przed oryginalną blokadą zabezpieczającą. Jeśli zostanie załadowany nowy program, ogólnie możliwe jest ponowne zablokowanie części w celu ochrony nowo załadowanego kodu maszynowego.

Dyskusja na temat ochrony kodu w mikrokontrolerach nie byłaby kompletna bez wspomnienia, że ​​zwykle nie ma gwarancji, że jakikolwiek schemat ochrony oferowany przez producenta części jest głupi. Producenci stwierdzą nawet, że systemy ochrony nie są w 100% głupie. Jednym z powodów tego jest fakt, że istnieje cały przemysł czarnorynkowy, gdzie za opłatą staranni hakerzy będą czytać kod z chronionej części dla każdego, kto chce zapłacić. Opracowali różne schematy, które pozwalają na odczyt kodu z pamięci ROM lub FLASH na chronionych mikrokontrolerach. Niektóre z tych schematów są niewiarygodnie sprytne, ale w niektórych rodzinach działają lepiej niż w innych. Pamiętaj więc o tym, a następnie staraj się chronić swój program przed wścibskimi oczami.

Gdy ktoś ma już binarny obraz kodu maszynowego odczytanego z mikrokontrolera, bez względu na to, czy był to chroniony mikrokontroler, czy nie, może przetworzyć kod maszynowy za pomocą narzędzia zwanego deasemblerem. Spowoduje to zamianę danych binarnych z powrotem na kod języka asemblera, który można przestudiować, aby dowiedzieć się, jak działają algorytmy programu. Dokonywanie dokładnego demontażu kodu maszynowego jest żmudnym zadaniem, które może wymagać ogromnej ilości pracy. W końcu proces może prowadzić do kodu asemblera, jak opisałem. Jeśli twój program został napisany w języku wysokiego poziomu, takim jak C, C ++ lub Basic, kod asemblera będzie reprezentował tylko skompilowany i połączony wynik twojego programu. Zasadniczo nie jest możliwe przywrócenie skradzionego kodu aż do poziomu języka wysokiego poziomu.

Oznacza to, że pisanie oprogramowania wbudowanego aplikacji w języku wysokiego poziomu jest korzystne. Zapewnia kolejną warstwę, która utrudnia pełne uruchomienie inżynierii wstecznej programu. Jeszcze większą korzyść można uzyskać dzięki zastosowaniu najnowocześniejszych rozwiązań w optymalizacji kompilatorów do kompilacji wbudowanej aplikacji, ponieważ optymalizatory o najwyższej wydajności mogą dosłownie zmienić program w ogromną miskę spaghetti pełną dziesiątek wezwań do bardzo trudnych podprogramów do rozszyfrowania w dezasemblerze.

Większość doświadczonych programistów wbudowanych powie Ci, abyś użył dowolnego schematu ochrony, który jest oferowany na MCU w twojej aplikacji ... ale nie polegać na nim do końca drogi dla twojego produktu. Powiedzą ci, że najlepszym sposobem na wyprzedzenie konkurencji jest ciągłe uaktualnianie produktu, tak aby stare wersje były przestarzałe i nie były interesujące do czasu, gdy hakerzy mogli sklonować Twój kod. Zmień kod, dodaj nowe funkcje, od czasu do czasu obracaj kartami komputerowymi, aby zamieniać wszystkie wejścia / wyjścia i wszelkie inne rzeczy, o których możesz pomyśleć. W ten sposób możesz wygrać wyścig za każdym razem.

Michael Karas
źródło
Dziękuję bardzo @Michael Karas To była kompletna odpowiedź
Rookie91
12

Myślę, że odpowiedź Michaela wystarczy na to pytanie, ale dodaję oba te linki: Hakowanie PIC 18F1320 i wszystko, co robią, możemy złamać! Oba były dla mnie bardzo interesujące.

Roh
źródło
Staranne EE powinno przestudiować ten ostatni link oraz zbadać / porównać / wybrać urządzenia, których brakuje na liście. Złożoność jest zawsze bardziej odstraszająca - na przykład dodanie DS3641 lub ATSHA204 . Chociaż żadne dodatkowe zabezpieczenia nigdy nie będą w 100% niezniszczalne, dodatkowa złożoność może sprawić, że nie będzie to opłacalne.
rdtsc