extracting-browser-history-artifacts について
デジタルフォレンジック担当者向けに、Chrome、Firefox、Edge などのブラウザ履歴を抽出するスキルです。SQLite クエリやフォレンジックツールを使い、利用状況の再構成、タイムラインの照合、調査結果の整理を支援します。
主な機能
- 01ブラウザ痕跡ファイルの特定
- 02履歴とダウンロードの照会
- 03Cookie と認証情報の抽出
- 04Hindsight による Chrome 分析
- 05ブラウザ活動のタイムライン照合
活用シーン
- 01フィッシングリンクの訪問調査
- 02クラウド経由のデータ流出追跡
- 03規定違反の閲覧活動の確認
- 04マルウェアのダウンロード経路分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill extracting-browser-history-artifactsインストール後、Claude Code で/extracting-browser-history-artifactsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
ブラウザー履歴の痕跡を抽出する
使用する場面
- フォレンジック調査の一環として、ユーザーのウェブアクティビティを調査する場合
- インサイダー脅威の調査で、データ持ち出しのパターンを特定する場合
- ユーザーが悪意のあるウェブサイトやポリシー違反のウェブサイトにアクセスした経緯を追跡する場合
- ブラウザーのアクティビティを他のフォレンジック上の痕跡やタイムラインと関連付ける場合
- フィッシング攻撃の調査で、クリックされたリンクを特定する場合
前提条件
- フォレンジックイメージ、またはユーザープロファイルディレクトリへのアクセス
- ブラウザーデータベースをクエリするためのSQLite3
- Hindsight、BrowsingHistoryView、またはDB Browser for SQLite
- OS ごとのブラウザー痕跡ファイルの保存場所に関する知識
- 自動抽出用のsqlite3モジュールを備えたPython 3
- Chrome、Firefox、Edgeのストレージ形式に関する理解
ワークフロー
ステップ1:ブラウザー痕跡ファイルを特定する
# Mount forensic image
mount -o ro,loop,offset=$((2048*512)) /cases/case-2024-001/images/evidence.dd /mnt/evidence
# Chrome artifact locations (Windows)
CHROME_WIN="/mnt/evidence/Users/suspect/AppData/Local/Google/Chrome/User Data/Default"
# Key files: History, Cookies, Login Data, Web Data, Bookmarks, Preferences,
# Cache/, GPUCache/, Local Storage/, Session Storage/, IndexedDB/
# Firefox artifact locations (Windows)
FIREFOX_WIN="/mnt/evidence/Users/suspect/AppData/Roaming/Mozilla/Firefox/Profiles/*.default-release"
# Key files: places.sqlite, cookies.sqlite, formhistory.sqlite, logins.json,
# key4.db, sessionstore.jsonlz4, webappsstore.sqlite
# Edge (Chromium) artifact locations (Windows)
EDGE_WIN="/mnt/evidence/Users/suspect/AppData/Local/Microsoft/Edge/User Data/Default"
# Copy artifacts to working directory
mkdir -p /cases/case-2024-001/browser/{chrome,firefox,edge}
cp -r "$CHROME_WIN"/{History,Cookies,Downloads,"Login Data","Web Data",Bookmarks} \
/cases/case-2024-001/browser/chrome/ 2>/dev/null
cp -r $FIREFOX_WIN/{places.sqlite,cookies.sqlite,formhistory.sqlite,logins.json} \
/cases/case-2024-001/browser/firefox/ 2>/dev/null
cp -r "$EDGE_WIN"/{History,Cookies,Downloads} \
/cases/case-2024-001/browser/edge/ 2>/dev/null
# Hash artifacts for integrity
find /cases/case-2024-001/browser/ -type f -exec sha256sum {} \; \
> /cases/case-2024-001/browser/artifact_hashes.txt
ステップ2:Chromeの閲覧履歴とダウンロードを抽出する
# Query Chrome History database
sqlite3 /cases/case-2024-001/browser/chrome/History << 'SQL'
.headers on
.mode csv
.output /cases/case-2024-001/analysis/chrome_history.csv
SELECT
urls.url,
urls.title,
datetime(urls.last_visit_time/1000000-11644473600, 'unixepoch') AS last_visit,
urls.visit_count,
urls.typed_count,
visits.transition & 0xFF AS transition_type
FROM urls
LEFT JOIN visits ON urls.id = visits.url
ORDER BY urls.last_visit_time DESC;
SQL
# Extract Chrome downloads
sqlite3 /cases/case-2024-001/browser/chrome/History << 'SQL'
.headers on
.mode csv
.output /cases/case-2024-001/analysis/chrome_downloads.csv
SELECT
current_path,
tab_url AS source_url,
total_bytes,
datetime(start_time/1000000-11644473600, 'unixepoch') AS start_time,
datetime(end_time/1000000-11644473600, 'unixepoch') AS end_time,
state,
danger_type,
mime_type
FROM downloads
ORDER BY start_time DESC;
SQL
# Extract Chrome search terms
sqlite3 /cases/case-2024-001/browser/chrome/History << 'SQL'
.headers on
.mode csv
.output /cases/case-2024-001/analysis/chrome_searches.csv
SELECT
term,
urls.url,
datetime(urls.last_visit_time/1000000-11644473600, 'unixepoch') AS search_time
FROM keyword_search_terms
JOIN urls ON keyword_search_terms.url_id = urls.id
ORDER BY urls.last_visit_time DESC;
SQL
ステップ3:Firefoxの閲覧履歴を抽出する
# Query Firefox places.sqlite for history
sqlite3 /cases/case-2024-001/browser/firefox/places.sqlite << 'SQL'
.headers on
.mode csv
.output /cases/case-2024-001/analysis/firefox_history.csv
SELECT
moz_places.url,
moz_places.title,
datetime(moz_historyvisits.visit_date/1000000, 'unixepoch') AS visit_date,
moz_places.visit_count,
moz_historyvisits.visit_type
FROM moz_places
JOIN moz_historyvisits ON moz_places.id = moz_historyvisits.place_id
ORDER BY moz_historyvisits.visit_date DESC;
SQL
# Extract Firefox bookmarks
sqlite3 /cases/case-2024-001/browser/firefox/places.sqlite << 'SQL'
.headers on
.mode csv
.output /cases/case-2024-001/analysis/firefox_bookmarks.csv
SELECT
moz_bookmarks.title,
moz_places.url,
datetime(moz_bookmarks.dateAdded/1000000, 'unixepoch') AS date_added,
datetime(moz_bookmarks.lastModified/1000000, 'unixepoch') AS last_modified
FROM moz_bookmarks
JOIN moz_places ON moz_bookmarks.fk = moz_places.id
WHERE moz_bookmarks.type = 1
ORDER BY moz_bookmarks.dateAdded DESC;
SQL
# Extract Firefox form history (search terms, form fills)
sqlite3 /cases/case-2024-001/browser/firefox/formhistory.sqlite << 'SQL'
.headers on
.mode csv
.output /cases/case-2024-001/analysis/firefox_forms.csv
SELECT
fieldname,
value,
timesUsed,
datetime(firstUsed/1000000, 'unixepoch') AS first_used,
datetime(lastUsed/1000000, 'unixepoch') AS last_used
FROM moz_formhistory
ORDER BY lastUsed DESC;
SQL
ステップ4:Cookieと保存済み認証情報を抽出する
# Extract Chrome cookies
sqlite3 /cases/case-2024-001/browser/chrome/Cookies << 'SQL'
.headers on
.mode csv
.output /cases/case-2024-001/analysis/chrome_cookies.csv
SELECT
host_key,
name,
path,
datetime(creation_utc/1000000-11644473600, 'unixepoch') AS created,
datetime(expires_utc/1000000-11644473600, 'unixepoch') AS expires,
datetime(last_access_utc/1000000-11644473600, 'unixepoch') AS last_access,
is_secure,
is_httponly,
is_persistent
FROM cookies
ORDER BY last_access_utc DESC;
SQL
# Extract Firefox cookies
sqlite3 /cases/case-2024-001/browser/firefox/cookies.sqlite << 'SQL'
.headers on
.mode csv
.output /cases/case-2024-001/analysis/firefox_cookies.csv
SELECT
host,
name,
path,
datetime(creationTime/1000000, 'unixepoch') AS created,
datetime(expiry, 'unixepoch') AS expires,
datetime(lastAccessed/1000000, 'unixepoch') AS last_access,
isSecure,
isHttpOnly
FROM moz_cookies
ORDER BY lastAccessed DESC;
SQL
# Note: Chrome Login Data is encrypted with DPAPI (Windows) or keychain (Mac)
# Extract stored login URLs (passwords are encrypted)
sqlite3 /cases/case-2024-001/browser/chrome/"Login Data" << 'SQL'
.headers on
.mode csv
.output /cases/case-2024-001/analysis/chrome_logins.csv
SELECT
origin_url,
action_url,
username_value,
datetime(date_created/1000000-11644473600, 'unixepoch') AS date_created,
datetime(date_last_used/1000000-11644473600, 'unixepoch') AS date_last_used,
times_used
FROM logins
ORDER BY date_last_used DESC;
SQL
ステップ5:Hindsightを使用してChromeを包括的に分析する
# Install Hindsight
pip install pyhindsight
# Run Hindsight against Chrome profile
hindsight -i "/cases/case-2024-001/browser/chrome/" \
-o /cases/case-2024-001/analysis/hindsight_report \
-f xlsx
# Hindsight automatically extracts:
# - Browsing history with timestamps
# - Downloads with source URLs
# - Cookies with decryption (where possible)
# - Cache records
# - Local Storage entries
# - Autofill data
# - Saved passwords (encrypted)
# - Preferences and extensions
# - Session/tab recovery data
# For JSONL output (easier to parse)
hindsight -i "/cases/case-2024-001/browser/chrome/" \
-o /cases/case-2024-001/analysis/hindsight_report \
-f jsonl
主な概念
| 概念 | 説明 |
|---|---|
| Chromeのタイムスタンプ | 1601年1月1日からのマイクロ秒数(WebKit/Chromeのエポック) |
| Firefoxのタイムスタンプ | 1970年1月1日からのマイクロ秒数(マイクロ秒単位のUnixエポック) |
| 遷移タイプ | URLへのアクセス方法:直接入力(1)、リンク(0)、ブックマーク(1)、リダイレクト(5/6) |
| DPAPI暗号化 | Windows Data Protection APIによって保存済みのパスワードとCookieを暗号化する仕組み |
| places.sqlite | Firefoxの履歴とブックマークを統合したデータベース |
| SQLite WAL | 最近削除されたブラウザーレコードが含まれている可能性のあるWrite-Ahead Log |
| セッション復元 | 再起動後も開いているタブを保持するブラウザーデータ |
| IndexedDB | ウェブアプリケーションのデータが含まれている可能性のあるブラウザーベースのデータベース |
ツールとシステム
| ツール | 目的 |
|---|---|
| Hindsight | Chrome/Chromiumの包括的なフォレンジック分析ツール |
| sqlite3 | コマンドラインのSQLiteデータベースクエリツール |
| DB Browser for SQLite | SQLiteデータベースを閲覧するGUIツール |
| BrowsingHistoryView | すべてのブラウザーの履歴を表示するNirSoftのツール |
| ChromeCacheView | Chromeのキャッシュ内容を調査するNirSoftのツール |
| MZCacheView | Firefoxのキャッシュを分析するNirSoftのツール |
| KAPE | ブラウザーデータを含む痕跡の自動収集ツール |
| Autopsy | ブラウザー痕跡の取り込みモジュールを備えた総合的なフォレンジックプラットフォーム |
一般的なシナリオ
シナリオ1:フィッシングの調査 報告されたフィッシングの発生時期前後のブラウザー履歴を抽出し、アクセスされたフィッシングURLを特定します。ダウンロードを確認して悪意のある添付ファイルを調べ、盗まれた可能性のあるセッショントークンがないかCookieを確認し、メールヘッダーの分析結果と関連付けます。
シナリオ2:クラウドサービス経由のデータ持ち出し 履歴からクラウドストレージのURL(Dropbox、Google Drive、OneDrive、Mega)を検索し、ダウンロードとアップロードを調べます。フォーム履歴から入力されたファイル名を確認し、調査期間中にクラウドサービスのセッションが有効だったかCookieを確認します。
シナリオ3:ポリシー違反の調査 調査期間中の閲覧履歴全体を抽出し、アクセスしたサイトを分類します。禁止コンテンツのカテゴリへのアクセスを特定し、タイムスタンプと閲覧時間を記録して、検証のためにネットワークプロキシのログと関連付けます。
シナリオ4:マルウェア配信経路の分析 ドライブバイダウンロードに至るリダイレクトの経路を追跡し、ダウンロードデータベースからマルウェアのペイロードを調べます。キャッシュを確認してエクスプロイトキットのランディングページを特定し、感染経路の起点となった最初のリファラーURLを特定します。
出力形式
Browser Forensics Summary:
User Profile: suspect (Windows 10)
Browsers Found: Chrome 120, Firefox 121, Edge 120
Chrome Analysis:
History Entries: 12,456
Downloads: 234
Saved Passwords: 67 sites (encrypted)
Cookies: 3,456
Bookmarks: 89
Firefox Analysis:
History Entries: 5,678
Form Entries: 234
Bookmarks: 45
Cookies: 1,234
Suspicious Findings:
- Visited known phishing URL at 2024-01-15 14:32 UTC
- Downloaded "invoice_update.exe" from suspicious domain
- Cloud storage (mega.nz) accessed 15 times in 2-hour window
- Search queries: "how to encrypt files", "secure file transfer"
Reports:
Chrome History: /analysis/chrome_history.csv
Firefox History: /analysis/firefox_history.csv
Full Report: /analysis/hindsight_report.xlsx