セキュリティ&プログラミングキャンプ2009 2日目のお話 ハードディスク解析編

前回に引き続き、キャンプ2日目の話が続きます。


他の方の記事を見ていると、凄くすっきりまとめていらっしゃる方ばかりで、


Dltnだけだらだら書いてる・・!


と、ちょっと焦り気味ですが、
素晴らしいと思った事を
・写真に納めたり
・ビデオに撮っておいたり
・時には描く事で
その時その時を記録する方って大勢いらっしゃると思います。
自分の場合は、「文字にして書き出す事で」とどめておく、言わば言葉のアルバムのようなものなので
いつも「長いなあ」と思っている方、すみません。まだまだ続きます(笑)


そうそう、前回書き忘れていたのですが、
パケット解析の講義では、Snortのキーホルダーが受講者にプレゼントされました。



DltnのサーバでもSnortは使っているんですが、


あまりチェックしていないので意味がありません。


ログは見てなんぼなのに・・・(汗)


・ハードディスク解析 (伊原講師)
  皆さんの中には、ハードディスク解析をされた方(している方)、いらっしゃったりするんでしょうか。
  Dltnは一度もやった事がない為、とてもwktkしていました。
  海外ドラマ「TWENTY FOUR」では、ジャック・バウアーが決死の思いでHDDを入手するシーンなどもありました。
  (確かDELLのラックから取っていたと記憶しています。そのあとドカーンしてましたが・・・!笑)
  そんな機密情報なども、結局は電子データとして物理的に記録されている事になります。
  バイナリ解析クラスというだけあって、実際に0と1(実際には16進数表記ですが)を見ていく事となります。


  突然ですが、Windowsの場合、ファイルのプロパティ等を見ると、
  「サイズ」という項目と、「ディスク上のサイズ」という表記があります。
  例えば、ファイルサイズは244 バイト (244 バイト)と小さくても、
  ディスク上のサイズは4.00 KB (4,096 バイト)と、キリのいい(だけど大きい)サイズです。
  どうしてこうなるのか、というと、予想のつく方もいらっしゃるかもしれませんが、
  データはクラスタ単位で保存される為、クラスタサイズが 4KB だと、
  例え 244バイト のデータも、ディスク上では 4KB 分も消費されてしまうのです。
  なんだかもったいない話ですよね。


  そんな感じの、「どのようにデータが保存されているのか」というのを実際に見る為に、
  dd(disk dump)を使います。
  Linuxなら標準で入っていると思いますが、Windowsの場合は自分で入れてあげる必要があります。
  (キャンプでは親切にも、必要な物は全て用意してくれていました・・・!)
  Windows用のddはこちらから落としたFAU内に入っています。
    Forensic Acquisition Utilities


  これを使うと何ができるのか、というと、
  指定したディスク上のデータを1ビットずつファイルに書き出してくれます。
  このおかげで、普段エクスプローラ等から見えるデータではなく、
  まさにハードディスクとにらめっこするのと同じような事が実現できます。
  ddのコマンドの使用法については、講義では特に説明されませんでしたが、
    dd --help
  と打てばヘルプが出てくるので、じっくり読みましょう。
  基本的に if (input) と of (output) の2つを指定して、ファイルに書き出したり(イメージ化)、
  ファイルからディスクに戻したりしながら挙動を調べていきます。


  例1:ファイルに書き出す場合(対象をAドライブと仮定)
    dd if=\\.\a: of=c:\evidence\usb.dd
  例2:ファイルから書き込む場合(対象をAドライブと仮定)
    dd if=c:\evidence\usb.dd of=\\.\a:


  しかし、イメージ(書き出したファイル)を再び書き込むにはそれなりに時間がかかってしまいます。
  特に容量が大きくなると、かかる時間は顕著でしょう。
  残念ながら講義中に紹介される事はなかったんですが(なかったハズ)、
  Virtual Disk Driver Version 3を使う事で、
  Windows上で論理ドライブとしてイメージをマウントする事ができます。
    VM Back


  イメージファイルはバイナリファイルなので、メモ帳では見れません。
  そこで、バイナリエディタの定番とも言うべきStirlingというソフトを使います。
    Vector:Stirling
  これにイメージファイルを読み込ませると、生データが表示されます。


  こんな生データを見ても、知らない人にとってはただの数字の羅列にしか見えません。
  ですが、実際はちゃんとした規則に則って記録されています。
  詳しくはこちらのサイトからダウンロードできるドキュメントに載っています。
    FAT32 File System Specification - P28


  これらの情報を元に、

  • 新しくファイルを作るとどういうデータが記録されるのか
  • そのファイルを削除するとデータがどう変わるのか
  • 削除したファイルを復元するにはどうすればいいのか
  • 適当に書き換えて挙動を見てみよう

  といった感じの事を演習で行いました。


  ディレクトリエントリについてもお話がありましたが、
  時間的な都合上、クラスタ・チェインや不良クラスタの話は深くはされませんでした。
  その分、最後の演習課題は大変面白いものになっていました(・∀・)!


  課題内容としては、
  「証拠イメージファイルから指定された画像を探し出せ!」
  「その画像から秘密のメッセージを抽出せよ!」
  という、いかにも実践的で、
  宝探しを彷彿とさせるような
  とても面白い演習内容でした。


  演習前には下記のツールも用意されていましたので、ここでも紹介しておきます。
    Foremost - ファイルリカバリツール
  これに加えて、イメージファイル内には削除されたツールがあったり、
  イメージファイル内にヒントが隠されていたりと、なかなか面白い仕組みでした。


  そして・・・!
  この課題は、早く解けた人から景品がもらえるという、
  とても競争心が煽られる仕組みになっていました(・∀・)!
  景品は、ジャケット、Tシャツ、ステッカーの3種類だったと思います。数量はそれぞれ2つずつぐらい。
  また、いずれもForensicって印字されてたと思います。
  (この時Dltnは、Tシャツ=プログラミングコースのTシャツだと思ってました。
  で、それがまた凄く欲しかったので、本気で頑張りました・・・(笑)
  実際はもらってビックリ見てビックリ。でもありがたくForensicTシャツいただきました♪)
  最初に画像を探し出した人が先着で一人まで+その画像から秘密のメッセージを抽出できた人が先着でもらえるという感じでした。


  見事最初に画像を見つけ出したのは、sorataro2001さんでした!
  聞いた話では、ヒントを見つける前に偶然にも見つけちゃったそうです(笑)
  そこから暫くしてDltnも発見する事ができまして。
  その時点では、まだ誰も秘密のメッセージを抽出できた人はいなかったので、とにかく頑張りました。
  そして、確か2番目だったと思いますが、なんとか抽出に成功!Tシャツをゲットできました(・∀・)!



  写真では分かりませんが、確か背中に「FORENSIC」と書いてあったと思います。
  こんなカコイイTシャツもらえるなんて素敵すぎですね!
  ジャケットをもらった方は、もう少しすると季節的にも活躍しそうですし。
  見事GETされた方はおめでとうございますー!




  @Tips@
  講義中に初めて聞いたり知ったりした事なんですが、
    ・クイックフォーマットはディレクトリエントリをクリアしてクラスタも削除フラグを立てる?
    ・普通のフォーマットでもデータはしっかり残っている
  という事は、フォーマットしても中身は全然普通に残ってるんですねー。
  クイックではデータが残る、というのは知ってましたが、
  じゃあクイックフォーマットと普通のフォーマットの違いって・・・(汗)
  これは今後の研究課題という事で、また後日調べてみようと思います。




またまた長くなってしまったので、マルウェア解析については次回に続きます!
(どんどん記憶が薄れていくよ〜(TT))