USBフラッシュメモリを媒介して感染するウィルスから守る (続き)


気になったので、ちょっと失敬してパンダの話の続き。
何も操作できないautorun.infはいったいどうなっているのか。
ddでUSBディスクダンプをとってみた。

ファイルシステムの仕様はよくわからないが、先頭部分を見てみると、どうもFAT16のようだ。

では、AUTORUN.INFについてのエントリはどうなっているのか。
以下のような記述があった。

この部分はRDE (Root Directory Entry)と呼ばれる部分でファイルの属性情報が記されているとのこと。で、FATの仕様によれば以下のような構造らしい。

typedef struct DirEntry_t {
  Byte name[8]; /* file name */
  Byte extension[3]; /* file name extension */
  Byte attribute; /* file attribute
               bit 4 directory flag
               bit 3 volume flag
               bit 2 hidden flag
               bit 1 system flag
               bit 0 read only flag */
  Byte reserved; /*use NT or same OS */
  Byte createTimeMs; /*ファイル作成時刻の10ミリ秒 (0 〜 199) */
  Byte createTime[2]; /*ファイル作成時間 */
  Byte createDate[2]; /*ファイル作成日付 */
  Byte accessDate[2]; /*ファイル・アクセス日付 */
  Byte clusterHighWord[2]; /*FAT32で使用するクラスタ番号の上位 16 bits*/
  Byte updateTime[2];
  Byte updateDate[2];
  Byte cluster[2]; /* start cluster number */
  Byte fileSize[4]; /* file size in bytes (directory is always zero) */
} DirEntry;


これに従って読んでみると。ふむ、ふむ、最初の「AUTORUN」というのはファイル名ね。で、9バイト目からが「INF」拡張子ね。

で、次のattributeがやっぱり「40」(10進で64)だ。うーむ、FATの仕様では1〜5ビットのフラグしか使えないはずなのに、7ビット目のみフラグを立てている。。

じゃあ、何かい?このattributeの7ビット目のフラグを立てられれば、一切操作できないファイルが作れるってわけかい?
そんなことなのか?

あるいは他に何か細工があるのか、このUSBディスク。AUTORUN.INFの中身のデータを見てみた。

「caacaacaacaacaacaa」って、これ自体には意味なさそうだな...

ダンプを見てみると、ほかは全部NULLで埋まっているので、やっぱり、特別なことをしているのはRDE (Root Directory Entry)のattbibuteのところだけっぽい気がする。


MSから出ているFATの仕様。


http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx


くだんのattributeの部分。

DIR_Attr 11 1 File attributes:
 ATTR_READ_ONLY 0x01
 ATTR_HIDDEN 0x02
 ATTR_SYSTEM 0x04
 ATTR_VOLUME_ID 0x08
 ATTR_DIRECTORY 0x10
 ATTR_ARCHIVE 0x20
 ATTR_LONG_NAME ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID

The upper two bits of the attribute byte are reserved and should always be set to 0 when a file is created and never modified or looked at after that.


↑↑やっぱり上位2ビットはいじっちゃだめよって書いてある。そして常に0じゃないとだめよって。

Windowsはこの属性値の上位2ビットをチェックしていて、これらが立っている場合は、一切の処理を拒否するってことか。

なの?