@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

雑談:論理ファイルのハッシュ計算について考える

これも一般論としてという前提になります。

物理的なディスク単位でコピーするのではなく、ディスク内の一部ファイルだけをコピーする作業とハッシュ値を計算する事について考えてみます。

 

まず、対象ディスクが取り外しされている様なケースでは、以下の作業を行う事になります。

手順A:

  1. 書き込み禁止措置を行う(ライトブロッカーを接続する)
  2. 対象ファイルだけを(メタを維持して)コピーする

 上記の手順では複製元と複製先ファイルの比較やハッシュ値計算を行っていませんので、ハッシュ値による比較を組み込んでみます。

 

手順B:

  1. 書き込み禁止措置を行う(ライトブロッカーを接続する)
  2. 対象ファイルだけを(メタを維持して)コピーする
  3. 複製元ファイルのハッシュ値を計算する
  4. 複製先ファイルのハッシュ値を計算
  5. ハッシュ値が一致する事を確認する

 

この手順は、手数が多くなりシンプルではない印象があります。特に手順3と4の部分は改善の余地がありそうです。

コピー時に比較を自動的に行うツールを利用すれば、コピー段階で同一である事が確認されるので、手順3では複製先のハッシュ値だけを確認すれば(この後の完全性の維持という点では)良いのではないでしょうか。*1

 

手順C:

  1. 書き込み禁止措置を行う(ライトブロッカーを接続する)
  2. 対象ファイルだけを(メタを維持して)コピーする
  3. ファイルの読み取り時にハッシュを計算する(その様な機能を持つツールを使う)
  4. 複製先ファイルのハッシュ値を再計算し、手順3と一致するか確認する

 

この手順Cでは、読み取り時にハッシュ計算をしておく事で、実際に人間が行う作業は手順Bよりは簡単になっています。

証拠ファイル形式でデータの出力が可能なツールを使うのであれば、論理的なファイルの生成段階でハッシュを計算しておき、出力された証拠イメージファイルのベリファイ処理を通せばよいはずです。

 

手順D:

  1. 書き込み禁止措置を行う(ライトブロッカーを接続する)
  2. 対象ファイルだけを(メタを維持して)証拠ファイルとして出力する
  3. 出力された証拠ファイルのベリファイを行う(ハッシュ値が取得時と一致するか確認)

この手順は、昨日の物理ディスクをツールで複製した手順と同じく比較処理は行っていません。あくまでコピー時点で読み取ったデータからハッシュ値を計算し、書き出したデータと比較して同一、破損していないかを確認する事になります。

 

トリアージ的に、ハードディスクから必要なデータ範囲だけを先に取り出し解析を開始して、ディスクも後からイメージを取る場合には以下の流れになります。

 

手順E:

  1. 書き込み禁止措置を行う(ライトブロッカーを接続する)
  2. 対象ファイルだけを(メタを維持して)証拠ファイルとして出力する
  3. 出力された証拠ファイルのベリファイを行う(ハッシュ値が取得時と一致するか確認)
  4. 物理ディスクの証拠ファイル(ディスクイメージ)を出力する
  5. 出力された(物理ディスクの)証拠ファイルのベリファイを行う

 

この場合、後から生成したディスクイメージから同じファイルを取り出しても、先に取り出したファイルと同じハッシュになるはずです。(逆に一致しないと問題があります)

 

ここまでの手順は、比較的間違いが起こりにくいと思いますが、稼働中システムやクラウドといった部分を考慮すると、手順がやや増えてしまいます。

稼働中システム内のファイルをコピーする場合を考えます。対象ファイルは常に変化する可能性があります。

 

手順F:

  1. 書き込み禁止措置はない状態でアクセスする
  2. 対象ファイルだけを(メタを維持して)コピーする
  3. 複製元ファイルのハッシュ値を計算する
  4. 複製先ファイルのハッシュ値を計算
  5. ハッシュ値が一致する事を確認する

 

この時、システムが稼働中の影響で複製元ファイルがコピー直後に変化しているとハッシュ値が一致しません。比較処理を入れても一致しないケースが出る可能性もあります。

稼働中のシステムを対象とした場合には、やはりコピー段階でハッシュ値を計算しておく方が簡単なのではないでしょうか。

 

手順G:

  1. 書き込み禁止措置はない状態でアクセスする
  2. 対象ファイルだけを(メタを維持して)証拠ファイルとして出力する
  3. 出力された証拠ファイルのベリファイを行う(ハッシュ値が取得時と一致するか確認)

次にクラウド上にあるファイルやメモリイメージを取るケースですが、この場合には元データのハッシュ値を計算する事は困難だと思いますので、おのずと以下の手順になるのではないでしょうか。

 

手順F:

  1. 書き込み禁止措置はない状態でアクセスする
  2. 対象データを(可能な範囲でメタを維持して)コピーする
  3. 複製先ファイルのハッシュ値を計算する

 

例えば Web メールのデータを取り出す際、取り出したメールファイルのハッシュ値は計算できますが、Webメールサーバ側のは計算できません。同じようにSkydriveからファイルをコピーし、コピーしたファイルのハッシュ値は計算できますが、Skydrive側のハッシュ値は計算できません。

結局、この様なケースでは手順の明確化なり記録を残し、コピーした側の完全性を維持していく事が必要になります。

コピー後のファイルの取り扱いを考慮すると、証拠ファイル化しておく方が良いと思います。

 

手順G:

  1. 書き込み禁止措置はない状態でアクセスする
  2. 対象データを(可能な範囲でメタを維持して)コピーする
  3. コピーしたファイルをまとめて証拠ファイル化する
  4. 証拠ファイルのベリファイを行う

 

この場合、3の前にコピーしたファイルのハッシュ値を計算する案も考えられますが、証拠ファイル化する際にはハッシュ計算されるので不要だと考えています。(論理ファイルの証拠イメージを作成するツールは、一般的に個別ファイルのハッシュ値も計算しており、仮に証拠ファイルの一部で破損が発生しても、どのファイル部分で破損したかを追跡できるようになっているため)

 

*1:コピーしたファイルを比較する処理と、ハッシュを計算して比較する処理では時間的に大差がないかもしれません