Beberapa pertanyaan mendasar tentang keamanan kernel Linux [ditutup]

8

Saya tidak tahu banyak tentang kernel Linux, dan saya punya beberapa pertanyaan.

  1. Apa tujuan utama memisahkan memori kernel dari memori ruang pengguna? Untuk memastikan bahwa aplikasi pengguna tidak dapat melakukan hal buruk pada kernel?

  2. Berapa banyak cara yang ada untuk aplikasi tingkat pengguna untuk mentransfer kontrol ke kernel? Apa yang bisa saya lakukan meliputi (1) menjalankan panggilan sistem, (2) memetakan memori ke kernel (tapi saya pikir mmap () juga panggilan sistem), dan (3) memuat modul kernel (tapi saya kira lsmod juga memanggil beberapa panggilan sistem). Apakah saya benar? Apakah ada cara lain yang saya lewatkan?

  3. Berapa banyak cara untuk menyerang kernel? Bolehkah saya memiliki beberapa detail singkat tentang mereka?

  4. Jika saya mendapatkan privilege root, apakah itu berarti saya sepenuhnya mengendalikan kernel? Yaitu, saya dapat melakukan apapun yang saya inginkan dengan kernel dan perangkat keras? Atau saya masih memiliki daya terbatas pada kernel?

Saya akan sangat menghargainya jika seseorang dapat membantu saya menemukan jawaban untuk pertanyaan-pertanyaan ini.

hebothu
sumber
1
Ada beberapa pertanyaan bagus di sini, tetapi bisakah Anda membaginya menjadi pertanyaan yang lebih spesifik dengan satu topik utama per pertanyaan?
Caleb

Jawaban:

5

Saya akan mencoba menjawab pertanyaan sesingkat mungkin. Pertanyaan yang Anda ajukan biasanya dibahas dalam kursus sistem operasi pengantar di universitas tetapi saya akan menganggap Anda belum mengambil kursus seperti itu.

  1. Memori isolasi untuk proses userspace sangat diinginkan - tidak hanya untuk melindungi kernel dari program userspace jahat, tetapi juga untuk melindungi program userspace dari satu sama lain. Ini biasanya disebut sebagai Memori Virtual . Ini juga membuatnya lebih mudah untuk menerapkan paging, yang diinginkan untuk alasan lain juga (fragmentasi sederhana, linker / loader lebih sederhana, dll.).

  2. Interupsi (tidak semuanya mengendalikan aplikasi tingkat pengguna). Menyerah prosesor juga mengambil "kontrol" dari proses (misalnya waitdll. Yang juga merupakan panggilan sistem). Kernel itu sendiri mungkin memutuskan untuk tidak menjadwalkan aplikasi.

  3. Itu pertanyaan yang sangat luas. Kernel dengan panggilan sistem yang diimplementasikan dengan buruk rentan. Kemampuan menulis ke memori fisik akan menjadi cara lain. Ada kerentanan lain yang dapat muncul dari instruksi yang diimplementasikan dengan buruk (misalnya kerentanan sysret dalam prosesor Intel).

  4. Hak akses root tidak sama dengan hak istimewa kernel. Aplikasi yang berjalan sebagai pengguna root masih menggunakan memori virtual, masih harus melakukan panggilan sistem, masih harus mematuhi aturan lain yang harus diterapkan oleh aplikasi tingkat pengguna.

Jika Anda ingin saya memberikan detail lebih lanjut tentang beberapa jawaban, beri tahu saya.

Jika seseorang dapat meningkatkan beberapa jawaban, silakan tunjukkan.

mtahmed
sumber
Terimakasih atas balasan anda. Anda mengatakan "Interupsi (tidak semuanya mengendalikan aplikasi tingkat pengguna).", Artinya hanya interupsi perangkat lunak yang mengendalikan level pengguna, sedangkan interupsi perangkat keras tidak. Apakah itu benar?
hebothu
Saya percaya userspace harus entah bagaimana meminta kernel untuk membiarkannya menangani beberapa interupsi. Jadi kernel pada dasarnya masih mengendalikan interupsi. Secara khusus, kernel masih menangani interupsi dan meneruskannya ke userspace jika aplikasi userspace mau menerimanya. Cari Linux UIO.
mtahmed