Артефакты браузера и веб-активности

Браузер — это дневник цифровой жизни пользователя: история, кэш, куки и загрузки вместе восстанавливают, какие сайты он открывал, что искал и что скачивал.

Артефакты браузера — следы веб-активности, которые браузер сохраняет локально: журнал посещений, кэш страниц, куки и токены сессий, история загрузок, сохранённые формы и пароли. По ним реконструируют действия пользователя за компьютером.

Этот урок — про чтение браузерных артефактов при расследовании инцидента или экспертизе устройства. Анализируем свои системы или устройства, исследуемые правомерно (с согласия владельца либо в рамках расследования с надлежащими полномочиями). Несанкционированный доступ к чужому устройству и данным — ст. 272 УК РФ.

Зачем это знать защитнику

В инциденте браузер отвечает на вопросы, которых нет нигде больше: с какого сайта пришёл вредоносный файл (история + загрузки), переходил ли пользователь по фишинговой ссылке, заходил ли на C2-панель, какие сервисы открывал перед утечкой. При разборе компрометации учётной записи именно куки и токены сессий объясняют, как злоумышленник вошёл «без пароля» — украв активную сессию. А история и кэш показывают «намерение и активность» пользователя: что он реально делал, а не что говорит. Это делает браузер одним из самых ценных источников в форензике конечной точки.

Где и как браузер хранит следы

Большинство современных браузеров (на движке Chromium, а также Firefox) хранят данные в базах SQLite в профиле пользователя — отдельных файлах для истории, куки, логинов. Это удобно для анализа: к ним применимы обычные SQL-запросы. Схематичный профиль:

Профиль браузера/
  History          (SQLite: посещения, загрузки, поисковые запросы)
  Cookies          (SQLite: куки и токены сессий)
  Cache/           (тела загруженных ресурсов: страницы, картинки, скрипты)
  Login Data       (SQLite: сохранённые логины/пароли, обычно шифрованы)
  Web Data         (SQLite: автозаполнение форм)
  Sessions/        (открытые вкладки для восстановления)

Поскольку это SQLite, аналитик читает таблицы напрямую (с копии файла, не с «живого» профиля). Учебная иллюстрация на стандартном SQL — как такие таблицы устроены и как из них достают картину посещений:

CREATE TABLE urls (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  url TEXT,
  title TEXT,
  visit_count INTEGER
);

INSERT INTO urls (url, title, visit_count) VALUES
  ('http://intranet.local/report', 'Внутренний отчёт', 12),
  ('http://files.example/invoice.zip', 'Загрузка архива', 1),
  ('http://bank-secure.example/login', 'Вход (фишинг?)', 3),
  ('http://search.example/?q=vpn+bypass', 'Поиск', 2);

-- Самые посещаемые и подозрительные адреса
SELECT url, title, visit_count
FROM urls
ORDER BY visit_count DESC;

Вывод:

http://intranet.local/report      | Внутренний отчёт   | 12
http://bank-secure.example/login  | Вход (фишинг?)     | 3
http://search.example/?q=vpn+bypass | Поиск            | 2
http://files.example/invoice.zip  | Загрузка архива    | 1

На реальных профилях у каждой записи есть точные временные метки (когда и сколько раз посещалось), и именно временная линия посещений и загрузок — самая ценная часть.

Что рассказывает каждый артефакт

История и поисковые запросы

Журнал посещений с метками времени строит таймлайн: какие адреса и в каком порядке открывались, как часто, по каким переходам. Поисковые запросы добавляют контекст намерения. Это отвечает на «куда ходил пользователь» и помогает связать загрузку вредоноса с конкретным сайтом-источником.

Кэш

Кэш — локальные копии загруженных страниц, картинок и скриптов для ускорения. Криминалистическая ценность: можно увидеть содержимое страницы, какой её застал пользователь, даже если сайт уже изменился или удалён, и восстановить картинки/файлы, которые он просматривал.

Куки и сессии

Куки хранят токены аутентификации — «пропуск», по которому сайт узнаёт пользователя без повторного ввода пароля. Для расследования это двояко: куки показывают, на каких сервисах пользователь был залогинен, и одновременно объясняют атаку кражи сессии — похитив cookie активной сессии, злоумышленник входит как жертва, минуя пароль и даже многие виды MFA. Данные восстановления сессий показывают, какие вкладки были открыты в момент инцидента.

Загрузки и автозаполнение

История загрузок фиксирует имя файла, URL-источник и путь сохранения — прямая связь «откуда пришёл вредонос». Автозаполнение форм и сохранённые данные раскрывают вводившиеся адреса, имена и иногда учётные данные (пароли обычно зашифрованы ключом ОС/профиля).

Как это работает под капотом

Браузер ведёт эти базы ради удобства пользователя — быстрый доступ к истории, мгновенная загрузка из кэша, «остаться в системе» через куки. Побочный эффект — богатый форензический след. Чтения SQLite-файлов достаточно, чтобы извлечь записи, но есть тонкости. Временные метки хранятся в своих эпохах (например, у Chromium — микросекунды от 1601 года, у Firefox — микросекунды от 1970-го), и их нужно корректно переводить. Удалённые записи нередко остаются в файле как «дырки» в SQLite (в области freelist) и частично восстановимы. Режим инкогнито важен как ограничение: он не пишет историю и куки на диск, поэтому таких артефактов не будет — но активность всё равно может всплыть в DNS-кэше, сетевых логах и временных файлах. Поэтому браузерные артефакты сопоставляют с другими источниками, а не считают единственной истиной.

Как защититься

1. Сохраняйте профиль как улику корректно. Анализируйте копию файлов профиля (браузер закрыт), фиксируйте хеши — «живая» работа в профиле изменит данные и испортит доказательство.

2. Стройте единый таймлайн. Сшейте историю, загрузки и куки с временными метками в одну ленту — она показывает последовательность действий и связывает заражение с источником.

3. Помните про защиту сессий (для Blue Team). Раз кража куки обходит пароль, защищайтесь привязкой токенов к устройству, коротким временем жизни сессий и MFA, устойчивым к угону токена; это снижает ценность украденного артефакта.

4. Учитывайте инкогнито и шифрование. Отсутствие истории не значит отсутствия активности — проверяйте DNS-кэш, сетевые и системные логи. Сохранённые пароли в профиле зашифрованы ключом ОС, и без него не извлекаются.

5. Соблюдайте границы доступа. Исследуйте только свои устройства или те, на которые есть правомерные полномочия/согласие; доступ к чужим данным — ст. 272 УК РФ, плюс требования к приватности и хранению персональных данных.

Итоги

  • Браузер хранит богатый след в SQLite-базах профиля (история, куки, загрузки) — к ним применимы обычные SQL-запросы.
  • История и загрузки строят таймлайн действий и связывают вредоносный файл с сайтом-источником; кэш сохраняет содержимое страниц, какими их видел пользователь.
  • Куки/токены сессий объясняют вход «без пароля» через кражу активной сессии — отсюда защита токенов на стороне Blue Team.
  • Временные метки в своих эпохах, удалённые записи частично восстановимы, а инкогнито не пишет историю — следы ищут и в DNS/сетевых логах.
  • Профиль анализируют копией с фиксацией хешей и только на правомерно исследуемых устройствах (ст. 272 УК РФ, приватность данных).
Проверьте себя
1. Почему кража cookie активной сессии опасна даже при сильном пароле и MFA?
ACookie сессии — это уже выданный токен аутентификации, по нему сайт узнаёт пользователя без повторного ввода пароля и многих видов MFA
BCookie содержит сам пароль в открытом виде
CCookie позволяет физически получить доступ к жёсткому диску жертвы
DCookie отключает антивирус на компьютере жертвы
2. Что верно про режим инкогнито с точки зрения криминалистики?
AОн не пишет историю и куки на диск, но активность может остаться в DNS-кэше, сетевых логах и временных файлах
BОн полностью стирает все следы активности из всех источников системы
CОн шифрует историю браузера, но сохраняет её в профиле
DОн не влияет на сохранение истории — она пишется как обычно
3. Почему браузерный профиль анализируют по копии файлов с фиксацией хешей, а не работают в «живом» профиле?
AПотому что работа в живом профиле изменит базы (история, время доступа) и испортит целостность доказательства
BПотому что копия файлов работает быстрее живого профиля
CПотому что в живом профиле SQL-запросы невозможны в принципе
DПотому что копия автоматически расшифровывает сохранённые пароли