Логотип
Форензика

Компьютерная
криминалистика

Занимаемся исследованием цифровых доказательств и раскрытием преступлений, связанных с компьютерной информацией

Наши услуги

Экспертные решения в области цифровой криминалистики

Услуги Кибердетектива

Стоимость:
от 5 000₽

Удаление ссылок из Google

Стоимость:
от 100 000₽
Удаление ссылок из Google

Удаление информации из Яндекса

Стоимость:
от 50 000₽
Удаление ссылок из Яндекса

Проверка человека по открытым данным

Стоимость:
от 10 000₽
Проверка человека

Удаление информации из Интернета

Стоимость:
от 10 000₽
Удаление информации из интернета

Поиск киберпреступников

Стоимость:
от 30 000₽
Услуга поиска киберпреступников

О компании

Опыт, надежность и профессионализм в сфере компьютерной экспертизы
Кибер пространство
Поиск человека в интернете

Мы специализируемся на предоставлении комплексных решений в области цифровой криминалистики и кибербезопасности. Мы предлагаем широкий спектр профессиональных услуг, направленных на защиту вашей информации и репутации в интернете.

Наши услуги включают:

  • Удаление информации из поисковых систем: Мы эффективно удаляем нежелательную или конфиденциальную информацию из результатов поиска, помогая Вам контролировать свою цифровую репутацию.

  • Поиск киберпреступников: Наши эксперты проводят тщательные расследования для выявления и привлечения к ответственности лиц, причастных к киберпреступлениям.

  • Поиск людей в интернете: Мы используем передовые методы и технологии для нахождения нужных Вам людей, будь то потерянные связи или скрывающиеся злоумышленники.

Наша команда состоит из опытных специалистов, обладающих глубокими знаниями в области цифровой криминалистики и кибербезопасности. Мы используем новейшие технологии и методики, чтобы предоставлять нашим клиентам лучшие решения и достигать оптимальных результатов.

Блог

Экспертные статьи о Форензике

Git как машина времени: репозитории, которые помнят всё, что ты пытался стереть

Многие разработчики и безопасники искренне верят в магию команды git commit --amend или принудительного пуша с флагом --force. Реальность куда прозаичнее: Git спроектирован как структура данных на основе направленного ациклического графа (DAG), которая по умолчанию ничего не удаляет, а лишь переставляет указатели веток.

Анатомия каталога .git и висячие объекты

Когда файл случайно попадает в коммит, а затем разработчик пытается «замести следы» быстрым откатом ветки, содержимое файла никуда не исчезает. Оно остается в виде сжатого blob-объекта внутри внутренней базы данных под каталогом .git/objects.

Такие объекты переходят в категорию dangling (висячих) объектов, на которые больше не ссылается ни одна вершина графа. Внутренний сборщик мусора git gc не трогает их неделями, давая форензик-специалисту огромное окно возможностей для извлечения чувствительных данных.

Извлечение улик из скрытого журнала

Если коммит перезаписали или затерли локально, первым делом исследуют журнал ссылок git reflog. Он ведет строгий учет каждого перемещения указателя HEAD, сохраняя историю всех переключений, слияний и правок.

  • Команда git fsck --lost-found моментально находит все потерянные коммиты и распаковывает их содержимое в отдельную папку.
  • Утилита git cat-file -p <HASH> позволяет восстановить исходный текст любого найденного blob-объекта напрямую по его хешу.
  • Анализ git log -g раскрывает полную хронологию локальных действий пользователя до момента принудительной перезаписи истории.

Удаленные репозитории и публичные зеркала

Попытка переписать публичную ветку на GitHub или GitLab через git push --force создает лишь иллюзию безопасности. Платформы кэшируют старые коммиты во внутренних хранилищах, и они остаются доступными по прямому хешу через API событий или Pull Requests.

Любой приватный ключ, токен API или пароль от базы данных, попавший в публичный доступ хотя бы на пять секунд, уже спарсен ботами поисковых систем и зеркал. Использование инструментов вроде BFG Repo-Cleaner или git-filter-repo зачищает граф, но не отзывает скомпрометированные секреты у внешних систем.

Практические правила для расследователя

Никогда не доверяйте внешнему виду ветки main, пока не выгрузили сырые объекты и не провели глубокий статический анализ. Полноценная очистка репозитория требует полного пересчета всех деревьев и принудительного сброса кэша сборщика мусора.

  • Всегда клонируйте репозиторий вместе с полным набором скрытых веток и служебных ссылок через флаг --mirror.
  • Используйте сканеры вроде TruffleHog или Gitleaks для автоматического поиска энтропии и паттернов секретов по всей глубине графа.
  • Не пытайтесь тестировать утилиты очистки на рабочем репозитории без создания изолированного бэкапа, я серьезно.

Git как машина времени: репозитории, которые помнят всё, что ты пытался стереть

Форензика контейнеров Docker: улики в эфемерной инфраструктуре

Если девопсы и хакеры свято верят, что после команды уничтожения контейнер растворяется в цифровом небытии без следа, то у меня для них плохие новости. Эфемерность Docker обманчива: хост помнит практически всё, если специалист понимает архитектуру ядра Linux и структуру демона.

Анатомия слоев и OverlayFS

Главный миф микросервисов – иллюзия полной бесследности запущенных приложений. На самом деле контейнер представляет собой изолированный процесс на хосте, пишущий временные данные в выделенный рабочий слой файловой системы.

Каталог /var/lib/docker/overlay2 хранит все разрозненные слои образов и контейнеров. Пока сущность не вычищена с диска принудительно через docker system prune, рабочий каталог diff содержит абсолютно каждый измененный или созданный файл, включая загруженные бэкдоры.

Снятие дампа оперативной памяти

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

Вытащить оперативную память можно напрямую из каталога /proc/<PID>/mem или с помощью gcore на хосте, определив родительский PID контейнера. Для глубокого исследования инъекций и анализа скрытых сокетов применяют профилированный модуль LiME в связке с фреймворком Volatility.

Тактика сбора цифровых доказательств

Первое правило реагирования на инцидент – забыть про спонтанный перезапуск служб. Обычная остановка контейнера может запустить скрипты самоуничтожения малвари или обнулить ценные точки монтирования в памяти tmpfs.

  • Примените команду заморозки docker pause, чтобы зафиксировать состояние всех регистров и процессов.
  • Создайте снимок текущего состояния файловой системы в новый образ с помощью команды docker commit.
  • Сохраните контейнер в архив через docker save или docker export для изолированного препарирования на стенде.
  • Рассчитайте и зафиксируйте контрольные хеш-суммы SHA-256 каждого полученного слепка в протоколе расследования.

Логирование и сетевой контекст

Попытка зачистить историю shell внутри окружения – классический ход, который не спасает от внешнего аудита. Если на хосте развернуты auditd или eBPF-зонды, каждый системный вызов внутри cgroups уже сохранен в централизованном журнале.

Файл конфигурации /var/log/docker.log и метаданные команды docker inspect содержат точную хронологию запуска, смонтированные тома и скрытые переменные окружения. Таблица трансляции conntrack и цепочки iptables хоста сохраняют адреса удаленных серверов управления, с которыми контактировал скомпрометированный узел.

Главные правила работы эксперта

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

  • Всегда анализируйте параметры bind mounts на предмет несанкционированного побега злоумышленника в корневую систему хоста.
  • Изучайте переменные окружения контейнера, где беспечные инженеры регулярно забывают боевые токены и приватные ключи.
  • Проверяйте историю сборки базового образа через docker history, чтобы отделить артефакты компрометации от заводских уязвимостей.
Форензика контейнеров Docker: улики в эфемерной инфраструктуре

Артефакты браузерных расширений: маленькие плагины с большой памятью

История браузера врёт охотнее, чем расширение. Пользователь жмёт «очистить всё», чистит cookies, включает инкогнито – и искренне верит, что стёр следы. Расширение в это время спокойно пишет LevelDB, IndexedDB и свой локальный склад. «Очистить историю» его, как правило, не трогает.

Это не магия. Это архитектура: плагин – отдельное приложение внутри профиля, со своим storage API и своими файлами. Для форензики это золото. Для тех, кто «просто почистил Chrome» – неприятный сюрприз.

Не повторяйте это дома, я серьезно: ниже – разбор своих профилей, лабораторных образов и кейсов с законным основанием. Чужой диск без мандата – уже не OSINT, а статья УК.

Почему плагин помнит больше браузера

Chromium и Firefox дают расширениям chrome.storage.local, chrome.storage.sync, IndexedDB, Cache Storage и (у старых) WebSQL. Браузер не считает это «историей». Поэтому:

  • adblocker хранит списки доменов и счётчики блокировок;
  • менеджер паролей держит метаданные сейфа и иногда зашифрованный vault;
  • криптокошелёк пишет ключи/сид в LevelDB (infostealer’ы это знают лучше половины SOC);
  • AI-сайдбары (Monica, Sider и компания) складывают переписки в Local Extension Settings.

Исследование 2026 года по conversational AI-расширениям прямо указывает: основные артефакты лежат в Local Extension Settings, формат – LevelDB. Не в History. Не в cookies.

Отдельный бонус: состояние расширений переживает Clear All History. Password managers, ad blockers, «продуктивность» и даже тупые темы часто оставляют навигационный контекст.

Карта диска: Chromium-семья

Chrome, Edge, Brave, Opera, Vivaldi, Яндекс – одна кухня, разные адреса профиля.

Windows (пример Chrome):

%LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\

Что смотретьПуть относительно профиляЗачем
Код и манифестExtensions\<extension_id>\<version>\ID, версия, permissions, update URL, подозрительный CWS vs self-hosted
Настройки браузераPreferences, Secure Preferencesсписок установленных, enabled/disabled, install time, pin to toolbar
Локальный storageLocal Extension Settings\<extension_id>\LevelDB: *.ldb, *.log, CURRENT, MANIFEST-*
СинкSync Extension Settings\<extension_id>\то, что уехало в аккаунт Google/Microsoft
СостояниеExtension State\LevelDB, runtime-флаги
IndexedDBIndexedDB\chrome-extension_<id>_0.indexeddb.leveldbкрупные объекты: кошельки, заметки, чаты
Cache Storage / Service WorkerService Worker\, CacheStorage\кэш UI и иногда токены

Edge: ...\Microsoft\Edge\User Data\Default\Extensions\...
Opera: чаще %APPDATA%\Opera Software\Opera Stable\Extensions\

extension_id – 32 символа латиницы (nkbihfbeogaeaoehlefnkodbefgpgknn = MetaMask, и да, это уже мем в инцидентах). Не гадай: сверяй с manifest.json и Preferences.

Linux: ~/.config/google-chrome/<profile>/
macOS: ~/Library/Application Support/Google/Chrome/<profile>/

Что внутри LevelDB

Это не SQLite. Открывать «как таблицу» бесполезно. На диске – SST/LDB плюс WAL-подобный *.log. Значения часто JSON или protobuf. Строки ключей иногда читаются strings, но для суда нужен парсер (Hindsight, leveldbdump, кастом на Python plyvel – только с копии, не с живого профиля).

Типичный улов:

  • списки URL / last visited / pinned tabs у session-менеджеров;
  • email, workspace id, last prompt у AI-плагинов;
  • address book и tx history у кошельков;
  • правила фильтрации – косвенно показывают, какие домены пользователь видел.

Infostealer’ы (Vidar 2.0 и наследники) целенаправленно грабят Local Extension Settings, Sync Extension Settings и IndexedDB\chrome-extension_*. Если в IR видишь, что малварь ходила именно туда – это не «ещё один путь», это приоритет: там деньги и сессии.

Firefox: другая религия, та же жадность

Профиль: %APPDATA%\Mozilla\Firefox\Profiles\<random>.default-release\

  • extensions.json – каталог аддонов, состояние, даты.
  • extensions\ – XPI/распакованные.
  • addonStartup.json.lz4 – что реально поднималось при старте.
  • storage\default\moz-extension+++<uuid>\ – IndexedDB/local storage в SQLite (idb, ls).
  • browser-extension-data\<id>\ – storage.local в JSON у части аддонов.
  • prefs.js – флаги, в том числе отключённые плагины.

UUID в storage\default не равен addon id с AMO. Связка: extensions.jsonpath / idstorage. Пропустишь маппинг – получишь красивый дамп ни о чём.

Что именно доказывать

Расширение само по себе не преступление. Цепочка обычно такая:

  1. Inventory. Что стояло, когда поставили, откуда (update_url в манифесте: Chrome Web Store vs левый CDN – уже сюжет).
  2. Permissions. <all_urls> + webRequest + debugger у «ускорителя PDF» – красный флаг, не диагноз.
  3. Runtime state. Enabled в момент инцидента или «случайно» выключили за час до изъятия.
  4. User data. Содержимое storage: переписки, адреса, seed-фразы, списки сайтов.
  5. Корреляция. Сопоставить install time с загрузками в History/places.sqlite, с Secure Preferences и с prefetch браузера.

Пример из практики (лаборатория, не «взлом соседа»): пользователь чистит историю после спорной сессии. В History пусто. В storage адблока – счётчики хитов по доменам за тот же день. В AI-сайдбаре – промпт с реквизитами. Timeline собирается без единого URL из visits.

Ещё один классический слой: Clear All History режет таблицы urls/visits, но WAL/History-wal и freelist SQLite ещё часы живут. Плюс Top Sites, Network Action Predictor, Service Worker. Расширения – четвёртый слой, который вообще не входил в «очистить».

Инструменты без театра

  • Копия профиля, браузер закрыт. Живой Chrome держит локи на LevelDB – сломаешь и себе, и цепочке.
  • Hindsight (RyanDFIR) – Chromium-артефакты, включая куски extension-related.
  • DB Browser for SQLite – Firefox storage\default, не LevelDB.
  • WebX / triage-сканеры – инвентаризация расширений пачкой с KAPE/образа.
  • Elcomsoft Quick Triage и аналоги – полевой съём Preferences, IndexedDB, Yandex-специфики (Ya Passman Data и т.п.).
  • Свой парсер LevelDB – когда вендорный софт молчит. Пиши на копии. Хеши до и после.

Не тащи «Inspect background page» на боевой машине подозреваемого, если задача – изъятие. Это изменение состояния. Для своего лаба – пожалуйста: DevTools → Application → Extension storage. Для суда – файл с диска.

Грязные зоны (и почему я не дам рецепт)

Криптокошельки в расширениях, менеджеры паролей, сессионные токены SaaS – это не «интересно посмотреть JSON». Это доступ к чужим деньгам и аккаунтам. Разбор формата vault’а, обход мастер-пароля, эксплуатация уязвимого плагина – за скобками. Если на образе лежит nkbihfbeogaeaoehlefnkodbefgpgknn и жирный LevelDB, фиксируешь факт, хеши, версию, permissions. Дальше – уполномоченные и политика кейса.

То же про вредоносные расширения из supply chain: анализируй манифест, сетевые IOC, persistence. Не пиши и не запускай эксплойт «чтобы проверить».

Короткий чеклист на изъятие

  1. Зафиксировать запущен ли браузер; по возможности live-triage только если нужен App-Bound Encryption / сессия. Иначе – выключить чисто.
  2. Снять весь User Data / Firefox profile, не только Extensions.
  3. Не забыть Local Extension Settings, Sync Extension Settings, IndexedDB, Extension State.
  4. Рядом положить Preferences, Secure Preferences, Local State, extensions.json.
  5. Посчитать SHA-256. Парсить только копии.
  6. Смапить ID → имя → версия → store/sideload.
  7. Отдельно пометить кошельки, password managers, AI-чаты, корпоративные SSO-плагины.

Маленький плагин с большой памятью – это не поэзия. Это каталог на диске, который пользователь не считает уликой. Ты – считаешь. И да, сначала свой профиль: открой Local Extension Settings и посмотри, сколько о тебе помнит «просто блокировщик рекламы». Спойлер: больше, чем тебе комфортно.

Артефакты браузерных расширений: маленькие плагины с большой памятью

Контакты

Свяжитесь с нами любым удобным способом
Наши контакты
Оставьте заявку