メモリ安全言語
メモリ安全言語 とは何ですか?
メモリ安全言語Rust、Go、Swift、Java、C# などのメモリ安全言語は、C/C++ における悪用可能な脆弱性の大半を生む空間的・時間的なメモリエラーを構造的に防ぎます。
メモリ安全言語はコンパイル時または実行時に、境界チェック、所有権や GC によるライフタイム管理、型の整合性を強制します。Rust は所有権と借用チェッカで GC なしの安全性を実現し、Go と Swift は管理アロケーションと境界チェック付きスライスを使い、Java と C# は管理ランタイムに依存します。米国 ONCD の 2024 年報告書「Back to the Building Blocks」は、メモリ起因の重大脆弱性 60〜70% を排除するため、新規コードと重要コンポーネントでメモリ安全言語の採用を推奨しています。導入戦略にはホットスポットの書き換え、Strangler パターン、レガシー連携のための FFI 境界などが挙げられます。
● 例
- 01
Android が Bluetooth スタックの一部を Rust で再実装し UAF リスクを下げる。
- 02
AWS が Firecracker や s2n-tls の一部を Rust で書き直す。
● よくある質問
メモリ安全言語 とは何ですか?
Rust、Go、Swift、Java、C# などのメモリ安全言語は、C/C++ における悪用可能な脆弱性の大半を生む空間的・時間的なメモリエラーを構造的に防ぎます。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。
メモリ安全言語 とはどういう意味ですか?
Rust、Go、Swift、Java、C# などのメモリ安全言語は、C/C++ における悪用可能な脆弱性の大半を生む空間的・時間的なメモリエラーを構造的に防ぎます。
メモリ安全言語 はどのように機能しますか?
メモリ安全言語はコンパイル時または実行時に、境界チェック、所有権や GC によるライフタイム管理、型の整合性を強制します。Rust は所有権と借用チェッカで GC なしの安全性を実現し、Go と Swift は管理アロケーションと境界チェック付きスライスを使い、Java と C# は管理ランタイムに依存します。米国 ONCD の 2024 年報告書「Back to the Building Blocks」は、メモリ起因の重大脆弱性 60〜70% を排除するため、新規コードと重要コンポーネントでメモリ安全言語の採用を推奨しています。導入戦略にはホットスポットの書き換え、Strangler パターン、レガシー連携のための FFI 境界などが挙げられます。
メモリ安全言語 からどのように防御しますか?
メモリ安全言語 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
メモリ安全言語 の別名は何ですか?
一般的な別名: MSL, メモリセーフ言語。
● 関連用語
- appsec№ 670
メモリ安全性
メモリ安全性とは、プログラムが正当に確保していないメモリを読み書きしたり実行したりしないという性質で、脆弱性のクラスをまとめて排除できます。
- appsec№ 953
Rust のセキュリティ特性
Rust は所有権・借用・ライフタイムにより、ガベージコレクタなしに UAF やデータ競合を含む典型的な未定義動作をコンパイル時に排除します。
- appsec№ 217
コントロールフロー整合性(CFI)
CFI はプログラムの間接呼び出しと戻りを事前計算した正当な遷移先集合に制限し、ROP や JOP による制御フロー奪取を阻止します。
- appsec№ 064
ASLR
ASLR はコード、スタック、ヒープ、ライブラリの配置アドレスを実行ごとに乱数化し、攻撃者がエクスプロイトに使う目標アドレスを予測できないようにする緩和策です。
- appsec№ 925
リターン指向プログラミング(ROP)
ROP は、RET で終わる短い命令列(ガジェット)を連結して、新しいコードを注入することなく任意の計算を実現するコード再利用型のエクスプロイト手法です。
- appsec№ 545
Intel CET
Intel CET(制御フロー強制技術)は、ハードウェアシャドースタックと間接分岐追跡(IBT)を組み合わせ、ROP/JOP/COP の悪用を阻止する CPU 機能です。
● 関連項目
- № 581KASLR