Kiddy – ein Modul für den Linux-Kernel, das entwickelt wurde, um die Risiken von (einigen) Kern-Sicherheitsanfälligkeiten zu verringern.
Das Sicherheitsmechanismus, das in diesem Modul implementiert ist, basiert auf der einfachen Idee, dass bei einem Angriff immer eine Identifikation des Angriffsobjekts stattfindet. Wenn man diese Identifikation erschwert, kann man die Ausnutzung erheblich komplizieren, da in vielen Fällen bereitgestellte Exploits Tabellen mit verschiedenen Offsets enthalten, die spezifischen Kernelversionen entsprechen.
Hier ist ein Beispiel, wie dies umgesetzt wird für CVE-2017-1000112. Dort kann man sehen, dass die Identifikation der Kernelversion durch die Verwendung von uname erfolgt.
Das entwickelte Modul ist einfach zu implementieren und ermöglicht es:
- die Kernelidentifikation zu ändern;
- den Zugriff auf das Kernelprotokoll (dmesg) einzuschränken;
- den Zugriff auf bestimmte Dateien in /proc, die ebenfalls identifizierende Informationen enthalten, einzuschränken;
- den Zugriff auf Dateien und Ordner, die potenziell identifizierende Informationen enthalten, einzuschränken;
- die Identifikation der Kernelversion, die über vDSO verfügbar ist, zu ändern.
Beim Zusammenstellen des Moduls können sogenannte „Presets“ verwendet werden, die unterschiedliche Logik für die Identifizierung bereitstellen. Beispielsweise kann mit dem Preset „windows“ folgendes Verhalten erreicht werden:
Vor dem Laden des Moduls
$ ./misc/id.sh ** UNAME Identitätslecks — uname -r 2.6.32-754.35.1.el6.x86_64 — uname -v #1 SMP Samstag, 7. November 2020 12:42:14 UTC — uname -a Linux localhost.localdomain 2.6.32-754.35.1.el6.x86_64 #1 SMP Samstag, 7. November 2020 12:42:14 UTC x86_64 x86_64 x86_64 GNU/Linux ** PROCFS Identitätslecks — /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 Samstag, 7. November 2020 12:42:14 UTC — /proc/sys/kernel/version #1 SMP Samstag, 7. November 2020 12:42:14 UTC — /proc/sys/kernel/osrelease 2.6.32-754.35.1.el6.x86_64 which: kein 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ätslecks — 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ätslecks — /proc/cmdline EFIMicrosoftBootbootmgfw.efi — /proc/version Windows NT 4.0 — /proc/sys/kernel/version NT 4.0 — /proc/sys/kernel/osrelease Windows which: kein hostnamectl in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin)
Das Skript-Tool wird nicht bestehen!
Quelle: linux.org.ru
