mcpField
E
extracting-browser-history-artifacts

extracting-browser-history-artifacts

github.com/mukul975セキュリティ35.2k97 回インストール8 週間前に更新
リポジトリ

extracting-browser-history-artifacts について

デジタルフォレンジック担当者向けに、Chrome、Firefox、Edge などのブラウザ履歴を抽出するスキルです。SQLite クエリやフォレンジックツールを使い、利用状況の再構成、タイムラインの照合、調査結果の整理を支援します。

主な機能

  1. 01ブラウザ痕跡ファイルの特定
  2. 02履歴とダウンロードの照会
  3. 03Cookie と認証情報の抽出
  4. 04Hindsight による Chrome 分析
  5. 05ブラウザ活動のタイムライン照合

活用シーン

  1. 01フィッシングリンクの訪問調査
  2. 02クラウド経由のデータ流出追跡
  3. 03規定違反の閲覧活動の確認
  4. 04マルウェアのダウンロード経路分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill extracting-browser-history-artifacts

インストール後、Claude Code で/extracting-browser-history-artifactsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
scripts/
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.sqliteFirefoxの履歴とブックマークを統合したデータベース
SQLite WAL最近削除されたブラウザーレコードが含まれている可能性のあるWrite-Ahead Log
セッション復元再起動後も開いているタブを保持するブラウザーデータ
IndexedDBウェブアプリケーションのデータが含まれている可能性のあるブラウザーベースのデータベース

ツールとシステム

ツール目的
HindsightChrome/Chromiumの包括的なフォレンジック分析ツール
sqlite3コマンドラインのSQLiteデータベースクエリツール
DB Browser for SQLiteSQLiteデータベースを閲覧するGUIツール
BrowsingHistoryViewすべてのブラウザーの履歴を表示するNirSoftのツール
ChromeCacheViewChromeのキャッシュ内容を調査するNirSoftのツール
MZCacheViewFirefoxのキャッシュを分析する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

コメント