BIOS Sicherheit – PXE als Angriffswerkzeug

Bei unseren Security Audits untersuchen wir auch regelmässig Clients. Dort finden wir mal besser und mal schlechter eingeschränkte Clients. Ein gut eingeschränkter Client ist so konfiguriert, dass der Mitarbeitende alles machen kann, was er für die tägliche Arbeit benötigt und gleichzeitig so eingeschränkt ist, dass dieser nichts am System selber verändern kann. Dabei werden bei Windows Clients beispielsweise die Befehlszeilen und PowerShell deaktiviert, aber auch der Zugriff auf USB-Geräte (z.B. USB-Stick, CD/DVD) eingeschränkt. Bei einigen Clients werden auch Systempartitionen versteckt, um den Zugriff auf die Konfigurationsdateien von Windows zu verhindern.

Um dennoch auf das Dateisystem zugreifen zu können, ist es eine verbreitete Methode von einem Wechseldatenträger, mit einem Mini-Linux Betriebssystem, zu booten. Da das installierte Windows Betriebssystem nicht bootet, gelten die Einschränkungen von Windows nicht mehr. Und so ist es möglich auf den gesamten lokalen Datenträger zuzugreifen. Als kleiner Nebeneffekt sind die von Windows gesperrten Dateien ebenfalls offen und auslesbar.

Manchmal sind die Clients noch ein bisschen besser eingeschränkt, indem USB-Geräte für den Bootvorgang deaktiviert sind, der Zugriff auf das BIOS mit einem Kennwort geschützt ist und Änderungen der BIOS-Einstellungen (z.B. Bootreihenfolge) nicht ohne weiteres möglich sind. Funktionsbedingt ist das Booten über PXE (Preboot Execution Envicronment) aber meist erlaubt.

 

Vorbereitung (Konfiguration)

PXE (Preboot Execution Enviroment)

PXE [1] ist ein Netzwerkprotokoll, um Computer über das LAN zu booten. Beim Booten bekommt der Computer von einem DHCP-Server die IP-Konfiguration und vom TFTP-Server die Boot-Dateien.

Abbildung 1: Übersicht

PXE-Server gibt es für alle gängigen Betriebssysteme. Für unsere Testumgebung benötigen wir einen PXE-Server und ein Windows Client (z.B. Windows 8). Als PXE-Server nutzen wir hier eine Standard Kali Linux Installation. Diese kann direkt bei Kali.org [2] heruntergeladen werden.

 

DHCP- und TFTP-Server installieren

Als erstes müssen wir die Installationspakete für DHCP- und TFTP-Server installieren.

apt install isc-dhcp-server tftpd-hpa -y

DHCP-Server konfigurieren

In der Konfigurationsdatei isc-dhcp-server wird das Interface (z.B. eth0), für den DHCP-Server, der IP-Adressen verteilen soll, eintragen:

mv /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.original
nano /etc/default/isc-dhcp-server

Konfigurationsdatei isc-dhcp-server:

# /etc/default/isc-dhcp-server
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="eth0"

Die IP-Konfiguration inklusive des PXE-Servers wird in die dhcp.conf eingetragen:

mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orginal
nano /etc/dhcp/dhcpd.conf

Konfigurationsdatei dhcp.conf:

# /etc/dhcp/dhcpd.conf

default-lease-time 600;
max-lease-time 7200;

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.20;
option routers 192.168.1.1;
next-server 192.168.1.1;
filename "/pxelinux.0";
}

TFTP-Server konfigurieren

In der Konfigurationsdatei tftpd-hpa muss der Pfad zum TFTP-Verzeichnis hinterlegt werden:

mv etc/default/tftpd-hpa etc/default/tftpd-hpa.original
nano etc/default/tftpd-hpa

Konfigurationsdatei tftpd-hpa:

# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure";

PXE-Bootdateien herunterladen und entpacken

Als nächstes müssen wir das /tftpboot Verzeichnis anlegen und den Bootloader [3] installieren. Den Bootloader laden wir von repo.kali.org herunter.

mkdir /tftpboot
cd /tftpboot
wget http://repo.kali.org/kali/dists/kali-rolling/main/installer-amd64/current/images/netboot/netboot.tar.gz
tar zxpf netboot.tar.gz
rm netboot.tar.gz

Kali Linux Live-CD kopieren

Jetzt benötigen wir die Live-CD, welche vom PXE-Server gestartet werden soll. Die Kali Live-CD kann unter kali.org [2] heruntergeladen werden. Von der heruntergeladenen Datei benötigen wir den Inhalt aus dem live Verzeichnis, welches wir in das Verzeichnis kali-live-x64 kopieren:

mkdir kali-live-x64
cd kali-live-x64

PXE-Boot Menü anpassen

Das PXE-Bootmenü kann über die txt.cfg geändert werden:

nano /tftpboot/debian-installer/amd64/boot-screens/txt.cfg

Hier fügen wir die nachfolgenden Zeilen ein für das Booten von der Kali Live-CD:

label live-amd64-TFTP
menu label ^Live TFTP (amd64)
linux /kali-live-x64/vmlinuz
initrd /kali-live-x64/initrd.img
append boot=live components splash username=root hostname=goSecurity-kali fetch=tftp://192.168.1.1/kali-live-x64/filesystem.squashfs

IP-Adresse vergeben

Damit unser Server im Netzwerk erreichbar ist und als PXE-Server dienen kann, müssen wir eine IP-Adresse hinterlegen. Für unsere Testumgebung haben wir uns für eine statische IP-Konfiguration entschieden.

Abbildung 2: Statische IP-Adresse

 

DHCP- und TFTP-Server starten

Nachdem wir alles fertig konfiguriert haben, müssen wir die Dienste auf unserem Kali Client starten:

service isc-dhcp-server start
service tftpd-hpa start

Angriff

Für unseren Angriff verbinden wir unseren Kali Linux Client direkt mit dem Netzwerk und hoffen, dass unser DHCP-Server zuerst antwortet oder verbinden den Windows-Client direkt mit dem Kali Linux Client (die bessere Variante). So ist sichergestellt, dass sich nur der Windows Client mit unserem Kali Linux Client verbindet. Hinweis: Auf DHCP-Ebene gibt es keine Authentifizierung. Der Client nimmt die erste Antwort eines DHCP-Servers als richtig und vertraut an.

Wenn alles richtig konfiguriert ist, bekommt der Windows-Client eine IP-Adresse von unseren DHCP-Server und bootet über unseren PXE-Server in unser angepasstes Boot Menü.

Abbildung 3: Boot-Menü

Im Boot Menü wählen wir «Live TFTP» aus und starten die Kali Live-CD. Mit dem Zugriff auf die lokale Festplatte haben wir vollen Zugriff über den Client.

Wir können nun beispielsweise die Windows Kennwort Hashes mit Ophcrack auslesen und knacken. Ist das Passwort nicht knackbar, können wir immer noch den Hash für einen Pass-The-Hash-Angriff [4] verwenden.

Abbildung 4: Ophcrack

Oder wir können einfach die sethc.exe (Einrastfunktion, StickyKeys) im system32-Verzeichnis durch eine cmd.exe (Windows Befehlszeile) ersetzen.

Abbildung 5: StickyKeys, sethc.exe

Die Datei sethc.exe startet die Anwendung StickyKeys, eine Anwendung für Computerbenutzer, die (z.B. aufgrund eines Handicaps) Mühe haben zwei oder mehrere Tasten gleichzeitig zu drücken. Diese Datei wird mit Systemrechten (LocalSystem) ausgeführt. Drückten wir beim Anmeldefenster fünfmal die Shift-Taste, öffnete sich eine Befehlszeile mit der LocalSystem-Berechtigung [5].

Abbildung 6: Windows Login

 

Fazit

DHCP ist ein sehr nützliches Protokoll für die Verteilung von IP-Adressen. Da es keine Authentifizierung gibt und der Client die erste Antwort als richtig annimmt, ist es einfach die PXE-Funktion zu missbrauchen. Unsere Erfahrung zeigt, dass PXE häufig aktiviert ist und auch eingesetzt wird. Ein entsprechender Angriff ist verhältnismässig einfach. Die Herausforderung für einen echten Angreifer besteht darin, einen gefälschten PXE-Server im Netzwerk unterzubringen und sicherzustellen, dass sein DHCP-Server schneller reagiert. In der Praxis sind solche Angriffe deshalb eher im Bereich der gezielten Attacken (APT) zu erwarten.

 

Empfehlungen

Um sich vor solchen Angriffen zu schützen, empfehlen wir Ihnen:

  • ein BIOS-Kennwort setzen
  • falls es nicht benötigt wird, PXE-Boot im BIOS deaktivieren
  • Verschlüsselung einsetzen: Der beste Schutz vor diesen Angriffen ist es, die lokalen Festplatten zu verschlüsseln. Wird z.B. Bitlocker verwendet, erstellt Bitlocker eine Mini-Bootpartition von der Windows startet. Erst nach dem Windows gestartet ist, kann auf weitere Systemdateien zugegriffen werden.
  • Nur die lokale Festplatte als Bootlaufwerk zulassen (Bootreihenfolge festlegen)
  • Security Audits: Mit regelmässigen Kontrollen, können die Schwachstellen Ihrer IT-Infrastruktur rechtzeitig entdeckt und korrigiert werden.

 

Quellen

[1] Wikipedia.org: Preboot Execution Environment

[2] Kali.org: Kali Linux Downloads

[3] Docs.kali.org: Kali Linux Netzwerk PXE Installation

[4] Heise.de: Weitergereicht – Pass-The-Hash-Angriffe gegen Windows

[5] pcworld.com: How to Reset Your Windows Password

Informationen zum Autor: Marius Hamborgstrøm

Im Jahre 2014 ist es mir gelungen goSecurity von meinem Talent zu überzeugen. Als Experte für Penetration Tests konnte ich schon viele Schwachstellen aufdecken, bevor dies einem Hacker gelungen ist. Zudem bin ich für die Gestaltung und die Durchführung unserer goTraining-Kurse Hack to PROTECT (H2P), Hack to PROTECT [ADVANCED] (H2PA) und Windows Server Hardening (WSH) verantwortlich. Durch meine jahrelange Erfahrung als IT-Leiter einer mittelständischen Bank, kenne ich auch die Seite des Administrators und des IT-Managers in einer Umgebung mit hohen Sicherheitsanforderungen. Aus dieser Erfahrungskiste kann ich die Anforderungen unserer Kunden auch bei Audits und umfassenden Beratungen schnell verstehen und Sie zielgerichtet und praxisnah beraten. Jede Sicherheitslücke bei Ihnen zu finden, bevor dies jemand anderem gelingt, ist leider nicht immer realistisch. Und dennoch ist es mein Antrieb und mein Anspruch.