メモリ安全性
メモリ安全性 とは何ですか?
メモリ安全性メモリ安全性とは、プログラムが正当に確保していないメモリを読み書きしたり実行したりしないという性質で、脆弱性のクラスをまとめて排除できます。
メモリ安全性には、空間安全性(範囲外アクセスがない)、時間安全性(use-after-free や double-free がない)、型安全性、初期化安全性が含まれます。C や C++ は既定でメモリ安全ではなく、バッファオーバーフロー、UAF、型混乱が重大な CVE の大半を占めます。Microsoft、Google Project Zero、米国 ONCD の 2024 年報告などの統計では、大規模 C/C++ コードベースの重大脆弱性の 60〜70% がメモリ安全性の欠陥に起因します。ASLR、DEP、CFI、サニタイザなどの緩和策は攻撃コストを上げますが、メモリ安全言語や形式検証済みサブセットによって根本からバグを取り除くことが、最終的な解決策となります。
● 例
- 01
範囲外書き込みでヒープチャンクを攻撃者制御のオブジェクトに変える。
- 02
use-after-free で解放した JavaScript オブジェクトのポインタが JIT キャッシュに残る。
● よくある質問
メモリ安全性 とは何ですか?
メモリ安全性とは、プログラムが正当に確保していないメモリを読み書きしたり実行したりしないという性質で、脆弱性のクラスをまとめて排除できます。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。
メモリ安全性 とはどういう意味ですか?
メモリ安全性とは、プログラムが正当に確保していないメモリを読み書きしたり実行したりしないという性質で、脆弱性のクラスをまとめて排除できます。
メモリ安全性 はどのように機能しますか?
メモリ安全性には、空間安全性(範囲外アクセスがない)、時間安全性(use-after-free や double-free がない)、型安全性、初期化安全性が含まれます。C や C++ は既定でメモリ安全ではなく、バッファオーバーフロー、UAF、型混乱が重大な CVE の大半を占めます。Microsoft、Google Project Zero、米国 ONCD の 2024 年報告などの統計では、大規模 C/C++ コードベースの重大脆弱性の 60〜70% がメモリ安全性の欠陥に起因します。ASLR、DEP、CFI、サニタイザなどの緩和策は攻撃コストを上げますが、メモリ安全言語や形式検証済みサブセットによって根本からバグを取り除くことが、最終的な解決策となります。
メモリ安全性 からどのように防御しますか?
メモリ安全性 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
メモリ安全性 の別名は何ですか?
一般的な別名: メモリ安全性の不具合。
● 関連用語
- appsec№ 671
メモリ安全言語
Rust、Go、Swift、Java、C# などのメモリ安全言語は、C/C++ における悪用可能な脆弱性の大半を生む空間的・時間的なメモリエラーを構造的に防ぎます。
- appsec№ 953
Rust のセキュリティ特性
Rust は所有権・借用・ライフタイムにより、ガベージコレクタなしに UAF やデータ競合を含む典型的な未定義動作をコンパイル時に排除します。
- appsec№ 217
コントロールフロー整合性(CFI)
CFI はプログラムの間接呼び出しと戻りを事前計算した正当な遷移先集合に制限し、ROP や JOP による制御フロー奪取を阻止します。
- appsec№ 064
ASLR
ASLR はコード、スタック、ヒープ、ライブラリの配置アドレスを実行ごとに乱数化し、攻撃者がエクスプロイトに使う目標アドレスを予測できないようにする緩和策です。
- appsec№ 303
DEP(データ実行防止)
DEP(NX ビット、W^X)はメモリページを実行不可と印付けし、スタックやヒープに注入されたシェルコードの実行を阻止します。
- appsec№ 925
リターン指向プログラミング(ROP)
ROP は、RET で終わる短い命令列(ガジェット)を連結して、新しいコードを注入することなく任意の計算を実現するコード再利用型のエクスプロイト手法です。
● 関連項目
- № 1095スタックカナリア
- № 1028シャドースタック
- № 581KASLR
- № 1058SMEP / SMAP