GRADUATION
変数が「メモリ上のバイト列」だと、体で分かるようになりました。
アドレス、ポインタ演算、文字列に境界がないこと、そしてバッファオーバーフローが実際に何を壊すのか。gdbでメモリの生バイトを覗きながら、pwn・rev・監査の最下層にある「メモリという1本の連続した空間」を見ました。
おつかれさまでした。
持ち帰るもの
- 変数は、番地の付いた箱すべての変数はメモリ上のアドレスとバイト数を持つ、ただの箱です。ポインタは、その番地そのものを値として持つ変数です。
- C の文字列に、境界チェックは無いstrcpyのような関数は、渡された箱の大きさを知りません。渡した文字列が長ければ、箱からあふれて隣接するメモリを書き換えます。
- 現代の防御は、何層にも重なっているスタックカナリア・ASLR・NXビット。オーバーフローを「気づかれずに悪用される」から「安全にクラッシュする」へ変える、多層防御の実例を見ました。
次にやるといいこと
- 次は「コンピュータのしくみ — アセンブリで読む CPU とスタック」。ここで見たメモリの動きを、CPUが実行する命令のレベルまで一段深く読みます。
- このコースで使った gdb は、pwn・rev のCTFカテゴリでも主役になります。