初級で「名札(拡張子)・中身(0と1)・読み方(形式)・担当(アプリ)」の4点セットを、中級で「中身側の証拠(マジックナンバー)」と「Webの宣言(MIMEタイプ)」を見ました。上級では、その裏側で中身をどう見破っているかを機構レベルまで下ろします。到達点は一つ——「拡張子は宣言に過ぎず、中身を保証しない」を、攻撃の手口まで含めて説明できることです。
用語には「※1・※2…」と番号を付け、各セクション末尾の「登場人物メモ」で説明します。セクションは初級・中級と id を揃えてあります。
初級で「名札(拡張子)・中身(0と1)・読み方(形式)・担当(アプリ)」の4点セットを、中級で「中身側の証拠(マジックナンバー)」と「Webの宣言(MIMEタイプ)」を見ました。上級では、その裏側で中身をどう見破っているかを機構レベルまで下ろします。到達点は一つ——「拡張子は宣言に過ぎず、中身を保証しない」を、攻撃の手口まで含めて説明できることです。
用語には「※1・※2…」と番号を付け、各セクション末尾の「登場人物メモ」で説明します。セクションは初級・中級と id を揃えてあります。
🎬 アニメーション『ダブルクリックの3秒』の ② のところです!
上級では「名札を信じない」立場から、種別を確かめる3系統を精密にします。
種別を厳密に判定したいプログラムは、名札ではなく先頭バイトを読む。UNIX系の file コマンドや、サーバのアップロード検証がこれです。拡張子・マジックナンバー・MIMEタイプは互いに独立しており、一致する保証はない——その隙間こそが、後で見る偽装の余地になります。
登場人物メモ(※の説明):
89 50 4E 47、ZIPは 50 4B、PDFは %PDF、ELF実行形式は 7F 45 4C 46 など、形式ごとに決まった先頭バイト列。中身側の物証image/png text/html のような「大分類/小分類」表記。名前の由来はメール(Multipurpose Internet Mail Extensions)だが、今はWeb全体の標準⚠️ イレギュラー(3つの証言が食い違うとき):
中身が結局すべて0と1であることは 2進数とデータ を参照。
🎬 アニメーション『ダブルクリックの3秒』の ② のところです!
名札は拡張子だけではありません。世界には3種類の「種別の伝え方」があります:
file コマンドやアップロード検証が見るContent-Type ヘッダで配信側が宣言し、ブラウザはこれに従う登場人物メモ(※の説明):
89 50 4E 47、ZIPなら 50 4B、PDFなら %PDF など、形式ごとの署名。名札と違って中身に埋まっているtext/html image/png のような「大分類/小分類」表記。名前の由来はメールだが、今はWeb全体の標準⚠️ イレギュラー(3つの証言が食い違うとき):
🎬 アニメーション『ダブルクリックの3秒』の ③〜④ のところです!
「拡張子→アプリ」の対応表を、OSは具体的にどこに持っているか。機構はOSごとに違います。
.pdf の担当変更は、この階層の書き換えmimeapps.list で「このMIMEタイプ→この既定アプリ」を引く。拡張子を直接ではなく、いったんMIMEタイプを介すのが特徴共通する構図は「関連付けはファイルではなくOSのローカル設定」。だから同じ拡張子でも人のPCで担当アプリが違い、世界共通の一元データベースは存在しません。
登場人物メモ(※の説明):
⚠️ イレギュラー(関連付けまわりの事故):
OSがアプリを起動して橋渡しする流れは アプリとOS を参照。
🎬 アニメーション『ダブルクリックの3秒』の ③〜④ のところです!
OSの対応表と、その周辺の実装です:
⚠️ イレギュラー(対応表まわりの事故):
🎬 アニメーション『ダブルクリックの3秒』の ⑤〜⑦ のところです!
担当が中身を読む段でも、「宣言(拡張子・ヘッダ)」と「物証(中身)」のどちらを信じるかで挙動が変わります。
つまり「中身を見破る」には二つの態度がある——宣言を信じて速くするか、中身を検証して安全にするか。上級のシステム設計は、この綱引きの上に立っています。
登場人物メモ(※の説明):
⚠️ イレギュラー(解読の判断ミス):
🎬 アニメーション『ダブルクリックの3秒』の ⑤〜⑦ のところです!
「読み方の決まり」の実名はファイルフォーマット仕様です。解読には層があります:
登場人物メモ(※の説明):
⚠️ イレギュラー(解読の事故):
Linux/Macのターミナルで file 名前 と打つと、拡張子を無視してマジックナンバーから種別を判定してくれます。cat.txt に改名した画像も JPEG image data と見破ります。名札(拡張子)・中身(マジックナンバー)・読み方(フォーマット)が別物であることを、手元で1分で確認できる実験です。
まとめ——種別の証言は名札(拡張子)/ 中身の署名(マジックナンバー)/ Webの宣言(MIMEタイプ)の3系統あり、食い違いこそがトラブルと攻撃の源でした。そして解読の最下層には文字コードと圧縮がいる。「開けない・化ける・劣化する」は全部、この地図のどこかで説明がつきます。
ここが上級の核心です。拡張子は「実行するか/どう扱うか」の判断に効くのに、中身を保証しない——この非対称が攻撃に使われます。手口は「表示と実体のズレ」を突くのが共通点です。
.exe だけで、正体はPDFを装った実行プログラム。OSの既定が拡張子非表示だと「請求書.pdf」に見え、成立してしまう.pdf などに見えるのに、OSが扱う実際の拡張子は末尾の実行形式のまま登場人物メモ(※の説明):
⚠️ イレギュラー(偽装を見抜くには):
file コマンドや検証付きのシステムは、名札を無視して物証を見るので偽装に強いそのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。
問1. 通信やアプリ間で形式を伝える「MIMEタイプ」の説明として正しいものはどれ?
問2. 「請求書fdp.exe」のようにRLO(右書き制御文字)を使った拡張子偽装がある。RLOは何をしている?
問3. 「拡張子が .txt なら安全」と考えるのが危険な理由として、最も適切なものはどれ?
問4. 宣言されたMIMEタイプが曖昧なとき、ブラウザが中身の先頭から種別を推測する機能と、その危険を封じる手段の組み合わせとして正しいのはどれ?
問5. アップロードされたファイルの先頭バイトが正しいPNG署名と一致した。このことから確実に言えるのはどれ?
問6. ファイル先頭に埋め込まれた形式ごとの署名バイト列を「マジックナンバー」と呼ぶが、その別名(○○シグネチャ)を答えてください。
問7. サーバがアップロードされた画像を受け取るとき、「本当に画像か」を確かめる最も確実な方法はどれ?
問8. 「この拡張子はこのアプリで開く」という関連付けを管理している仕組みについて、正しいものはどれ?