Kiddy – un modulo per il kernel Linux, sviluppato con l'obiettivo di ridurre i rischi di sfruttamento di (alcune) vulnerabilità del kernel.
Alla base del meccanismo di protezione implementato in questo modulo c'è un'idea semplice, che consiste nel fatto che durante un attacco si verifica comunque l'identificazione dell'oggetto attaccato. Pertanto, se si complica tale identificazione, è possibile aumentare considerevolmente la difficoltà di sfruttamento, poiché in molti casi gli exploit pronti contengono tabelle di vari tipi di offset, corrispondenti alle versioni mirate del kernel.
Ad esempio, ecco come viene fatto per CVE-2017-1000112. Qui si può vedere 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 al registro del kernel (dmesg);
- limitare l'accesso ad alcuni file in /proc, contenenti anche informazioni identificative;
- limitare l'accesso a file e cartelle che potrebbero contenere informazioni identificative;
- modificare l'identificazione della versione del kernel, disponibile tramite vDSO.
Durante la compilazione, il modulo consente di utilizzare i cosiddetti «preset», che implementano diverse 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 identità perdita — uname -r 2.6.32-754.35.1.el6.x86_64 — uname -v #1 SMP Sab Nov 7 12:42:14 UTC 2020 — uname -a Linux localhost.localdomain 2.6.32-754.35.1.el6.x86_64 #1 SMP Sab Nov 7 12:42:14 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux ** PROCFS identità perdita — /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 Sab Nov 7 12:42:14 UTC 2020 — /proc/sys/kernel/version #1 SMP Sab 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 identità perdita — 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à perdita — /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)
Non passeranno gli script kiddie!
Fonte: linux.org.ru
