Kiddy — Linux-Kernel-Modul zum Schutz vor Script-Kiddies

Kiddy – ein Modul für den Linux-Kernel, das mit dem Ziel entwickelt wurde, die Ausnutzung (einiger) Kernel-Schwachstellen zu verringern.

Die Grundlage des in diesem Modul umgesetzten Schutzmechanismus beruht auf einer einfachen Idee: Bei einem Angriff findet in irgendeiner Form eine Identifizierung des Angriffsobjekts statt. Wenn man also diese Identifizierung erschwert, kann man die Ausnutzung erheblich komplizierter machen, da in vielen Fällen fertige Exploits Tabellen mit verschiedenen Offset-Werten enthalten, die mit bestimmten Kernel-Versionen übereinstimmen.

Zum Beispiel, so wird es für CVE-2017-1000112realisiert. Dort kann man auch sehen, dass die Identifikation der Kernel-Version mit uname erfolgt.

Das entwickelte Modul ist einfach zu implementieren und ermöglicht es:

  • die Identifizierung des Kernels zu ändern;
  • den Zugriff auf das Kernelprotokoll (dmesg) zu beschränken;
  • den Zugriff auf bestimmte Dateien in /proc zu beschränken, die ebenfalls identifizierende Informationen enthalten;
  • den Zugriff auf Dateien und Verzeichnisse, die potenziell identifizierende Informationen enthalten, zu beschränken;
  • die Identifizierung der Kernel-Version, die über vDSO verfügbar ist, zu ändern.

Während des Kompilierungsprozesses ermöglicht das Modul die Verwendung von sogenannten „Presets“, die verschiedene Logik zur Änderung der Identifizierung implementieren. Zum Beispiel kann man mit dem Preset „windows“ folgendes Verhalten erreichen:

Vor dem Laden des Moduls

$ ./misc/id.sh ** UNAME Identitätsundichtigkeiten — uname -r 2.6.32-754.35.1.el6.x86_64 — uname -v #1 SMP Sat Nov 7 12:42:14 UTC 2020 — uname -a Linux localhost.localdomain 2.6.32-754.35.1.el6.x86_64 #1 SMP Sat Nov 7 12:42:14 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux ** PROCFS Identitätsundichtigkeiten — /proc/cmdline ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS no_timer_check console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet — /proc/version Linux version 2.6.32-754.35.1.el6.x86_64 (mockbuild@x86-02.bsys.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) ) #1 SMP Sat Nov 7 12:42:14 UTC 2020 — /proc/sys/kernel/version #1 SMP Sat Nov 7 12:42:14 UTC 2020 — /proc/sys/kernel/osrelease 2.6.32-754.35.1.el6.x86_64 which: no hostnamectl in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin)

Nach dem Laden des Moduls

$ ./misc/id.sh ** UNAME Identitätsundichtigkeiten — uname -r Windows — uname -v NT 4.0 — uname -a Linux localhost.localdomain Windows NT 4.0 x86_64 x86_64 x86_64 GNU/Linux ** PROCFS Identitätsundichtigkeiten — /proc/cmdline EFIMicrosoftBootbootmgfw.efi — /proc/version Windows NT 4.0 — /proc/sys/kernel/version NT 4.0 — /proc/sys/kernel/osrelease Windows which: no hostnamectl in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin)

Script-Kiddy werden nicht durchkommen!

Quelle: linux.org.ru

60GB SSD 8Gb DDR4