バッファオーバフロー攻撃とは?ばっふぁおーばふろーこうげき
バッファオーバフロー攻撃とは、入力長を検査しないまま固定長領域へ書き込ませ、はみ出した分で隣の変数や関数の戻り番地を書き換えて実行の流れを奪う攻撃。書き換わる先がスタックなら戻り番地、ヒープなら管理構造が狙われる。組込みでは、受信フレームの長さフィールドを信じて複写する処理と、終端のない文字列操作が二大入口になる。
最終更新:2026-10-06
エンベデッドSPを最短で暗記・合格する →背景
C言語は配列の境界を実行時に検査しない代わりに、ROMもRAMも乏しい機器で動く小さなコードを生む。この取引の代償が、境界の管理をすべて書き手へ預けたことにある。しかも一般的な呼出し規約では戻り番地とローカル変数が同じスタックに並ぶため、はみ出した書込みがそのまま制御の乗っ取りへ化ける。汎用OS側は実行防止や配置のランダム化で成立を難しくしてきたが、組込みでは前提が揃わず、入口で長さを検査する以外に手がない場面が残る。
具体例
ARMv8-MのTrustZoneやMPUを備えるマイコン——STマイクロエレクトロニクスのSTM32L5、NXPのLPC55S6xなど——では、スタック領域を実行不可に、周辺レジスタをタスク単位で遮断に設定でき、はみ出しの影響をそのタスク内へ閉じ込められる。車載で広く使われるMISRA Cも境界指定のない文字列関数の使用を制限しており、静的解析で機械的に落とす運用が定着している。
試験での引っ掛け
実行防止(DEP)や配置のランダム化(ASLR)は、MMUも乱数源も持たない小規模マイコンでは効かせられないことが多く、汎用OSの対策一覧をそのまま持ち込むと成立しない。スタック保護(カナリア)も戻り番地の破壊は検出できるが、隣接変数の書換えは素通りする。長さ検査は上限だけでなく符号にも注意が要り、負値がsize_tへ暗黙変換されて巨大長になる欠陥が定番。
関連用語
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。