Веб-браузери¶
Що таке бази даних браузерів¶
Браузери зберігають історію, завантаження, файли cookie та записи форм у базах даних SQLite у профілі кожного користувача. Браузери на основі Chromium (Chrome, Edge, Brave, Opera, Vivaldi) і браузери на основі Firefox використовують кожен свої файли й таблиці, але фіксують однакові види активності:
- Історія: відвідані сторінки; кожне відвідування — з часом, зі способом, у який браузер потрапив на сторінку (введення адреси, посилання, переспрямування, закладка), а в Chromium — і з тим, як довго сторінка була на передньому плані.
- Завантаження: URL, з якого надійшов файл (і переспрямування на шляху), куди його збережено, його розмір, коли завантаження почалося й закінчилося і чи було його завершено.
- Файли cookie: сайти, що їх установили, коли їх установлено, востаннє надіслано і коли спливає їхній термін дії.
- Історія форм: значення, введені у вебформи та поля пошуку, скільки разів, уперше й востаннє.
Активність у браузері часто є найпрямішим записом того, що робив користувач: фішингова сторінка, за якою він перейшов, інструмент, який він завантажив, вебпошта, якою він користувався, пошукові запити, які він вводив.
Найобґрунтованіший висновок: профіль браузера зафіксував відвідування 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 і так далі. У версії 96 Chromium переніс Cookies
до Network; старіші версії тримають цей файл поруч з History. Firefox до версії 25 зберігав
завантаження в downloads.sqlite; пізніші версії зберігають їх у places.sqlite.
Збирайте всі файли профілю, а кожну базу даних — разом із файлами поруч, що мають ту саму назву:
places.sqlite-wal, cookies.sqlite-wal, formhistory.sqlite-wal, History-journal.
Журнали випереджального запису
Firefox тримає свої бази даних у режимі журналу випереджального запису (write-ahead log): найновіші
зміни є лише у файлі -wal, доки браузер не перенесе їх до бази даних (контрольна точка, checkpoint).
Juntei читає кожну базу даних разом з її файлом -wal, як це зробив би браузер. Без нього бракує
недавніх відвідувань, файлів cookie та записів форм, а записи, видалені в журналі, і далі читаються
як наявні.
Видалені записи¶
Коли браузер видаляє історію, рядки зникають із таблиць, але їхні записи можуть залишатися у вільному
просторі бази даних, у її списку вільних сторінок (freelist) або в старіших версіях сторінок бази даних:
у файлі -wal або в самому файлі бази даних, якщо новіші версії цих сторінок містить -wal. Juntei
відновлює з них видалені відвідування, сторінки, завантаження та записи форм як рядки, у яких Status
має значення Deleted:
Confidenceпоказує, наскільки впевнено запис зіставлено з його таблицею:Highдля цілого запису, кожне значення якого має тип свого стовпця,MediumабоLowдля пошкоджених записів чи записів, що підходять до кількох таблиць.RecoveredFromпоказує, де був запис: область сторінки (комірка, вільний блок (freeblock), нерозподілений простір, вільна сторінка), яка сторінка і яка її версія, а також зміщення запису на сторінці. Кадри WAL нумеруються від 0.LostColumnsперелічує стовпці, яких пошкоджений запис уже не містить: їхні поля порожні.
Браузери видаляють дані з параметром SQLite secure_delete: звільнений простір у базі даних
заповнюється нулями. Тому те, що можна відновити, здебільшого міститься в старіших версіях сторінок: у
тих, які ще зберігає файл -wal, і у власних копіях файлу бази даних для сторінок, замінених через
-wal, — до наступної контрольної точки. Копіюйте файл -wal разом із його базою даних і робіть це до
наступного запуску браузера.
Застереження для аналітика¶
- Час подано в UTC. Chromium і Firefox записують його з точністю до мікросекунди; історію форм Chromium — з точністю до секунди.
- Відвідування не означає, що користувач щось увів або клацнув: переспрямування, фрейми та сторінки,
відкриті іншими програмами, — це теж відвідування. Перевіряйте
Transition,TypedіHidden. - Chromium шифрує значення файлів cookie: для таких файлів
Valueпорожнє. Juntei не розшифровує їх. - Рядок історії форм зі статусом
Removedпоходить із таблиці Firefoxmoz_deleted_formhistory, яку Firefox для Android заповнює для Sync. Настільний Firefox зазвичай залишає її порожньою. - Видалений запис із довірою
Lowможе бути фрагментом іншого запису: звіряйте його з наявними рядками та іншими доказами. - Відсутність видалених рядків не означає, що нічого не видаляли: обнулений простір і контрольна точка не залишають нічого для відновлення. Видалені файли cookie поки що не відновлюються.
- Вміст бази визначає сімейство браузера. Сумісний шлях профілю уточнює
Browserдо Chrome чи Firefox; суперечливий шлях не змінює сімейство. Інакше цеChromium-based,Firefox-basedабоSafari(Unknown, якщо не визначено).UserіProfileберуться зі шляху та можуть бути втрачені під час копіювання. - Журнали відкату (
-journal) не читаються.WebCacheV01.datInternet Explorer і застарілого Edge читає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 створює чотири файли; файл без рядків містить лише заголовок. Рядки JSON і JSONL містять Table
(History, Downloads, Cookies або FormHistory) після SourceFile.
| Файл 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 |
Ідентифікатор рядка відвідування та ідентифікатор відвідування, з якого на нього перейшли (сторінка-реферер, джерело переспрямування). Ідентифікатор відвідування порожній, якщо відновлений запис його втратив. |
LastVisitTime |
Останнє відвідування видаленої сторінки (UTC). |
PageSource |
Звідки взято URL і заголовок видаленого відвідування: Live (наявна сторінка), Recovered (видалена сторінка) або NotFound. |
Confidence, RecoveredFrom, LostColumns |
Як відновлено видалений запис; див. Видалені записи. |
Завантаження¶
| Поле | Інтерпретація |
|---|---|
StartTime, EndTime |
Коли завантаження почалося й закінчилося (UTC). |
URL, RedirectChain |
Звідки надійшов файл і кожен URL на шляху (Chromium; у CSV між ними ->). |
TargetPath, CurrentPath |
Куди збережено файл (у Firefox — URI file://) і куди його записували під час завантаження. |
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 |
Ідентифікатор рядка завантаження. Порожній, якщо відновлений запис його втратив. |
Файли cookie¶
| Поле | Інтерпретація |
|---|---|
Created, LastAccessed, Expires |
Коли файл cookie було встановлено, востаннє надіслано і коли спливає його термін дії (UTC; для сеансового файлу cookie Expires порожнє). |
Host, Name, Path |
Сайт, для якого призначено файл cookie, його ім'я та шлях. |
Value |
Значення в збереженому вигляді: порожнє, якщо Chromium його зашифрував. |
Secure, HttpOnly, Persistent |
Надсилається лише через HTTPS, прихований від скриптів, зберігається між сеансами (Chromium). |
GoogleAnalytics |
Декодовані поля файлу cookie Google Analytics (__utma, __utmb, __utmt, __utmz): час відвідувань, сеанси, джерело кампанії та пошукові запити. |
RowID |
Ідентифікатор рядка файлу cookie. |
Історія форм¶
| Поле | Інтерпретація |
|---|---|
FirstUsed, LastUsed |
Коли значення ввели вперше та востаннє (UTC). |
RemovedTime |
Коли, згідно із записом Firefox про вилучення, запис було вилучено (UTC). |
FieldName, Value |
Поле форми (email, q, рядок пошуку Firefox: searchbar-history) і введене значення. |
Count |
Скільки разів значення вводили. |
GUID |
Ідентифікатор запису у Firefox, на який посилаються записи про вилучення. |
Sources |
Звідки Firefox зберіг запис, у версіях, які це зберігають (у CSV значення розділено вертикальною рискою). |
RowID |
Ідентифікатор рядка; порожньо/null, якщо його втрачено під час відновлення. Фактично записаний нуль залишається 0. |
Автоматичний аналіз¶
auto-parse записує таблиці до BrowserActivity як Browser-History.csv, Browser-Downloads.csv,
Browser-Cookies.csv і Browser-FormHistory.csv (один файл Browser.json або Browser.jsonl з
-t json чи -t jsonl) разом із BrowserActivity/Browser-logs.txt. Об'єднана хронологія -j містить
кожен рядок, із Comp та ідентифікатором Artifact browser. -Z перетворює VisitTime,
LastVisitTime, StartTime, EndTime, Created, LastAccessed, Expires, FirstUsed, LastUsed і
RemovedTime.