Hinweis: Alle Beschreibungen der C-Reihe wurden getestet mit einem signierten, monolithischen, (stub-) Kernel (*) der Version 5.9.0, 5.9.2, 5.9.3, 5.9.6, 5.9.8 und 5.9.10, der per SecureBoot von UEFI direkt geladen wird. (* das bedeutet B.2 und B.3 wurden komplett vorher umgesetzt)
C.3 Konfiguration IMA und Aktivierung Appraise
Warnung: Diese Anleitung kann sich noch ändern ! Es hat derzeit eher den Status eines proof-of-concept. Die letzten Änderungen im Kernel zu IMA sind noch sehr jung - mit weiteren sollte gerechnet werden.
Edit 2022-09-12: Nach knapp zwei Jahren im Einsatz gilt obiges einfach nicht mehr. Es ist stabil und schützt Dich absolut gegen alle automatisierten Attacken die ein Binary nachladen und versuchen dieses auszuführen, wie z.B.:
https://www.heise.de/news/Krypto-Malwar ... 60803.html
Wie bereits im Installation Guide gesagt, ist diese Konfiguration NICHT als Schutz gegen Offline Tampering geeignet. Hierzu würde man IMA und EVM mit einem TPM-Chip benötigen. Wir haben aber keinen TPM-Chip ! Außerdem habe ich bereits in A.4 den Einsatz von Wechselplatten oder FDE (full disk encryption) als Schutz gegen Offline Tampering empfohlen.
Wir nutzen IMA lediglich als zusätzliche Maßnahme um uns vor Online Attacken zu schützen, indem wir alle ausführbaren Programme vor Veränderungen schützen. Deshalb werden wir auch nicht alle Files die root gehören schützen (wie in diversen Artikeln beschrieben), sondern nur ausführbare Dateien die root gehören. Du kannst dies natürlich jederzeit erweitern, indem Du die Policy anpasst.
Um IMA einsetzen zu können benötigen wir zwei Kernel: Einen "Every-Day"-Kernel und einen zweiten, den wir nur dann booten, wenn wir unsere Programme mit "emerge -u @world" ändern (=update) wollen. Dieser zweite kann sich entweder in unserem /boot/EFI-Verzeichnis oder auf einem USB-Stick befinden. Ich werde beide Möglichkeiten beschreiben und mit OPT1 und OPT2 kennzeichnen.
0. Voraussetzung ist die Kernel Konfiguration nach C.2 !
1. Wir benötigen als erstes die ima-evm-utils. Diese sind derzeit noch nicht stable.
Code: Select all
ACCEPT_KEYWORDS="~amd64" emerge -v ima-evm-utilsCode: Select all
# nano -w /etc/portage/package.accept_keywords
add this line =>
app-crypt/ima-evm-utils ~amd64Ergänze in der fstab den Parameter "iversion" für jede Partition, in der sich ausführbare binaries befinden die geschützt werden sollen (normalerweise nur root wenn Du nicht eine extra Partition für /usr hast). Verwende dies NICHT für /home. Folgendes sollte genügen:
Code: Select all
PARTLABEL=root / ext4 defaults,noatime,iversion 0 1Code: Select all
# mkdir /etc/ima
# cd /etc/ima
# nano -w policy.conf
=>
dont_measure fsmagic=0x9fa0
dont_appraise fsmagic=0x9fa0
dont_measure fsmagic=0x62656572
dont_appraise fsmagic=0x62656572
dont_measure fsmagic=0x64626720
dont_appraise fsmagic=0x64626720
dont_measure fsmagic=0x1021994
dont_appraise fsmagic=0x1021994
dont_measure fsmagic=0x1cd1
dont_appraise fsmagic=0x1cd1
dont_measure fsmagic=0x42494e4d
dont_appraise fsmagic=0x42494e4d
dont_measure fsmagic=0x73636673
dont_appraise fsmagic=0x73636673
dont_measure fsmagic=0xf97cff8c
dont_appraise fsmagic=0xf97cff8c
dont_measure fsmagic=0x43415d53
dont_appraise fsmagic=0x43415d53
dont_measure fsmagic=0x27e0eb
dont_appraise fsmagic=0x27e0eb
dont_measure fsmagic=0x63677270
dont_appraise fsmagic=0x63677270
dont_measure fsmagic=0x6e736673
dont_appraise fsmagic=0x6e736673
measure func=MMAP_CHECK mask=MAY_EXEC
appraise func=MMAP_CHECK mask=MAY_EXEC
measure func=BPRM_CHECK mask=MAY_EXEC
appraise func=BPRM_CHECK mask=MAY_EXEC
<=
# chmod 0600 policy.confEdit 2021-02-04: Wenn man in der sysctl.conf das "kernel.printk_ratelimit = 0" auf null setzt, wird wieder alles angezeigt. Sollte man aber nicht machen (ich habe dies nur bei Tests bemerkt).
4. Erstellung eines runscripts
Code: Select all
# cd /etc/init.d
# nano -w loadimapolicy
=>
#!/sbin/openrc-run
# Copyright 1999-2020 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
description="Load in custom IMA policy"
depend()
{
need sysfs localmount
}
start()
{
ebegin "Loading custom IMA policy"
cat /etc/ima/policy.conf > /sys/kernel/security/integrity/ima/policy
eend $?
}
<=
# chmod 0700 loadimapolicy
# rc-update add loadimapolicy boot5. Measure
Ändere jetzt in Deiner Kernel Konfig den Parameter auf "ima_appraise=fix" in der Built-in command line. Edit 2022-12-14: Lasse es auf "ima_appraise=off" (wie in C.2 bereits konfiguriert) und compiliere diesen Kernel ALS "Unlocked"-Kernel. Wir starten kein Measure da es für ein signed IMA nicht funktioniert (und bei einem hashed IMA eine spezielle Policy notwendig wäre; es war damals einfach nur unnötig).
Code: Select all
# cd /usr/src/linux
# makeOPT1:
Code: Select all
# mount /boot
# cd /boot
# ls
! change to your EFI-dir with "cd EFI" -or- "cd Efi" -or- "cd efi"
# cd EFI
# mkdir unlocked
# cd unlocked
! If you have done B.3 SecureBoot use this to copy your kernel
# sbsign --key /etc/MY/efikeys/DB.key --cert /etc/MY/efikeys/DB.crt --output bzImage.efi /usr/src/linux/arch/x86/boot/bzImage
(! OR - without SecureBoot - use this to copy)
(# cp /usr/src/linux/arch/x86/boot/bzImage ./bzImage.efi)
# ls
# cd /
! Replace in next command sdX with your boot device (e.g. /dev/sda) and for Y your boot partition (e.g. 1)
# efibootmgr -c -d /dev/sdX -p Y -L "UNLOCKED" -l '\EFI\unlocked\bzImage.efi'
# umount /bootKopiere den Kernel wie in C.1 beschrieben auf den Stick.
7. Führe jetzt einen Reboot aus und boote den neuen Kernel !
Dazu musst Du natürlich beim Systemstart Deine Lieblings-Tastenkombination drücken um im BIOS die Boot-Reihenfolge temporär zu ändern. Prüfe gleich danach mit "dmesg | grep command" oder mit "cat /proc/cmdline" ob Du auch wirklich diesen gestartet hast.
8. Hash all binary files
Ich habe den find gesplittet, weil einiges sehr lange dauern wird (später machen wir das anders):
Code: Select all
find /bin -fstype ext4 -type f -uid 0 -executable -exec evmctl ima_hash '{}' \;
find /etc -fstype ext4 -type f -uid 0 -executable -exec evmctl ima_hash '{}' \;
find /lib -fstype ext4 -type f -uid 0 -executable -exec evmctl ima_hash '{}' \;
find /lib64 -fstype ext4 -type f -uid 0 -executable -exec evmctl ima_hash '{}' \;
find /opt -fstype ext4 -type f -uid 0 -executable -exec evmctl ima_hash '{}' \;
find /root -fstype ext4 -type f -uid 0 -executable -exec evmctl ima_hash '{}' \;
find /sbin -fstype ext4 -type f -uid 0 -executable -exec evmctl ima_hash '{}' \;
find /var -fstype ext4 -type f -uid 0 -executable -exec evmctl ima_hash '{}' \;
find /usr -fstype ext4 -type f -uid 0 -exec evmctl ima_hash '{}' \;9. Umstellung auf Appraise
Ändere nun in Deiner Kernel Konfig den Parameter "ima_appraise=off" um in "ima_appraise=enforce" in der Built-in command line:
Code: Select all
Processor type and features --->
[*] Built-in kernel command line
(root=PARTUUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro loglevel=8 lsm.debug ima_appraise=enforce) Built-in kernel command stringFertig ! Lies jetzt weiter in C.4
(Links habe ich mir diesmal gespart, weil a) fast alles veraltet ist und b) Du selbst in der Lage bist die Gentoo Wiki Artikel zu finden. Die derzeit beste Quelle für Informationen sind wirklich leider nur die Sourcen in /usr/src/linux/security/integrity/ima.)
