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ビットをチェックしていて、これらが立っている場合は、一切の処理を拒否するってことか。
なの?