今日は、後期中間試験明けということで、テスト返却。昨年のテストは、説明問題中心になり簡単だったとの反省から、若干穴埋め問題・プログラム記述問題を増やした。しかし、蓋を開けてみたら平均点87点の好成績。テスト直後に記述問題で難しかったって感想言ってたくせに…。
メモリ経由の盗み見
ただ、テスト直後の間違いの確認で、定義されていない変数に何が入っているのかというのを疑問に思っている人がいたので、解説。
void foo() { int x ; printf( "%d¥n" , x ) ; // 何が表示されるのか? }
JavaScript で基本を習っている学生さんだと、undefined とか null とか入っていると思う人も多い。基本的に、局所変数はスタックを使うので、スタックに残っている前の値。いろんなデータがあるからこそ、ゴミ(どんな値が入っているか不明)いうことを説明。
特に、セキュリティという視点だと、Aさんとの通信処理が終わって、Bさんの処理を行う場合、プログラムの不備をみつけたBさんが、局所変数の配列に残っているデータをうまく読むことができたら、Aさんとの通信内容をBさんが盗み見れる可能性もあることを説明。
また、局所変数だけでなく、ヒープメモリも同様の問題をはらんでいる。ヒープメモリは free() で返却されたメモリ領域を、あとで違う人に malloc() で貸し出す。malloc() のデータ領域にも、他の人のデータが入っているかも…と説明する。
再利用によるデータ流出
malloc() + free() の雑談をしていて、これはまさに「神奈川県のデータ流出事件」と同じ構図なので、「「データ領域の再利用でデータ流出』で今ニュースになってるの知ってる?」と学生に聞いてみた。
でも、神奈川のネタに気づく学生さんが居ない。あらためて、こういう時事ネタのニュースを見ていないと感じたので、「みんな4年だとすぐに就職活動の人も多いのに、時事ネタ知らないのはまずいよ」と意識喚起。
その上で、HDDデータ消去のやり方を解説、クイックフォーマット・完全フォーマットの違いや、軍のデータを扱う場合は、残留時期を読み取る可能性もあるので、ランダムデータを4回書き込むといった解説をする。