O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @...

96
O dwóch takich, co chcieli odblokować laptopa Security PWNing Conference 2017

Transcript of O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @...

Page 1: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

O dwóch takich, co chcieli odblokować laptopa

Security PWNing Conference 2017

Page 2: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

whoisSergiusz Bazański

W dzień DevOps, w nocy hardware hacker.

Współzałożyciel Warszawskiego Hackerspace’u.

Freelancer, Ex-Google.

Twitter: @q3k

IRC: q3k @ freenode.net

Michał Kowalczyk

Wicekapitan @ Dragon Sector

Researcher @ Invisible Things Lab

Współautor “Praktycznej Inżynierii Wstecznej”

Twitter: @dsredford

IRC: Redford @ freenode.net

Page 3: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Toshiba Portégé R100

Intel Pentium M 1 GHz256MB RAM

Page 4: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Mały problem...

Page 5: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Większy problem…?Reset zworką? Nie ma żadnej.

Wyciągnięcie baterii? Nic to nie daje.

Szuranie kluczem po wszystkich kościach pamięci w

nikłej nadziei na błąd checksumy?

Punkty za styl. Niestety nie.

Page 6: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Aha!

Page 7: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Analiza BIOS-u

Page 8: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Jak zdobyć kod BIOS-u?

Pamięć fizyczna? Nie z zablokowanym laptopem.

Dump kości Flasha? Ech.

Rozpakowanie aktualizacji? Spróbujmy!

Page 9: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Rozpakowanie aktualizacji

https://support.toshiba.com/

Page 10: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

7-Zip

Page 11: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

+254 KB skompresowanych danych

Page 12: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

DekompresjaNieznany format

Domyślny updater to 16-bit EXE

Jest alternatywny, 32-bit!

Page 13: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Dekompresja

BuIsFileCompressed

BuGetFileSize

BuDecodeFile

Page 14: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Dekompresja50 linii C i mamy dekompresor!

...

BuIsFileCompressed(compressed, &is_compressed);

if (is_compressed) {

BuDecodeFile(compressed, fsize, decompressed);

}

...

Page 15: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Rezultat

Page 16: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Dump flasha BIOS-u

Page 17: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Gdzie szukać?

Page 18: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Identyfikowanie układów na szybko

RAM Flash uC / wszystko inne

WLPPZ2137ST 1308

Model

Datecode

Page 19: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Interfejsowanie

In-circuit: układ pozostaje na oryginalnym PCB.

Out-of-circuit (?): wylutowanie układu, wlutowanie

do breakoutu.

Page 20: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Breakout board et al.

Projekt w KiCAD (lub czymkolwiek innym).

Wykonanie PCB metodą chałupniczą (termotransfer).

Wylutowanie hot-airem, wlutowanie grotem.

Page 21: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Narzędzia

~200zł ~300zł

~10zł

Page 22: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Hackerspace100zł/msc. + piwo

Page 23: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible
Page 24: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

FPGA(Spartan 3E)

Flash

Masa drutów

xD

Page 25: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible
Page 26: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Breakout Board

Setup

FlashFPGADevboard

A/A Mux(~30 linii)PC Serial

(2 linie)

Pobierz blok X

Słowo

X * 1024 + 4

Słowo

1k danych

X * 1024

X * 1024 + …

Słowo

Page 27: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Breakout Board

Problemy

FlashFPGADevboard

A/A Mux(~30 linii)PC Serial

(2 linie)

Pobierz blok X

Słowo

X * 1024 + 4

Słowo

1k danych

X * 1024

X * 1024 + …

SłowoBrak checksum

Pomieszane linie adresu

Page 28: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

FPGA?

FPGA było niepotrzebne - użyte tylko dla ilości pinów.

Względnie trudne do debugowania i rozwijania.

Trzeba było użyć uC z większą ilością I/O albo multiplexera.

Ale nauczyliśmy się czegoś po drodze,

więc ¯\_(ツ)_/¯ .

Page 29: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible
Page 30: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Analiza kodu BIOS-u

Page 31: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Jak zacząć?Tryb procesora?

Entry point?

Mapa pamięci?

Page 32: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Start procesora“A hardware reset sets each processor’s registers to

a known state and places the processor in

real-address mode.”

Intel® 64 and IA-32 Architectures

Software Developer’s Manual Volume 3

Page 33: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible
Page 34: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Start procesoraStartujemy pod adresem

CS:EIP = CS.Base + EIP = 0xFFFFFFF0

Real Mode ⇒ adres fizyczny. A20 włączone.

Tylko co tam jest?

Page 35: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Mapowanie pamięciNorthbridge: Intel Odem MCH-M

Brak informacji o tym rejonie ⇒ sprawdźmy

southbridge

Page 36: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Mapowanie pamięciSouthbridge: Intel ICH4-M

FWH = Firmware Hub = BIOS flash

Nasz dump ma dokładnie 0x80000 bajtów!

Page 37: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Więcej mapowań

...

Page 38: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Entry pointFFFFFFF0: jmp far FC00:3FA0

000FFFA0: jmp far FC00:00A2

000FC0A2: cli

000FC0A3: cld

000FC0A4: mov al, 2

000FC0A6: out 92h, al ; Włączenie A20 ...

Page 39: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

RE BIOS-u: InicjalizacjaBrak stosu! (i w ogóle RAM-u)

16-bit Protected Mode + Unreal Mode

Sumy kontrolne

Inicjalizacja RAM-u

Skopiowanie się do RAM-u

Page 40: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

RE BIOS-u: Inicjalizacja

16-bit Protected Mode → segmenty!

Musimy sparsować GDT

Dopiero po tym możemy analizować kod

Page 41: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

RE BIOS-u: Sprawdzanie hasła

Page 42: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

RE BIOS-u: Sprawdzanie hasłaWszystko trafia do jednej funkcji

f(in_buf) → out_buf

Po długiej analizie: wszystko trafia na porty 62h i

66h

Page 43: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

RE BIOS-u: Sprawdzanie hasłaManual southbridge’a:

Table 6-2. Fixed I/O Ranges Decoded by Intel ICH4

Page 44: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

“Microcontroller”???

Page 45: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC/KBC

CPU

Intel Pentium M

Northbridge

Intel Odem

MCH-M

RAM

GPU

Trident XP4

Southbridge

Intel ICH4-M

HDD Audio

Ethernet

LPC

EC/KBC

Renesas

M306K9FC

LRP

Battery

Keyboard

PSC

Touchpad

BIOS

Page 46: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: DumpSkąd wziąć kod?

Aktualizacje!

Page 47: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: DumpBrak aktualizacji do pobrania

Changelog BIOS-u: też nic o EC

Może podobny model?

Portégé S100!

Page 48: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Aktualizacje

W środku 3 bloby z

aktualizacjami

(w różnych wersjach)

Page 49: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Instalator aktualizacjiUżywa portów 62h i 66h

Wysyła część 1. (~2,5KB)

Wysyła część 2. (~100KB)

Page 50: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Blob aktualizacjiDekodowane w środku EC - nie mamy kodu :(

Spróbujmy jego analizy!

Page 51: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Blob aktualizacji - analizaWysoka entropia ⇒ szyfrowanie lub kompresja

Brak regularności w trigramach ⇒ szyfrowanie

Rozmiar zawsze podzielny przez 8 ⇒ szyfrowanie

Krótkie najdłuższe powtórzone podsłowo ⇒ jeśli szyfrowanie, to nie ECB

Page 52: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Blob aktualizacji - analiza

Wygląda to na ślepy zaułek...

Page 53: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Sergiusz, wylutowałbyś mi jeszcze jedną rzecz…?

Page 54: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC..?

Page 55: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Jeden breakout później...

Page 56: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

No to dumpujemy?

Page 57: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Protokół

M16CProgramator

SCLK

RXD

TXD

Busy

Page 58: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Protokół

Page 59: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: ProtokółM16CProgramator

Flash Page X?

Flash Page X

Page 60: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

A jednak nie tak łatwo.

Page 61: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: ProtokółM16CProgramator

ID Check (K0...K6)

Status?

Status (Unlocked/locked)

Flash Page X?

Flash Page X

Page 62: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Sidechannel

Page 63: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Możliwe ataki sidechannel

Analiza zużycia prądu

Analiza elektromagnetyczna

Glitching (VCC, CLK, ...)

Page 64: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Ale może najpierw...

Page 65: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Możliwe ataki ‘side’channel - prościej

O tutaj.

Page 66: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Podatność

Analiza statystyczna czasu między wysłaniem

ostatniego bajtu PINu a opadnięciem linii Busy.

Page 67: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: PodatnośćM16CProgramator

ID Check - 00 FF FF FF FF FF FF

ID Check - 01 FF FF FF FF FF FF

ID Check - 02 FF FF FF FF FF FF

ID Check - .. FF FF FF FF FF FF

ID Check - FE FF FF FF FF FF FF

ID Check - FF FF FF FF FF FF FF

Pomiar czasu odpowiedzi

Średni czas +3ms

Klucz:? ? ? ? ? ? ?

Page 68: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: PodatnośćM16CProgramator

ID Check - 00 FF FF FF FF FF FF

ID Check - 01 FF FF FF FF FF FF

ID Check - 02 FF FF FF FF FF FF

ID Check - .. FF FF FF FF FF FF

ID Check - FE FF FF FF FF FF FF

ID Check - FF FF FF FF FF FF FF

Pomiar czasu odpowiedzi

Średni czas +3ms

Klucz:02 ? ? ? ? ? ?

Page 69: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: PodatnośćM16CProgramator

ID Check - 02 00 FF FF FF FF FF

ID Check - 02 01 FF FF FF FF FF

ID Check - 02 03 FF FF FF FF FF

ID Check - 02 .. FF FF FF FF FF

ID Check - 02 FE FF FF FF FF FF

ID Check - 02 FF FF FF FF FF FF

Pomiar czasu odpowiedzi

Średni czas +3ms Klucz:

02 FE ? ? ? ? ?

Page 70: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Podatność

FPGA(iCE40)

(EC)M16C

Page 71: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Podatność

PoC || GTFO

https://github.com/q3k/m16c-interface/

Page 72: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: RE

Kod

(~700 funkcji)

Dane

Kryptografia

Bootloader

Page 73: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: REZnacznie prostszy kod niż BIOS

Brak stringów

Szukamy komunikacji po LPC oraz tabeli

BIOS-calli

Page 74: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: REZnalezienie tabeli jest łatwe

~100 różnych wywołań

Znamy numery, które nas interesują ⇒ analiza

handlerów

Brzmi prosto…?

Page 75: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: RE handlerówRęczny context-switching

Brak spójnej konwencji wywołań

Brak podziału handlerów na funkcje

Skoki w środki funkcji

Page 76: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Sprawdzenie hasła: BIOSout_buf = call_EC(

func=0x24,

in_buf=MD5(input)[:8] + pwd_type

)

out_buf[0] == 0 ⇒ sukces

Page 77: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Sprawdzenie hasła: ECSpójrzmy na handler po stronie EC...

…6 poziomów w głąb:

BMGEU/C p6_4, p6

BSET pd6_4, pd6

JSR.W set_p6_5

JSR.W clear_p6_5

I/O na pinach 40 i 41

Page 78: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Sprawdzenie hasła: ECNo ile można? :(

Page 79: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Sprawdzenie hasła: ECTym razem to tylko EEPROM :)

EC czyta jeden blok, deszyfruje i porównuje z

otrzymanym MD5

Page 80: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Challenge/ResponseSzukamy uniwersalnego ataku

Pora na analizę challenge/response!

Page 81: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Challenge: BIOSout_buf = call_EC(

func=0x1A,

in_buf=rdtsc() + MD5(pc_serial)[:8]

)

challenge = bytes_to_string(out_buf)

Page 82: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Challenge: EC

7 random bytes

RDTSC

Checksum

PC_SERIAL_MD5

ENC

Entropy pool

DEC

CHALL 1 CHALL 2

Page 83: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Response: BIOSout_buf = call_EC(

func=0x1B,

in_buf=string_to_bytes(user_input)

)

out_buf[0] ⇒ sukces/porażka

Page 84: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

7 bytes CHK

DEC

DEC

RESP 1 RESP 2 PC_SERIAL_MD5

Verify

checksum

CHALL 2

ENC

== 0?

Page 85: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: SzyfrowanieENC? DEC?

Page 86: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: Szyfrowanie64-bitowy szyfr blokowy

ENCKEY A (256B) KEY B (128B)

INPUT (8B)

OUTPUT (8B)

Page 87: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Challenge/ResponseWystarczy przepisać do Pythona i ...

Page 88: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

DEMO!

Page 89: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: System aktualizacjiRozszyfrujmy aktualizacje!

Page 90: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

EC: System aktualizacjiPodpis symetryczny?

Możemy generować własne!

Page 91: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Ciekawe, jak to wygląda w nowych laptopach…?

Page 92: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Po co zmieniać kod, który działa? :)

Page 93: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

No i klucze w sumie też :)))

Page 94: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Impact

Odblokowanie dowolnego (biznesowego) laptopa.

Permanent rootkit w EC.

Możliwość atakowania hosta z EC.

Page 95: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Rootkit w EC?

DMA do hosta via LPC (ale nie na M16C) .

Keylogging & storage.

USB-Rubber-Ducky-like (wstrzykiwanie klawiszy / myszy).

Exploitowanie BIOS-u.

Page 96: O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @ freenode.net Michał Kowalczyk Wicekapitan @ Dragon Sector Researcher @ Invisible

Oficjalne stanowisko ToshibyToshiba is working on a temporary BIOS update that can be used to

prevent the security issue that has been raised and expects to release

this update on its website within the next 2 weeks.

Toshiba plans to start the release of a permanent fix for some models

from January, 2018 and will complete the releases of permanent fix for

all applicable models by the end of March 2018.