メモリ安全性とは?めもりあんぜんせい
メモリ安全性とは、確保していない領域への読み書きや解放済み領域の参照といった不正なメモリ操作が起こらないことを、言語や処理系の側が保証する性質。C/C++はこの保証を持たないため、バッファオーバフローや解放後使用がそのまま脆弱性になる。Rustは所有権と借用の規則でこれをコンパイル時に担保する。
最終更新:2026-10-06
この語が出る過去問を解く →背景
組込みで長くCが使われてきたのは、メモリ配置を自分で決められること自体が要求だったからで、その自由と引き換えに範囲の検査を捨てている。ところが機器がネットワークにつながると、外から与えられた長さを信じて配列へ書き込む処理が、そのまま任意コード実行の入口になる。攻撃面が広がったことで、書き手の注意深さに頼るのではなく言語や処理系の側で保証させる方向へ関心が移り、公的機関がメモリ安全な言語への移行を勧告する状況になった。
具体例
Linuxカーネルは2022年からドライバをRustで書く仕組みを取り込み、Androidも新規コードのRust化を進めている。境界検査や参照の有効期間をコンパイル時に検証する方式は、実行時のチェックを増やさずに済むため、資源に余裕の無いマイコンでも採りやすい。
試験での引っ掛け
MISRA-Cへ準拠してもこの性質は得られない(規約は危険な書き方を減らす手続きであって、処理系による保証ではない)。ガベージコレクションがあれば解放後使用は防げるが、配列の範囲外アクセスは境界検査の有無で決まる別の論点。型安全性とも同義ではなく、型が合っていても範囲外へ書けば破れる。
関連用語
出た過去問
出典:令和7年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問17(IPA)
組込みシステムにおける、ソフトウェアのメモリ安全性(Memory Safety)を考慮した事例として、適切なものはどれか。
正解:バッファオーバーフロー、メモリリークなどの潜在的なセキュリティ上の問題を回避するために、メモリの保護機能を備えたプログラム言語を使用する。
要点:メモリ安全性は領域外アクセスを言語レベルで防ぐこと
メモリ安全性とは、確保した領域の外側への読み書きや、解放済み領域の参照などが起こらないことを指す。C言語のようにポインタ操作を制約しない言語ではこれらが容易に混入するため、境界検査や所有権による管理(領域の持ち主を一つに決める方式)といったメモリ保護の仕組みを言語自体が備えたものを使うことが、根本的な対策になる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。