脆弱性
メモリ破壊
別称: メモリ安全性バグ
定義
プログラムが意図したメモリ境界の外に書き込み、型安全性・制御フロー・データ整合性を損なうタイプの脆弱性を総称する用語。
メモリ破壊は、バッファオーバーフロー・Use-After-Free・二重解放・型混乱・誤ったサイズを生む整数オーバーフロー・未初期化メモリの読み出しなどを包括的に指します。共通点は、攻撃者が本来触れるべきでないメモリを読み書きさせ、それをプリミティブとして情報漏えい、重要な状態の改ざん、制御フローの奪取に発展させる点です。ブラウザ・カーネル・ハイパーバイザ・文書パーサの悪用において長らく主役でした。緩和策はコンパイル時(CFI、カナリア、FORTIFY_SOURCE)、ランタイム(ASLR、DEP/NX、サンドボックス、MTE)、言語層(Rust、Swift、マネージドランタイム)に分かれます。業界データは、メモリ安全言語の採用がこの種の新規脆弱性の大半を消し去ることを示しています。
例
- ヒープオーバーフロー → ROP → サンドボックス脱出と連鎖したブラウザレンダラの侵害。
- デバイスドライバの UAF を利用したカーネル権限昇格。
関連用語
バッファオーバーフロー
メモリ安全性の欠陥で、確保済みバッファの末尾を超えて書き込みが行われ、隣接メモリが破壊されてしばしばコード実行を可能にする。
解放後使用(Use-After-Free)
free 済みのメモリをプログラムが使い続けるメモリ安全性のバグ。攻撃者にオブジェクト状態の操作と制御フロー奪取を許すことが多い。
二重解放(Double Free)
同じヒープチャンクを二度解放するメモリ安全性のバグ。アロケータのメタデータが破壊され、しばしば任意コード実行を可能にする。
整数オーバーフロー
算術演算の結果が整数型の表現可能範囲を超え、ラップアラウンドや切り詰めがセキュリティ上重大な影響を及ぼすバグ。
Secure Coding
Secure Coding — definition coming soon.
脆弱性
システム、アプリケーション、または運用プロセスに存在する弱点で、攻撃者が機密性・完全性・可用性を侵害するために悪用できるもの。