Microsoft Membuka CHERIoT, Solusi Perangkat Keras untuk Meningkatkan Keamanan Kode C

Microsoft telah menemukan perkembangan terkait proyek CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), yang bertujuan untuk memblokir masalah keamanan pada kode yang ada di C dan C++. CHERIoT menawarkan solusi yang memungkinkan Anda melindungi basis kode C/C++ yang ada tanpa perlu mengerjakan ulang. Perlindungan diimplementasikan melalui penggunaan kompiler yang dimodifikasi yang menggunakan serangkaian instruksi prosesor (ISA) khusus yang diperluas, disediakan oleh prosesor dan di tingkat perangkat keras memantau akses memori, memeriksa kebenaran pekerjaan dengan pointer dan memastikan isolasi blok kode.

Proyek ini dibuat dengan memperhatikan fakta bahwa sifat bahasa C tingkat rendah menjadi sumber kesalahan saat bekerja dengan memori, yang menyebabkan masalah seperti buffer overflow, akses ke memori yang sudah dibebaskan, dereferensi penunjuk, atau pembebasan ganda. . Praktek menunjukkan bahwa bahkan perusahaan besar seperti Google dan Microsoft, yang memiliki kebijakan tinjauan perubahan yang ketat dan menggunakan metode pengembangan modern dan alat analisis statis, tidak dapat menjamin tidak adanya kesalahan saat bekerja dengan memori (misalnya, sekitar 70% kerentanan di Microsoft dan Google disebabkan oleh penanganan memori yang tidak aman).

Masalahnya dapat diselesaikan dengan menggunakan bahasa pemrograman yang menjamin pengoperasian memori yang aman, atau mengikat dengan pemeriksaan tambahan, misalnya, dengan menggunakan pointer biasa seperti MiraclePtr (raw_ptr), yang melakukan pemeriksaan tambahan untuk mengakses area memori yang dibebaskan. Namun metode seperti itu lebih cocok untuk kode baru, dan pengerjaan ulang proyek C/C++ yang sudah ada cukup bermasalah, terutama jika proyek tersebut dirancang untuk berjalan di lingkungan dengan sumber daya terbatas, seperti sistem tertanam dan perangkat Internet of Things.

Komponen perangkat keras CHERIoT dirancang sebagai mikrokontroler berdasarkan arsitektur RISC-V, mengimplementasikan arsitektur prosesor CHERI (Capability Hardware Extension to RISC-V) yang dilindungi, yang menyediakan model akses memori terkontrol berdasarkan “kemampuan” (setiap baca dan tulis operasi ke memori diotorisasi). Berdasarkan arsitektur set instruksi (ISA) yang disediakan di CHERIoT, model perangkat lunak dibangun yang menjamin keamanan bekerja dengan memori di tingkat objek individu, memberikan perlindungan terhadap akses ke memori yang sudah dibebaskan, dan mengimplementasikan sistem isolasi akses memori yang ringan. . Model perlindungan perangkat lunak yang ditentukan secara langsung tercermin dalam model bahasa C/C++, yang memungkinkannya digunakan untuk melindungi aplikasi yang ada (hanya diperlukan kompilasi ulang dan dijalankan pada peralatan yang mendukung ISA CHERIoT).

Solusi yang diusulkan memungkinkan Anda untuk memblokir kesalahan yang menyebabkan objek melampaui batas memori, tidak mengizinkan substitusi penunjuk (semua penunjuk harus dihasilkan dari penunjuk yang ada), dan memantau akses memori setelah dibebaskan (akses apa pun ke memori menggunakan metode yang salah penunjuk atau penunjuk yang mereferensikan objek yang dibebaskan menghasilkan pengecualian yang dilempar). Misalnya, penggunaan CHERIoT memungkinkan Anda menerapkan pemeriksaan batas otomatis, pelacakan masa pakai memori, dan penegakan integritas penunjuk dalam komponen yang menangani data tidak tepercaya tanpa memerlukan perubahan kode apa pun.

Proyek ini mencakup spesifikasi arsitektur set instruksi CHERIoT yang diperluas, implementasi referensi CPU RISC-V 32-bit yang mendukung CHERIoT ISA, dan toolkit LLVM yang dimodifikasi. Diagram prototipe CPU dan deskripsi blok perangkat keras di Verilog didistribusikan di bawah lisensi Apache 2.0. Inti Ibex dari proyek lowRISC digunakan sebagai dasar CPU. Model kode CHERIoT ISA didefinisikan dalam bahasa Sail dan dilisensikan di bawah lisensi BSD.

Selain itu, prototipe sistem operasi real-time CHERIoT RTOS juga diusulkan, yang menyediakan kemampuan untuk mengisolasi kompartemen bahkan pada sistem tertanam dengan RAM 256 MB. Kode CHERIoT RTOS ditulis dalam C++ dan didistribusikan di bawah lisensi MIT. Komponen dasar OS, seperti bootloader, penjadwal, dan sistem distribusi memori, dirancang dalam bentuk kompartemen.

Kompartemen di CHERIoT RTOS adalah kombinasi kode dan variabel global terisolasi yang menyerupai perpustakaan bersama, tetapi tidak seperti perpustakaan bersama, kompartemen ini dapat mengubah statusnya (dapat diubah) dan dijalankan dalam konteks keamanan terpisah. Tidak ada kode dari luar yang dapat mentransfer kendali ke kode dalam suatu kompartemen dan mengakses objek, kecuali dengan mengakses titik masuk yang ditentukan secara khusus dan menggunakan penunjuk ke objek yang secara eksplisit diteruskan saat memanggil kompartemen lain. Integritas dan kerahasiaan dijamin untuk kode dan objek global dalam sebuah kompartemen.

Sumber: opennet.ru

Tambah komentar