pietinger Moderator
Joined: 17 Oct 2006 Posts: 5127 Location: Bavaria
|
Posted: Sat Oct 31, 2020 4:55 pm Post subject: C3 Konfiguration IMA und Aktivierung Appraise |
|
|
(Dieser Post ist Teil einer Installation-Anleitung. Falls nicht schon geschehen lies bitte: Installation Guide for Paranoid Dummies Post Nr. 2)
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-Malware-Shikitega-ueberlistet-den-herkoemmlichen-Linux-Schutz-7260803.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: | ACCEPT_KEYWORDS="~amd64" emerge -v ima-evm-utils |
Solange diese nicht stable sind, musst Du natürlich auch wieder Deine /etc/portage/package.accept_keywords anpassen:
Code: | # nano -w /etc/portage/package.accept_keywords
add this line =>
app-crypt/ima-evm-utils ~amd64 |
2. Anpassung /etc/fstab
Ergä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: | PARTLABEL=root / ext4 defaults,noatime,iversion 0 1 |
3. Erstellen der Policy
Code: | # 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.conf |
Hinweis: Du wirst später in dmesg das Laden dieser Daten sehen. Dabei schneidet der Kernel (5.9.2) die Ausgabe ab und es sieht so aus, wie wenn er nur die ersten 9 Zeilen geladen hätte. Das ist aber nicht der Fall; es wurden alle geladen - also keine Panik ! Du kannst dies auch nach dem Reboot mit "cat /sys/kernel/security/integrity/ima/policy" überprüfen.
Edit 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: | # 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 boot |
5. 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: | # cd /usr/src/linux
# make |
6. Kopiere diesen neuen "Unlocked"-Kernel auf den USB-Stick - oder - nach /boot/EFI
OPT1:
Code: | # 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 /boot |
OPT2:
Kopiere 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: | 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: | 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 string |
Compiliere den Kernel und installiere ihn ganz normal auf Deine boot-Partition, so wie Du es immer machst. Das wird Dein neuer "Every-Day"-Kernel. Boote diesen jetzt gleich. (ggf. musst Du nochmal im BIOS die Boot-Reihenfolge anpassen.)
Fertig ! 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.) |
|