Microsoft、C コードのセキュリティを向上させるハードウェア ソリューションである CHERIoT をオープン

Microsoft は、C および C++ の既存コードのセキュリティ問題をブロックすることを目的とした CHERIoT (モノのインターネットのための RISC-V への機能ハードウェア拡張) プロジェクトに関連する開発を発見しました。 CHERIoT は、既存の C/C++ コードベースを再加工することなく保護できるソリューションを提供します。 保護は、プロセッサによって提供される特別な拡張プロセッサ命令セット (ISA) を使用する修正コンパイラの使用を通じて実装され、ハードウェア レベルでメモリ アクセスを監視し、ポインタによる作業の正確性をチェックし、コード ブロックの分離を確保します。

このプロジェクトは、C 言語の低レベルの性質がメモリを操作する際のエラーの原因となり、バッファ オーバーフロー、すでに解放されたメモリへのアクセス、ポインタの逆参照、二重解放などの問題を引き起こすという事実に留意して作成されました。 。 実践によると、厳格な変更レビュー ポリシーを持ち、最新の開発手法や静的分析ツールを使用している Google や Microsoft などの大企業であっても、メモリを扱う際にエラーがないことを保証することはできません (たとえば、Microsoft の脆弱性の約 70% は、および Google は安全でないメモリ処理が原因で発生します)。

この問題は、メモリでの安全な操作を保証するプログラミング言語を使用するか、追加のチェックを伴うバインディングを使用することで解決できます。たとえば、解放されたメモリ領域にアクセスするために追加のチェックを実行する MiraclePtr (raw_ptr) のような通常のポインタの代わりに使用します。 しかし、このような方法は新しいコードにより適しており、既存の C/C++ プロジェクトを再加工することは、特に組み込みシステムやモノのインターネット デバイスなど、リソースに制約のある環境で実行するように設計されている場合には非常に問題になります。

CHERIoT ハードウェア コンポーネントは、RISC-V アーキテクチャに基づくマイクロコントローラーとして設計されており、保護された CHERI (Capability Hardware Extension to RISC-V) プロセッサ アーキテクチャを実装しています。これにより、「機能」(それぞれの読み取りと書き込み) に基づいて制御されたメモリ アクセスのモデルが提供されます。メモリへの操作は許可されています)。 CHERIoT で提供される命令セット アーキテクチャ (ISA) に基づいて、個々のオブジェクト レベルでのメモリ操作の安全性を保証し、すでに解放されたメモリへのアクセスに対する保護を提供し、軽量のメモリ アクセス分離システムを実装するソフトウェア モデルが構築されています。 。 指定されたソフトウェア保護モデルは C/C++ 言語モデルに直接反映されるため、既存のアプリケーションの保護に使用できます (ISA CHERIoT をサポートする機器での再コンパイルと実行のみが必要です)。

提案されたソリューションでは、オブジェクトがメモリの境界を越える原因となるエラーをブロックし、ポインタの置換を許可せず (すべてのポインタは既存のポインタから生成する必要があります)、解放後のメモリ アクセスを監視します (不正なポインタを使用したメモリへのアクセス)。ポインタまたは解放されたオブジェクトを参照するポインタを使用すると、例外がスローされます)。 たとえば、CHERIoT を使用すると、コードを変更することなく、信頼できないデータを処理するコンポーネントに自動境界チェック、メモリ寿命追跡、ポインタ整合性の強制を実装できます。

このプロジェクトには、拡張 CHERIoT 命令セット アーキテクチャの仕様、CHERIoT ISA をサポートする 32 ビット RISC-V CPU のリファレンス実装、および修正された LLVM ツールキットが含まれています。 Verilog での CPU プロトタイプ図とハードウェア ブロックの説明は、Apache 2.0 ライセンスに基づいて配布されます。 lowRISC プロジェクトの Ibex コアが CPU のベースとして使用されました。 CHERIoT ISA コード モデルは Sail 言語で定義されており、BSD ライセンスに基づいてライセンスされています。

さらに、リアルタイム オペレーティング システム CHERIoT RTOS のプロトタイプが提案されており、256 MB の RAM を備えた組み込みシステム上でもコンパートメントを分離する機能を提供します。 CHERIoT RTOS コードは C++ で書かれており、MIT ライセンスに基づいて配布されます。 ブートローダー、スケジューラー、メモリ分散システムなどの OS の基本コンポーネントは、コンパートメントの形式で設計されています。

CHERIoT RTOS のコンパートメントは、コードとグローバル変数の分離された組み合わせであり、共有ライブラリに似ていますが、後者とは異なり、状態を変更でき (可変)、別のセキュリティ コンテキストで実行できます。 外部からのコードは、特別に定義されたエントリ ポイントにアクセスする場合と、別のコンパートメントを呼び出すときに明示的に渡されるオブジェクトへのポインタを使用する場合を除き、コンパートメント内のコードに制御を移してオブジェクトにアクセスすることはできません。 コンパートメント内のコードとグローバル オブジェクトの整合性と機密性が保証されます。

出所: オープンネット.ru

コメントを追加します