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

Post on 03-Jun-2020

3 views 0 download

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.