脆弱性
メモリリーク
別称: リソースリーク
定義
不要になったメモリがアロケータへ返却されない欠陥。利用可能メモリを徐々に枯渇させ、性能低下やクラッシュを招く。
メモリリーク(CWE-401)は、プログラムが確保したメモリへの参照を解放せずに失う現象です。時間とともにプロセスのワーキングセットが膨張し、性能が落ち、スワップが酷使され、最終的に OS がプロセスを終了させたり新規受付を停止したりします。多くは信頼性の問題ですが、攻撃者が任意にトリガーできる長時間稼働サービスでは DoS の増幅装置となり得ます。ヒープ以外にもカーネルオブジェクト、ファイルディスクリプタ、ソケット、GPU リソースの未解放も含みます。対策はプロファイリング(Valgrind、ASan/LSan、heaptrack)、所有権規律(RAII、スマートポインタ)、継続的負荷試験、言語レベルの GC などです。暗号文脈で言う "メモリリーク"(メモリ内容の漏えい)は本来「情報漏えい」と呼ぶ方が正確です。
例
- リクエスト毎の確保が解放されない長時間稼働 Web サーバ。
- skb バッファを解放し忘れシステムメモリを枯渇させるカーネルモジュール。
関連用語
脆弱性
システム、アプリケーション、または運用プロセスに存在する弱点で、攻撃者が機密性・完全性・可用性を侵害するために悪用できるもの。
サービス妨害攻撃 (DoS)
システムの帯域・処理能力・メモリ・アプリケーション資源を枯渇させ、正当な利用者がサービスを利用できなくする攻撃。
メモリ破壊
プログラムが意図したメモリ境界の外に書き込み、型安全性・制御フロー・データ整合性を損なうタイプの脆弱性を総称する用語。
Secure Coding
Secure Coding — definition coming soon.
解放後使用(Use-After-Free)
free 済みのメモリをプログラムが使い続けるメモリ安全性のバグ。攻撃者にオブジェクト状態の操作と制御フロー奪取を許すことが多い。
パッチ管理
脆弱性や不具合を修正するソフトウェア更新を、識別・検証・適用・確認するエンドツーエンドのプロセス。