Keluaran modul LKRG 0.8 untuk melindungi daripada eksploitasi kelemahan dalam kernel Linux

Projek Openwall diterbitkan pelepasan modul kernel LKRG 0.8 (Linux Kernel Runtime Guard), direka untuk mengesan dan menyekat serangan dan pelanggaran integriti struktur kernel. Sebagai contoh, modul boleh melindungi daripada perubahan yang tidak dibenarkan pada kernel yang sedang berjalan dan cuba menukar kebenaran proses pengguna (mengesan penggunaan eksploitasi). Modul ini sesuai untuk mengatur perlindungan terhadap eksploitasi yang telah diketahui untuk kernel Linux (contohnya, dalam situasi yang sukar untuk mengemas kini kernel dalam sistem), dan untuk mengatasi eksploitasi untuk kelemahan yang belum diketahui. Kod projek diedarkan oleh dilesenkan di bawah GPLv2.

Antara perubahan dalam versi baharu:

  • Kedudukan projek LKRG telah diubah, yang tidak lagi dibahagikan kepada subsistem berasingan untuk memeriksa integriti dan menentukan penggunaan eksploitasi, tetapi dibentangkan sebagai produk lengkap untuk mengenal pasti serangan dan pelbagai pelanggaran integriti;
  • Keserasian disediakan dengan kernel Linux dari 5.3 hingga 5.7, serta dengan kernel yang disusun dengan pengoptimuman GCC yang agresif, tanpa pilihan CONFIG_USB dan CONFIG_STACKTRACE atau dengan pilihan CONFIG_UNWINDER_ORC, serta dengan kernel yang tidak mempunyai fungsi kait LKRG, jika boleh. diketepikan dengan;
  • Semasa membina, beberapa tetapan kernel CONFIG_* wajib disemak untuk menjana mesej ralat yang bermakna dan bukannya ranap yang tidak jelas;
  • Menambah sokongan untuk mod siap sedia (ACPI S3, gantung ke RAM) dan tidur (S4, gantung ke cakera);
  • Menambah sokongan DKMS pada Makefile;
  • Sokongan eksperimen untuk platform ARM 32-bit telah dilaksanakan (diuji pada Raspberry Pi 3 Model B). Sokongan AArch64 (ARM64) yang tersedia sebelum ini telah diperluaskan untuk menyediakan keserasian dengan papan Raspberry Pi 4;
  • Cangkuk baharu telah ditambah, termasuk pengendali panggilan yang mampu () untuk mengenal pasti eksploitasi yang memanipulasi " dengan lebih baik.keupayaan", bukan proses ID (kelayakan);
  • Logik baharu telah dicadangkan untuk mengesan percubaan untuk melarikan diri dari sekatan ruang nama (contohnya, dari bekas Docker);
  • Pada sistem x86-64, bit SMAP (Pencegahan Akses Mod Penyelia) disemak dan digunakan, direka untuk menyekat akses kepada data ruang pengguna daripada kod istimewa yang dijalankan pada peringkat kernel. Perlindungan SMEP (Supervisor Mode Execution Prevention) telah dilaksanakan sebelum ini;
  • Semasa operasi, tetapan LKRG diletakkan dalam halaman memori yang biasanya dibaca sahaja;
  • Maklumat pengelogan yang mungkin paling berguna untuk serangan (contohnya, maklumat tentang alamat dalam kernel) dihadkan kepada mod nyahpepijat (log_level=4 dan lebih tinggi), yang dilumpuhkan secara lalai.
  • Skala pangkalan data penjejakan proses telah ditingkatkan - bukannya satu pokok RB yang dilindungi oleh satu spinlock, jadual cincang 512 pokok RB yang dilindungi oleh 512 kunci baca-tulis digunakan;
  • Mod telah dilaksanakan dan didayakan secara lalai, di mana integriti pengecam proses selalunya disemak hanya untuk tugas semasa, dan juga secara pilihan untuk tugas diaktifkan (bangun). Untuk tugas lain yang berada dalam keadaan tidur atau berfungsi tanpa mengakses API kernel yang dikawal oleh LKRG, semakan dilakukan kurang kerap.
  • Menambah parameter sysctl dan modul baharu untuk LKRG penalaan halus, serta dua sysctl untuk konfigurasi dipermudahkan dengan memilih daripada set tetapan penalaan halus (profil) yang disediakan oleh pembangun;
  • Tetapan lalai telah ditukar untuk mencapai keseimbangan yang lebih seimbang antara kelajuan pengesanan pelanggaran dan keberkesanan tindak balas, di satu pihak, dan kesan ke atas prestasi dan risiko positif palsu, di pihak yang lain;
  • Fail unit systemd telah direka bentuk semula untuk memuatkan modul LKRG pada awal but (pilihan baris arahan kernel boleh digunakan untuk melumpuhkan modul);

Dengan mengambil kira pengoptimuman yang dicadangkan dalam keluaran baharu, pengurangan prestasi apabila menggunakan LKRG 0.8 dianggarkan pada 2.5% dalam mod lalai (β€œberat”) dan 2% dalam mod ringan (β€œringan”).

Dalam yang diadakan baru-baru ini penyelidikan keberkesanan pakej untuk mengesan rootkit LKRG menunjukkan hasil terbaik, mengenal pasti 8 daripada 9 rootkit yang diuji berfungsi pada peringkat kernel tanpa positif palsu (rootkit Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptilia, Rootfoo Linux Rootkit dan Sutekh telah dikenal pasti, tetapi Keysniffer, yang merupakan kernel modul, terlepas dengan keylogger, bukan rootkit dalam erti kata literal). Sebagai perbandingan, pakej AIDE, OSSEC dan Rootkit Hunter mengesan 2 daripada 9 rootkit, manakala Chkrootkit tidak mengesan apa-apa. Pada masa yang sama, LKRG tidak menyokong pengesanan rootkit yang terletak di ruang pengguna, jadi kecekapan terbesar dicapai apabila menggunakan gabungan AIDE dan LKRG, yang memungkinkan untuk mengenal pasti 14 daripada 15 rootkit semua jenis.

Di samping itu, ia boleh diperhatikan bahawa pemaju pengedaran Whonix bermula pembentukan pakej siap pakai dengan DKMS untuk Debian, Whonix, Qubes dan Kicksecure, dan pakej untuk Arch Linux sudah dikemas kini kepada versi 0.8. Pakej dengan LKRG juga tersedia dalam bahasa Rusia alt linux ΠΈ AstraLinux.

Semakan integriti dalam LKRG dilakukan dengan membandingkan kod dan data sebenar kernel dan modul, beberapa struktur data penting dan tetapan CPU dengan cincang tersimpan atau salinan kawasan memori, struktur data atau daftar yang sepadan. Cek diaktifkan secara berkala mengikut pemasa dan apabila berlakunya pelbagai acara.

Menentukan kemungkinan penggunaan eksploitasi dan menyekat serangan dijalankan pada peringkat sebelum kernel menyediakan akses kepada sumber (contohnya, sebelum membuka fail), tetapi selepas proses menerima kebenaran yang tidak dibenarkan (contohnya, menukar UID). Apabila tingkah laku yang tidak dibenarkan dikesan, proses terpaksa ditamatkan secara lalai, yang mencukupi untuk menyekat banyak eksploitasi.

Sumber: opennet.ru

Tambah komen