Fil-C: Cプログラムのメモリ安全性の達成

Fil-C: Cプログラムのメモリ安全性の達成

Fil-Cは、一般的なメモリ関連の脆弱性を排除するために設計されたCプログラミング言語のメモリセーフな実装です。コンパイル時の静的解析を通じて安全性を強制する言語とは異なり、Fil-Cはクラッシュやセキュリティエクスプロイトを防ぐために実行時にメモリアクセスが検証されることを確保することに焦点を当てています。

ランタイムメモリセーフティの強制

Fil-Cはコンパイル時ではなくランタイムで動的にメモリセーフティを強制します。これは、メモリバグを含むプログラムがまだ正常にコンパイルできるかもしれませんが、システムは無効なメモリアクセスが試みられた瞬間にそれを検出し、エラーを出すことを意味します。

このアーキテクチャの選択は、コンパイルフェーズ中にメモリセーフティバグの大クラスを拒否するためにボローチェッカーを使用するRustなどの言語からFil-Cを区別します。Rustは一部のランタイムチェック(境界チェックやRefCellの検証など)を行いますが、Fil-Cの安全性の主要なメカニズムはメモリ操作のランタイムバリデーションです。

システムコールとFil-C標準ライブラリ

Fil-Cはシステムコールを管理するためにカスタムlibc実装を利用しています。このプロジェクトは、このカスタムライブラリによって仲介されるためシステムコールは安全だと主張しています。しかし、批評家はこのカスタムlibcが最終的にシステムの基盤となるlibcを呼び出し、そこで実際のシステムコールが実行されることに注意しています。

これにより、Rustのシステムコールへのアプローチと比較されることになりました。Rustでrawシステムコールを行うことはunsafeとみなされますが、Rust標準ライブラリを使用することで、Fil-CプログラムがFil-C標準ライブラリを利用して安全境界を維持するのと同様の安全な抽象レイヤーが提供されます。

技術的拡張とエコシステム

Fil-Cは基本的なメモリセーフティを超えて、専門的なシステムレベルの機能を含むよう能力を拡張しています:

  • インラインアセンブリサニタイズ: Fil-Cはインラインアセンブリ用のサニタイザを含んでおり、一部の開発者はこれがスタンドアロンツールとして貴重になると考えています。
  • 最適化された呼び出し規約: プロジェクトはパフォーマンスを向上させるために最適化された呼び出し規約を導入しました。
  • メモリセーフなコンテキストスイッチング: Fil-Cは並行環境での安全なコンテキストスイッチングのためのメカニズムを提供します。
  • ライブラリの移植: freetypefontconfigharfbuzzgraphiteなどのいくつかの基礎ライブラリはすでにFil-Cに移植されています。

他のセーフティモデルとの比較

Fil-CはCの文脈でのメモリセーフティツールとしてしばしば枠組まれますが、Rustの直接の競合ではなく補完的なツールとして見ることができます。ランタイムセーフティレイヤーを提供するため、静的セーフティ保証が実現不可能な既存のCベースのインフラストラクチャに他の言語をコンパイルしたり統合したりする可能性があります。

一部の観察者は、Fil-CのアプローチをAppleのMemory Integrity Enforcementのようなハードウェアベースのソリューションと比較し、Fil-Cのソフトウェアベースのアプローチは特定のハードウェア要件に依存せずにその安全性保証を提供することに注意しています。

Sources