ファイル偽装技術について。

Shinta

1.はじめに
ファイル偽装はWinMXを筆頭とするファイル共有が普及してしまった昨今ではもはやレッドブックものである。したがって、完全に絶滅してしまう前にそれらの技術をまとめてみたいと思う。

2.ファイル偽装の発展
ファイル偽装はアンダーグラウンドの世界、主にWarezの世界で発展してきました。初期はファイルの拡張子を変更しただけであったが、次第にファイルの先頭に別のヘッダ情報を加えるなど手の込んだものになってきました。最近ではデータ自体をjpeg情報にしたりpng情報に変換したりするなど、技術的なものもでてきました。
*WarezとはフリーのWebスペースに違法ファイルをアップロードして配布するという違法行為のことです。

3.ファイル偽装の種類
偽装の種類には大きく分けて4つあります。

1.添付型
一番多いファイル偽装の形です。ファイルを別ファイルに付加するものです。ブラウザなどはファイルヘッダに書いてあるファイルサイズ以上は読みに行きません。そのため、ファイルサイズは大きいが普通に閲覧できるファイルが出来上がります。ファイルサイズ以外はおかしな部分は見当たらないため容易にはわかりません。

2.変換型
ファイルをそのまま画像や音声、動画などに変換させてしまうものです。たとえばBMP画像はデータは無圧縮なので、BMPヘッダをファイルに付加してやればそのまま画像として表示されます。またjpegフォーマットに無理やりデータを変換してやれば、砂嵐ののjpeg画像になります。この方式の特徴は偽装後のファイルを正常に展開できるという点にあります。また出来上がったファイルは基本的に砂嵐やノイズになってしまうため簡単に気づかれてしまいます。

3.埋め込み型
埋め込めるファイルサイズは画像の大きさにより決定されるので、あまり大きなファイルは隠せませんがファイルサイズ、データともにおかしな点があらず、容易には判別できません。

4.テキスト変換型
NewsやMailにデータを送るために用いられたBase64やISH,uuencode,BinHexなどが元です。これらは1byte=8bitのファイルデータを1word=6bit又は7bitのアスキーコードに変換するためファイルサイズが多少増えます。Warezの世界では”おもしろい”アスキーコードに変換するというものになりました。そのため1byteのデータが十数byteになることもざらです。ファイル偽装という観点でテキスト変換を見ると、ほとんど意味が無いように思えます。変換されたテキストの特徴から使用されたToolが簡単に割り出せるからです。しかし、Warezにおいて偽装解除はある種の頭脳スポーツのような部分があるため多少ではありますが使用されました。開くと文字化けせずに正常に文字(ASCIIだけでなくShift_JIS等のマルチバイトコード)が表示されるという点では他の種類の偽装と同じです。

4.ファイル偽装の技術
4つの種類について前述したので、それらの技術についての解説します。

1.添付型
たとえばjpeg画像[JPEGHeader][JPEGData]にデータ[FileData]を添付するとします。そうすると[JPEGHeader][JPEGData][FileData]のような並びになります。またPNGファイル[PNGHeader][PNGData]のコメント領域[Comment{}]にデータを埋め込むようなこともできます。この場合[PNGHeader][PNGData][Comment{[FileData]}]のような並びになります。添付タイプは前者のようなデータを直接後ろにくっつけるものから、コメント領域にデータを書き込むものまで幅広くあります。技術的には単なるファイルの連結ですので、かなり楽な部類に入ります。

2.変換型
BMPヘッダ[BMPHeader]をデータ[FileData]の頭にくっつけます。すると[BMPHeader][FileData]となります。このファイルはBMPヘッダを持っており、BMPは無圧縮のため、BMPを開けるアプリケーションでは開くことが出来ます。さらにPNGフォーマットは可逆圧縮ですのでこのBMPをPNGにすることも出来ます。WAVやAVIファイルも無圧縮なので同様のことが出来ます。また、中にはデータをJPEGフォーマットに合うように可逆変換して、[JPEGHeader][JPEGData=FileData]とするような高度なものもあります。

3.埋め込み型
これは一般にステガノグラフィと呼ばれています。0≦N≦255でNを定義します。このときNとN+1は全体の区域に対してどれくらいの誤差があるでしょうか。答えは簡単で1/256、約0.4%の誤差しかありません。たとえばある画像のある一点の赤の値が+1されたとします。元の画像と変化後の画像について人間はほとんど知覚できません。これを利用したのがステガノグラフィです。24bit画像はRGBがそれぞれ8bitです。この8bitの最下位bitが変化しても前述の通り人間は気づきません。したがって最下位1bitを使用した場合、1ドットにつき3bitのデータを埋め込むことが出来ます。また、下位2bit3bit4bitと増やしていくことで埋め込めるデータ量を増やすことが出来ます。たとえ下位4bitを使用しても2^4/256,最大約6%の誤差にしかなりません。自然画像において6%の誤差はほとんど認知できません(アニメ絵のようなベタ画像の場合は認知出来ます) 。

4.テキスト変換型
テキスト変換型には符号化とN進数変換後符号化の二種類があります。まずは前者から。まず2^N個のテキストを用意し番号を振ります。そしてデータをNbitごとに用意したテキストで置換します。これで完了。後者はまずデータを数バイトごとN進数に変換します。そしてN個のテキストを用意して、それで置換してやれば完了です。

これら四つの種類の解説をしましたが、実際にはこれらに加え、ファイル分割、暗号化、CRCチェック、パスワードなども当然用いられています。作ること自体は簡単ですがそのあたりの細かい部分が未完成なソフトは意外と多いものです。実際に作成する場合はそのことも念頭に置きましょう。

6.ファイル偽装の将来
ファイル偽装はWarezにおいてはフリーのWebスペースに違法ファイルをアップロードしても、サーバーの自動巡回プログラムを欺いてデリートされないためものでした。そのため、人間が見れば偽装されているということがあからさまでした。Warezがファイル共有によって廃れた今、ファイル偽装技術は人間が見ても偽装されていることが分からない、という方向に行くべきではないのでしょうか。暗号化とファイル偽装は情報を秘匿するためには必須だと思います。たとえば、某テロリストがエロサイトの画像を通じて仲間と連絡を取り合っていたということは有名な話です。今後は暗号化で情報を分からなくするだけではなく、ファイル偽装によって情報の存在自体を分からなくすることが求められるのではないでしょうか。
Copyright©Shinta