脆弱性
整数オーバーフロー
別称: 整数ラップアラウンド
定義
算術演算の結果が整数型の表現可能範囲を超え、ラップアラウンドや切り詰めがセキュリティ上重大な影響を及ぼすバグ。
整数オーバーフローは、計算結果が整数型の表現できる最大値(または最小値)を超えてラップアラウンド・符号反転・切り詰めが生じる現象です。誤った値がその後バッファサイズ、ループカウンタ、配列インデックス、認可判定などに用いられるとセキュリティ問題となり、バッファオーバーフロー・無限ループ・上限のバイパスを引き起こします。対策としては、検査付き算術(Rust の checked_add、C23 の ckd_*、コンパイラの -ftrapv)、広い型へ拡張してから明示的に範囲チェックして縮める手法、データに合った型選択、徹底したファズテストが挙げられます。画像コーデック、フォントパーサ、カーネルなど多数の高インパクト CVE が整数オーバーフローのチェーンに起因します。
例
- CVE-2002-0639(OpenSSH challenge-response):整数オーバーフローによりヒープが破壊。
- CVE-2018-9568(Android Wi-Fi):802.11 フレーム処理での整数オーバーフロー。
関連用語
バッファオーバーフロー
メモリ安全性の欠陥で、確保済みバッファの末尾を超えて書き込みが行われ、隣接メモリが破壊されてしばしばコード実行を可能にする。
ヒープオーバーフロー
動的に確保したメモリ上で発生するバッファオーバーフロー。アロケータのメタデータ、関数ポインタ、オブジェクトの vtable などが破壊されることが多い。
メモリ破壊
プログラムが意図したメモリ境界の外に書き込み、型安全性・制御フロー・データ整合性を損なうタイプの脆弱性を総称する用語。
Secure Coding
Secure Coding — definition coming soon.
ファジング(Fuzz Testing)
プログラムに大量の不正・ランダム・想定外な入力を与え、クラッシュ・メモリ破壊・セキュリティ脆弱性を自動的に発見するテスト手法。
脆弱性
システム、アプリケーション、または運用プロセスに存在する弱点で、攻撃者が機密性・完全性・可用性を侵害するために悪用できるもの。