Kiddy - модуль ядра Linux для защиты от скрипт-кидди

good-penguin.png

Kiddy — модуль для ядра Linux, разработанный с целью снижения рисков эксплуатации (некоторых) уязвимостей ядра.

В основе механизма защиты, реализованного в данном модуле, лежит простая идея, которая заключается в том, что в процессе атаки так или иначе происходит идентификация объекта атаки. Поэтому, если затруднить такую идентификацию, можно кратно повысить сложность эксплуатации, т.к. во множестве случаев готовые эксплойты содержат в себе таблицы различного рода смещений (оффсетов), соответствующих целевым версиям ядра.

Например, вот как это сделано для CVE-2017–1000112. Там же можно видеть, что идентификация версии ядра осуществляется с использованием uname.

Разработанный модуль является простым в реализации и позволяет:

  • менять идентификацию ядра;
  • ограничивать доступ к журналу ядра (dmesg);
  • ограничивать доступ к некоторым файлам в /proc, также содержащим идентифицирующую информацию;
  • ограничивать доступ к файлам и папкам, потенциально содержащим идентифицирующую информацию;
  • менять идентификацию версии ядра, доступную через vDSO.

В процессе сборки модуль позволяет использовать т.н. «пресеты», реализующие различную логику изменения идентификации. Например, используя пресет «windows» можно получить следующее поведение:

До загрузки модуля

$ ./misc/id.sh
** UNAME identidty 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 identidty 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)

После загрузки модуля

$ ./misc/id.sh
** UNAME identidty 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 identidty leaks
 - /proc/cmdline
   \EFI\Microsoft\Boot\bootmgfw.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)

Скрипт-кидди не пройдут!

>>> Подробности

©  Linux.org.ru