SZCZEGÓ Ł OWY SPIS TRE
Ś CI
PRZEDMOWA
PODZIĘKOWANIA
WPROWADZENIE
Jak wyglądają urządzenia wbudowane
Sposoby hakowania urządzeń wbudowanych
Co oznacza atak sprzętowy?
Kto powinien przeczytać tę książkę?
O książce
1 HIGIENA JAMY USTNEJ. WPROWADZENIE DO ZABEZPIECZEŃ WBUDOWANYCH
Komponenty sprzętu
Komponenty oprogramowania
Początkowy kod rozruchu
Program rozruchowy
Środowisko zaufanego uruchamiania systemu operacyjnego (TEE) i zaufane aplikacje
Obrazy oprogramowania układowego
Główne jądro systemu operacyjnego i aplikacje
Modelowanie zagrożeń sprzętowych
Czym jest bezpieczeństwo?
Drzewo ataków
Profilowanie atakujących
Typy ataków
Ataki programowe na sprz
Ataki na poziomie PCB
Ataki logiczne
Ataki nieinwazyjne
Ataki inwazyjne na chipy
Zasoby i cele bezpieczeństwa
Poufność i integralność kodu binarnego
Poufność i integralność kluczy
Zdalna atestacja rozruchu
Poufność i integralność danych osobowych
Integralność i poufność danych z sensorów
Ochrona poufności treści
Odpowiedzialność i odporność
xxvi
1
5
21
Środki zapobiegawcze
Wykrywanie
Przykładowe drzewo ataku
Identyfikacja vs. eksploatacja
Skalowalność
Analizowanie drzewa ataku
Ocenianie ścieżek ataków sprzętowych
Ujawnianie kwestii związanych z bezpieczeństwem
Podsumowanie
z użyciem elektryczności
Wysoka impedancja, podciąganie i ściąganie
Push-pull vs. tristate vs. otwarty kolektor albo otwarty dren
Komunikacja asynchroniczna vs. synchroniczna vs. taktowanie wbudowane
Sygnały różnicowe
Interfejsy szeregowe o niskiej prędkości
Uniwersalna, asynchroniczna komunikacja szeregowa
Szeregowy interfejs urządzeń peryferyjnych
Interfejs IIC
Secure Digital Input/Output oraz Embedded Multimedia Cards
Magistrala CAN
JTAG i inne interfejsy debugowania
Interfejsy równoległe
Interfejsy pamięci
Szybkie interfejsy szeregowe
Uniwersalna Magistrala Szeregowa
OBSERWOWANIE. IDENTYFIKACJA KOMPONENTÓW
I ZBIERANIE INFORMACJI
Zbieranie informacji
Zgłoszenia w Federalnej Komisji Łączności
Patenty
Karty katalogowe i schematy
Przykład wyszukiwania informacji: urządzenie USB Armory
Otwieranie obudowy
Identyfikowanie układów scalonych na płytce
Małe obudowy z wystającymi wyprowadzeniami: SOIC, SOP i QFP
Obudowy bez wystających wyprowadzeń: SO i QFN
Ball grid array
Chip scale packaging
DIP, przewlekane i inne
Przykładowe obudowy układów scalonych na PCB
Identyfikowanie innych komponentów na płycie
Mapowanie PCB
Użycie do mapowania skanowania ścieżką krawędziową JTAG
Odtwarzanie informacji z oprogramowania układowego
Uzyskiwanie obrazu oprogramowania układowego
Analizowanie obrazu oprogramowania układowego
Podsumowanie
4
SŁOŃ W SKLEPIE Z PORCELANĄ.
Wprowadzanie błędów do mechanizmów bezpieczeństwa
Obchodzenie weryfikacji podpisu oprogramowania układowego
Uzyskiwanie dostępu do zablokowanej funkcjonalności
Odtwarzanie kluczy kryptograficznych
Ćwiczenie z wstrzykiwaniem błędów do OpenSSH
Wstrzykiwanie błędów do kodu w C
Wstrzykiwanie błędów do kodu maszynowego
Słoń wstrzykiwania błędów
Urządzenie cel oraz rezultat błędu
Narzędzia do wstrzykiwania błędów
Przygotowanie i kontrola celu
Metody wyszukiwania błędów
Odkrywanie prymitywów błędów .
Poszukiwanie skutecznych błędów
Strategie poszukiwań
Analizowanie rezultatów
Podsumowanie
94
.125
.142
.143
.143
.144
.146
.147
.147
.149
NIE LIŻ PRÓBNIKA. JAK WSTRZYKIWA
Wstrzykiwanie błędu zegara
Metastabilność
Analiza wrażliwości na błędy
Ograniczenia
Wymagany sprzę
Parametry wstrzykiwania błędu zegara
Wstrzykiwanie błędu napięcia
Generowanie zakłóceń napięcia
Budowanie wstrzykiwacza wykorzystującego przełączanie
Wstrzykiwanie błędów typu crowbar
Atakowanie błędami Raspberry Pi z użyciem crowbara
Poszukiwanie parametrów wstrzykiwania błędu napięcia
Wstrzykiwanie błędów elektromagnetycznych
Generowanie błędów elektromagnetycznych
Architektury do wstrzykiwania błędów elektromagnetycznych
Kształty i szerokości impulsów EMFI
Poszukiwanie parametrów wstrzykiwania błędu elektromagnetycznego
Wstrzykiwanie błędów optycznych
Przygotowywanie chipa
Ataki z przodu i z tyłu
Źrodła światła
Konfiguracja wstrzykiwania błędów optycznych
.186
.186
.191
.193
.200
.202
.204
Konfigurowalne parametry wstrzykiwania błędów optycznych . . . . . .213
Wstrzykiwanie body biasing
Parametry dla wstrzykiwania body biasing
Wyzwalanie błędów w sprzęcie
Postępowanie z nieprzewidywalnymi czasami celu
Podsumowanie
6
CZAS NA BADANIA. LABORATORIUM
WSTRZYKIWANIA BŁĘDÓW
Akt 1: prosta pętla
Grillowa zapalniczka bólu
Akt 2: wstawianie przydatnych zakłóceń
Zakłócenie crowbar powodujące błąd w danych konfiguracyjnych
Wstrzykiwanie błędów multipleksacją
Akt 3: różnicowa analiza błędów
Nieco matematyki dotyczącej RSA
Zdobywanie prawidłowego podpisu z celu
Podsumowanie .
TO JEST TO MIEJSCE. ZRZUT PAMIĘCI PORTFELA TREZOR ONE . .259
Wprowadzenie do ataku
Wewnętrzne elementy portfela Trezor One
Wprowadzanie błędu do żądania odczytu USB
Deasemblacja kodu .
Budowanie oprogramowania układowego i walidowanie zakłócenia
Wyzwalanie i określanie odpowiedniego momentu
Zakłócanie przez obudowę
Konfigurowanie
Przegląd kodu do wstrzykiwania błędów
Uruchomienie kodu
Potwierdzanie zrzutu
Dostrajanie impulsu EM
Dostrajanie momentu błędu na podstawie komunikatów USB
Podsumowanie
Ataki czasowe
Atak czasowy na dysk twardy
Pomiary mocy dla ataków czasowych
Prosta analiza mocy
Zastosowanie SPA od RSA
Zastosowanie SPA do RSA, ponownie
SPA na ECDSA
Podsumowanie
9
CZAS NA BADANIA. PROSTA ANALIZA MOCY
Domowe laboratorium
Budowanie podstawowego środowiska sprzętowego
Kupowanie narzędzi
Przygotowywanie kodu celu
Budowanie konfiguracji
Zbieranie wszystkiego razem: atak SPA
Przygotowanie celu
Przygotowanie oscyloskopu
Analiza sygnału
Oskryptowanie komunikacji i analizy
Oskryptowanie ataku
Przykład z ChipWhisperer-Nano
Budowanie i ładowanie oprogramowania układowego
Pierwsze spojrzenie na komunikację
Przechwytywanie śladu
Od śladu do ataku
Podsumowanie
.322
DZIELENIE
Wewnątrz mikrokontrolera
Zmiana napięcia na kondensatorze
Od mocy do danych i na odwrót
Przykład seksownych XOR-ów
Atak z użyciem różnicowej analizy mocy
Przewidywanie poboru mocy na podstawie założenia dotyczącego wycieków
Atak DPA w Pythonie
Poznaj swojego wroga: standardowy kurs łamania zaawansowanego szyfrowania
Atakowanie AES-128 z użyciem DPA
Korelacja w ataku z analizą mocy
Współczynnik korelacji
Atakowanie AES-128 z użyciem CPA
Komunikacja z urządzeniem celem
Szybkość przechwytywania oscyloskopu
Podsumowanie
Główne przeszkody
Potężniejsze ataki
Mierzenie powodzenia
Metryki oparte na wskaźniku powodzenia
Metryki oparte na entropii
Progresja pików korelacji
Wysokość pików korelacji
Pomiary na rzeczywistych urządzeniach
Działanie urządzenia
Sonda pomiarowa
Określanie wrażliwych sieci zasilania
Automatyczne skanowanie z użyciem sondy
Konfiguracja oscyloskopu
Analiza i przetwarzanie zbiorów śladów
Techniki analizy
Techniki przetwarzania
Głębokie uczenie z wykorzystaniem splotowych sieci neuronowych
Podsumowanie
Środowisko programu rozruchowego
Protokół komunikacyjny programu rozruchowego
Szczegóły AES-256 CBC
Atakowanie AES-256
Pozyskanie i budowa kodu programu rozruchowego
Uruchamianie celu i przechwytywanie śladów
Obliczanie CRC
Komunikacja z programem rozruchowym
Przechwytywanie ogólnych śladów
Przechwytywanie szczegółowych śladów
Analiza .
Klucz rundy 14
Klucz rundy 13
Odtwarzanie IV
Co należy przechwycić
Generowanie pierwszego śladu
Generowanie reszty śladów
Analiza
Atakowanie podpisu
Teoria ataku
Ś
mocy
Analiza
Wszystkie cztery bajty
Podglądanie kodu źródłowego programu rozruchowego
Moment sprawdzania podpisu
Podsumowanie
13
BEZ ŻARTÓW. PRZYKŁADY Z ŻYCIA
Ataki z wstrzykiwaniem błędów
Nadzorca w PlayStation 3
Xbox 360
Hakowanie z analizą mocy
Hakowanie żarówek Philips Hue
POMYŚL O DZIECIACH. ŚRODKI ZAPOBIEGAWCZE, CERTYFIKATY I DALSZE KROKI
Środki zapobiegawcze
Wdrażanie środków zapobiegawczych
Weryfikacja środków zapobiegawczych
Certyfikaty branżowe
Zwiększanie umiejętności
Podsumowanie
A CZAS ZAKUPÓW. WYPOSAŻENIE
Sprawdzanie połączeń i napięcia: od $50 do $500
Lutowanie precyzyjne: od 50$ do 1500$
Odlutowywanie: od 30$ do 500$
Lutowanie i odlutowywanie elementów montowanych powierzchniowo: od 100$ do 500$ . .
Modyfikowanie PCB: od $5 do $700 .
Mikroskopy optyczne: od $200 do $2,000
Fotografowanie płyt: od $50 do $2,000
Zasilanie: od $10 do $1 000
Podgląd przebiegów analogowych (oscyloskopy): od $300 do $25 000
Głębokość pamięci
Częstotliwość próbkowania
Szerokość pasma
Inne parametry
Podgląd przebiegów logicznych: od $300 do $8000
Wyzwalanie w magistralach szeregowych: od $300 do $8000
Dekodowanie protokołów szeregowych: od $50 do $8000.
Podsłuchiwanie i wyzwalanie magistrali CAN: od $50 do $5000
Podsłuchiwanie Ethernetu: $50
Interakcja przez JTAG: od $20 do $10,000
Ogólny JTAG i skanowanie granic
Debugowanie JTAG .
Komunikacja PCIe: od $100 do $1,000 .
Podsłuchiwanie USB: od $100 do $6,000
Wyzwalanie USB: od $250 do $6,000
Emulacja USB: $100
Połączenia Flash SPI: od $25 do $1000.
Pomiary w analizie mocy: od $300 do $50000
Wyzwalanie na podstawie przebiegów analogowych: powyżej $3800
Mierzenie pól magnetycznych: od $25 do $10,000
Wstrzykiwanie błędów zegara: od $100 do $30000
Wstrzykiwanie błędów napięcia: od $25 do $30000
Wstrzykiwanie błędów elektromagnetycznych: od $100 do $50000
Wstrzykiwanie błędów optycznych: od $1000 do $250000
Pozycjonowanie sond: od $100 do $50000
Urządzenia docelowe: od $10 do $10000
SPI Flash
Konektory 0,1 cala
Arm JTAG z 20 pinami
PowerPC JTAG z 14 pinami
Konektory 0,05 cala
Arm Cortex JTAG/SWD
Konektor Ember Packet Trace Port
.533
.535
Dekapsulacja, usuwanie warstw ochronnych i ponowne łączenie
Dekapsulacja to proces usuwania części materiału z obudowy układu scalonego za pomocą środków chemicznych, zwykle przez wkraplanie oparów kwasu azotowego lub siarkowego na obudowę chipa, aż się ona rozpuści. Rezultatem jest dziura w obudowie, przez którą można zbadać sam mikrochip. Jeśli zostanie to zrobione poprawnie, to chip nadal będzie działał.
Dekapsulację można przeprowadzić w domu, o ile na miejscu dysponujemy wyciągiem laboratoryjnym i innymi zabezpieczeniami. Dla odważnych: szczegółowe informacje o tym, jak przeprowadzić dekapsulację w warunkach domowych, zawiera biblia PoC||GTFO wydana przez No Starch Press.
Podczas usuwania warstw ochronnych (ang. depackaging) obudowę zanurza się w kwasie, po czym w rezultacie dostępne jest wnętrze chipa. Aby przywrócić jego funkcjonalność, należy ponownie połączyć chip, co oznacza ponowne podłączenie maleńkich wyprowadzeń, które normalnie łączą go z pinami w obudowie (patrz rysunek 1.8).

Rysunek 1.8. Odsłonięty chip wraz z jego widocznymi drucikami połączeniowymi (Travis Goodspeed, licencja CC BY 2.0)
Mimo że mogą one paść w trakcie tego procesu, uszkodzone chipy nadają się do tworzenia obrazów i optycznej inżynierii odwrotnej. Jednak w wypadku większości ataków chipy muszą być sprawne.
Obrazowanie mikroskopowe i inżynieria wsteczna
Po odsłonięciu wnętrza chipa pierwszym krokiem jest identyfikacja jego większych bloków funkcjonalnych, a konkretnie – znalezienie interesujących bloków. Rysunek 1.2 pokazuje niektóre z tych struktur. Największymi blokami na matrycy będzie pamięć, taka jak statyczna pamięć RAM (SRAM) dla pamięci podręcznej procesora lub pamięć TCM (ang. tightly coupled memory), oraz ROM dla kodu rozruchu. Wszelkie długie, w większości proste wiązki linii to magistrale łączące procesory i urządzenia peryferyjne. Znajomość względnych rozmiarów i tego, jak wyglądają poszczególne struktury, pozwala rozpocząć inżynierię odwrotną chipów.
Gdy odsłonięte jest wnętrze chipa, jak na rysunku 1.8, widać tylko górną warstwę metaliczną. Aby wykonać inżynierię wsteczną całego chipa, musimy go podzielić na warstwy, co oznacza zdjęcie poszczególnych metalicznych warstw chipa, aby odsłonić kolejne, znajdujące się pod nim.
Rysunek 1.9 przedstawia przekrój uk ł adu scalonego w technologii CMOS (ang. complementary metal oxide semiconductor), która jest sposobem budowy większości współczesnych układów. Jak widać, tranzystory (krzem polikrystaliczny / podłoże) łączy wiele warstw i przelotek z metali zawierających miedź. Warstwa metaliczna najniższego poziomu służy do tworzenia standardowych komórek, które są elementami tworzącymi bramki logiczne (AND, XOR itd.) z wielu tranzystorów. Warstwy metaliczne najwyższego poziomu są zwykle używane do zarządzania zasilaniem i zegarem.
Warstwa metaliczna 3
Warstwa metaliczna 2
Warstwa metaliczna 1
Krzem polikrystaliczny (polikrzem)
Podłoże
Rysunek 1.9. Przekrój układu scalonego w technologii CMOS
jamy ustnej. Wprowadzenie
Zastanówmy się, co się dzieje, gdy dodatnie zbocze zegara trafia w rejestr wejściowy podawany do RCA. Pamięć rejestru i wyjście zmieniają się na wartość podawaną do nich. Gdy tylko zmieni się wyjście, sygnały zaczynają propagować się przez RCA, co oznacza, że propagują się przez sumatory pełne jeden po drugim. W końcu docierają do rejestru wyjściowego podłączonego do RCA. Przy następnym dodatnim zboczu zegara stan rejestru wyjściowego zmienia się na wynik z RCA. Czas potrzebny na przejście sygnałów z wejścia układu kombinacyjnego do wyjścia nazywany jest opóźnieniem propagacji. Opóźnienie propagacji zależy od wielu czynników, w tym liczby i rodzaju bramek w układzie, sposobu ich połączenia, wartości danych na wejściu, ale także od cech tranzystorów, temperatury i napięcia zasilania. Dlatego każdy układ kombinacyjny w chipie ma swoje własne opóźnienie propagacji. Oprogramowanie do automatyzacji projektowania układów elektronicznych (EDA, ang. electronic design automation) może znaleźć najgorsze opóźnienie propagacji w obwodzie za pomocą statycznej analizy czasowej. To najgorsze opóźnienie propagacji to długość ścieżki krytycznej, która ogranicza zakresy operacyjne konstrukcji chipa. Jest to w szczególności wykorzystywane do obliczania maksymalnej częstotliwości zegara, z jaką może działać układ. Gdy chip przekroczy maksymalną częstotliwość taktowania, sygnał wejściowy ze ścieżki krytycznej nie zostanie w pełni rozpropagowany do wyjścia przed następnym zboczem zegara, co oznacza, że rejestry wyjściowe mogą przechowywać wartość, która nie jest poprawną wartością wyjściową układu. (I co, nie brzmi to jak błąd, prawda?)
Jak się okazuje, aby przerzutniki działały poprawnie, potrzebują stabilnego sygnału wejściowego przez krótki czas przed zboczem zegara i po nim, zwany odpowiednio czasem ustalania (ang. setup time) i czasem podtrzymania (ang. hold time). Nic więc dziwnego, że gdy dane zmieniają się na wejściu rejestru tuż przed zboczem zegara, pojawia się naruszenie czasu ustalania, a gdy zmieniają się tuż po nim, to następuje naruszenie czasu podtrzymania. Atakujący może spowodować tego rodzaju naruszenia (a tym samym powodując błąd) przez operowanie urządzeniem poza określonymi zakresami częstotliwości zegara, napięcia zasilania albo temperatury.
Rysunek 5.2 przedstawia proste urządzenie cyfrowe zawierające dwa rejestry, z których każdy zawiera bajt danych.
W normalnej sytuacji każdy rejestr przechowuje bajt danych (rejestr składa się z ośmiu przerzutników), a stan bitów tworzących bajt jest przenoszony między rejestrami na dodatnim zboczu zegara. Po pierwszym zboczu zegara oba rejestry przechowują bajty 0xA2 i 0x9B. Następny bajt wejściowy, 0x17, czeka przed lewym rejestrem, a 0xA2 czeka przed prawym rejestrem. Przy drugim zboczu zegara 0x17 przesuwa się do lewego rejestru. Prawy rejestr odczytuje wyjście lewego rejestru (0xA2) i po krótkim czasie pojawia się ono na wyjściu prawego rejestru. Kolejne przesunięcie danych od lewej do prawej następuje przy następnym zboczu zegara.
Rysunek 5.2. Prosty rejestr przesuwny działający poprawnie
Rysunek 5.3 pokazuje ten sam układ działający z zaburzonym zegarem, w którym wprowadzamy bardzo krótki cykl.
Rysunek 5.3. Prosty rejestr przesuwny działający niepoprawnie
Numer próbki (20MS/s)
Rysunek 6.10. lad mocy z procesu rozruchu LPC1114, zmierzony za pomoc programu na listingu 6.6
W kodzie z listingu 6.7 parametr scope.glitch.repeat okre la, przez ile cykli zak ócenie b dzie „stosowane” (szeroko zak ócenia z Rozdzia u 5). Parametr scope.glitch.ext_o set to przesuni cie od zdarzenia wyzwalajcego do wstawienia zak ócenia, co okre la moment wyst pienia zak ócenia. Parametry s tutaj nieco „bezjednostkowe”, poniewa liczby reprezentuj liczb cykli opó nienia w oparciu o wewn trzny oscylator mikrokontrolera. Rzadko dbamy o „rzeczywiste” warto ci; chcemy tylko móc je odtworzy Poniewa warto ci repeat (szeroko zak ócenia) i ext_o set (przesuni cie zak ócenia) s wpisane na sta e, to zostan one automatycznie zastosowane przy nast pnym wyzwalaczu. Je li ponownie uruchomimy listing 6.6 (po wczeniejszym uruchomieniu listingu 6.7), otrzymamy teraz przebieg mocy z wstawionym w pewnym momencie zak óceniem. Rysunek 6.11 prezentuje wyniki.
Pomiar mocy (V)
Numer próbki (20MS/s)
Rysunek 6.11. Zak ócenie wstawione oko o cyklu 250 spowodowa o zresetowanie urz dzenia
W tym przyk adzie wygl da na to, e u ywamy zbyt agresywnego zak ócenia wstawianego w okolicach 250 cyklu zegara. Zak ócenie jest prawdopodobnie zbyt szerokie. Po wprowadzeniu zak ócenia urz dzenie wydaje si wyciszone. lad mocy nie wskazuje ju na wykonywanie kodu, co jest z e, poniewa prawdopodobnie uruchomili my reset przy spadku napi cia (brown-out detector) lub w inny sposób zresetowali my urz dzenie. Musimy dostosowa parametry i spróbowa ponownie.
Porównajmy to ze zmian warto ci scope.glitch.repeat na listingu 6.7, ustawiaj c repeat na 10. Rysunek 6.12 przedstawia lad mocy.
Numer próbki (20MS/s)
Rysunek 6.12. Zak ócenie wstawione oko o cyklu 250 nie przerwa o normalnego rozruchu
Nadal widzimy zak ócenie wprowadzone oko o cyklu 250, ale wydaje si , e urz dzenie nadal wykonuje kod! Chcemy przeczesa szeroko ci zak ócenia mi dzy tymi, które s za szerokie (powoduj reset), a tymi, które wydaj si pozwala urz dzeniu dzia a normalnie. Te pomiary z analizy mocy pozwalaj nam scharakteryzowa p ytk i zrozumie , jakich szeroko ci zak óce potrzebujemy w nast pnym kroku. W tym wypadku szeroko (ustawienie scope.glitch.repeat) wynosz ca 14 by a mniej wi cej górn granic , zanim urz dzenie cz sto zacznie si resetowa . Oznacza to, e w wypadku tej przyk adowej p ytki spróbujemy szeroko ci w zakresie od 9 do 14 (ustalenie dolnego kra ca jest nieco arbitralne; mo e by konieczne dalsze zmniejszenie warto ci dolnego kra ca, ale w pewnym momencie zak ócenie jest zbyt w skie i nie ma na nic wp ywu). Ponownie, jednostki te s wzgl dnie arbitralne; nie zale y nam na dok adnym pomiarze, poniewa po prostu znale li my zakres mi dzy resetowaniem urz dzenia a tym, w którym urzdzenie wydawa o si dzia a normalnie. Nale y zauwa y , e te liczby ró ni si w zale no ci od celu i kon guracji.
Próbuj c odtworzy to wstawienie zak ócenia za pomoc innego generatora sygna u ni ChipWhisperer-Nano, mo na atwo sprawdzi przy pomocy oscyloskopu, czy urz dzenie resetuje si po zak óceniu, czy te kontynuuje
Czas na badania. Laboratorium wstrzykiwania