11.4.2. メモリ破損
メモリ破損は、プロセスのメモリ空間内の特定の場所がプログラミングミスによって誤って変更されたときに発生します。メモリ破損バグは通常、予期しないプログラムの動作を引き起こしますが、多くの場合、これらのバグによってプロセスメモリが操作され、プログラムの実行フローが制御され、攻撃者が定義したアクティビティが可能になります。
これらの攻撃は一般的にバッファオーバーフローと呼ばれますが、この用語は過度に単純化されています。最も一般的なメモリ破損の種類はそれぞれ大きく異なり、それぞれに攻撃を成功させるために必要な戦術と手法が異なります。
• スタック バッファ オーバーフロー: プログラムがスタック上のバッファに書き込むデータが使用可能なスペースよりも多くなると、隣接するメモリが破損する可能性があり、多くの場合、プログラムがクラッシュする原因となります。
• ヒープ破損:ヒープメモリは実行時に割り当てられ、通常は実行中のプログラムのデータが格納されます。ヒープ破損は、ヒープメモリポインタのリンクリストを介してデータを操作し、上書きすることで発生します。
• 整数オーバーフロー: これらのオーバーフローは、アプリケーションが割り当てられたストレージ領域に収まらない数値を作成しようとしたときに発生します。
• フォーマット文字列: プログラムがユーザー入力を受け入れ、それをチェックせずにフォーマットすると、使用されるフォーマットトークンに応じてメモリの位置が公開されたり上書きされたりする可能性があります。