Chronisz flash AVR przed odczytem przez ISP?

15

Staram się chronić całą pamięć flash przed czytaniem przez ISP. Ma bootloader, zdolny do samodzielnego programowania sekcji aplikacji.

Ustawienie bajtu blokady na:

LB1/LB2 nie zezwoli użytkownikowi na użycie bootloadera do przesłania nowego oprogramowania.

BLB12/BLB11i BLB01&BLB02nie zapobiegnę czytaniu flasha przez ISP, jeśli się nie mylę.

Więc nie ma sposobu, aby użytkownik zaktualizował oprogramowanie układowe za pomocą niestandardowego programu ładującego i chroniłby flash przed odczytem w tym samym czasie?

Pablo
źródło

Odpowiedzi:

18

Nie określiłeś układu, poniższe dotyczą głównie 8-bitowych urządzeń atmega, ale są to informacje ogólne. Przeczytaj sekcję „Programowanie pamięci”, aby uzyskać informacje na temat konkretnego układu scalonego, aby uzyskać bardziej szczegółowe informacje!

To powiedziawszy, i jak powiedziałeś, wszystkie urządzenia AVR zawierają dwa bity Lock o nazwie LB1 i LB2. Zaprogramowanie ich (do 0, niski) zapewni ochronę zawartości zapisanej w pamięciach Flash i EEPROM zgodnie z poniższą tabelą. Poziom ochrony jest podzielony na trzy tryby, w których tryb 1 nie zapewnia ochrony, a tryb 3 oferuje maksymalną ochronę. Możliwe jest przejście do wyższego trybu ochrony po prostu przez przeprogramowanie bitów blokady.

AVR pozwala na zmianę „wysokich” bitów na „niskie”, ale nie na odwrót. Nie można zmienić „niskiego” bitu blokady na „wysoki”, dlatego obniżenie poziomu ochrony nie jest możliwe. Aby wyczyścić bity blokady, wymagane jest pełne wymazywanie, które usuwa pamięć Flash.

Tabela bitów blokady AVR

Te same 2 bity blokujące (LB1 i LB2), gdy są niskie, zapobiegną wykryciu przez oprogramowanie 99,9% ludzi! Prawdopodobnie ponad 99,9%. Prawie zawsze łatwiej byłoby odtworzyć kod.

Więc nie ma sposobu, aby użytkownik zaktualizował oprogramowanie układowe za pomocą niestandardowego programu ładującego i chroniłby flash przed odczytem w tym samym czasie?

Zgodnie z moją najlepszą wiedzą (mogę się mylić, ale myślę, że miałbym z tym wcześniej problem) na urządzeniach, które mają bezpieczniki ochrony bootloadera (BLB12 i BLB11), możesz zablokować niestandardową sekcję bootloadera , wyłączyć SPI i być chronione przed 97-98% ludzi.

Jednak gdy żaden z bitów blokady nie jest zaprogramowany, funkcje blokady pamięci nie są włączone !!! Wyłączenie ISP wystarczy, aby zablokować 70% ludzi.

W celu uzyskania dodatkowych informacji, bity blokady i bezpieczniki nie znajdują się w normalnej pamięci flash lub w pamięci EEPROM, ani nie są dostępne w oprogramowaniu, z wyjątkiem bitów blokady związanych z modułem ładującym w urządzeniach z funkcją autoprogramowania. Tabela 2 w tej notatce aplikacji pomoże ci określić, co możesz zrobić dla swojego konkretnego urządzenia!

Linia AVR firmy Atmel nie jest urządzeniem o wysokim poziomie bezpieczeństwa (chyba że wyraźnie zaznaczono!) I jako takie absolutnie nie ma żadnej gwarancji bezpieczeństwa kodu, ani też nie powinny! Podobnie jak wszystkie niezabezpieczone urządzenia (i niestety nawet niektóre bezpieczne), są one podatne na częste ataki!


Edytować

Wstawię nagłówek interfejsu programowania HV. Ale czy ktoś może użyć programatora HV do odczytania pamięci flash? Wiem, że programista HV może wymazać układ, nawet ISP / Jtag są wyłączone.

Nie sądzę, że powinieneś włączyć programator HV do swojego projektu płyty, chyba że jest to absolutnie potrzebne i wiesz na pewno, że nie spowoduje to żadnych problemów. Programatory WN (sygnały 12 woltów) są dostępne tylko jako środek bezpieczeństwa do programowania blokowanych (głównie zablokowanych błędów) układów. Teoretycznie ma to jedynie na celu zaprogramowanie urządzenia, aby niczego nie czytało. I nigdy nie słyszałem o exploicie, który umożliwiłby czytanie.

Do aktualizacji bootloadera (okazjonalnie) wstawię nagłówek interfejsu programowania HV. Ale czy ktoś może użyć programatora HV do odczytania pamięci flash? Wiem, że programista HV może wymazać układ, nawet ISP / Jtag są wyłączone.

Myślę, że może istnieć sposób na aktualizację zablokowanej pamięci flash za pomocą programu ładującego (może to mieć coś wspólnego z wewnętrzną flagą zapisu i / lub ISR?) Ale muszę przeszukać moje notatki i być może będę musiał to przetestować. Nie będę w stanie tego robić przez ~ 20 godzin; więc bardzo polecam zadać nowe pytanie dotyczące tylko tego i wspomnianego procesora. To bardzo dobre pytanie !

Garrett Fogerlie
źródło
+1 za ostatni komentarz, jeśli wszystko inne zawiedzie, jakikolwiek facet może po prostu wylutować układ i wcisnąć nam debuger / programator AVR, aby zresetować bity blokady i twoje bezpieczeństwo zniknęło.
helloworld922
@Garrett Fogerlie: nie jestem pewien, co skłoniło cię do myślenia, że ​​próbuję ukraść kod, proszę daj mi znać, a poprawię moje pytanie, aby inni nie myśleli tak samo. Próbuję zapewnić minimalną ochronę mojego kodu, mojego bootloadera. W każdym razie kilka dodatkowych pytań na ten temat. Chip to ATMega328, sądzono, że rodzina będzie miała wspólne użycie bitu blokującego. Wyjaśniłeś LB1i LB2, który opisałem również w moim pytaniu, jako ograniczającą opcję używania bootloadera do celów aktualizacji. Więc to nie jest opcja. Co do BLB12i BLB11- tego nie rozumiem. (ciąg dalszy nastąpi)
Pablo
Ustawienie tych bitów NIE uniemożliwi nikomu odczytania flasha (aplikacji + bootloadera) z zewnątrz. Z arkusza danych wydaje się, że te bity po prostu blokują polecenia LPM / SPM, ale programista szeregowy go nie używa. Jeśli chodzi o wyłączenie programowania szeregowego i jtag, jest to dla mnie kolejne duże pytanie. Do aktualizacji bootloadera (okazjonalnie) wstawię nagłówek interfejsu programowania HV. Ale czy ktoś może użyć programatora HV do odczytania pamięci flash? Wiem, że programista HV może wymazać układ, nawet ISP / Jtag są wyłączone.
Pablo
@Pablo, przepraszam, nie miałem na myśli przestępstwa. Kiedy po raz pierwszy zobaczyłem twoje pytanie, pomysł kradzieży nie przyszedł mi do głowy; i napisałem, że napisałem odpowiedź, która była w pewnym stopniu skoncentrowana na odzyskiwaniu zablokowanego kodu. Byłem jednak w pracy i przed udzieleniem odpowiedzi miałem około 2-godzinną przerwę. Kiedy wróciłem, zauważyłem, że wciąż nie ma odpowiedzi i byłem nieco zaskoczony, a po ponownym przeczytaniu twojego pytania pomyślałem, że „kradzież” mogła być przyczyną. To wcale nie twoja wina, teraz usunąłem zrzeczenie się odpowiedzialności. Model procesora był potrzebny z powodu różnic wymienionych w tej tabeli i ponieważ istnieją AVR
8/16/32 bitów
1
retGarrett Fogerlie: Nie chciałem umieszczać programatora HV na pokładzie, tylko nagłówek :) Ale doszedłem do wniosku, że nie jest to konieczne, ponieważ działały bity blokujące i na wszelki wypadek mogę użyć nagłówka ISP do kasowania układów i ponownego zapisu całej pamięci flash na urządzeniu. Podsumowując więc odpowiedź na moje pierwotne pytanie - ustawienie LB1 i LB2 uniemożliwi każdemu odczytanie całego obszaru pamięci flash, a jednocześnie nie uniemożliwi mi pisania pamięci programu za pomocą programu ładującego.
Pablo
3

Możesz użyć bitów blokujących na niektórych urządzeniach ATMega i nadal aktualizować kod za pomocą bootloadera.

Zaprogramowałem LB1 i LB2 na ATMega 328. Następnie uruchomiłem program ładujący, zaktualizowałem program główny - wszystko działało idealnie.

ISP nie może ani czytać, ani pisać bezpieczników flash / eeprom / bezpieczników, ale bootloader nadal może pisać sekcję aplikacji.

Chip Erase z ISP wyczyści bity blokujące (LB1 i LB2), ale również usunie całą pamięć flash / eeprom, dzięki czemu możesz chronić swój kod (jednak musisz upewnić się, że nie można zhakować bootloadera)

Gandalf
źródło
3
Jak to się poprawia w stosunku do obecnie akceptowanej odpowiedzi?
Ignacio Vazquez-Abrams
Zauważ, że dopóki masz standardowego rezydenta bootloadera w stylu Arduino, blokowanie odczytu byłoby prawie bezcelowe, ponieważ sam bootloader ma możliwość odczytu, chyba że użyjesz zaawansowanego trybu tylko 328P, który wyłącza bootloader LPM z pamięci aplikacji. W przeciwnym razie trzeba zmodyfikować program ładujący, aby go usunąć, kosztem niemożności weryfikacji programu. (Możesz potencjalnie stworzyć inny mechanizm weryfikacji, ale byłoby to niestandardowe wymaganie, abyś również zmodyfikował / zastąpił avdrude)
Chris Stratton