Web ブラウザ¶
ブラウザのデータベースとは¶
ブラウザは、閲覧履歴、ダウンロード、Cookie、フォーム入力を、各ユーザーのプロファイル内にある SQLite データベースに保存します。Chromium 系ブラウザ (Chrome、Edge、Brave、Opera、Vivaldi) と Firefox 系ブラウザはそれぞれ独自のファイルとテーブルを使用しますが、記録するアクティビティの種類は同じです。
- 閲覧履歴: 閲覧したページ。各閲覧の時刻、ブラウザがそのページに至った経緯 (入力、リンク、リダイレクト、ブックマーク)、および Chromium ではページが前面に表示されていた時間。
- ダウンロード: ファイルの取得元 URL (および途中のリダイレクト)、保存先、サイズ、ダウンロードの開始と終了の時刻、完了したかどうか。
- Cookie: Cookie を設定したサイトと、設定、最終送信、有効期限の各時刻。
- フォーム入力履歴: Web フォームや検索ボックスに入力された値と、その入力回数、最初と最後の入力時刻。
ブラウザのアクティビティは、ユーザーが何をしたかを最も直接的に示す記録であることが少なくありません。たどったフィッシング ページ、ダウンロードしたツール、使用した Web メール、入力した検索語などです。
この証拠から判断できること: ブラウザのプロファイルが、記録された時刻にその URL への閲覧を記録した、または記録されたパスにダウンロードを保存しました。誰がキーボードの前にいたかは、データベースからはわかりません。
保存場所と収集¶
%LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\History
%LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\Network\Cookies
%LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\Web Data
%LOCALAPPDATA%\Microsoft\Edge\User Data\<Profile>\...
%LOCALAPPDATA%\BraveSoftware\Brave-Browser\User Data\<Profile>\...
%APPDATA%\Opera Software\Opera Stable\...
%APPDATA%\Mozilla\Firefox\Profiles\<profile>\places.sqlite
%APPDATA%\Mozilla\Firefox\Profiles\<profile>\cookies.sqlite
%APPDATA%\Mozilla\Firefox\Profiles\<profile>\formhistory.sqlite
<Profile> は Default、Profile 1、Profile 2 などです。Chromium はバージョン 96 で Cookies を Network に移動しました。それより前のバージョンでは History と同じフォルダーにあります。Firefox はバージョン 25 まではダウンロードを downloads.sqlite に保存していましたが、それ以降のバージョンでは places.sqlite に保存します。
プロファイルのファイルはすべて収集してください。また、各データベースは、隣にある同じ名前のファイル (places.sqlite-wal、cookies.sqlite-wal、formhistory.sqlite-wal、History-journal) と一緒に収集してください。
ライトアヘッドログ
Firefox はデータベースをライトアヘッドログ モードで使用します。最新の変更は、ブラウザがそれをデータベースに書き込む (チェックポイント) までは -wal ファイルにしか存在しません。Juntei は、ブラウザと同じように、各データベースをその -wal ファイルとともに読み取ります。このファイルがないと、最近の閲覧、Cookie、フォーム入力が欠落し、ログ内で削除されたエントリが削除されていないものとして読み取られます。
削除されたエントリ¶
ブラウザが履歴を削除すると、行はテーブルから消えますが、そのレコードはデータベースの空き領域、フリーリスト、またはデータベースのページの古いバージョンに残ることがあります。古いバージョンのページは、-wal ファイルの中、または -wal 内のページに置き換えられたデータベース ファイルの中にあります。Juntei は、これらから削除された閲覧、ページ、ダウンロード、フォーム入力を、Status が Deleted の行として復元します。
Confidenceは、レコードとテーブルの対応付けの確かさを示します。すべての値がその列の型に合う完全なレコードはHigh、損傷したレコードや複数のテーブルに当てはまるレコードはMediumまたはLowです。RecoveredFromは、レコードがあった場所を示します。ページ内の領域 (セル、フリーブロック、未割り当て領域、空きページ)、どのページのどのバージョンか、およびページ内でのレコードのオフセットです。WAL フレームは 0 から数えます。LostColumnsは、損傷したレコードに残っていない列を列挙します。それらのフィールドは空になります。
ブラウザは SQLite の secure_delete を使用して削除するため、データベース内で解放された領域はゼロで埋められます。そのため、復元できるデータの大半は古いバージョンのページにあります。すなわち、-wal ファイルにまだ残っているページと、-wal によって置き換えられたページについてデータベース ファイル自体が保持しているコピーで、いずれも次のチェックポイントまでしか残りません。-wal ファイルはデータベースと一緒に、ブラウザが再び実行される前にコピーしてください。
分析時の注意点¶
- 時刻は UTC です。Chromium と Firefox はマイクロ秒単位で記録しますが、Chromium のフォーム入力履歴は秒単位です。
- 閲覧の記録があっても、ユーザーが入力またはクリックしたとは限りません。リダイレクト、フレーム、他のプログラムが開いたページも閲覧として記録されます。
Transition、Typed、Hiddenを確認してください。 - Chromium は Cookie の値を暗号化するため、それらの
Valueは空です。Juntei は復号しません。 Removedのフォーム入力履歴の行は、Firefox のmoz_deleted_formhistoryに由来します。このテーブルには Android 版 Firefox が Sync のために書き込みます。デスクトップ版 Firefox では通常は空です。- 信頼度が
Lowの削除済みエントリは、別のレコードの断片である可能性があります。現存する行や他の証拠と照合してください。 - 削除済みの行がないことは、何も削除されなかったことを意味しません。ゼロで埋められた領域やチェックポイントの後には、復元できるものは残りません。削除された Cookie は、現時点では復元されません。
- データベースの内容からブラウザの系統を判定します。対応するプロファイルのパスがあれば
Browserを Chrome や Firefox などに絞り込みますが、内容と矛盾するパスでは系統を変更しません。それ以外はChromium-based、Firefox-based、Safari(判定不能ならUnknown)です。UserとProfileはパスから取得するため、コピーすると情報が失われる場合があります。 - ロールバック ジャーナル (
-journal) は読み取りません。Internet Explorer と従来の Edge のWebCacheV01.datはparse-ese webcacheで読み取ります。Internet Explorer と従来の Edgeを参照してください。
Juntei で解析する¶
Usage: juntei parse-sqlite browser <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find History, Cookies, Web Data, places.sqlite, ...
-f, --file <FILE> Parse one browser database (and its -wal file)
Output:
-o, --output <PATH> Directory of CSV tables, or JSON/JSONL file
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-sqlite browser -d Users -o browser-csv
juntei parse-sqlite browser -d Users -t jsonl \
| jq 'select(.Table == "Downloads") | {StartTime, URL, TargetPath, Browser, User}'
-d はファイルを名前で検索し、それぞれをテーブルによって判別します。他のプログラムの History ファイルはスキップされます。-f は名前に関係なくデータベースを読み取ります。
出力テーブル¶
CSV では 4 つのファイルが作成されます。行がない場合は、ヘッダーだけのファイルになります。JSON と JSONL の各行には、SourceFile の後に Table (History、Downloads、Cookies、または FormHistory) が含まれます。
| CSV ファイル | 内容 |
|---|---|
Browser-History.csv |
閲覧 (現存および削除済み)。URL が現存するどのページにもない、削除されたページ。 |
Browser-Downloads.csv |
ダウンロード (現存および削除済み)。 |
Browser-Cookies.csv |
Cookie。 |
Browser-FormHistory.csv |
フォーム入力 (現存および削除済み)。Firefox の削除記録。 |
フィールド¶
すべてのテーブルは、次のフィールドで始まります。
| フィールド | 解釈 |
|---|---|
SourceFile |
行の読み取り元のデータベース。 |
User |
パス上でプロファイルが属する Windows ユーザー (Users の次のフォルダー)。 |
Browser |
内容から判定したブラウザの系統。対応するプロファイルのパスがあれば製品名に絞り込みます。 |
Profile |
ブラウザのプロファイル。データベースのあるフォルダーです。 |
Status |
Live、Deleted (復元されたもの)、または Removed (Firefox の削除記録)。 |
閲覧履歴¶
| フィールド | 解釈 |
|---|---|
RecordType |
Visit。閲覧の記録も失われている可能性がある削除されたページは Page。 |
VisitTime |
閲覧が始まった時刻 (UTC)。 |
URL, Title |
ページとそのタイトル (最後に確認されたもの)。 |
Transition |
ブラウザがページに至った経緯。Chromium: コア タイプとそれに続く修飾子 (LINK、TYPED、AUTO_BOOKMARK、FORM_SUBMIT、RELOAD … に CHAIN_START、SERVER_REDIRECT、FROM_ADDRESS_BAR … が続く)。Firefox: LINK、TYPED、BOOKMARK、EMBED、REDIRECT_PERMANENT、REDIRECT_TEMPORARY、DOWNLOAD、FRAMED_LINK、RELOAD。 |
VisitDuration |
ページが前面に表示されていた秒数 (Chromium。計測されなかった場合は 0)。 |
VisitCount |
そのページへの閲覧の総数。 |
Typed, TypedCount |
URL が入力されたことがあるかどうかと、その回数 (Chromium)。 |
Hidden |
履歴の一覧に表示されないもの: サブフレーム、リダイレクト元、エラー。 |
Frecency |
アドレス バーの候補表示のための、Firefox によるページのランク付け。 |
VisitID, FromVisitID |
閲覧の行 ID と、遷移元の閲覧の行 ID (参照元のページ、リダイレクト元)。復元したレコードで失われた場合、閲覧の行 ID は空です。 |
LastVisitTime |
削除されたページの最後の閲覧 (UTC)。 |
PageSource |
削除された閲覧の URL とタイトルの取得元: Live (現存するページ)、Recovered (削除されたページ)、または NotFound。 |
Confidence, RecoveredFrom, LostColumns |
削除済みエントリがどのように復元されたか。削除されたエントリを参照してください。 |
ダウンロード¶
| フィールド | 解釈 |
|---|---|
StartTime, EndTime |
ダウンロードの開始時刻と終了時刻 (UTC)。 |
URL, RedirectChain |
ファイルの取得元と、途中のすべての URL (Chromium。CSV では URL の間に -> が入ります)。 |
TargetPath, CurrentPath |
ファイルの保存先 (Firefox では file:// URI) と、ダウンロード中に書き込まれていた場所。 |
ReceivedBytes, TotalBytes |
受信したバイト数と、ファイルのサイズ。 |
State |
Complete、InProgress、Cancelled、Interrupted、Paused、Blocked、または Dirty (マルウェアとしてブロック)。 |
DangerType |
Chromium によるファイルの判定: 0 危険なし、1 危険なファイルの種類、2 危険な URL、3 危険なコンテンツ、4 危険の可能性あり、5 一般的でないファイル、6 ユーザーが保持、7 危険なホスト、8 望ましくない可能性あり、… |
InterruptReason |
中断されたダウンロードが停止した理由 (Chromium。理由がない場合は 0)。 |
Referrer, TabURL |
参照元のページと、ダウンロードを開始したタブに表示されていたページ。 |
MimeType, Opened |
配信時のファイルの種類と、ブラウザから開かれたかどうか (Chromium)。 |
FileDeletedByUser |
ユーザーがブラウザのダウンロード一覧から、ダウンロードしたファイルをディスク上で削除したかどうか (Firefox)。 |
DownloadID |
ダウンロードの行 ID。復元したレコードで失われた場合は空です。 |
Cookie¶
| フィールド | 解釈 |
|---|---|
Created, LastAccessed, Expires |
Cookie が設定された時刻、最後に送信された時刻、有効期限 (UTC。セッション Cookie では Expires は空)。 |
Host, Name, Path |
Cookie の対象サイト、Cookie の名前とパス。 |
Value |
保存されている値。Chromium が暗号化した場合は空です。 |
Secure, HttpOnly, Persistent |
HTTPS でのみ送信、スクリプトから隠蔽、セッションをまたいで保持 (Chromium)。 |
GoogleAnalytics |
Google Analytics の Cookie (__utma、__utmb、__utmt、__utmz) をデコードしたフィールド: 訪問時刻、セッション、キャンペーンのソースと検索語。 |
RowID |
Cookie の行 ID。 |
フォーム入力履歴¶
| フィールド | 解釈 |
|---|---|
FirstUsed, LastUsed |
値が最初と最後に入力された時刻 (UTC)。 |
RemovedTime |
Firefox の削除記録が示す、エントリが削除された時刻 (UTC)。 |
FieldName, Value |
フォームのフィールド (email、q、Firefox の検索バーは searchbar-history) と、入力された内容。 |
Count |
値が入力された回数。 |
GUID |
Firefox におけるエントリの識別子。削除記録はこの識別子でエントリを示します。 |
Sources |
Firefox がエントリをどこから保存したか (これを保持するバージョンのみ。CSV では縦棒で区切られます)。 |
RowID |
エントリの行 ID。復元時に失われた場合は空欄/null。実際に記録されたゼロは 0 のままです。 |
自動解析¶
auto-parse は、テーブルを BrowserActivity に Browser-History.csv、Browser-Downloads.csv、Browser-Cookies.csv、Browser-FormHistory.csv として書き出し (-t json または -t jsonl の場合は 1 つの Browser.json または Browser.jsonl ファイル)、あわせて BrowserActivity/Browser-logs.txt を作成します。結合された -j タイムラインにはすべての行が含まれ、Comp と Artifact 識別子 browser が付きます。-Z は VisitTime、LastVisitTime、StartTime、EndTime、Created、LastAccessed、Expires、FirstUsed、LastUsed、RemovedTime を変換します。