ブログトップ 記事一覧 ログイン 無料ブログ開設

B-) の独り言

2010-02-18

Robocopy vs EnCase Image

eDsicoveryで時々マイクロソフト社が公開しているRobocopyツールによるコピーと、EnCaseなどを使ったイメージとでは何が違うのか?とか、Robocopyによるコピーは“フォレンジカルサウンド”なのか?、という(個人的には宗教論争に近いと感じる)議論がよく繰り広げられます。*1

個人的には興味ないのですが、技術的な部分で何が違うのかを簡単にまとめてみたいと思います。

以下前提としては、Windowsファイル共有を経由してRobocopyを利用した場合と、共有が存在するボリュームを丸ごとイメージ化した場合での差異という観点ですが、主にeDiscoveryでの用途を想定しています。*2

コピー単位の違い

RobocopyによるコピーはWindowsによるコピーと同じですので、コピーする単位は“ファイル”単位ということになります。Example.DOCというファイルがあれば、複製先にExample.DOCファイルがコピーされます。

EnCaseなどのコンピュータ用のフォレンジックツールでは、ファイル単位ではなくディスクのセクタ単位(ビットストリームという言い方する場合もあるようですが)でコピーが行なわれます。

Example.DOCという単位でコピーするのではなく、ハードディスクのセクタ単位でコピーし、その中にExample.DOCが含まれてくるということになります。

EnCaseでも論理証拠ファイル(EnCase Logical Evidence File:LEF)という形式を使うとファイル単位でのコピーも可能にはなりますが、Robocpyでは取得できないアイテムについても取得が可能になるので、若干違いがあります。

ファイルの基本的な情報

RobocopyでもEnCaseイメージファイルでも、ファイルの内容はそのままですので、ファイル内容という点において差異はありません。ファイルはそのままコピーされるので、ファイル内に含まれているメタ情報オフィス文書のプロパティなど)はそのままコピーされますから変化しません。

また、タイムスタンプ(アクセス日時・更新日時・作成日時)についても、Robocopyではオプション指定によりタイムスタンプを秒レベルでは維持することが可能です。

ただし、NTFSの場合に存在する、MFTレコードの更新日時である、エントリ更新日時については複製を行なうことができません。

タイムスタンプの精度

NTFSの場合、ファイルタイムスタンプは100nsレベルで記録されています。しかし、Robocopyを利用してコピーした場合、オプションにより秒レベルの時刻情報まではコピーできますが、ナノ秒のデータは欠落します。ナノ秒の情報が欠落したからといって問題になるケースがeDiscoveryにおいて有り得るのか謎であるのと、そもそも、その後のレビュープラットホームなどでは秒レベルでしか管理されないので気にする必要がないかもしれません。

あと、UNCパスなどSMB経由でのRobocopyでは、いずれにしてもナノ秒までAPI側で対応できないみたいなので、いずれにしても欠落するということかもしれません。

アクセス権(ACL

Robocopyでもオプション設定によりACLをコピー先のファイルに対して設定することが一応は可能です。しかし、ACLを設定するにはコピー元のSIDなどを解釈する必要があるためか、環境によってはACL設定でエラーが発生する場合があります。(SIDをコピーする環境で解釈できなかったりする場合でしょうか)

そもそもSIDを含めて保持したいという考えであれば、Robocopyではなくでイメージで取得する必要があるケースなのではないかと思われます。サーバ側のACL設定を確認するくらいで済むケースであれば、RobocopyであえてACLまで複製すると、エラーが出たりしてはまる可能性が出るかもしれません。

ファイル属性

ファイル属性値(Read Only, Hiddenなど)は、Robocopyでもオプション設定すればコピー先ファイルで同じように設定することができます。ファイル共有上のファイルという意味では、EFS暗号化を実施できないのでその点は気にしなくてよいかもしれません。(そもそものコピーの目的からすると暗号化されていると困るわけですが)

フォルダ構造

フォルダのツリー構造はどちらもコピーできるので差異はありません。強いて言えば、Robocopyファイルサーバ上で共有されているポイントからのツリー構造になるという点でしょうか。ただ、ユーザーから見えているツリー構造を複製したいという趣旨であれば、問題ない気がします。

長いパスへの対応

248文字を超えるパスを持つファイルが存在する場合、RobocopyではWindows側の制限によりエラーが発生することになります。とはいえ、そもそも共有上でアクセスできないファイルというのはユーザーが困るので一般的には存在しない気がします。共有フォルダ配下のサブフォルダでSubstが使われていたりする場合にはあるかもしれません。EnCaseの場合にはセクタ単位コピーなのでそういったファイルがあっても困りませんし、EnCase内部での取り扱いには影響ありません。

もし長いのが存在する場合には、Robocopyでコピーする前に、Substしてから実行するなどの回避策が必要かもしれませんが、それでうまくいけるのかはテストしたことがありません。

古いバージョンには制限がありましたが、現在入手可能なバージョンでは最大長32,000文字に対応ということみたいです、失礼しました。Special thanks to Kaz1600!!

Copy very long path names (longer that 256 characters).

Previous versions of Robocopy would fail to copy any pathname longer than 256 characters. The program has now been enhanced to handle pathnames of any length, up to the internal Windows limit of nearlt 32,000 characters.

どうせならエクスプローラも32,000文字までOKにならないもんですかね。。。

削除ファイル/フォルダ

あたり前かもしれませんが、Robocopyでは削除ファイル/フォルダはコピー元として指定することができません。そもそも必要か?という確認が必要ですね。

未使用領域

削除ファイルと同様、未使用領域についてもRobocopyではコピーすることができません。これも、そもそも必要なのか?という確認になります。

壊れたファイル

Windows上からアクセスすることができない壊れたファイルがある場合、Robocopyではコピーすることができません。壊れているのでコピーする意味があるとは思えませんが、セクタ単位でコピーするEnCaseの場合には壊れた状態のデータが含まれるセクタがコピーされます。EnCaseは自力でファイルシステムをパースするので、エクスプローラよりは壊れたファイルへのアクセスが可能な可能性がありそうですが、いずれにしても壊れているファイルですから、そんなに頑張る必要があるのかはケース次第でしょうか。

アクセス権限がないファイル

Robocopyの場合、アクセス権がないファイルは当然アクセス拒否されてファイルをコピーすることができません。EnCaseの場合にはセクタ単位でのコピーですからACLの影響は基本的に受けません。

Robocopyでのコピーを行なう場合には、対象となるファイルに対して事前に読み取りの権限を与えておく必要があります。バックアップ特権を使うとかの方法もあるかもしれませんが、あまり複雑なことをしようとするとはまるかもしれません。

ファイルハッシュ値

Robocopyにはハッシュ値を計算する機能がありませんので、コピーしたファイルの整合性を維持するには、別途ハッシュ値を計算するツールを使ってハッシュを計算する必要があります。EnCaseで論理証拠ファイル(LEF)にするという案もありますが、いずれのツールを使う場合においても、コピーしたファイルタイムスタンプ情報含めて変化させないという点が重要になるかと思います。

強いていうならば、Robocopyファイルをコピーした場合、コピーしたファイルタイムスタンプ情報などのメタデータに関して、ハッシュ値を計算したり整合性を維持することが困難という点でしょうか。

イメージファイルの場合には、個別ファイルだけでなく、全体としてハッシュ値が計算されているのと、そもそも専用ソフトで開いたりするので中身が変化するとかはない前提です。

エラーログ

Robocopyファイル単位でのコピーですので、ファイル毎にコピーのログがでます。EnCaseの場合セクタ単位なのでエラーになるセクタ(ブロック)があるとエラーが報告されます。

いずれにしても、ログは取っておく必要があります。

Sambaなどのファイルシステム

ファイル共有がLinux上のSambaなどで行なわれている場合、RobocopyによるSMB経由でのコピーではファイル名はユーザーが認識しているのと基本的に同じ名前で複製されることになると思います。

しかし、LinuxExt3とかのファイルシステム上では異なる形式かもしれませんので、ディスクのイメージで共有をコレクションするとファイル名ではまるかもしれません。ユーザーが認識ている状態で収集するほうが利便性が高い気がしています。ファイルシステムZFSですとか言われた場合には、Robocopyのほうが圧倒的に楽だと思います。セクタ単位でのコピーなのでZFSでもなんでも丸ごとはコピーできますが、その後の取り扱いで問題が出てしまいそうです。

ロックされているファイル

ファイル共有上のファイルが、別のアプリケーションなどによりロックされている状態の場合、Robocopyによる複製ではエラーが発生します。リトライ回数の設定に依存しますが、リトライ処理でもコピーできなかった場合にはログにエラーが記録されることになります。

稼働中システムをF-Responseなどと組み合わせてEnCaseでイメージを取得する場合、ロックされている(オープンされている)ファイルのセクタがそのままコピーされることになります。この為、例えば PST ファイルのようにオープンされた状態のファイルをそのままセクタ毎コピーすると、後処理で PST がダーティー状態になっている可能性があります。ScanPSTツールなどで修復することもできますが、いずれにしてもオープン中などのファイルがないようにはしておいた方が安全ですね。

禁則文字

Windowsの場合、ファイル名に「 \, /, :, *, ?, ", <, >, | 」を含めようとすると、ファイル名にはこれらの文字が設定できないようにエラーになります。しかし、Windows以外の環境下ではこれらのファイル名が使われることもあるので、ケースによってはこれらの文字を含むファイル名がコピー元に存在する可能性があります。

Robocopyでは扱えないファイル名がある場合には、以下のエラーをログに記録して作業を継続します。

例:ファイル名「?ample.txt」とファイル名の一部に文字“?”を含む場合

	    New File  		     413 2010/01/29 23:49:08	E:\?ample.txt
2010/02/22 14:44:16 ERROR 123 (0x0000007B) Copying File E:\?ample.txt
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。

EnCaseの場合にはセクタ単位でのコピーですので、例えばMFTレコードやディレクトリエントリの内容がそのままコピーされます。EnCase証拠ファイルからこれらの禁則文字を含むファイル名をエクスポートしようとすると、これらの文字は中黒文字に置換されます。

ちなみにUNICODE制御文字がファイル名の一部に含まれている場合、それはそれでそのままコピーしてくれるようです。

*1:だいたい議論の終着点としては、ケースによるよね、で終わるパターン

*2:コピー先のファイルシステムには、当然FATではなくNTFSを利用することが前提