Microsoft Membuka CHERIoT, Penyelesaian Perkakasan untuk Meningkatkan Keselamatan Kod C

Microsoft telah menemui perkembangan berkaitan projek CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), bertujuan untuk menyekat masalah keselamatan dalam kod sedia ada dalam C dan C++. CHERIoT menawarkan penyelesaian yang membolehkan anda melindungi pangkalan kod C/C++ sedia ada tanpa perlu mengolahnya semula. Perlindungan dilaksanakan melalui penggunaan pengkompil yang diubah suai yang menggunakan set lanjutan khas arahan pemproses (ISA), yang disediakan oleh pemproses dan pada tahap perkakasan memantau akses memori, menyemak ketepatan kerja dengan penunjuk dan memastikan pengasingan blok kod.

Projek ini dibuat dengan melihat fakta bahawa sifat bahasa C peringkat rendah menjadi punca ralat apabila bekerja dengan ingatan, yang membawa kepada masalah seperti limpahan penimbal, akses kepada memori yang sudah dibebaskan, penolakan penunjuk, atau pembebasan berganda. . Amalan menunjukkan bahawa walaupun syarikat besar seperti Google dan Microsoft, yang mempunyai dasar semakan perubahan yang ketat dan menggunakan kaedah pembangunan moden serta alat analisis statik, tidak dapat menjamin ketiadaan ralat apabila bekerja dengan memori (contohnya, kira-kira 70% daripada kelemahan dalam Microsoft dan Google disebabkan oleh pengendalian memori yang tidak selamat).

Masalahnya boleh diselesaikan dengan menggunakan bahasa pengaturcaraan yang menjamin operasi selamat dengan ingatan, atau pengikatan dengan pemeriksaan tambahan, contohnya, dengan menggunakan bukan penunjuk biasa seperti MiraclePtr (raw_ptr), yang melakukan pemeriksaan tambahan untuk mengakses kawasan memori yang dibebaskan. Tetapi kaedah sedemikian lebih sesuai untuk kod baharu, dan mengolah semula projek C/C++ sedia ada agak bermasalah, terutamanya jika ia direka untuk dijalankan dalam persekitaran terhad sumber, seperti sistem terbenam dan peranti Internet of Things.

Komponen perkakasan CHERIoT direka sebagai mikropengawal berdasarkan seni bina RISC-V, melaksanakan seni bina pemproses CHERI (Capability Hardware Extension to RISC-V) yang dilindungi, yang menyediakan model capaian memori terkawal berdasarkan "keupayaan" (setiap membaca dan menulis operasi ke ingatan dibenarkan) . Berdasarkan seni bina set arahan (ISA) yang disediakan dalam CHERIoT, model perisian dibina yang menjamin keselamatan bekerja dengan memori pada tahap objek individu, memberikan perlindungan terhadap akses kepada memori yang telah dibebaskan dan melaksanakan sistem pengasingan akses memori yang ringan. . Model perlindungan perisian yang ditentukan secara langsung ditunjukkan dalam model bahasa C/C++, yang membolehkannya digunakan untuk melindungi aplikasi sedia ada (hanya penyusunan semula dan berjalan pada peralatan yang menyokong ISA CHERIoT diperlukan).

Penyelesaian yang dicadangkan membolehkan anda menyekat ralat yang menyebabkan objek melangkaui sempadan memori, tidak membenarkan penggantian penunjuk (semua penunjuk mesti dihasilkan daripada penunjuk sedia ada), dan memantau akses memori selepas membebaskan (sebarang akses kepada memori menggunakan yang salah penunjuk atau penunjuk yang merujuk objek yang dibebaskan mengakibatkan pengecualian dilemparkan). Contohnya, menggunakan CHERIoT membolehkan anda melaksanakan semakan sempadan automatik, penjejakan seumur hidup memori dan penguatkuasaan integriti penunjuk dalam komponen yang mengendalikan data yang tidak dipercayai tanpa memerlukan sebarang perubahan kod.

Projek ini termasuk spesifikasi seni bina set arahan CHERIoT lanjutan, pelaksanaan rujukan CPU RISC-V 32-bit yang menyokong ISA CHERIoT dan kit alat LLVM yang diubah suai. Gambar rajah prototaip CPU dan perihalan blok perkakasan dalam Verilog diedarkan di bawah lesen Apache 2.0. Teras Ibex daripada projek lowRISC digunakan sebagai asas untuk CPU. Model kod CHERIoT ISA ditakrifkan dalam bahasa Sail dan dilesenkan di bawah lesen BSD.

Selain itu, prototaip sistem pengendalian masa nyata CHERIoT RTOS dicadangkan, yang menyediakan keupayaan untuk mengasingkan petak walaupun pada sistem terbenam dengan 256 MB RAM. Kod CHERIoT RTOS ditulis dalam C++ dan diedarkan di bawah lesen MIT. Komponen asas OS, seperti pemuat but, penjadual dan sistem pengedaran memori, direka bentuk dalam bentuk petak.

Petak dalam CHERIoT RTOS ialah gabungan terpencil kod dan pembolehubah global yang menyerupai perpustakaan kongsi, tetapi tidak seperti yang kedua, ia boleh menukar keadaannya (boleh berubah) dan dijalankan dalam konteks keselamatan yang berasingan. Tiada kod dari luar boleh memindahkan kawalan kepada kod dalam petak dan mengakses objek, kecuali dengan mengakses titik masuk yang ditakrifkan khas dan menggunakan penunjuk ke objek yang dihantar secara eksplisit apabila memanggil petak lain. Integriti dan kerahsiaan dijamin untuk kod dan objek global dalam petak.

Sumber: opennet.ru

Tambah komen