kernel: menonaktifkan / dev / kmem dan / dev / mem

8

Saya mengerti itu /dev/kmemdan /dev/memmemberikan akses ke memori (yaitu RAM mentah) dari sistem. Saya juga sadar, itu /dev/kmembisa sepenuhnya dinonaktifkan di kernel dan akses itu bisa dibatasi /dev/mem.

Menurut saya, memiliki akses mentah ke memori dapat bermanfaat bagi pengembang dan peretas, tetapi mengapa saya harus memerlukan akses ke memori /dev/mem. AFAIK tidak dapat dinonaktifkan di kernel (tidak seperti /dev/kmem). Memiliki akses ke memori mentah yang dapat berpotensi disalahgunakan / dieksploitasi tampaknya bagi saya hanya meminta masalah.

Apakah ada kegunaan praktis untuk itu? Apakah ada program pengguna yang mengharuskannya bekerja dengan baik?

pengguna1968963
sumber
1
lwn.net/Articles/147901 menunjukkan bahwa X server dapat digunakan /dev/mem. Tidak yakin itu masih relevan.
Mat
Artikel LJ ini menyarankan hal yang sama: linuxjournal.com/magazine/anthony-lineberry-devmem-rootkits
slm
Apakah Anda juga menonaktifkan modul yang dapat dimuat? Karena itu bahkan lebih berbahaya daripada /dev/mem. Muat modul, jalankan kode dalam mode kernel. Dan di atas itu, pengerasan terhadap penyerang dengan akses root hanya bermanfaat jika ada hal-hal yang root tidak dapat lakukan, yang cenderung tidak menjadi kasus pada instalasi yang umum.
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles - Saya menggunakan modul yang ditandatangani secara kriptografis. Hanya modul yang ditandatangani dengan kunci pribadi saya yang dapat dimuat.
user1968963
Tambahan untuk STRICT_DEVMEM yang dijelaskan dalam man mem, akses tulis ke / dev / mem dinonaktifkan oleh tambalan penguncian kernel yang digunakan untuk mendukung "boot aman" (penguncian dapat diaktifkan tanpa boot aman). phoronix.com/…
sourcejedi

Jawaban:

6

Ada slide deck dari Scale 7x 2009 berjudul: Undermining the Kernel Linux: Malicious Code Injection via / dev / mem yang berisi 2 peluru ini.

Siapa yang butuh ini?

  • X Server (Memori Video & Register Kontrol)
  • DOSEmu

Dari semua yang saya temukan dari pencarian sejauh ini akan tampak bahwa 2 peluru ini adalah pelari terdepan untuk penggunaan yang sah.

Referensi

slm
sumber
bagaimana jika saya tidak menjalankan X serverserver saya, dan dengan demikian tidak perlu /dev/mem. Apakah ada cara untuk menonaktifkan /dev/memsepenuhnya kernel? Saya hanya dapat menemukan "Filter akses ke / dev / mem" ( CONFIG_STRICT_DEVMEM).
user1968963
1
Server X modern, di Linux, dapat hidup tanpa / dev / mem, karena kartu grafis memiliki simpul perangkat sendiri. Itu yang terjadi dengan i915 misalnya.
jørgensen
3

Perlu dicatat bahwa meskipun Anda dinonaktifkan /dev/memdan /dev/kmemmemori itu masih dapat dibuang; lihat man procuntuk mengungkapkan /proc/kcore; itu adalah memori fisik sistem. Rekall forensik toolens yang sangat bagus memiliki alat yang sudah melakukan ini ; itu membuang memori (dan /bootfile) sehingga mereka dapat dianalisis.

Faktanya, Ubuntu secara default menonaktifkan/dev/kmem :

Tidak ada penggunaan modern dari /dev/kmempenyerang di luar menggunakannya untuk memuat rootkit kernel. CONFIG_DEVKMEMdiatur ke "n". Sementara /dev/kmemnode perangkat masih ada di Ubuntu 8.04 LTS melalui Ubuntu 9.04, itu sebenarnya tidak melekat pada apa pun di kernel.

Ubuntu tidak dinonaktifkan /dev/memkarena dibutuhkan oleh aplikasi .

Beberapa aplikasi (Xorg) memerlukan akses langsung ke memori fisik dari ruang pengguna. Ada file khusus /dev/memuntuk menyediakan akses ini. Di masa lalu, dimungkinkan untuk melihat dan mengubah memori kernel dari file ini jika penyerang memiliki akses root. The CONFIG_STRICT_DEVMEMopsi kernel diperkenalkan untuk memblokir non-perangkat akses memori (awalnya bernama CONFIG_NONPROMISC_DEVMEM).

Bagaimana cara menonaktifkan /proc/kcore?

Jangan aktifkan CONFIG_PROC_KCOREsaat membangun kernel.

Bagaimana cara Anda menonaktifkan /dev/mem?

Nah, melihat ke atas man memmemberi kita beberapa detail tentang cara pembuatannya:

mknod -m 660 /dev/mem c 1 1
chown root:kmem /dev/mem

Anda harus bisa adil rm -rf /dev/mem; Anda dapat menonaktifkan selama tahap pembuatan kernel dengan tidak mengaktifkan CONFIG_STRICT_DEVMEM.

Bagaimana cara menonaktifkan /dev/kmem?

Pastikan itu CONFIG_DEVKMEMtidak diaktifkan pada kernel build.

Bagaimana mencegah serangan cold-boot?

Bagaimana jika saya bisa menonaktifkan /proc/kcore, /dev/mem, /dev/kmemdan kemudian menggunakan partisi swap terenkripsi atau tidak menggunakan swap sama sekali? Nah, memori Anda bisa dibekukan dan diakses dengan cara itu. Bagaimana Anda mencegah serangan ini? Anda mengenkripsi RAM Anda; bagaimana Anda mengenkripsi RAM Anda? Kamu tidak bisa Lihat TRESOR untuk detailnya .


sumber
Saya telah menonaktifkan /dev/kmemkernel saya, dan saya tidak melihatnya /proc/kcoredi sistem saya. Tapi saya punya /dev/mem, dan saya ingin menonaktifkannya.
Martin Vegter
Ada kesalahan ketik dalam jawaban ini. /proc/memseharusnya /dev/mem, sama untuk /proc/kmem.
rlf
@ bbb31 bagus. Saya pikir ada kemungkinan ada sesuatu yang hilang. Jika itu yang terjadi maka saya ingin memberi Anda kesempatan untuk mengklarifikasi.
rlf
"Bagaimana Anda mencegah serangan ini? Anda mengenkripsi RAM Anda; bagaimana Anda mengenkripsi RAM Anda? Anda tidak bisa." Catatan: Di masa mendatang, Anda harus dapat melakukannya (setidaknya pada beberapa jenis perangkat keras) - segera hadir! lwn.net/Articles/776688
比尔 盖子
1

Seperti yang Anda ketahui, /dev/memmemberikan akses ke memori fisik sistem yang sedang berjalan. /dev/kmemmenyediakan akses ke memori virtual kernel. Kedua perangkat karakter ini dapat terus-menerus dinonaktifkan melalui opsi konfigurasi kernel (kode adalah sumber informasi yang paling otoritatif sehingga digunakan untuk referensi). Membatalkan dua opsi pertama di bawah ini akan menonaktifkan perangkat yang sesuai.

Tergantung pada distribusi Anda, konfigurasi kernel Anda saat ini dapat terlihat menggunakan sesuatu seperti zless /proc/config.gzatau less /boot/config-$(uname -r).

Saya pikir maksud awalnya /dev/memadalah untuk mendukung interaksi dengan perangkat yang dipetakan dengan memori . Implikasi keamanan negatif yang jelas dari memiliki perangkat virtual ini tersedia (misalnya penyerang dapat dengan cepat menambal memori proses lain atau bahkan kernel) telah diketahui setidaknya selama satu dekade. Membatasi akses ke /dev/memtelah didukung di kernel arus utama sejak awal 2008 , /dev/kmemjuga telah opsional sejak sekitar itu juga.

Satu dekade yang lalu tampaknya Xbergantung pada /dev/mem, saya tidak berpikir ini masih benar. Untuk menguji klaim tentang Xperlunya /dev/memsaya menghapus perangkat virtual dari laptop saya kemarin dan telah berfungsi sepertinya sempurna. Pada 2017 tampaknya tidak ada penggunaan praktis untuk perangkat ini di luar penelitian dan pengembangan.

Dari perspektif keamanan, sebaiknya hapus perangkat ini. Perlu dicatat bahwa penyerang jarak jauh , dengan hak istimewa yang tinggi, dapat membaca memori di luar ruang alamatnya. Memori aplikasi ruang pengguna lain dapat diakses menggunakan /proc/<pid>/mem. Memori kernel dapat diakses menggunakan /proc/kcore.

rlf
sumber
0

Saya tidak memasukkan /dev/memsistem saya sejak awal. Saya menggunakan Gentoo Linux, jadi ini mungkin tidak mengejutkan, karena dengan distribusi Linux ini Anda membuat sendiri setiap paket, termasuk kernel Linux.

Saya tidak pernah melihat adanya masalah karena kurangnya /dev/mem, bahkan ketika menggunakan X.org X11. Baru hari ini saya perhatikan bahwa emerge dari paket x11-drivers/xf86-video-vesamencetak pesan yang menyatakan bahwa diperlukan /dev/mem, seperti ini:

* This driver requires /dev/mem support in your kernel
*   Device Drivers --->
*     Character devices  --->
*       [*] /dev/mem virtual device support

Karena saya tidak menginstal driver VESA untuk XServer dengan sengaja, atau bahkan jika hanya sebagai mundur saya sebenarnya tidak pernah harus menggunakan dan karena itu tidak menyadarinya - sampai sekarang.

Tetapi ini membuktikan bahwa a) X11 tidak perlu /dev/memlagi, dan b) bahwa beberapa driver video X11 mungkin masih tetap melakukannya.

Driver video yang lebih baru untuk perangkat keras tertentu kemungkinan besar akan berfungsi tanpa itu. Sama seperti X.org-X11 modern (di Gentoo, x11-base/xorg-server) bahkan tidak harus menjadi suid root lagi, seperti itulah kemajuannya ...

luttztfz
sumber