Wikiwand AI

メモリ安全性

From Wikipedia, the free encyclopedia

メモリ安全性 (メモリあんぜんせい、英語: Memory safety) は、バッファオーバーフローやダングリングポインタ(英語版)などの、RAMアクセス時に発生するバグやセキュリティホールなどから保護されている状態のことである[1]。例えば、Javaは実行時エラー検出(英語版)で配列の境界とポインタの参照外しを確認するので、メモリ安全であると言われている[1]。対照的に、CとC++は境界チェック(英語版)を行わないメモリアドレスを直接参照するポインタを使用した任意のポインタ演算が可能なので[2]、メモリ安全ではない[3]。

メモリエラーは資源管理及びタイムシェアリングシステムでFork爆弾などの問題を回避するために検討されたことが始まりである[4]。Fingerプロトコルでのバッファオーバーフローを悪用したモリスワームが登場するまでは、これは殆ど理論上の存在であった[5]。その後、コンピュータセキュリティの分野は急速に発展し、Return-to-libc攻撃などの多くの新たなサイバー攻撃手法が次々と誕生し、これに対する防御手法として実行保護[6]やアドレス空間配置のランダム化などの技術が開発された。アドレス空間配置のランダム化は殆どのバッファオーバーフロー攻撃を防ぎ、攻撃者がアドレスを取得する際に、ヒープスプレー(英語版)かその他のアプリケーションに依存する方法を利用することを必要とさせるものであるが、これが採用されるまでには長い時間を必要とした[5]。但し、これらの技術が利用されるのは、ライブラリとスタックの場所をランダムにするときに限定されることが一般的である。

手法

メモリエラーの種類

脚注

Related Articles

Timelines

Top Qs

Fact Checks