Kiddy – un modulo per il kernel Linux progettato per ridurre i rischi di sfruttamento di alcune vulnerabilità del kernel.
Alla base del meccanismo di protezione implementato in questo modulo c'è un'idea semplice: durante un attacco si verifica comunque un'identificazione dell'oggetto attaccato. Quindi, se si rende difficile tale identificazione, si può aumentare notevolmente la complessità dell'exploitation, poiché in molti casi gli exploit già pronti contengono tabelle di vari offset corrispondenti a versioni target del kernel.
Ad esempio, ecco come è stato fatto per CVE-2017-1000112. Qui si può anche osservare che l'identificazione della versione del kernel avviene utilizzando uname.
Il modulo sviluppato è semplice da implementare e consente di:
- modificare l'identificazione del kernel;
- limitare l'accesso ai log del kernel (dmesg);
- limitare l'accesso a determinati file in /proc, che contengono anche informazioni identificative;
- limitare l'accesso a file e cartelle che potrebbero contenere informazioni identificative;
- modificare l'identificazione della versione del kernel accessibile tramite vDSO.
Durante la fase di compilazione, il modulo consente di utilizzare i cosiddetti 'preset', che realizzano varie logiche di modifica dell'identificazione. Ad esempio, utilizzando il preset 'windows', si può ottenere il seguente comportamento:
Prima del caricamento del modulo
$ ./misc/id.sh ** UNAME identity leaks — 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 identity leaks — /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)
Dopo il caricamento del modulo
$ ./misc/id.sh ** UNAME identity leaks — 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 identity leaks — /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)
Scripts kiddie non riusciranno!
Fonte: linux.org.ru
