Rumah > Tutorial sistem > LINUX > Anda boleh cuba menggunakan penyelesaian berikut untuk memintas fungsi kernel Linux

Anda boleh cuba menggunakan penyelesaian berikut untuk memintas fungsi kernel Linux

PHPz
Lepaskan: 2024-02-15 17:33:31
ke hadapan
749 orang telah melayarinya

Anda boleh cuba menggunakan penyelesaian berikut untuk memintas fungsi kernel Linux:

Gunakan API Keselamatan Linux

Dari perspektif amalan terbaik, kami merasakan bahawa menggunakan fungsi cangkuk API keselamatan Linux adalah pilihan terbaik, kerana soket ini direka untuk tujuan ini. Perkara utama dalam kod kernel termasuk panggilan fungsi keselamatan, yang mungkin menyebabkan pemasangan modul keselamatan meningkat. Modul ini boleh mengkaji konteks operasi tertentu dan memutuskan sama ada untuk membenarkan atau melarangnya. Malangnya, LinuxSecurityAPI mempunyai dua batasan utama:

调用linux内核函数_linux内核调试方法总结_linux调用内核函数

Malah, pembangun kernel mempunyai idea yang berbeza tentang sama ada sistem boleh mengandungi berbilang modul keselamatan, dan adalah fakta tertentu bahawa modul tidak boleh dimuatkan secara dinamik. Untuk memastikan sistem kekal selamat dari awal, modul keselamatan mesti menjadi sebahagian daripada kernel. Atas sebab ini, untuk menggunakan API keselamatan Linux, kita perlu mencipta kernel Linux tersuai.

Tukar jadual panggilan sistem

Memandangkan ia digunakan terutamanya untuk operasi yang dilakukan oleh aplikasi pengguna, kami boleh melaksanakannya di peringkat panggilan sistem. Semua pengendali panggilan sistem Linux disimpan dalam jadual sys_call_table. Mengubah suai nilai dalam jadual ini menghasilkan tingkah laku sistem yang diubah suai. Kita boleh melakukan ini dengan mengaitkan panggilan sistem dengan menyimpan nilai pengendali lama dan menambah pengendali kita sendiri pada jadual. Kaedah ini juga mempunyai beberapa kelebihan dan kekurangan.

Kelebihan utama adalah seperti berikut:

Namun, kaedah ini juga mempunyai beberapa kelemahan:

Pelaksanaan teknikal lebih kompleks. Sebenarnya, tidak sukar untuk menggantikan nilai dalam jadual Panggil fungsi kernel linux , tetapi terdapat beberapa tugas tambahan yang memerlukan syarat individu dan beberapa penyelesaian yang tidak jelas:

调用linux内核函数_linux内核调试方法总结_linux调用内核函数

Hanya panggilan sistem cangkuk. Oleh kerana pendekatan ini membolehkan anda menggantikan pengendali panggilan sistem, ia sangat mengehadkan titik masuk. Semua pengesanan tambahan boleh dilakukan sebelum atau sejurus selepas panggilan sistem, kami hanya mempunyai parameter panggilan sistem dan nilai pulangannya. Oleh itu, kadangkala kita mungkin perlu menyemak dengan teliti kebenaran akses proses dan kesahihan parameter panggilan sistem. Dilaporkan bahawa dalam beberapa kes, keperluan untuk menyalin memori proses pengguna dua kali akan menyebabkan perbelanjaan tambahan. Sebagai contoh, apabila parameter disalurkan melalui jarum jam tangan, terdapat dua salinan: satu dibuat oleh kami sendiri dan satu dibuat oleh pengendali asal.

Guna Kprobes

Kprobes — API yang direka untuk pengesanan dan penyahpepijatan kernel Linux. Kprobes membenarkan pemasangan pra dan pasca pemproses untuk sebarang arahan kernel serta pengendali kemasukan fungsi dan pemulangan fungsi. Pengendali mempunyai akses kepada daftar dan boleh mengubah suainya. Dengan cara ini, kami mempunyai peluang untuk memantau aliran pelaksanaan fail dan mengubahnya.

调用linux内核函数_linux内核调试方法总结_linux调用内核函数

Kegunaan utama menggunakan Kprobes untuk menjejaki fungsi kernel Linux adalah seperti berikut:

Kprobes juga ada kelemahan:

Splicing

Cara klasik untuk mengkonfigurasi pengait fungsi kernel: gantikan arahan pada permulaan fungsi dengan lompatan tanpa syarat kepada pengendali tersuai. Arahan asal disambungkan ke lokasi yang berbeza dan dilaksanakan sebelum melompat kembali ke fungsi yang dipintas. Atas sebab ini, dengan dua lompatan, kod boleh disambungkan ke dalam fungsi. Ini berfungsi dengan cara yang sama seperti pengoptimuman lompat kprobes. Dengan penyambungan, anda boleh mencapai hasil yang sama seperti menggunakan kprobes, tetapi dengan kurang overhed dan kawalan penuh ke atas proses.

Kelebihan menggunakan splicing sangat ketara:

Walau bagaimanapun, kaedah ini mempunyai satu kelemahan utama - kerumitan teknikal. Mengganti kod mesin dalam fungsi bukanlah mudah. Untuk menggunakan splicing untuk memanggil fungsi kernel linux , operasi berikut perlu diselesaikan:

Secara relatifnya, penyambungan mungkin merupakan cara yang sangat berguna untuk mengaitkan fungsi kernel Linux. Tetapi pelaksanaan kaedah ini terlalu rumit. Kerana mengambil kira keupayaan kami sendiri dan beberapa insentif lain, kami tidak bersedia untuk menggunakan kaedah ini buat masa ini, jadi kami menggunakannya sebagai calon.

Atas ialah kandungan terperinci Anda boleh cuba menggunakan penyelesaian berikut untuk memintas fungsi kernel Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:itcool.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan