Rilis modul LKRG 0.8 untuk melindungi dari eksploitasi kerentanan di kernel Linux

Proyek Dinding Terbuka diterbitkan rilis modul kernel LKRG 0.8 (Linux Kernel Runtime Guard), dirancang untuk mendeteksi dan memblokir serangan dan pelanggaran integritas struktur kernel. Misalnya, modul dapat melindungi terhadap perubahan tidak sah pada kernel yang sedang berjalan dan upaya untuk mengubah izin proses pengguna (mendeteksi penggunaan eksploitasi). Modul ini cocok untuk mengatur perlindungan terhadap eksploitasi yang sudah diketahui untuk kernel Linux (misalnya, dalam situasi di mana sulit untuk memperbarui kernel dalam sistem), dan untuk melawan eksploitasi pada kerentanan yang belum diketahui. Kode proyek didistribusikan oleh berlisensi di bawah GPLv2.

Di antara perubahan dalam versi baru:

  • Positioning proyek LKRG telah diubah, yang tidak lagi terbagi menjadi subsistem terpisah untuk memeriksa integritas dan menentukan penggunaan eksploitasi, tetapi disajikan sebagai produk lengkap untuk mengidentifikasi serangan dan berbagai pelanggaran integritas;
  • Kompatibilitas disediakan dengan kernel Linux dari 5.3 hingga 5.7, serta dengan kernel yang dikompilasi dengan optimasi GCC yang agresif, tanpa opsi CONFIG_USB dan CONFIG_STACKTRACE atau dengan opsi CONFIG_UNWINDER_ORC, serta dengan kernel yang tidak memiliki fungsi terkait LKRG, jika bisa ditiadakan;
  • Saat membangun, beberapa pengaturan kernel CONFIG_* wajib diperiksa untuk menghasilkan pesan kesalahan yang berarti alih-alih kerusakan yang tidak jelas;
  • Menambahkan dukungan untuk mode standby (ACPI S3, suspend ke RAM) dan sleep (S4, suspend ke disk);
  • Menambahkan dukungan DKMS ke Makefile;
  • Dukungan eksperimental untuk platform ARM 32-bit telah diterapkan (diuji pada Raspberry Pi 3 Model B). Dukungan AArch64 (ARM64) yang tersedia sebelumnya telah diperluas untuk menyediakan kompatibilitas dengan papan Raspberry Pi 4;
  • Hook baru telah ditambahkan, termasuk pengendali panggilan yang mampu() untuk mengidentifikasi eksploitasi yang memanipulasi "kemampuan", bukan ID proses (Surat kepercayaan);
  • Logika baru telah diusulkan untuk mendeteksi upaya untuk keluar dari batasan namespace (misalnya, dari container Docker);
  • Pada sistem x86-64, bit SMAP (Supervisor Mode Access Prevention) diperiksa dan diterapkan, dirancang untuk memblokir akses ke data ruang pengguna dari kode istimewa yang berjalan di tingkat kernel. Perlindungan SMEP (Pencegahan Eksekusi Mode Pengawas) telah diterapkan sebelumnya;
  • Selama pengoperasian, pengaturan LKRG ditempatkan di halaman memori yang biasanya hanya dapat dibaca;
  • Informasi pencatatan yang mungkin paling berguna untuk serangan (misalnya, informasi tentang alamat di kernel) terbatas pada mode debugging (log_level=4 dan lebih tinggi), yang dinonaktifkan secara default.
  • Skalabilitas database pelacakan proses telah ditingkatkan - alih-alih satu pohon RB yang dilindungi oleh satu spinlock, tabel hash dari 512 pohon RB yang dilindungi oleh 512 kunci baca-tulis digunakan;
  • Sebuah mode telah diterapkan dan diaktifkan secara default, di mana integritas pengidentifikasi proses sering kali diperiksa hanya untuk tugas saat ini, dan juga opsional untuk tugas yang diaktifkan (bangun). Untuk tugas lain yang berada dalam kondisi tidur atau bekerja tanpa mengakses API kernel yang dikontrol oleh LKRG, pemeriksaan dilakukan lebih jarang.
  • Menambahkan parameter sysctl dan modul baru untuk menyempurnakan LKRG, serta dua sysctl untuk konfigurasi yang disederhanakan dengan memilih dari kumpulan pengaturan penyesuaian (profil) yang disiapkan oleh pengembang;
  • Pengaturan default telah diubah untuk mencapai keseimbangan yang lebih seimbang antara kecepatan deteksi pelanggaran dan efektivitas respons, di satu sisi, dan dampak terhadap kinerja dan risiko positif palsu, di sisi lain;
  • File unit systemd telah didesain ulang untuk memuat modul LKRG di awal boot (opsi baris perintah kernel dapat digunakan untuk menonaktifkan modul);

Dengan mempertimbangkan optimasi yang diusulkan dalam rilis baru, pengurangan kinerja saat menggunakan LKRG 0.8 diperkirakan sebesar 2.5% dalam mode default (β€œberat”) dan 2% dalam mode ringan (β€œringan”).

Dalam yang baru saja diadakan penelitian efektivitas paket untuk mendeteksi rootkit LKRG ditampilkan hasil terbaik, mengidentifikasi 8 dari 9 rootkit yang diuji bekerja pada tingkat kernel tanpa positif palsu (rootkit Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit dan Sutekh diidentifikasi, tetapi Keysniffer, yang merupakan kernel modul, terlewatkan dengan keylogger, bukan rootkit dalam arti sebenarnya). Sebagai perbandingan, paket AIDE, OSSEC dan Rootkit Hunter mendeteksi 2 dari 9 rootkit, sedangkan Chkrootkit tidak mendeteksi satu pun. Pada saat yang sama, LKRG tidak mendukung deteksi rootkit yang terletak di ruang pengguna, sehingga efisiensi terbesar dicapai ketika menggunakan kombinasi AIDE dan LKRG, yang memungkinkan untuk mengidentifikasi 14 dari 15 rootkit dari semua jenis.

Selain itu, dapat dicatat bahwa pengembang distribusi Whonix mulai formasi paket siap pakai dengan DKMS untuk Debian, Whonix, Qubes dan Kicksecure, dan paket untuk Arch Linux sudah update ke versi 0.8. Paket dengan LKRG juga tersedia dalam bahasa Rusia ALT Linux ΠΈ AstraLinux.

Pemeriksaan integritas di LKRG dilakukan dengan membandingkan kode dan data aktual dari kernel dan modul, beberapa struktur data penting dan pengaturan CPU dengan hash yang disimpan atau salinan dari area memori, struktur data, atau register yang sesuai. Pemeriksaan diaktifkan baik secara berkala berdasarkan pengatur waktu maupun ketika berbagai peristiwa terjadi.

Penentuan kemungkinan penggunaan eksploitasi dan pemblokiran serangan dilakukan pada tahap sebelum kernel menyediakan akses ke sumber daya (misalnya, sebelum membuka file), tetapi setelah proses menerima izin yang tidak sah (misalnya, mengubah UID). Ketika perilaku tidak sah terdeteksi, proses akan dipaksa untuk dihentikan secara default, yang cukup untuk memblokir banyak eksploitasi.

Sumber: opennet.ru

Tambah komentar