Erstellt am 20.03.2017
Wenn's booten klemmt
Wenn man einen PC auf Viren scannen will, empfehle ich immer, das auf einem Live-System zu machen, sodass das infizierte System gar nicht erst läuft. Wer weiß schon, ob der Trojaner/Virus/Malware nicht schon längst im Kernel oder einem Treiber Unterschlupf gefunden hat und sich so erfolgreich vor einem Virenscanner verstecken kann.
Kürzlich wollte ich also auch ein Gerät scannen, das aber bereits mit (U)EFI daher kommt. Normalerweise ist das kein großes Ding: ISO runterladen, mit etwa unetbootin auf einen USB-Stick schreiben und den Rechner damit booten. So einfach wollte das aber nicht gehen, das EFI-BIOS bestand darauf, dass der Stick kein gültiges Bootmedium ist. Also habe ich mit meinen Erfahrungen aus dem HowTo zum Odys Winpad V10 begonnen, die Kaspersky's Rescue Disk unter einem UEFI-System zum laufen zu bekommen.
Ihr benötigt einen USB-Stick oder externe Festplatte, das kav_rescue_10.iso und ein Linux-System (ich als alter openSUSE-Hase habe openSUSE 42.2 verwendet).
Festplatte vorbereiten
Partitionieren mit sgdisk
Zunächst einmal benötigt ihr wieder eine GUID Partition Table (GPT) die vom EFI-BIOS akzeptiert wird. Den Laufwerkspfad (/dev/sdX) müsst ihr natürlich an eure Gegebenheiten anpassen.# Neue, leere GPT erstellen sgdisk --zap-all /dev/sdX # EFI partition erstellen (200 MB) sgdisk -n 1:2048:413695 -c 1:"EFI System Partition" -t 1:ef00 /dev/sdX # BIOS partition erstellen (100 MB) wird vom grub-bootloader gefordert sgdisk -n 2:413696:620543 -c 2:"BIOS BOOT Partition" -t 2:ef02 /dev/sdX # Endsector der Festplatte heraussuchen ENDSECTOR=$( sgdisk -E /dev/sdX ) # System Partition erstellen sgdisk -n 3:620544:$ENDSECTOR -c3:"Linux" -t3:8300 /dev/sdX # Überprüfen der neuen Partitionstabelle sgdisk -p /dev/sdX
Dateisysteme schreiben
Ist die Partitionstabelle eingerichtet, könnt ihr als nächstes die Dateisysteme erstellen. Für die BIOS- und EFI-Partitionen wird ein FAT32-Filesystem benötigt. Die dritte Partition in der das eigentliche System landen soll, braucht ihr noch nicht anzufassen, dort hinein schreiben wir später das KAV-image.
mkfs.vfat -F32 -s 2 -n GRUB2EFI /dev/sdX1 mkfs.vfat -F32 /dev/sdX2
KAV Rescue Disc extrahieren
Jetzt wirds langsam spannend, von der Rescue Disc benötigen wir das eigentliche System-Image. Das ist in der CD etwas versteckt, daher werden jetzt erstmal ein paar loop-Devices gemountet.
# mount KAV-ISO mkdir /tmp/loop mount -oloop kav_rescue_10.iso /tmp/loop # Als nächstes squashfs.img innerhalb der ISO mounten mkdir /tmp/loop2 mount -oloop /tmp/loop/rescue/LiveOS/squashfs.img /tmp/loop2 # und das eigentliche System-image rauskopieren cp /tmp/loop2/LiveOS/ext3fs.img ~/ # Außerdem brauchen wir noch kernel und initrd cp /tmp/loop/boot/rescue ~/ cp /tmp/loop/boot/rescue.igz ~/ cp /tmp/loop/boot/System.map-rescue ~/ # wieder alles umounten umount /tmp/loop2 umount /tmp/loop rm -r /tmp/loop rm -r /tmp/loop2
System-Image auf Festplatte schreiben
Ihr habt jetzt also das eigentliche Dateisystem, das normal von der Live-CD während des Bootens eingebunden wird. Wie der name schon andeutet, ist das ein ext3-Dateisystem und kann direkt in die dritte partition geschrieben werden. Anschließend noch einen fsck drüber laufen lassen und das Dateisystem auf die komplette Partitionsgröße aufblasen. Je nachdem, wie groß eure dritte Partition ist, kann das schon eine Weile dauern, weil ext3 dann erst alle Inodes anlegen muss.
# System-image schreiben dd if=ext3fs.img of=/dev/sdX3 # fsck e2fsck -f /dev/sdX3 # resize2fs resize2fs /dev/sdX3
Grub-Bootloader installieren
Der letzte Schritt ist den Bootloader auf dem Stick bzw. der externen HDD zu installieren. Dafür greife ich wieder auf den EFI-Bootcode aus dem usb-pack_efi.zip zurück.
# System Partition mounten mount /dev/sdX3 /mnt # kernel and initrd nach /boot kopieren cp ~/rescue ~/rescue.igz ~/System.map-rescue /mnt/boot # EFI-Ordner erstellen und EFI-partition mounten mkdir /mnt/EFI mount /dev/sdX1 /mnt/EFI # EFI-bootcode entpacken cd /tmp unzip ~/usb-pack_efi.zip # und EFI-Ordner kopieren rsync -auv /tmp/usb-pack_efi/EFI/ /mnt/EFI/ rm -r /tmp/usb-pack_efi # grub2-bootloader installieren grub2-install --removable --boot-directory=/mnt/boot --efi-directory=/mnt/EFI/BOOT /dev/sdX
Zu guter letzt noch eine /mnt/boot/grub2/grub.cfg erstellen und den Eintrag für die KAV-Rescue Disc erstellen. Dazu erstmal rausfinden, welche PARTUUID die Systempartition hat. Das kann dann als Bootparameter an den Kernel übergeben werden und sollte unabhängig auf jedem System funktionieren, egal ob noch andere Festplatten oder Laufwerke installiert sind. Wenn ihr nur ein root=/dev/sdb3 schreiben würdet, dann würde ein Booten in einem System mit zwei Festplatten z.B. fehlschlagen, da die USB-Festplatte ja dann zu /dev/sdc3 wird.
# UUID der Festplatte raussuchen -> PARTUUID="...." blkid /dev/sdX3 # grub.cfg editieren nano /mnt/boot/grub2/grub.cfg set default=0 set timeout=10 menuentry "KAV10" { set root=(hd0,gpt3) linux /boot/rescue root=PARTUUID="...." rootfstype=auto init=/init initrd=/boot/rescue.igz kav_lang=en udev doscsi add_efi_memmap initrd /boot/rescue.igz } # Speichern und umounten umount /mnt/EFI umount /mnt
Booting up
Wenn alles ordentlich ausgehängt ist, heißt es jetzt Daumen drücken und die Festplatte an den zu scannenden Rechner anschließen. Sollte das System in eine Kernelpanic booten, dann stimmt höchstwahrscheinlich der root= Kernelparameter nicht. Im Grub-bootloader könnt ihr dazu die Taste 'E' drücken, um den Eintrag zu editieren. Dort könnt ihr dann z.B. mal /dev/sdb3 oder /dev/sdc3 probieren. Ist das System hochgefahren, nicht vergessen die Virendefinitionen zu aktualisieren und dann kann das Scannen auch schon los gehen.