デジタルフォレンジック(以下フォレンジック)とは、パソコンのハードディスクに残るデータを特殊な方法で保全、解析し、利用者による不正行為の痕跡を調査すること、らしいです。
ここにはハードディスクと書かれてありますが、データの保存媒体はハードディスクだけではありませんので、意味としては、フロッピーディスクやCD、DVD、USBメモリ、SDカードなど、多様な保存メディアに対しての詳細なデータ解析が、総称としての「デジタルフォレンジック」の意味かなと思います(たぶん)。それで「じゃあ具体的にフォレンジックっていったい何をすることなのか?」というのがこのテキストのテーマなのですが、簡単に言えば「記憶媒体に保存されているデータをダンプして、それを解析しようぜ!」という話です。LinuxマシンにUSBメモリを指し、ddコマンドを打つとUSBメモリに保存されているデータがダンプされます。
----- terminal # dd if=/dev/sdb1 of=/home/kenji/usb.bin -----
このダンプされたデータ(usb.bin)をバイナリエディタで解析すれば、いろいろな情報が得られます。これが、フォレンジックの基本的な作業です。が、512GBとかあるハードディスクをダンプして、それをバイナリエディタで解析するとか普通に無理なので、いろいろなツールを使ってそれを自動化(もしくは便利に)して、すばやくデータ解析を行うというのが、本格的なフォレンジック作業というものかと思います。
USBメモリに100個の画像が保存されています。このUSBメモリをWindowsXPから読み込み、全部の画像をコピーした後、USBメモリ自体をフォーマットします。フォーマットしたので、もう100個の画像を見ることはできませんが、実は物理メモリ上には、まだこれらの画像のデータは保存されています。フォーマットしたUSBメモリをddコマンドでダンプし、バイナリエディタで特定のファイルデータを検索すると、おそらくヒットします。これは何故か? 答えは、OSが全部消すのがメンドイからです(ホントか?)。Windowsが管理するUSBメモリは、だいたいFATというファイルシステムが使われています。そして、ファイルシステムにはヘッダというファイルを管理するデータが付加されており、そこには、削除フラグという、このファイルが削除されたものであるかどうかを意味するフラグが存在します。詳しくは以下のアドレスを参照のこと。
ファイルを削除するという行為は、一見「ファイルデータが存在する物理メモリをすべて0で埋める」というような、本当に削除するという印象を受けますが、実際は「ファイルシステム上、データが見えないようになる」というだけであり、本当にデータが消えているわけではありません。これは、全部0に書き換えると時間がかかるが、削除フラグを立てるだけなら一瞬でできるため、このような仕様になっていると考えられます。
このような、削除されたファイルが見える、消したファイルを復元できる、という方向性から、フォレンジックという技術が使われます。
実は、フリーのフォレンジックツールというのは、ほとんどなく、大抵の有用なツールは有料でしかもかなり高価です。趣味で手を出せるものではありません。興味がある方は「Encase」「フォレンジック」などで検索してみるとよいかと思います。というわけで、本格的にフォレンジックを学びたい方は、それを専門としている企業に就職してください(笑)。まぁなんだそれという感じですが、しかし、フォレンジックはプログラミングと違い、専門的な機器が必要で、趣味でできるほど簡単ではないようです。それでも「雰囲気だけでも味わいたいぜ!」という方は、sleuthkit、autopsyというツールがあります。
The Sleuth Kit & Autopsy インストール・設定
sleuthkitはダウンロードサイトからソースコードをダウンロードし、configure、make、make install、のコンボでOKです。autopsyは少しややこしく、まずはデータやログを保存するディレクトリを作る必要があります。なので、あらかじめ「mkdir /var/evidence」と入力し、保存先を作っておいて、makeを実行します。
----- terminal # tar xvzf sleuthkit-2.52.tar.gz # cp -r sleuthkit-2.52 /usr/local/ # cd /usr/local/ # ln -s sleuthkit-2.52 sleuthkit # cd sleuthkit # ./configure (省略) # make (省略) # make install (省略) # mkdir /var/evidence # tar xvzf autopsy-2.10.tar.gz # cp -r autopsy-2.10 /usr/local/ # cd /usr/local/ # ln -s autopsy-2.10 autopsy # cd autopsy # make (省略) Enter the directory where you installed it: /usr/local/sleuthkit(←sleuthkitのインストール先を入力) Have you purchased or downloaded a copy of the NSRL (y/n) [n] n(←入力) Enter the directory that you want to use for the Evidence Locker: /var/evidence(←データやログの保存先を入力) -----
これでインストール完了です。あとはautopsyを実行します。
----- terminal # ./autopsy -C 172.17.0.38 -----
IPアドレスの部分には、WebGUIを利用するPCのIPアドレスを入力します。autopsyはデフォルトでポート9999番を使いますので、ブラウザから「http://172.17.0.38:9999/autopsy」と入力すると、帽子をかぶった犬がPCを見ている画面が表示されます。

ここにフォレンジックの対象となるファイルを用意しました。この中に隠されているパスワードを探してください。USBメモリのイメージファイルなので、mountすれば内容を開くことはできますが、対象となるパスワードが書かれたファイルは削除しているため、専用のフォレンジックツールを使って解析する必要があります。
----- terminal # mount -o loop wb43.bin /mnt/usb # tree /mnt/usb (保存された内容が表示されるが、削除されたファイルは当然出力されない) -----
というわけで、さっそくautopsyを使います。まず、犬の画面から、真ん中の「NEW CASE」を選びます。すると「CREATE A NEW CASE」という画面に移動し、「Case Name」「Description」「Investigator Names」の3つの入力ボックスが表示されます。ここに入力する名前はプロジェクト名なので、適当で構いません。すべて「test_wb43」と入力して、「NEW CASE」をクリックしてください。

次に「Creating Case: test_wb43」という画面に移ります。そのまま「ADD HOST」をクリックしてください。さらに「ADD A NEW HOST」画面に移ります。デフォルトのまま、何も変更せずに「ADD HOST」をクリックしてください。


「Adding host: host1 to case test_wb43」という画面に移ります。「ADD IMAGE」をクリックしてください。これで解析の準備ができました。次の画面には、8つほどボタンがありますが、「ADD IMAGE FILE」を押してください。すると「ADD A NEW IMAGE」画面に進みます。ここで「Location」に「解析対象のファイルパス」を、「Type」に「Disk」を、そして「Import Method」に「Copy」を入れます。



これで「NEXT」をクリックします。すると、Warningが出て「Disk Image」と「Volume Image」の選択がせまられます。ここで「Volume Image」を選択し「OK」をクリックしてください。

最後に「Image File Details」という画面が出ます。すべての項目はデフォルトのままで構いません。「ADD」をクリックしてください。少し時間がかかり、解析が終了します。解析が終了したら「OK」をクリックしてください。


これで読み込みは完了です。「ANALYZE」をクリックして、解析画面へ移ります。次に一番左の「FILE ANALYSIS」をクリックします。すると、現在保存されているファイルや、削除されたファイルなどが表示されます。



また、左下に「ALL DELETED FILES」というボタンがあり、これをクリックすることで、削除されたファイルを確認、復元できます。

削除されたファイルをひとつずつ見ていくと、パスワードが書かれたファイル(すでに削除されているファイル)が表示されます。このように、OSからは見えないデータをダンプして解析することで、削除されたり、隠されたファイルを復元することができます。
Windowsからフォーマットを行ったUSBメモリやフロッピーなどは、OSからは見えなくなりますが、完全にデータが消されているわけではないため、autopsyから内容を解析できます。フロッピー(もしくはUSBメモリ)を入れ、ddコマンドを使うと、内容がダンプできます。そのダンプしたデータをautopsyで読み込むことで、まだ完全に消されていないデータを解析できます。
----- terminal # dd if=/dev/sdb1 of=/home/kenji/floppy.bin (floppy.binをautopsyで解析可能) -----
というわけで、フォーマットは完全にデータを消す方法としては必ずしも正しくないわけですが、では、「完全にデータを消すにはどうしたらよいか?」というと、同じくddコマンドを使います。
----- terminal # dd if=/dev/zero of=/dev/sdb1 -----
USBメモリへ可能な限りゼロを書き込みます。また、ゼロではなく乱数を使ってもよいです。
----- terminal # dd if=/dev/uramdom of=/dev/sdb1 -----
このような方法で物理メモリを埋めることで、データを完全に消去できます。詳しくはLinux(UNIX)標準コマンドによるデータ抹消を参照のこと。
正直、今回書いたものは、まったく専門分野ではありません(^^;。というか、実は今回はたまたまフォレンジックを少し学ぶ機会があったため、それの記念に書いたものです(覚え書き)。コンピュータセキュリティはかなり幅が広いので、ある分野では天才的なエンジニアでも、専門を少し外れれば初心者レベルだったりもします。でも、だからこそ常に学ぶ姿勢が大切だなぁと、最近改めて感じました。