2 poin oleh GN⁺ 2024-10-27 | 1 komentar | Bagikan ke WhatsApp

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

 
GN⁺ 2024-10-27
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

    • Mekanismenya sendiri tampak masuk akal, tetapi mengejutkan bahwa ini belum ada di kernel
  • Chrome menginginkan pemanggilan ini, tetapi halaman yang disegel tidak bisa dibuka segelnya karena penyerang dapat memetakan ulang dengan flag lain

    • Ini berarti tidak bisa digunakan untuk halaman yang dialokasikan saat runtime, sehingga tidak dapat dipakai kecuali memang dimaksudkan untuk dipertahankan selama seluruh umur proses
    • Muncul pertanyaan apakah ini berarti tidak bisa digunakan untuk memori seperti sandbox JS
    • Tidak begitu paham dengan cara Chrome mengelola memori/proses, jadi tidak yakin mengapa ini bukan masalah
  • 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

    • Upaya menambal sistem lama justru menghambat kemajuan komputasi dan membahayakan miliaran orang
    • Bug arsitektur memang ada, tetapi perangkat lunak tidak memanfaatkan fitur yang ada dengan semestinya
  • Ada pertanyaan apakah syscall mseal bisa dinonaktifkan dengan trik LD_PRELOAD

  • Prototipe mseal() di artikel tidak benar secara sintaks. Argumen pertamanya seharusnya unsigned long start_addr, bukan unsigned start addr

  • OpenBSD sudah lama memiliki fitur ini. Muncul pertanyaan mengapa Linux baru mengadopsinya sekarang