O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @...
Transcript of O dwóch takich, co chcieli odblokować laptopa · Freelancer, Ex-Google. Twitter: @q3k IRC: q3k @...
O dwóch takich, co chcieli odblokować laptopa
Security PWNing Conference 2017
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
Toshiba Portégé R100
Intel Pentium M 1 GHz256MB RAM
Mały problem...
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.
Aha!
Analiza BIOS-u
Jak zdobyć kod BIOS-u?
Pamięć fizyczna? Nie z zablokowanym laptopem.
Dump kości Flasha? Ech.
Rozpakowanie aktualizacji? Spróbujmy!
Rozpakowanie aktualizacji
https://support.toshiba.com/
7-Zip
+254 KB skompresowanych danych
DekompresjaNieznany format
Domyślny updater to 16-bit EXE
Jest alternatywny, 32-bit!
Dekompresja
BuIsFileCompressed
BuGetFileSize
BuDecodeFile
Dekompresja50 linii C i mamy dekompresor!
...
BuIsFileCompressed(compressed, &is_compressed);
if (is_compressed) {
BuDecodeFile(compressed, fsize, decompressed);
}
...
Rezultat
Dump flasha BIOS-u
Gdzie szukać?
Identyfikowanie układów na szybko
RAM Flash uC / wszystko inne
WLPPZ2137ST 1308
Model
Datecode
Interfejsowanie
In-circuit: układ pozostaje na oryginalnym PCB.
Out-of-circuit (?): wylutowanie układu, wlutowanie
do breakoutu.
Breakout board et al.
Projekt w KiCAD (lub czymkolwiek innym).
Wykonanie PCB metodą chałupniczą (termotransfer).
Wylutowanie hot-airem, wlutowanie grotem.
Narzędzia
~200zł ~300zł
~10zł
Hackerspace100zł/msc. + piwo
FPGA(Spartan 3E)
Flash
Masa drutów
xD
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
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
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 ¯\_(ツ)_/¯ .
Analiza kodu BIOS-u
Jak zacząć?Tryb procesora?
Entry point?
Mapa pamięci?
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
Start procesoraStartujemy pod adresem
CS:EIP = CS.Base + EIP = 0xFFFFFFF0
Real Mode ⇒ adres fizyczny. A20 włączone.
Tylko co tam jest?
Mapowanie pamięciNorthbridge: Intel Odem MCH-M
Brak informacji o tym rejonie ⇒ sprawdźmy
southbridge
Mapowanie pamięciSouthbridge: Intel ICH4-M
FWH = Firmware Hub = BIOS flash
Nasz dump ma dokładnie 0x80000 bajtów!
Więcej mapowań
...
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 ...
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
RE BIOS-u: Inicjalizacja
16-bit Protected Mode → segmenty!
Musimy sparsować GDT
Dopiero po tym możemy analizować kod
RE BIOS-u: Sprawdzanie hasła
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
RE BIOS-u: Sprawdzanie hasłaManual southbridge’a:
Table 6-2. Fixed I/O Ranges Decoded by Intel ICH4
“Microcontroller”???
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
EC: DumpSkąd wziąć kod?
Aktualizacje!
EC: DumpBrak aktualizacji do pobrania
Changelog BIOS-u: też nic o EC
Może podobny model?
Portégé S100!
EC: Aktualizacje
W środku 3 bloby z
aktualizacjami
(w różnych wersjach)
EC: Instalator aktualizacjiUżywa portów 62h i 66h
Wysyła część 1. (~2,5KB)
Wysyła część 2. (~100KB)
EC: Blob aktualizacjiDekodowane w środku EC - nie mamy kodu :(
Spróbujmy jego analizy!
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
EC: Blob aktualizacji - analiza
Wygląda to na ślepy zaułek...
Sergiusz, wylutowałbyś mi jeszcze jedną rzecz…?
EC..?
Jeden breakout później...
No to dumpujemy?
EC: Protokół
M16CProgramator
SCLK
RXD
TXD
Busy
EC: Protokół
EC: ProtokółM16CProgramator
Flash Page X?
Flash Page X
A jednak nie tak łatwo.
EC: ProtokółM16CProgramator
ID Check (K0...K6)
Status?
Status (Unlocked/locked)
Flash Page X?
Flash Page X
Sidechannel
Możliwe ataki sidechannel
Analiza zużycia prądu
Analiza elektromagnetyczna
Glitching (VCC, CLK, ...)
Ale może najpierw...
Możliwe ataki ‘side’channel - prościej
O tutaj.
EC: Podatność
Analiza statystyczna czasu między wysłaniem
ostatniego bajtu PINu a opadnięciem linii Busy.
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:? ? ? ? ? ? ?
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 ? ? ? ? ? ?
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 ? ? ? ? ?
EC: Podatność
FPGA(iCE40)
(EC)M16C
EC: Podatność
PoC || GTFO
https://github.com/q3k/m16c-interface/
EC: RE
Kod
(~700 funkcji)
Dane
Kryptografia
Bootloader
EC: REZnacznie prostszy kod niż BIOS
Brak stringów
Szukamy komunikacji po LPC oraz tabeli
BIOS-calli
EC: REZnalezienie tabeli jest łatwe
~100 różnych wywołań
Znamy numery, które nas interesują ⇒ analiza
handlerów
Brzmi prosto…?
EC: RE handlerówRęczny context-switching
Brak spójnej konwencji wywołań
Brak podziału handlerów na funkcje
Skoki w środki funkcji
Sprawdzenie hasła: BIOSout_buf = call_EC(
func=0x24,
in_buf=MD5(input)[:8] + pwd_type
)
out_buf[0] == 0 ⇒ sukces
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
Sprawdzenie hasła: ECNo ile można? :(
Sprawdzenie hasła: ECTym razem to tylko EEPROM :)
EC czyta jeden blok, deszyfruje i porównuje z
otrzymanym MD5
Challenge/ResponseSzukamy uniwersalnego ataku
Pora na analizę challenge/response!
Challenge: BIOSout_buf = call_EC(
func=0x1A,
in_buf=rdtsc() + MD5(pc_serial)[:8]
)
challenge = bytes_to_string(out_buf)
Challenge: EC
7 random bytes
RDTSC
Checksum
PC_SERIAL_MD5
ENC
Entropy pool
DEC
CHALL 1 CHALL 2
Response: BIOSout_buf = call_EC(
func=0x1B,
in_buf=string_to_bytes(user_input)
)
out_buf[0] ⇒ sukces/porażka
7 bytes CHK
DEC
DEC
RESP 1 RESP 2 PC_SERIAL_MD5
Verify
checksum
CHALL 2
ENC
== 0?
EC: SzyfrowanieENC? DEC?
EC: Szyfrowanie64-bitowy szyfr blokowy
ENCKEY A (256B) KEY B (128B)
INPUT (8B)
OUTPUT (8B)
Challenge/ResponseWystarczy przepisać do Pythona i ...
DEMO!
EC: System aktualizacjiRozszyfrujmy aktualizacje!
EC: System aktualizacjiPodpis symetryczny?
Możemy generować własne!
Ciekawe, jak to wygląda w nowych laptopach…?
Po co zmieniać kod, który działa? :)
No i klucze w sumie też :)))
Impact
Odblokowanie dowolnego (biznesowego) laptopa.
Permanent rootkit w EC.
Możliwość atakowania hosta z EC.
Rootkit w EC?
DMA do hosta via LPC (ale nie na M16C) .
Keylogging & storage.
USB-Rubber-Ducky-like (wstrzykiwanie klawiszy / myszy).
Exploitowanie BIOS-u.
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.