secrets-in-file-metadata について
調査で使うファイルメタデータ分析スキルです。形式ごとの抽出方法、解釈上の注意点、確信度の評価を示し、タグを証明ではなく検証すべき情報として扱います。
主な機能
- 01形式別のメタデータ確認
- 02ExifTool のコマンド例
- 03GPS・機器・タイムスタンプの分析
- 04文書と PDF の調査
- 05証拠上の注意点と確信度評価
活用シーン
- 01画像の GPS 情報から場所を検討
- 02複数ファイルのカメラ識別情報を比較
- 03文書の改訂履歴と作成者を調査
- 04他の証拠と照合してメタデータを評価
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ useosint/ skills --skill secrets-in-file-metadataインストール後、Claude Code で/secrets-in-file-metadataを入力して読み込まれたか確認します。
同梱ファイルreference/exiftool-cookbook.mdreference/tag-catalogue.md
詳細
ファイルのメタデータに潜む秘密
調査の最も有力な手がかりは、多くの場合すでにファイルの中にあります。小数点以下6桁のGPS座標、関連がないように見える4枚の画像を同じカメラ本体に結び付けるカメラのシリアル番号、実在する従業員の名前が記された文書の作成者、企業の共有名を含むテンプレートのパスなどです。
初心者が間違えやすい点は2つあります。メタデータがないことは疑わしいわけではありません。ソーシャルプラットフォームを経由したファイルでは、それが普通の状態です。また、メタデータがあることも証拠にはなりません。すべてのタグは、最後にそのファイルを扱ったソフトウェアが記録した主張であり、どれもコマンド1つで編集できます。
手元にあるものに応じて、まず調べる場所
| 手元にあるもの | 試すもの | 理由 |
|---|---|---|
| ソーシャルプラットフォームからダウンロードした写真 | 何も期待しない | 配信処理では再エンコードされます。削除されていない上流のコピーをたどるには、find-the-original-image を使います。 |
| フォーラム、CMS、または直接リンクから入手した写真 | exiftool で全項目をダンプ | こうした方法では、元のバイト列がそのまま返されます。GPS情報は、予想以上によく残っています。 |
| メッセージの添付ファイル | 全項目をダンプし、送信方法も記録 | 写真として送信すると通常は再エンコードされますが、ファイルとして送信した場合は通常再エンコードされません。 |
| 1つのソースからのフォルダー | exiftool -r -csv でトリアージ | 欲しいのは、外れ値とファイル間で共通するタグです。 |
| DOCX/XLSX/PPTX | exiftool を実行し、その後コンテナーを解凍 | 変更履歴、コメントの作成者、改訂識別子、EXIF情報がそのまま残った埋め込み画像は、exiftool では表示されません。 |
| exiftool を実行し、その後構造パーサーを使う | Producer の文字列、増分改訂、埋め込みファイル、独自のメタデータを持つ画像を確認できます。 | |
| 報道機関や通信社の写真 | 特に IPTC と XMP ブロック | 報道機関のワークフローでは、キャプション、クレジット、人物名、場所がそこに記録され、EXIF情報がない場合でも残っていることがよくあります。 |
| デバイスから直接取り出した RAW または HEIC | MakerNotes を含めて全項目をダンプ | 最も情報量の多いケースです。シリアル番号、シャッター回数、レンズ情報、サブ秒単位の時刻などを確認できます。 |
| 動画 | exiftool と ffprobe | コンテナーの作成時刻、エンコーダー文字列、トラックごとのメタデータ、埋め込みGPSトラックを確認できます。 |
exiftool の適切な使い方
exiftool -G1 -a -u -g1 file.jpg # everything, grouped into sections — best for reading
exiftool -G -a -u -s file.jpg # everything, one line per tag, real tag names
exiftool -time:all -G1 -a -s file.jpg # every timestamp anywhere in the file
exiftool -gps:all -n file.jpg # GPS as raw signed decimals, ready to paste into a map
デフォルト設定では証拠を見落とす理由:
-G/-G1を付けると、各タグにグループ([EXIF]、[XMP]、[IPTC]、[MakerNotes]、[File]、[Composite])が表示されます。これがないと、デバイスが記録したタグと exiftool が計算したComposite値、EXIFのタイムスタンプとファイルシステムのタイムスタンプを区別できません。-G1はさらに細かいグループを表示します。-aを付けると、最後のタグだけでなく重複タグも表示されます。ここに不整合が現れます。異なるブロックに同じタイムスタンプが別々の値で記録されていれば、2つのプログラムの間で食い違いがあったこと、つまりファイルが編集されたことを意味します。-uを付けると、exiftool が名前を付けられないタグも表示されます。ベンダーのブロックが重要な場合はよくあります。-nを付けると、見やすい形式への変換が無効になり、52 deg 22' 8.40" Nではなく、符号付きの10進度数が表示されます。-sを付けると、説明ではなくタグ名が表示されるため、後からタグを指定して検索できます。-eeを付けると、動画ストリーム内のGPSトラックなど、埋め込みデータが抽出されます。
まずは一括でトリアージし、CSVを並べ替えて、GPS情報が含まれるファイル、繰り返し現れる SerialNumber、申告された期間外のタイムスタンプ、そして Software が異なるファイルを探します。
exiftool -r -csv -filename -createdate -datetimeoriginal -modifydate \
-make -model -serialnumber -gpslatitude -gpslongitude -software DIR > triage.csv
exiftool -r -if '$gpslatitude' -p '$directory/$filename $gpsposition' DIR
コマンドの詳しいパターン:reference/exiftool-cookbook.md。
重要なフィールドの読み方
GPS。 位置は GPSLatitude/GPSLongitude とそれぞれの Ref タグから、標高は GPSAltitude と GPSAltitudeRef から取得します。見落とされがちな項目のほうが重要です。GPSImgDirection は、カメラが向けられていた方角を示すコンパス方位です。撮影者の位置を特定し、さらに画像の向きを割り出せるため、街路レベルの画像との照合では決め手になります。GPSDestBearing は被写体への方位です。
GPSHPositioningError はデバイス独自の精度推定値で、単位はメートルです。調査結果に付けるべき、正直な誤差半径を示します。GPSDateStamp/GPSTimeStamp はUTCで記録されるため、ファイル内で唯一信頼できる時計です。
デバイスのフィンガープリント。 Make と Model からデバイスの種類が分かります。SerialNumber、BodySerialNumber、InternalSerialNumber、CameraSerialNumber は1 台の物理的なカメラ本体を識別します。リンク分析においてファイル内で最も価値の高いタグであり、複数のアカウント、プラットフォーム、年にまたがる画像を単一のカメラに結び付けられます。LensSerialNumber はレンズについて同じ役割を果たし、カメラ本体とレンズの組み合わせなら、さらに絞り込めます。メーカー独自のシャッター回数や画像番号のタグを使えば、デバイスの出力順を並べ、2 枚のフレームの間にどれだけ撮影されたかを推定できます。OwnerName、CameraOwnerName、Artist はユーザーが設定する項目で、実名が入っていることもよくあります。
タイムスタンプ。 DateTimeOriginal はシャッターが切られた時刻です。CreateDate はこのデジタルファイルが作成された時刻で、カメラ内では同じですが、スキャン、エクスポート、再エンコードでは異なります。ModifyDate は最後に書き込まれた時刻です。DateTimeOriginal より後なら、処理されたことを意味します。注意点:EXIF の日時にはタイムゾーンが含まれません。 OffsetTime、OffsetTimeOriginal、OffsetTimeDigitized が存在しない限り、デバイスの現地時刻です。多くのデバイスではこれらのタグが省略されています。そのため、UTC の GPSDateTime と照合してデバイスのオフセットを導き出します。このオフセットからは、デバイスがどの経度帯に設定されていたかも分かります。写真についての証拠として FileModifyDate を引用してはいけません。これは確認しているファイルシステムに属する値で、コピー時に変わります。
サムネイルと画像。 雑な編集ソフトはメイン画像を更新しても埋め込みプレビューをそのままにするため、プレビューにはトリミングやレタッチ前の場面が表示されることがあります。
exiftool -b -ThumbnailImage file.jpg > thumb.jpg
exiftool -b -PreviewImage file.jpg > preview.jpg
exiftool -ee -b -JpgFromRaw file.cr2 > embedded.jpg
アスペクト比が違えば、トリミングされたことが分かります。内容が異なれば、それだけで証拠は十分です。
編集の履歴。 Software、ProcessingSoftware、HostComputer、XMP の CreatorTool から、ファイルに変更を加えたソフトウェアが分かります。XMP のメディア管理タグはさらに詳しい情報を提供します。DocumentID、OriginalDocumentID、InstanceID、DerivedFrom を使えば、エクスポートされた派生ファイルを、見たことのない元ファイルや、同じ元ファイルから作成された兄弟ファイルに結び付けられます。
報道写真の IPTC/XMP。 By-line、Credit、Source、Caption-Abstract、Headline、DateCreated、City、Country-PrimaryLocationName に加え、XMP の画像内の人物や撮影場所に関する構造化データがあります。通信社の写真では、誰が、どこで、いつ撮ったかについて、人が記述した完全な回答になります。編集者が記述したものなので、センサーの読み取り値ではなく、情報源に基づく主張として扱ってください。
ドキュメント。 Author と LastModifiedBy は、名前を示す 2 つの項目です。Company と Manager は Office のインストール情報に由来します。Template には、内部サーバーや部門が分かる完全な UNC パスが含まれている場合があります。RevisionNumber と TotalEditTime から、文書が実際に編集されたのか、公式に見せるために一度に作成されたのかを確認できます。LastPrinted は物理的なコピーが存在した証拠です。次に、コンテナーを開いてください。変更履歴に記録された作者ごとの識別情報は exiftool では表示されないためです。
unzip -o report.docx -d report_x
# docProps/core.xml, docProps/app.xml — properties
# word/document.xml — w:ins / w:del carry w:author and w:date
# word/comments.xml — comment authors and initials
# word/settings.xml — revision identifiers, a document-lineage fingerprint
# word/media/ — embedded images, each with its own intact EXIF
# word/_rels/, xl/externalLinks/ — links to internal paths and other documents
実際には、埋め込み画像が GPS 情報の最も見落とされやすい情報源です。文書から情報は削除されていても、4 ページ目に貼り付けられた写真からは削除されていないことがあります。
PDF。 Producer はファイルを書き出したライブラリやドライバーを示し、重要な手がかりになります。ワープロソフトで作成された「スキャン済み」文書は、スキャンされたものではありません。Creator は作成に使われたアプリケーションを示します。EXIF とは異なり、PDF の日付にはタイムゾーンオフセットも含まれます。PDF は増分更新に対応しているため、以前の内容の改訂版がファイル内に残っている場合があり、添付ファイルや独自のメタデータを保持した画像も含められます。pdfimages -list と pdfdetach -list で列挙し、読み取る前に qpdf --qdf で構造を展開してください。
形式ごとのタグ一覧:reference/tag-catalogue.md。
ここで誤りが起きます
- 取り除かれるのは、データが届くまでの過程です。 仕組みは次のとおりです。配信用の画像を生成するために再エンコードするホストは EXIF を破棄しますが、元のバイト列をそのまま配信するホストは EXIF を保持します。大規模なソーシャルプラットフォームは再エンコードします。多くのフォーラム、セルフホスト型 CMS、オブジェクトストレージのバケット、写真コミュニティサイト、メールの添付ファイルでは、そうなりません。CMS はその中間にあたる興味深いケースです。ページ上のリサイズ画像では EXIF が取り除かれても、メディアディレクトリにある元のアップロードには残っているため、元のパスにアクセスしてみてください。
- 存在しないからといって、何も証明されません。 ファイルから情報が消去されたとも、偽物だとも、アップロードした人が慎重だったとも限りません。情報が含まれていたコピーを示せない限り、「EXIF を削除した」ではなく、必ず「EXIF は存在しない」と書いてください。
- 存在していても、誰かが値を書き込んだことしか証明できません。 位置情報を信頼する前に
geolocate-from-pixelsを使って視覚的に照合し、撮影時刻を信頼する前に太陽の位置で照合してください。 - 時計はおそらく間違っています。 カメラの時計はずれたり、旅行後も間違ったタイムゾーンのままになったり、夏時間を反映しなかったりします。
GPSDateTimeや、フレーム内に写っている日付の分かる出来事と照合するまでは、EXIF の日時だけでは数時間の誤差があります。 - 複合タグは exiftool による計算結果であり、ファイルの内容ではありません。
GPSPosition、ImageSize、LensIDは派生値です。-Gを指定しないと、計算された値をデバイスが書き込んだ値のように引用することになります。 - スクリーンショットに含まれるのは、写真ではなくスクリーンショットを撮ったデバイスのメタデータです。 それを根拠に仮説を立てる前に、
Modelがスマートフォンを示していないか確認してください。 - 抽出前に編集すると、元の情報は復元できません。 回転やトリミングをしたり、一部の編集ソフトで開いたりするだけでもタグが書き換えられることがあります。まずハッシュ値を記録し、コピーを作成してください。
- オンラインのメタデータビューアーを使うということは、証拠を見知らぬ相手にアップロードするということです。 exiftool をインストールしてください。exiftool は Perl の配布物ひとつで、オフラインで動作します。ブラウザー内で処理するツールのほうがサーバー側で処理するツールより安全ですが、どちらも、保護命令の対象資料、NDA 対象資料、進行中の刑事事件に関する資料には使えません。アップロードしたものはすべて保持され、インデックス化される可能性があると考えてください。
確信度の評価
- 確認済み — メタデータに関する主張が、メタデータ以外の証拠によって裏付けられている状態です。同じフレームの GPS 情報が、独立した視覚的な位置特定と一致している場合、互いに無関係な 2 つの情報源のファイルに同じカメラのシリアル番号が含まれている場合、文書の作成者が
find-anyoneで見つかった既知の従業員と一致する場合などが該当します。 - 可能性が高い — 妥当なデバイスからのものと思われるファイルで、情報を取り除かないホストから取得され、EXIF、XMP、埋め込みサムネイルのタイムスタンプが一致し、編集ソフトを経由していないなど、メタデータに内部的な整合性がある状態です。
- 未確認 — 照合するものが何もない単一のタグです。視覚的に確認していない GPS 座標はすべてここに分類されます。明記してあれば問題ありません。
- 矛盾あり — タイムスタンプが一致しない、サムネイルに別の場面が写っている、視覚的な証拠から GPS 情報が否定される、または情報源が使用を否定した編集ツールが使われている状態です。矛盾はそれ自体が重要な発見であり、多くの場合、元のタグよりも価値があります。
実例
保険請求に添付された「現場調査報告書」とされる PDF を検証します。記載された日に現地で作成されたとされています。
exiftool -G1 -a -u -g1 report.pdf:Producer はスキャナードライバーではなく、ワープロからのエクスポートを示しています。CreationDate と ModDate は11分離れており、どちらも現場のタイムゾーンより3時間ずれたオフセットが設定されています。Author はイニシャルと姓です。
pdfimages -list には埋め込まれた写真が4枚表示されます。抽出して exiftool を実行しても、何も出てきません。挿入時に再エンコードされています。手詰まりです。これはよくあるケースです。
請求メールには DOCX も添付されていました。解凍すると、docProps/app.xml の TotalEditTime は4分未満で、Template の UNC パスのホスト名は、被保険者ではなく第三者企業のものです。word/document.xml には、別の作成者による変更履歴の挿入箇所があります。word/media/image2.jpeg の EXIF はそのまま残っており、DateTimeOriginal は申告された調査日の2か月前、GPS 情報あり、Model は携帯電話、GPSHPositioningError は9メートルです。
作成者名は可能性が高いものの、x-ray-a-company を使って企業に照合する必要があります。写真の撮影日は、報告書の申告日と矛盾しています。写真の撮影場所は未確認です。記載された誤差半径9メートルを添えて geolocate-from-pixels に渡しました。
次の調査先
| 判明した情報 | 送る先 |
|---|---|
| GPS 座標、カメラの方位 | where-was-this-taken、geolocate-from-pixels |
| 作成者、所有者、撮影者、コメントの作成者 | find-anyone |
| 企業、テンプレートの UNC パス、内部共有名 | x-ray-a-company、recon-a-domain-passively |
| 複数のファイルを結び付けるカメラまたはレンズのシリアル番号 | graph-the-network |
| 改ざんを示唆するソフトウェアの使用履歴 | is-this-photo-real |
| ハンドル名に似た編集時のユーザー名 | hunt-a-handle |
| タグが削除されていないオリジナルが必要な場合 | find-the-original-image、read-deleted-pages |
法的留意事項
合法的に保有するファイルのメタデータを読むことは問題ありません。ただし、2つの制約があります。メタデータに含まれる氏名、正確な位置情報、デバイス識別子は、どのファイルに含まれているかにかかわらず、GDPR や同等の制度における個人データです。そのため、最小限の収集、保存期間、目的の制限が適用されます。目的に必要なタグだけを収集し、対象者の写真ライブラリを丸ごとダンプできるからといって、保存しないでください。また、特定可能な人物の過去の正確な位置情報は、このスキルで扱う情報の中でも特に機微なものです。デューデリジェンス、不正調査、許可を受けた調査では正当な用途がありますが、ストーキングに悪用される情報でもあります。GPS タグを抽出した結果、個人の自宅の場所が分かるだけなら、そこで中止してください。../../ETHICS.md を参照してください。