Analisis mendalam tentang system call mseal baru di Linux
mseal adalah system call baru yang diperkenalkan di Linux kernel versi 6.10, yang menyediakan fitur "penyegelan memori" untuk perlindungan memori.
- System call ini membuat area memori menjadi tidak dapat diubah dari modifikasi ilegal selama eksekusi program, sehingga penyerang tidak dapat mengubah izin memori atau memanipulasi tata letak memori.
mseal ditujukan untuk mencegah eksekusi kode oleh penyerang jarak jauh, sehingga berbeda dari memfd_create dan memfd_secret yang ada untuk melindungi dari penyerang lokal yang menyimpan data sensitif di memori.
Cara kerja mseal
- Tanda tangan fungsi
mseal sederhana: menerima alamat awal dan panjang untuk menyegel area memori tersebut.
- Fungsi
do_mseal mengunci area memori, lalu memeriksa validitas dan menerapkan penyegelan melalui check_mm_seal dan apply_mm_seal.
- Area memori yang telah disegel tidak dapat diubah izinnya, di-unmap, atau diubah ukurannya melalui system call seperti
mprotect, munmap, dan mremap.
Teknik serangan yang ditahan oleh mseal
- Penguatan NX:
mseal mencegah perubahan izin eksekusi pada VMA sehingga serangan berbasis shellcode dapat dicegah.
- Mitigasi serangan data-only berbasis unmapping:
mseal mencegah pelepasan dan pemetaan ulang area memori secara sewenang-wenang, sehingga menghambat serangan data-only.
Penguatan perangkat lunak dengan mseal
mseal dapat meningkatkan keamanan dengan menyegel area memori tertentu dalam perangkat lunak.
- Pengembang dapat menggunakan
mseal untuk secara selektif menyegel area memori yang mungkin berisi data tidak tepercaya.
- Seiring integrasi dengan glibc berlangsung, ada kemungkinan fitur penyegelan otomatis akan ditambahkan.
Ringkasan GN⁺
mseal adalah fitur keamanan baru yang ditambahkan ke Linux kernel untuk mencegah eksekusi kode oleh penyerang jarak jauh dengan menyegel area memori.
- Berbeda dari pendekatan perlindungan memori yang ada, system call ini mencegah perubahan izin memori dan unmapping, sehingga dapat menghentikan serangan data-only.
- Kehadiran
mseal akan memainkan peran penting dalam memperkuat keamanan perangkat lunak, dan integrasinya dengan glibc diharapkan membuka lebih banyak kasus penggunaan.
- Proyek lain dengan fungsi serupa mencakup
memfd_create dan memfd_secret untuk perlindungan memori.
1 komentar
Komentar Hacker News
Disebutkan adanya "perdebatan panas" di milis kernel. Ada komentar yang penasaran apakah orang dalam bisa merangkum keberatan dan kekhawatirannya. Milis itu cenderung dihindari karena terlalu intens
Chrome menginginkan pemanggilan ini, tetapi halaman yang disegel tidak bisa dibuka segelnya karena penyerang dapat memetakan ulang dengan flag lain
Disediakan tautan ke artikel tentang mseal() dan artikel-artikel setelahnya
Ada rasa sedih bahwa meskipun arsitektur modern (x86_64) memiliki banyak fitur yang mendorong pemrograman aman, sistem operasi tetap harus mengimplementasikan pemanggilan seperti ini
Ada pertanyaan apakah syscall
msealbisa dinonaktifkan dengan trik LD_PRELOADPrototipe mseal() di artikel tidak benar secara sintaks. Argumen pertamanya seharusnya
unsigned long start_addr, bukanunsigned start addrOpenBSD sudah lama memiliki fitur ini. Muncul pertanyaan mengapa Linux baru mengadopsinya sekarang