Du bist hier:Start»Wissen»UEFI BIOS

Ein Blick ins UEFI BIOS

ACHTUNG ! Diese Seite befindet sich noch im Aufbau.

24.05.2020

BIOS Chip

Das Basic Input Output System (BIOS) ist eines der ersten Komponenten, die beim Starten eines Computers ausgeführt werden. Das Unified Extensible Firmware Interface (kurz UEFI) versucht diesen Startvorgang zu vereinheitlichen. Die UEFI Programme und die Einstellungen des Computerstarts werden in einem Mikrochip (Flashspeicher) gespeichert. Weil das BIOS zunehmend dafür mißbraucht wird, den ComputernutzerInnen ihre Rechte zu entziehen, lohnt es sich ein wenig Wissen über das UEFI BIOS aufzubauen.

Hardware

Aufgrund von Standardisierung wird das UEFI BIOS meist in einem Chip mit 8 äußeren Metallkontakten gespeichert. Das kann ein SOIC8-Chip (Small Outline Integrated Circuit) oder neuerdings ein 8-WSON-Package (Very-very-thin small-outline no-lead package) sein. Die meisten BIOS-Chips lassen sich über das "Serial Peripheral Interface" (SPI) beschreiben oder auslesen und sind indirekt mit der zentralen Recheneinheit des Computers (CPU) verbunden. Zum Auslesen des BIOS-Chips an einem anderen Computer habe ich mir den USB-Stick "Programmer CH341a" gekauft. Dieser USB-Stick kann das SPI-Protokoll auf eine USB-Schnittstelle umsetzen. An den USB-Stick wird ein Flachbandkabel mit SOIC8-Clip angeschlossen. ACHTUNG ! Der USB-Stick CH341a benutzt 3,3 Volt. Vor dem Anschließen des SOIC8-Clips sollte die Spannung aus dem Datenblatt des BIOS-Chips verglichen werden (z.B. 2,7V bis 3,6V).

USB-Stick CH341a

USB-Stick CH341a

Es gibt nur zwei Möglichkeiten den SOIC8-Clip an den BIOS-Chip zu klammern. Die rot markierte Leitung muss auf die Seite, wo der Punkt auf dem Chip ist (Pin 1). Bei einem HP Probook 640 G2 sieht das zum Beispiel so aus:

BIOS-Chip im HP Probook 640 G2

BIOS-Chip von Winbond im HP Probook 640 G2

Um an den BIOS-Chip zu kommen, muss die Unterseite des HP Probooks aufgeschraubt werden. Der Chip befindet sich in diesem Fall auf dem Mainboard zwischen Netzwerkanschluß und Festplatte.

HP Probook 640 G2 Unterseite

HP Probook 640 G2 Unterseite

Der BIOS-Chip muss nicht ausgelötet werden. Stattdessen wird jetzt die SOIC8-Klammer so auf den BIOS-Chip gesetzt, dass die rote Leitung auf Pin 1 ist. ACHTUNG ! Vorher sollte das Netzkabel vom Laptop gezogen und der Akku abgezogen oder herausgenommen werden.

SOIC8-Clip auf dem BIOS-Chip

SOIC8-Clip auf dem BIOS-Chip

Anfangs hatte ich noch Bedenken wegen des langen Flachbandkabels. Aber das hat ohne Probleme funktioniert. Sollte vom BIOS-Chip keine Rückmeldung kommen, so muss die Klammer noch einmal neu auf den Chip gesetzt werden.

Der SOIC8-Clip paßt nicht auf jeden BIOS-Chip. Bei einem WSON Package helfen zum Beispiel die Nadeln "PCBite" von Sensepeek.

Alternative zum SOIC8-Clip

Alternative zum SOIC8-Clip

Der Standfuß von PCBite ist magnetisch und hält zum Beispiel an einer Schraubzwinge. Leider haben die Abtaster PCBite auch einige Nachteile (neben dem hohen Preis): an einigen Stellen sind sie zu breit, so dass sie nicht gut nebeneinander an den Chip passen. Außerdem ist der untere Bereich mit den Nadeln nicht isoliert, so dass es bei unvorsichtigem Umgang zu einem Kurzschluss kommen könnte.

Abtastnadeln PCBite auf dem BIOS Chip

Abtastnadeln PCBite auf dem BIOS Chip

Abtastnadeln PCBite auf einem SOIC8

Abtastnadeln PCBite auf einem SOIC8

Eine Alternative zum USB-Stick CH341a ist zum Beispiel der Raspberry Pi mit seinen GPIO Pins. Auf den Raspberry Pi gehe ich in diesem Artikel aber nicht ein.

Software

Um den Programmer CH341a unter dem Betriebssystem Linux Mint anzusprechen, gibt es das Programm "flashrom".

# install flashrom and libraries for development
apt install flashrom libpci-dev libusb-1.0.0-dev

# download the flashrom source code
wget https://download.flashrom.org/releases/flashrom-v1.2.tar.bz2

# extract
tar xvf flashrom-v1.2.tar.bz2

# build
cd flashrom-v1.2
make
sudo make install

# become root
sudo bash

# scan which BIOS chip this could be
flashrom --programmer ch341a_spi

# if you know which chip, then you can use verbose mode
flashrom -V --programmer ch341a_spi -c W25Q128.V

# read the BIOS contents
flashrom --programmer ch341a_spi -r backup.bin

Nach dem Lesen des BIOS-Speichers mit flashrom, zeigt das UEFI Tool den Inhalt an.

# download UEFI tool
wget https://github.com/LongSoft/UEFITool/releases/download/A57/UEFITool_NE_A57_linux_x86_64.zip

# extract
unzip UEFITool_NE_A57_linux_x86_64.zip

# start UEFI tool
./UEFITool
UEFI Tool zeigt VSS2 Store an

UEFI Tool zeigt VSS2 Store an

Das UEFI-Tool kann die Startadresse und die Größe des VSS2 Stores anzeigen. VSS ist ein Speicherformat des Chip-Herstellers Intel. In diesem VSS2-Bereich sind nicht-flüchtige also dauerhafte Daten (NVRAM) gespeichert. Im oberen Beispiel des HP BIOS ist die hexadezimale Startadresse 0xB10048 und die Größe dieses Speicherbereichs sind 122808 Byte (Full size).

Flashrom unter der Lupe

Die USB-Kommunikation mit dem Programmer CH341a läßt sich mit dem Programm "Wireshark" erkunden.

# become root
sudo bash

# add module for USB monitoring
modprobe usbmon

# list usb devices
lsusb

Bus 002 Device 005: ID 1a86:5512 QinHeng Electronics CH341 in EPP/MEM/I2C mode, EPP/I2C adapter

# if the USB Bus is 002, then use usbmon2 in wireshark
wireshark &

flashrom -V --programmer ch341a_spi -c W25Q128.V

Für den Chip Winbond W25Q128 stehen im Datenblatt (data sheet) die Befehle, um die Status Register auszulesen:

# Winbond has 3 status registers:
# read Status Register-1 (05h)
# read Status Register-2 (35h) and
# read Status Register-3 (15h)

status register 1 is command:
0x05 == 0000 0101 b

# reverse bit order
1010 0000 b == 0xa0

Um den Hersteller des Chips auszulesen, gibt es den Befehle "Read JEDEC ID":

# read JEDEC ID (9Fh)
0x9f == 1001 1111 b

# reverse bit order
1111 1001 b == 0xf9

# response: Manufacturer ID byte for Winbond (EFh)
0xef == 1110 1111 b

# reverse bit order
1111 0111 b == 0xf7

# Device ID W25Q128FV (SPI Mode)
0x02 18 == 0000 0010, 0001 1000 b

# reverse bit order
0100 0000, 0001 1000 b == 0x4018

Hexdumps aus Wireshark:

# read JEDEC ID (0xf9):
ab b7 b7 b7 b6 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a8 f9 ff ff ff

# response: 0xf7 == Winbond, 0x02 18 == W25Q128FV (SPI Mode)
ff f7 02 18

# read first status register
ab b7 b7 b7 b6 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a8 a0 ff ff

# response:
ff 00 00

TODO

Ich arbeite noch an dem Thema. Offene Punkte: RWEverything, ChipSec, Passwort-Reset, BIOS-Einstellungen ändern, ...

Links

Letzte Änderung: 2020-05-24