Banned Functions Deep Analyzer

静的解析の検出ロジックからメモリ破壊、評価モデルまでを段階的に完全理解する

VULNERABILITY ANATOMY

なぜ禁忌関数なのか?

C言語の strcpy は、「コピー先バッファの残りサイズ」を一切確認せずに、ヌル終端文字(\x00)が出現するまで隣接メモリへと文字を書き込み続けます。

CPUが関数を実行する際、関数が終わった後に元のコードの場所に戻れるよう、スタック領域に「戻りアドレス (Return Address / Saved RIP)」を一時保存しています。

バッファ領域を超えてメモリが書き換えられると、この「戻りアドレス」が上書きされ、関数が終了(ret)した瞬間に、プログラムは破壊された不正アドレス、もしくは攻撃者が仕組んだコードへジャンプしてしまいます。

🛡️ セキュアな代替関数

strncpy_s(dest, size, src, count): 最大コピーサイズを指定し、ヌル終端を強制。
strlcpy(dest, src, size): 境界チェック付きコピー。

メモリ破壊ステップシミュレーター

バッファに過大入力したときのスタック構造変化を1ステップずつ追跡

Step 0 / 9 初期状態: 関数スタック構築完了
CPU レジスタ / フラグ
RBP (Base Pointer)
0x7ffd0008
RIP (Inst. Pointer)
0x00401120
ステップ解説:

初期状態。C言語のプログラムにおいて、`process_input` 関数が呼び出され、スタック上に8バイトのローカルバッファ領域が確保されました。

危険ポイント 現在の入力文字数は安全圏内です。