TDCTF Academy Logo TDCTF ACADEMY

Lab 6: Browser Forensics - Merekonstruksi Aktivitas Browsing dari Browser Artifacts

Target Skill: Mahasiswa mampu mengekstrak history browsing, cookie, dan cache dari browser untuk merekonstruksi aktivitas user
Tools: sqlite3, cp, grep, find, file
Durasi: 30 menit
Level: Beginner


Mengapa Browser Forensics Penting?

Browser adalah aplikasi paling sering digunakan - di situlah hampir semua aktivitas online tercatat:

  • History - situs apa yang dikunjungi, kapan, berapa lama
  • Cookies - session token, login state, tracking data
  • Cache - file yang didownload, gambar, script
  • Bookmarks - situs favorit / yang dianggap penting
  • Downloads - file yang pernah diunduh

Bagi investigator, browser artifacts bisa mengungkap niat, kebiasaan, dan jejak digital seseorang.


Learning Objectives

  1. Memahami struktur database SQLite browser (Chrome/Firefox)
  2. Mengekstrak history browsing dari file SQLite
  3. Membaca cookie dan session data
  4. Merekonstruksi timeline aktivitas user dari browser artifacts

️ Tools & Setup

# SQLite3 sudah bawaan Ubuntu
which sqlite3 || sudo apt install -y sqlite3

Langkah Praktikum

Step 1: Simulasi - Buat Database Browser Palsu

Kita buat database SQLite yang mensimulasikan Chrome History:

cd ~ && mkdir forensics-lab6 && cd forensics-lab6

python3 << 'PYEOF'
import sqlite3, time, os

# Buat database simulasi Chrome History
db_path = 'simulasi_history.db'

# Hapus kalau sudah ada
if os.path.exists(db_path):
os.remove(db_path)

conn = sqlite3.connect(db_path)
cur = conn.cursor()

# Buat tabel seperti Chrome nyata
cur.execute('''
CREATE TABLE urls (
id INTEGER PRIMARY KEY,
url TEXT NOT NULL,
title TEXT,
visit_count INTEGER DEFAULT 0,
last_visit_time INTEGER
)''')

cur.execute('''
CREATE TABLE visits (
id INTEGER PRIMARY KEY,
url INTEGER NOT NULL,
visit_time INTEGER,
from_visit INTEGER,
transition INTEGER
)''')

cur.execute('''
CREATE TABLE downloads (
id INTEGER PRIMARY KEY,
current_path TEXT,
target_path TEXT,
start_time INTEGER,
received_bytes INTEGER,
total_bytes INTEGER,
state INTEGER,
url TEXT
)''')

cur.execute('''
CREATE TABLE cookies (
id INTEGER PRIMARY KEY,
host_key TEXT,
name TEXT,
value TEXT,
creation_utc INTEGER,
expires_utc INTEGER,
last_access_utc INTEGER
)''')

# Chrome timestamp: microseconds since 1601-01-01
def chrome_time(year, month, day, hour=0, min=0, sec=0):
"""Convert to Chrome timestamp format"""
import datetime
CHROME_EPOCH = datetime.datetime(1601, 1, 1)
dt = datetime.datetime(year, month, day, hour, min, sec)
delta = dt - CHROME_EPOCH
return int(delta.total_seconds() * 1000000)

# Insert data - simulasi aktivitas browsing
now = time.time()

# Situs normal
sites_normal = [
('https://www.google.com', 'Google'),
('https://mail.google.com', 'Gmail'),
('https://www.youtube.com/watch?v=dQw4w9WgXcQ', 'YouTube Video'),
('https://github.com/farishhz', 'Alfarisi Azmir - GitHub'),
('https://www.linkedin.com/in/farishhz', 'LinkedIn'),
('https://www.dicoding.com', 'Dicoding - Belajar Coding'),
('https://stackoverflow.com/questions/123', 'Stack Overflow Question'),
]

# Situs mencurigakan
sites_suspicious = [
('https://malware-download-site.com/setup.exe', 'Free Software Download'),
('https://darknet-blog.com/hacked-databases', 'Darknet Database Dump'),
('https://pastebin.com/raw/abc123def', 'Pastebin - Kredensial Bocor'),
('https://phishing-bank-login.com/login.php', 'Bank XYZ - Login'),
('https://c2-server.com/command', 'C2 Panel'),
]

all_sites = sites_normal + sites_suspicious

for i, (url, title) in enumerate(all_sites):
# Spread visits over last 7 days
day_offset = i % 7
hour_offset = 9 + (i * 2) % 12
visit_time = chrome_time(2026, 6, 11 + day_offset, hour_offset, 30 * (i % 4))

cur.execute(
'INSERT INTO urls (url, title, visit_count, last_visit_time) VALUES (?, ?, ?, ?)',
(url, title, (i % 3) + 1, visit_time)
)
url_id = cur.lastrowid

# Insert corresponding visit
cur.execute(
'INSERT INTO visits (url, visit_time, from_visit, transition) VALUES (?, ?, ?, ?)',
(url_id, visit_time, url_id - 1 if url_id > 1 else 0, 0)
)

# Downloads - satu file mencurigakan
cur.execute(
'INSERT INTO downloads (current_path, target_path, start_time, received_bytes, total_bytes, state, url) VALUES (?, ?, ?, ?, ?, ?, ?)',
('/home/user/Downloads/setup.exe', '/home/user/Downloads/setup.exe',
chrome_time(2026, 6, 16, 14, 30), 2048576, 2048576, 1,
'https://malware-download-site.com/setup.exe')
)

# Cookies
cookies_data = [
('mail.google.com', 'session_id', 'abc123def456'),
('github.com', 'user_token', 'ghp_xxxxxxxxxxxx'),
('phishing-bank-login.com', 'bank_session', 'invalid_session_attemp'),
('c2-server.com', 'agent_id', 'bot_1337'),
]

for host, name, value in cookies_data:
cur.execute(
'INSERT INTO cookies (host_key, name, value, creation_utc, expires_utc, last_access_utc) VALUES (?, ?, ?, ?, ?, ?)',
(host, name, value, chrome_time(2026, 6, 11), chrome_time(2026, 7, 11), chrome_time(2026, 6, 16))
)

conn.commit()
conn.close()

print(f"✅ Database simulasi dibuat: {db_path}")
print(f" - {len(all_sites)} URL entries")
print(f" - {len(all_sites)} visit records")
print(f" - 1 download record")
print(f" - {len(cookies_data)} cookie records")
PYEOF

Step 2: Eksplorasi Database SQLite

# 1. Lihat struktur tabel
echo "=== Struktur Database ==="
sqlite3 simulasi_history.db ".tables"
echo ""
sqlite3 simulasi_history.db ".schema urls"
echo ""
sqlite3 simulasi_history.db ".schema visits"
echo ""
sqlite3 simulasi_history.db ".schema downloads"
echo ""
sqlite3 simulasi_history.db ".schema cookies"

Step 3: Ekstrak History Browsing

# 2. Semua URL yang dikunjungi
echo "=== Semua History URL ==="
sqlite3 -header -column simulasi_history.db \
"SELECT id, url, visit_count, last_visit_time FROM urls ORDER BY id;"

# 3. Filter situs mencurigakan
echo ""
echo "=== ⚠️ Situs Mencurigakan ==="
sqlite3 -header -column simulasi_history.db \
"SELECT url, visit_count FROM urls WHERE url LIKE '%malware%' OR url LIKE '%darknet%' OR url LIKE '%phishing%' OR url LIKE '%c2-%' OR url LIKE '%pastebin%';"

Step 4: Analisis Download

# 4. File yang didownload
echo "=== Download History ==="
sqlite3 -header -column simulasi_history.db \
"SELECT target_path, total_bytes, url FROM downloads;"

echo ""
echo "⚠️ File setup.exe dari malware-download-site.com - Potensi malware!"

Step 5: Analisis Cookies

# 5. Cookies - cari session token
echo "=== Cookies ==="
sqlite3 -header -column simulasi_history.db \
"SELECT host_key, name, value FROM cookies;"

echo ""
echo "⚠️ Cookie 'bank_session' dari phishing-bank-login.com - percobaan phising!"
echo "⚠️ Cookie 'agent_id' dari c2-server.com - komunikasi bot!"

Step 6: Timeline Aktivitas

# 6. Buat timeline kronologis
echo "=== Timeline Aktivitas Browsing ==="
sqlite3 -header -column simulasi_history.db \
"SELECT urls.url, urls.title, visits.visit_time
FROM visits
JOIN urls ON visits.url = urls.id
ORDER BY visits.visit_time;"

# 7. Cari situs yang paling sering dikunjungi
echo ""
echo "=== Top 5 Situs Paling Sering ==="
sqlite3 -header -column simulasi_history.db \
"SELECT url, visit_count FROM urls ORDER BY visit_count DESC LIMIT 5;"

️ Analisis & Pertanyaan

1. Browser Artifacts - Sumber Bukti

Artifact File Location (Real) Isi Data
History ~/.config/google-chrome/Default/History URL, title, timestamp
Cookies ~/.config/google-chrome/Default/Cookies Session tokens, preferences
Downloads ~/.config/google-chrome/Default/History (table downloads) File path, URL sumber
Cache ~/.cache/google-chrome/ File-file hasil download otomatis
Bookmarks ~/.config/google-chrome/Default/Bookmarks Situs yang disimpan
Login Data ~/.config/google-chrome/Default/Login Data Password tersimpan

2. Temuan dari Simulasi

Aktivitas Normal? Indikasi
Google, Gmail, YouTube ✅ Normal Aktivitas sehari-hari
GitHub, LinkedIn, Dicoding ✅ Normal Aktivitas kerja/belajar
malware-download-site.com Download setup.exe mencurigakan
darknet-blog.com Akses forum darknet
phishing-bank-login.com Target phishing
pastebin.com raw Cek kredensial bocor
c2-server.com Komunikasi C2

Laporan Temuan

Finding 1: Malware Download (High)

Parameter Value
File setup.exe (2 MB)
Sumber malware-download-site.com
Waktu 2026-06-16 14:30
Status Complete (terdownload penuh)

Dampak: Eksekusi file dapat menginfeksi sistem

Finding 2: Phishing Activity (Critical)

Parameter Value
Target Bank XYZ - Login Page
Domain phishing-bank-login.com
Cookie bank_session (invalid) - percobaan login
Motif Pencurian kredensial perbankan

Dampak: User mungkin telah memasukkan credentials ke halaman palsu

Finding 3: C2 Communication (Critical)

Parameter Value
Domain c2-server.com
Cookie agent_id = bot_1337
Indikasi Mesin terinfeksi bot, komunikasi dengan C2

Dampak: Sistem terkompromi dan dikendalikan dari jarak jauh


Korelasi OWASP / CWE / CAPEC

Kerangka ID Deskripsi
CWE CWE-200 Exposure of Sensitive Information (cookie session)
CWE CWE-522 Insufficiently Protected Credentials
CWE CWE-506 Embedded Malicious Code
CAPEC CAPEC-163 Browser History Analysis
CAPEC CAPEC-462 Cross-Domain Search Timing
CAPEC CAPEC-645 Web Session Credential Theft

️ Remediasi

Ancaman Deteksi Pencegahan
Malware download Monitor download mencurigakan Blocklist domain, antivirus
Phishing Analisis URL sebelum klik Browser security extension
C2 communication Network monitoring Firewall egress, DNS filtering
Cookie theft HttpOnly + Secure flags Jangan simpan session di cookie saja
# Hapus history browser dari CLI (real)
rm ~/.config/google-chrome/Default/History
rm ~/.config/google-chrome/Default/Cookies

# Atau gunakan mode incognito/private
google-chrome --incognito

Kesimpulan & Refleksi

Apa yang dipelajari:

  • Browser menyimpan semua aktivitas dalam database SQLite
  • Satu query SQL bisa mengungkap pola browsing, termasuk aktivitas ilegal
  • Cookies bisa mengungkap session token dan komunikasi dengan C2
  • Download history menunjukkan file apa yang mungkin terinfeksi

Refleksi untuk mahasiswa:

"Browser tahu segalanya tentangmu - situs apa yang kamu kunjungi, jam berapa, berapa lama, bahkan apa yang kamu ketik. Di tangan investigator, history browser adalah rekaman digital yang bisa membuktikan niat. Di tangan attacker, itu adalah target pencurian data."


Referensi


🔬 Lab 6 Selesai! Lanjut ke Lab 7: Log Forensics


Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy

PADA HALAMAN INI