Выпуск LKRG 1.0.0 для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ эксплуатации уязвимостСй Π² ядрС Linux

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Openwall ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ядра LKRG 1.0.0 (Linux Kernel Runtime Guard), ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности структур ядра ΠΈ выявлСния ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ эксплуатации уязвимостСй Π² ядрС. ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ присвоСниС Π½ΠΎΠΌΠ΅Ρ€Π° вСрсии 1.0.0 ΠΎΠ·Π½Π°ΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΎ достиТСниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π·Ρ€Π΅Π»ΠΎΠ³ΠΎ состояния. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPLv2.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΊ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π°Ρ‚Π°ΠΊ, ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠΆΠ΅ извСстными узявимостями Π² ядрС Linux, Ρ‚Π°ΠΊ для противостояния эксплоитам, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ Π΅Ρ‰Ρ‘ нСизвСстныС уязвимости, Ссли Π² Π½ΠΈΡ… Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ€Ρ‹ для ΠΎΠ±Ρ…ΠΎΠ΄Π° LKRG. Π—Π°Ρ‰ΠΈΡ‚Π° основываСтся Π½Π° выявлСнии нСсанкционированного внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ядро (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности) ΠΈ отслСТивании измСнСния ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… процСссов (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ примСнСния эксплоитов).

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности выполняСтся Π½Π° основС сравнСния Ρ…ΡΡˆΠ΅ΠΉ, вычисляСмых для Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… областСй памяти ΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ… ядра, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ IDT (Interrupt Descriptor Table), MSR, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², всС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, списки Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, содСрТимоС сСкции Β«.textΒ» ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ процСссов. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ активируСтся пСриодичСски ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ наступлСнии ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… событий Π² ядрС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² setuid, setreuid, fork, exit, execve ΠΈ do_init_module.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ примСнСния эксплоитов ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Ρ‚Π°ΠΊ производится Π½Π° стадии Π΄ΠΎ прСдоставлСния ядром доступа ΠΊ рСсурсам (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎ открытия Ρ„Π°ΠΉΠ»Π°), Π½ΠΎ послС получСния процСссом нСсанкционированных ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, смСна UID). ΠŸΡ€ΠΈ выявлСнии нСсанкционированного повСдСния процСссов выполняСтся ΠΈΡ… ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅, Ρ‡Π΅Π³ΠΎ достаточно для блокирования ΠΌΠ½ΠΎΠ³ΠΈΡ… эксплоитов. НакладныС расходы ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ модуля ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² 2-2.5%.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° систСмах с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°ΠΌΠΈ x86-64, AArch64 (ARM64), ARM32 ΠΈ x86. Π Π°Π±ΠΎΡ‚Π° LKRG 1.0.0 протСстирована с ядрами ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… дистрибутивов, начиная с ядра 3.10 ΠΈΠ· RHEL/CentOS 7 ΠΈ заканчивая 6.17-rc4 ΠΈΠ· рСпозитория, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ вСдётся ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Ρ€Π΅Π»ΠΈΠ·Π° Fedora 44. ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ доступны для дистрибутивов ALT Linux, Arch Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto ΠΈ OpenBMC. Π‘ΠΎΠ±Ρ€Π°Π½Π½Ρ‹Π΅ для Rocky Linux ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² RHEL 8/9 ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… дистрибутивах, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ AlmaLinux 8/9, Π° ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для Whonix Π² Debian ΠΈ Ubuntu.

Π‘Ρ€Π΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии:

  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ядрами Linux Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ выпуска 6.17-rc4.
  • ΠŸΡ€ΠΈ использовании с ядрами начиная с 6.13 ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Ρ‘Π½ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² override_creds() ΠΈ revert_creds(), Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ»ΠΎ выявлСниС Π°Ρ‚Π°ΠΊ, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ cred. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· добавлСния ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ пСрСзаписи указатСля cred Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… мСстах ядра.
  • ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΎ излишнСС отслСТиваниС ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ производится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности. ИзмСнСниС ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 1500 строк.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° появившСгося Π² ядрС Linux 6.10 ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° для создания Π² Π€Π‘ OverlayFS Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ O_TMPFILE (ovl_tmpfile). Указанная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для прСдотвращСния Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний, ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΈ использовании ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π½Π° систСмах с ядрами 6.10-6.12.
  • Для систСм x86_64 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Intel CET (Control-flow Enforcement Technology) для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ исполняСмого ΠΊΠΎΠ΄Π° с использованиСм инструкций IBT (indirect branch tracking), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ kCFI (kernel Control Flow Integrity) для блокирования Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ порядка выполнСния (control flow) Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ примСнСния эксплоитов, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ Π² памяти ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² вмСсто kretprobes задСйствован ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ kprobes, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ установки hook-ΠΎΠ² ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
  • ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (lock) Π΄Π°Π½Π½Ρ‹Ρ… Π² ядрС, спСцифичных для процСсса (per-task shadow data). Π—Π° счёт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π»ΠΈΡˆΠ½ΠΈΡ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ обращСния ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ.
  • УстранСны ошибки, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ²ΡˆΠΈΠ΅ ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π³ΠΎΠ½ΠΊΠΈ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ цСлостности ΠΈ Π»ΠΎΠΆΠ½Ρ‹ΠΌ срабатываниям.
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сборки с использованиСм Clang.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ