101053580

Page 1


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)

UWAGA

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

Pomiar mocy (V)

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.