Kiddy – moduł dla jądra Linux, opracowany w celu zmniejszenia ryzyka wykorzystania (niektórych) luk w zabezpieczeniach jądra.
Mechanizm ochrony, wdrożony w tym module, opiera się na prostej idei, która zakłada, że w trakcie ataku zidentyfikowanie obiektu ataku jest nieuchronne. Dlatego, jeśli utrudnimy tę identyfikację, znacząco zwiększymy trudność eksploatacji, ponieważ w wielu przypadkach gotowe exploity zawierają różnego rodzaju tabele przesunięć (offsetów) odpowiadające docelowym wersjom jądra.
Na przykład, oto jak to zostało zrealizowane dla CVE-2017-1000112. Można tam również zobaczyć, że identyfikacja wersji jądra odbywa się z wykorzystaniem uname.
Opracowany moduł jest prosty do wdrożenia i pozwala na:
- zmianę identyfikacji jądra;
- ograniczenie dostępu do dziennika jądra (dmesg);
- ograniczenie dostępu do niektórych plików w /proc, które również zawierają identyfikujące informacje;
- ograniczenie dostępu do plików i folderów, które potencjalnie mogą zawierać identyfikujące informacje;
- zmianę identyfikacji wersji jądra dostępnej przez vDSO.
Podczas kompilacji moduł pozwala na użycie tak zwanych „presetów”, które wdrażają różną logikę zmiany identyfikacji. Na przykład, korzystając z presetu „windows”, można uzyskać następujące zachowanie:
Przed załadowaniem modułu
$ ./misc/id.sh ** WYCIEK identyfikacji UNAME — uname -r 2.6.32-754.35.1.el6.x86_64 — uname -v #1 SMP So Nov 7 12:42:14 UTC 2020 — uname -a Linux localhost.localdomain 2.6.32-754.35.1.el6.x86_64 #1 SMP So Nov 7 12:42:14 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux ** WYCIEK identyfikacji 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 Wersja Linux 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 So Nov 7 12:42:14 UTC 2020 — /proc/sys/kernel/version #1 SMP So Nov 7 12:42:14 UTC 2020 — /proc/sys/kernel/osrelease 2.6.32-754.35.1.el6.x86_64 which: brak hostnamectl w (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin)
Po załadowaniu modułu
$ ./misc/id.sh ** WYCIEK identyfikacji 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 ** WYCIEK identyfikacji PROCFS — /proc/cmdline EFIMicrosoftBootbootmgfw.efi — /proc/version Windows NT 4.0 — /proc/sys/kernel/version NT 4.0 — /proc/sys/kernel/osrelease Windows which: brak hostnamectl w (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin)
Skrypt-kiddy nie przepuszczą!
Źródło: linux.org.ru
