VirtualBox

Tricks zur Forensik mit VirtualBox

VirtualBox ist eine Open-Source-Virtualisierungssoftware, die von Oracle entwickelt und bereitgestellt wird (Stand 04.08.2024). Sie ermöglicht es Benutzern, mehrere Betriebssysteme gleichzeitig auf einem einzelnen physischen Endgerät auszuführen. Jede VM agiert dabei wie ein eigenständiger Computer mit eigenem Betriebssystem, unabhängig vom Host-Betriebssystem. Hier kann VirtualBox heruntergeladen werden.

Speziell im Zusammenhang mit der Digitalen Forensik, bietet VirtualBox viele Anwendungsmöglichkeiten. Einige Beispiele werden in der folgenden Tabelle aufgeführt:

BereichBeschreibung
Malware-ForensikUntersuchung von Schadsoftware in einer abgeschotteten VM
Cloud-ForensikVirtuelle Maschinen können verwendet werden, um Snapshots von Cloud-Instanzen zu erstellen und diese lokal zu analysieren. Dadurch wird die Untersuchung von Cloud-Diensten und Datenströmen ermöglicht.
NetzwerkforensikVirtuelle Netzwerke in VirtualBox ermöglichen das Erfassen und Analysieren von Netzwerkverkehr, um schädliche Aktivitäten oder Datenlecks zu identifizieren.
Speicher-ForensikUntersuchung von Speicherabbildern, um laufende Prozesse, aktive Verbindungen und geladene Module zu identifizieren. Virtuelle Maschinen können genutzt werden, um Speicher-Dumps in verschiedenen Betriebssystemen zu erstellen und zu analysieren.
RekonstruktionenRekonstruktion von kompromittierten Systemen, um Abläufe und Ergebnisse zu Untersuchen.

Steuerung der VMs

Die Steuerung von virtuellen Maschinen kann über VirtualBox auf verschiedene Weisen erfolgen. Die gängigste Methode ist dabei wohl die Interaktion mit einer VM über die manuelle Bedienung der GUI:

Die direkte Interaktionsmöglichkeit macht durchaus in der Forensik Sinn, da manche Untersuchungsvorgänge manuell durchgeführt werden müssen. Beispielsweise in der Malware Forensik müssen sowohl Hintergrundprozesse, aber auch graphische Vorgänge untersucht werden. Jedoch trifft das nicht immer auf alle Teile der digitalen Forensik zu. Ein gängiges Vorgehen könnte wie folgt definiert werden:

  • Aufsetzen eine VM.
  • Auswahl eines Programms, das forensisch untersucht werden soll.
  • Definition der durchzuführenden Aktion mit diesem Programm.
  • Definition eines Workflows.
  • Installation der Programms.
  • Ausführung der definierten Aktion.
  • Anfertigungen von Speicherabbilder.
  • Forensische Untersuchung dieser Aktion durch auf Basis der Speicherabbilder.

Wie schon zu erkennen, kann dieses Vorgehen automatisiert werden. Der Vorteil einer Automatisierung liegt dabei ganz klar in der Fehlerelimination durch falsche, fehlerhafte oder verzögerte Eingaben/Ausführungen durch einen Nutzer.

Für systematische Ausführungen von Aktionen dieser Art kann der VirtualBox-Manager genutzt werden. Je nach Installationspfad von VirtualBox und Organisation des Dateisystems kann die ausführbare Datei VBoxManage.exe unter dem folgenden Pfad gefunden werden:

C:\Program Files\Oracle\VirtualBox\VBoxManage.exe

Einige der grundlegenden Kommandos mit VBoxManage können aus den folgenden Tabellen entnommen werden:

Allgemeine Informationen zu VirtualBox

Beschreibung
VBoxManage list vmsListet alle VMs auf.
VBoxManage list runningvmsListet alle laufenden VMs auf.
VBoxManage list bridgedifsListet alle Bridge-Netzwerkadapter auf.
VBoxManage list hostonlyifsListet alle Host-Only-Netzwerkadapter auf.
VBoxManage list natnetsListet alle NAT-Netzwerke auf.
VBoxManage list dhcpserversListet alle DHCP-Server auf.
VBoxManage list extpacksListet alle installierten Extension Packs auf.

Grundlagen zu VMs

BefehlBeschreibung
VBoxManage startvm VMName –type headlessStartet die VM im Headless-Modus.
VBoxManage controlvm VMName poweroffSchaltet die VM sofort aus.
VBoxManage controlvm VMName acpipowerbuttonSimuliert das Drücken des Power-Buttons der VM.
VBoxManage controlvm VMName resetSetzt die VM sofort zurück.
VBoxManage controlvm VMName pausePausiert die VM.
VBoxManage controlvm VMName resumeSetzt die pausierte VM fort.

Snapshots

BefehlBeschreibung
VBoxManage snapshot VMName take SnapshotName –description Snapshot DescriptionErstellt einen Snapshot der VM.
VBoxManage snapshot VMName restore SnapshotNameStellt die VM von einem Snapshot wieder her.
VBoxManage snapshot VMName delete SnapshotName Löscht einen Snapshot.

Modifikationen

BefehlBeschreibung
VBoxManage modifyvm VMName –memory 2048Setzt den Arbeitsspeicher der VM auf 2048 MB.
VBoxManage modifyvm VMName –cpus 2Setzt die Anzahl der CPUs der VM auf 2.
VBoxManage modifyvm VMName –vrde onAktiviert den VRDP-Server für die VM.
VBoxManage modifyvm VMName –nic1 natSetzt den Netzwerkadapter 1 auf NAT.
VBoxManage modifyvm VMName –nic1 bridged –bridgeadapter1 eth0Setzt den Netzwerkadapter 1 auf Bridged und wählt „eth0“ als Adapter.
VBoxManage modifyvm VMName –hostonlyadapter1 vboxnet0Setzt den Netzwerkadapter 1 auf Host-Only und wählt „vboxnet0“ als Adapter.
VBoxManage modifyvm VMName –macaddress1 080027123456Setzt die MAC-Adresse des Netzwerkadapters 1.
VBoxManage modifyvm VMName –boot1 dvd –boot2 disk –boot3 none –boot4 noneSetzt die Boot-Reihenfolge der VM.
VBoxManage modifyvm VMName –ioapic onAktiviert IO APIC für die VM.
VBoxManage modifyvm VMName –pae onAktiviert PAE/NX für die VM.
VBoxManage modifyvm VMName –nestedpaging onAktiviert Nested Paging für die VM.
VBoxManage modifyvm VMName –largepages onAktiviert Large Pages für die VM.
VBoxManage modifyvm VMName –clipboard bidirectionalSetzt die Zwischenablage der VM auf bidirektional.
VBoxManage modifyvm VMName –draganddrop bidirectionalSetzt Drag-and-Drop der VM auf bidirektional.
VBoxManage modifyvm VMName –vrdeport 5000Setzt den VRDE-Port der VM auf 5000.

Gast-Kontrolle

BefehlBeschreibung
VBoxManage.exe guestcontrol Schlinux run –exe „/bin/bash“ –username „username“ –password „passwd“ — -c „programmAusführen von Programmen.
VBoxManage.exe guestcontrol „Schlinux“ run –exe „/bin/bash“ –username „username“ –password „passwd“ — -c „echo ‚passwd‚ | sudo -S apt-get install programm -y“Installation von Programmen mit sudo.
VBoxManage guestcontrol VMName copyto –username username –password passwdC:\localfile“ „/home/user/remoteKopiert eine Datei von Host zu VM.
VBoxManage guestcontrol VMName copyfrom –username username –password passwd/home/user/remote“ „C:\localfileKopiert eine Datei von VM zu Host.
VBoxManage guestcontrol VMName mkdir –username username –password passwd/home/user/newdirErstellt ein Verzeichnis in der VM.
VBoxManage guestcontrol VMName remove –username username –password passwd/home/user/fileEntfernt eine Datei in der VM.
VBoxManage guestcontrol VMName chmod –username username –password passwd 755 „/home/user/fileÄndert Dateiberechtigungen in der VM.
VBoxManage guestcontrol VMName chown –username username –password passwduser:group“ „/home/user/fileÄndert Dateibesitz in der VM.
VBoxManage guestcontrol VMName reboot –username username –password passwdStartet die VM neu.
VBoxManage guestcontrol VMName shutdown –username username –password passwdFährt die VM herunter.
VBoxManage guestcontrol VMName updateadditionsAktualisiert die Guest Additions in der VM.

Sonstige Interaktionen

BefehlBeschreibung
VBoxManage createmedium disk –filename „DiskPath.vdi“ –size 10240Erstellt eine neue virtuelle Festplatte mit 10 GB.
VBoxManage closemedium disk „DiskPath.vdiSchließt eine virtuelle Festplatte.
VBoxManage storagectl „VMName“ –name „SATA Controller“ –add sata –controller IntelAHCIFügt einen SATA-Controller zur VM hinzu.
VBoxManage storageattach VMName –storagectl „SATA Controller“ –port 0 –device 0 –type hdd –medium „DiskPath.vdi“Hängt eine virtuelle Festplatte an die VM.
VBoxManage storageattach VMName –storagectl „IDE Controller“ –port 1 –device 0 –type dvddrive –medium „emptydriveHängt ein leeres DVD-Laufwerk an die VM an.
VBoxManage setextradata VMNameVBoxInternal/Devices/pcbios/0/Config/DmiBIOSVersion“ „1234Setzt eine benutzerdefinierte BIOS-Version für die VM.
VBoxManage showvminfo VMNameZeigt Informationen über die VM an.
VBoxManage unattended install VMName –user=username –password=passwd –full-user-name=“User“ –install-additions –iso=“path/to/isoFührt eine unbeaufsichtigte Installation durch.
VBoxManage controlvm VMName screenshotpng „screenshot.pngMacht einen Screenshot der VM und speichert ihn als PNG-Datei.
VBoxManage debugvm VMName dumpvmcore –filename „path/to/memory.dmpErstellt einen Dump des Arbeitsspeichers.

Beispielszenario

Die oben aufgeführten VBoxManage-Befehle  müssen ggf. noch angepasst werden. In manchen Fällen können auch Interpretationsfehler durch falsch gesetzte Anführungszeichen oder ähnlichem zu Fehlern führen. Im Rahmen eines Beispielszenarios wurde ein kurzes PowerShell-Skript geschrieben, um die folgenden Schritte durchzuführen:

  • Starten einer VM mit dem Namen Kali-Linux.
  • Warten, bis VM hochgefahren wurde.
  • Ausführung von test.sh innerhalb der VM.
  • Erstellen eines Snapshort
  • Erstellen eines Dumps des Arbeitsspeichers
  • Herunterfahren der VM

Betrachtet man diese Methode der kontrollierten Ausführung von Aktionen, wird der Nutzer für forensische Untersuchungen deutlich. Für das oben beschriebenen Beispiel wurde das folgende Powershell-Skript geschrieben:

$vboxmanage_path = "C:\Program Files\Oracle\VirtualBox_6-1-4-2\"
$snapshot_name = "Sicherungspunkt-1"
$dump_file = "C:\Users\maste\Desktop\dump_file.dmp"
$vbox_name = "Kali-Linux"
$username = "root"
$passwd = "PASSWD"


# Start des Skripts
Write-Output "[*] Start des Skripts"


# Start der VM
Write-Output "[*] Navigation zu VBoxManage"
& cd "$vboxmanage_path"
Write-Output "[*] Start der VM"
& ./VBoxManage.exe startvm $vbox_name --type headless


# Warten bis VM hochgefahren wurde
Write-Output "[*] Warten, bis die VM hochgefahren wurde"
$secondsToWait = 60
for ($i = 0; $i -le $secondsToWait; $i++) {
    Write-Progress -Activity "Warten, bis VM gestartet wurde" -Status "Fortschritt: $i von $secondsToWait Sekunden" -PercentComplete (($i / $secondsToWait) * 100)
    Start-Sleep -Seconds 1
}


# Ausführung des Skripts test.sh innerhalb der VM
Write-Output "[*] Start des Skripts"
& ./VBoxManage guestcontrol $vbox_name run --exe "/bin/bash" --username "$username" --password "$passwd" -- -c "/root/Schreibtisch/test.sh"


# Snapshot erstellen
Write-Output "[*] Erstellen eines Snapshots"
& ./VBoxManage snapshot $vbox_name take $snapshot_name --live


# Warten, bis Snapshort erstellt wurde
Write-Output "[*] Countdown bis zum Herunterfahren der VM"
$secondsToWait = 60
for ($i = 0; $i -le $secondsToWait; $i++) {
    Write-Progress -Activity "Warte, bis Shutdown durchgeführt wird" -Status "Fortschritt: $i von $secondsToWait Sekunden" -PercentComplete (($i / $secondsToWait) * 100)
    Start-Sleep -Seconds 1
}


# Speicherdump erstellen
Write-Output "[*] Erstellen eines kompletten Dumps des Arbeitsspeichers"
& ./VBoxManage debugvm $vbox_name dumpvmcore --filename $dump_file


# Warten, bis Dump erstellt wurde
Write-Output "[*] Countdown bis zum Herunterfahren der VM"
$secondsToWait = 60
for ($i = 0; $i -le $secondsToWait; $i++) {
    Write-Progress -Activity "Warte, bis Shutdown durchgeführt wird" -Status "Fortschritt: $i von $secondsToWait Sekunden" -PercentComplete (($i / $secondsToWait) * 100)
    Start-Sleep -Seconds 1
}


# Shutdown der VM
Write-Output "[*] Herunterfahren der VM"
& ./VBoxManage controlvm Kali-Linux poweroff


# Ende des Skripts
Write-Output "[*] Ende des Skripts"


# Warten auf Benutzereingabe bevor das Skript endet
Read-Host -Prompt "Drücken Sie die Eingabetaste, um die PowerShell zu schließen"

Die oben erwähnte Datei innerhalb der VM beinhaltete die folgenden Bash-Befehle:

Das Ausführen der oben aufgeführten PowerShell-Datei erzeugte die folgende Ausgabe:

Wie aus der vorherigen Abbildung entnommen werden kann, wurden alle Schritte automatisiert ausgeführt. Das Skript lässt sich beliebig erweitern und auf verschiedene Szenarien anpassen. Dadurch werden einige (aber nicht alle) Fehlerquellen eliminiert, die bei forensischen Untersuchungen zu Fehlanalysen führen können.