Kiddy – módulo para el kernel Linux, diseñado para reducir los riesgos de explotar (algunas) vulnerabilidades del kernel.
El mecanismo de protección implementado en este módulo se basa en una idea simple, que es que durante el ataque, el objetivo del ataque se identifica de alguna manera. Por lo tanto, si dicha identificación se dificulta, la complejidad de la operación puede multiplicarse, porque En muchos casos, los exploits ya preparados contienen tablas de varios tipos de compensaciones correspondientes a las versiones del kernel de destino.
Por ejemplo, así es como se hace para CVE-2017-1000112. También puede ver allí que la versión del kernel se identifica mediante uname.
El módulo desarrollado es fácil de implementar y le permite:
- cambiar la identificación del núcleo;
- restringir el acceso al registro del kernel (dmesg);
- restringir el acceso a ciertos archivos en /proc que también contienen información de identificación;
- restringir el acceso a archivos y carpetas que potencialmente contengan información de identificación;
- cambie la identificación de la versión del kernel disponible a través de vDSO.
Durante el proceso de montaje, el módulo le permite utilizar el llamado. “ajustes preestablecidos” que implementan una lógica diferente para cambiar la identificación. Por ejemplo, al utilizar el ajuste preestablecido de "Windows", puede obtener el siguiente comportamiento:
Antes de cargar el módulo
$ ./misc/id.sh ** Fugas de identidad de UNAME - uname -r 2.6.32-754.35.1.el6.x86_64 - uname -v #1 SMP sábado 7 de noviembre 12:42:14 UTC 2020 - uname -a Linux localhost.localdomain 2.6.32-754.35.1.el6.x86_64 #1 SMP Sáb 7 Nov 12:42:14 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux ** Fugas de identidad de PROCFS - /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 versión 2.6.32-754.35.1.el6.x86_64 (mockbuild@x86-02.bsys.centos.org) (gcc versión 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) ) #1 SMP Sáb 7 Nov 12:42:14 UTC 2020 — /proc/sys/kernel/version #1 SMP Sáb 7 Nov 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)
Después de cargar el módulo
$ ./misc/id.sh ** Fugas de identidad UNAME - 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 ** Fugas de identidad de PROCFS - /proc/cmdline EFIMicrosoftBootbootmgfw.efi - /proc/version Windows NT 4.0 - /proc/sys/kernel/version NT 4.0 - /proc/sys/kernel/osrelease Windows que: no hay hostnamectl en (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin)
¡Los niños del guión no pasarán!
Fuente: linux.org.ru
