Kiddy es un módulo para el núcleo de Linux, creado con el propósito de reducir los riesgos de explotación de (algunas) vulnerabilidades del núcleo.
La base del mecanismo de protección implementado en este módulo es una idea simple: durante un ataque, de alguna manera, se lleva a cabo la identificación del objeto del ataque. Por lo tanto, si se dificulta dicha identificación, se puede aumentar significativamente la complejidad de la explotación, dado que en muchos casos los exploits listos incluyen tablas de diversos desplazamientos (offsets) correspondientes a las versiones del núcleo objetivo.
Por ejemplo, así es como se hace para CVE-2017-1000112. Allí también se puede ver que la identificación de la versión del núcleo se realiza utilizando uname.
El módulo desarrollado es fácil de implementar y permite:
- cambiar la identificación del núcleo;
- limitar el acceso al registro del núcleo (dmesg);
- limitar el acceso a algunos archivos en /proc que también contienen información identificativa;
- limitar el acceso a archivos y carpetas que pueden contener información identificativa;
- cambiar la identificación de la versión del núcleo disponible a través de vDSO.
Durante el proceso de construcción, el módulo permite usar presuntos 'presets' que implementan diversas lógicas de cambio de identificación. Por ejemplo, utilizando el preset 'windows' se puede obtener el siguiente comportamiento:
Antes de cargar el módulo
$ ./misc/id.sh ** Fugas de identidad UNAME — 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 ** Fugas de identidad 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 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)
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 PROCFS — /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)
¡Los scripts kiddie no pasarán!
Fuente: linux.org.ru
