MIMEタイプ検出器
ファイルの拡張子には嘘がある、誰でもmalware.exeをphoto.jpgに変更できる。ファイルが実際にどのような形式であるかを確実に把握するには、その最初の数バイトを読み取ることが必要だ。ほとんどのフォーマットでは、ファイル名に関わらずそのフォーマットを識別する「マジック数値」(シグネチャー)が含まれている。この検出ツールは、送信されたファイルのシグネチャーを読み取り、標準的なMIMEタイプと最も一般的な拡張子の対応関係を返すことで、クライアントが報告したファイル内容が実際に該当するかを確認できる。
MIME検出の仕組み
-
1
ファイルをドロップ
任意のサイズで構いません。読み込まれるのは最初の4~16KBのみです。
-
2
マジックバイトを読み取る
ほとんどのフォーマットは既知のシグネチャから始まります。
-
3
シグネチャデータベースとの照合
この検出器は、`file(1)`/libmagicと同じルールを使用しています。
-
4
MIME+拡張子を返す
RFC 6838のメディアタイプ、標準的な拡張子および人間が付与したラベルを表示します。
サンプル署名
| フォーマット | 最初のバイト(16進) | MIME |
|---|---|---|
| JPEG | FF D8 FF |
image/jpeg |
| PNG | 89 50 4E 47 0D 0A 1A 0A |
image/png |
| GIF87a | 47 49 46 38 37 61 |
image/gif |
| GIF89a | 47 49 46 38 39 61 |
image/gif |
| WebP | 52 49 46 46 ... 57 45 42 50 |
image/webp |
25 50 44 46 (%PDF) |
application/pdf |
|
| ZIP / JAR / ODT / DOCX | 50 4B 03 04 |
application/zip(または特定のファイル形式) |
| gzip | 1F 8B 08 |
application/gzip |
| MP4(ISO BMFF) | 00 00 00 XX 66 74 79 70 |
video/mp4 |
| MP3 | 49 44 33またはFF FB |
audio/mpeg |
| FLAC | 66 4C 61 43 |
audio/flac |
| WAV | 52 49 46 46 ... 57 41 56 45 |
audio/wav |
| ELF(Linuxバイナリ) | 7F 45 4C 46 |
application/x-executable |
| Windows PE (exe) | 4D 5A |
application/x-msdownload |
拡張子だけでは不十分な理由
- セキュリティ。 アップロードされた
resume.pdf(実際には.exe)は、単純な拡張子フィルターを回避します。サーバー側のMIME検出機能がこの問題の解決策となります。 - Content-Typeの不一致。 ブラウザがアップロードデータに対して誤ったMIMEを送信する可能性があります。マジックバイトの読み取りにより、データの実際の内容を確認できます。
- 復元されたバックアップ。 拡張子が失われたり削除されたりすることがあります。コンテンツを分析することで、各ファイルの内容を特定できます。
ZIPベースのファミリー
多くの現代のファイル形式は実質的にZIPアーカイブであり、他のZIPファイルと同様にPK\x03\x04というプレフィックスで始まります。
- Office Open XML:
.docx、.xlsx、.pptx - OpenDocument:
.odt,.ods,.odp. - EPUB:
.epub - Android用APKファイル:
.apk - Java JARファイル:
.jar
これらを区別するために、検出器はZIPファイルの内部に目を差し込んでマニフェストファイルを読み取ります(OOXML用は[Content_Types].xml、ODF/EPUB用はmimetype)。
有用な組み合わせ
- 最初の512バイトはほとんどのフォーマット署名をカバーしています。
- 「最初の4KB」は、マニフェストがその後に配置されるZIPベースのフォーマットを対象としています。
- 「最初の16 KB」は、いくつかのマルチメディアコンテナのような特殊なケースをカバーしています。
完璧ではありません
- プレーンテキストファイルにはマジックバイトが含まれていません。検出器はヒューリスティクスに基づいて処理を行います(有効なUTF-8かどうか、JSONまたはXMLに似ているかどうか)。
- 暗号化された/匿名化されたファイルは、識別可能な署名がなく、ランダムなバイトの組み合わせのように見える場合があります。
– 形式の曖昧さ。
audio/wavおよびvideo/aviはいずれもRIFFから始まるが、検出器は二次識別子(4バイト後に現れるWAVEとAVI)を確認する。
よくある質問
いいえ。検出処理はブラウザ内で実行されます、最初の数KBのみが読み込まれ、クライアント側の署名データベースと照合されます。デバイスから一切データが送信されません。
OOXML、ODF、EPUBおよびJARはいずれもZIP署名から始まるため、検出器はその内部を確認してフォーマット固有のマニフェストを抽出し、より具体的なMIME(application/vnd.openxmlformats-...)を返します。
これは単純な名前の変更を検出する機能である。.exeが.jpgに変更された場合、そのマジックバイトによって実行可能ファイルとして表示される。高度な攻撃者は、実際のメディアファイル内にペイロードを埋め込むか、複数の署名に対応するポリグロットファイルを使用することで、単純な検出手法を回避する。
プレーンテキストにはマジックバイトがありません。検出器はヒューリスティクスを適用します:有効なUTF-8か?有効なJSONか?XML宣言か?CSV構造か?それ以外の場合はtext/plainに切り替えます。
署名データベースは類似しており(Unixのlibmagicルールから派生しています)、一般的なフォーマットでは結果が一致するはずです。暗号化されたまたはカスタムフォーマットの場合は異なる場合があります。
関連ツール
DNSルックアップ
任意のドメインのA、AAAA、MX、TXT、NS、CNAME、SOAレコードをターミナルなしで確認できます。
ドメイン年齢チェック
レジストリのWHOISデータを用いて、ドメインが初めて登録された日時およびその年・月・日による使用期間を確認してください。
ドメインからIPへの変換
任意のドメイン名をそのIPv4(A)およびIPv6(AAAA)アドレスに解決し、任意のネットワークツールへコピーできます。
IPアドレス検索
公開IPv4またはIPv6アドレスから、推定の国、地域、都市、座標、ISP、ASN、組織、タイムゾーンを確認できます。
DMARCレコードチェッカー
任意のドメインのDMARC TXTレコードをクエリし、ポリシー、アライメント、報告アドレスおよび実施率を読みやすく整理した形式で解析します。
速度テスト
ブラウザーで手軽に行える無料のインターネット速度テスト。ダウンロード速度をMbpsで測定するほか、遅延とジッターも計測し、4Kストリーミング・ゲーム・ビデオ通話に対応できるかを確認できます。アプリも登録も不要。
このツールは他の言語でも利用できます
- أداة كشف نوع ملفات MIME [AR]
- Détecteur de type MIME [FR]
- MIME 타입 감지기 [KO]
- MIME-type detector [NL]
- Detektor typu MIME [PL]
- MIME-typdetektor [SV]
- เครื่องตรวจจับประเภทไฟล์ MIME [TH]
- MIME-Typ-Detektor [DE]
- Detector de tipo MIME [ES]
- Detektor Jenis MIME [ID]
- Bộ phát hiện loại MIME [VI]
- Detector de Tipo MIME [PT]
- MIME Type Detector [EN]
- Rilevatore di tipo MIME [IT]
- Определение MIME-типа файла [RU]
- MIME Tür Tespit Cihazı [TR]
- MIME类型检测器 [ZH]