🟩 Экспертиза баз данных и СУБД: технические аспекты, методы

🟩 Экспертиза баз данных и СУБД: технические аспекты, методы

Введение: цифровые хранилища как объект технического исследования

В современном мире данные стали не просто ценным ресурсом, но и ключевым доказательством в тысячах судебных процессов. Базы данных, организованные под управлением СУБД, содержат в себе уникальную информацию: финансовые транзакции, логи доступа, изменения записей, временные метки, следы удалений. Однако, когда возникает спор о подлинности этих данных, требуется не поверхностный взгляд программиста, а глубокое техническое исследование, основанное на понимании архитектуры СУБД, физического хранения данных на носителях и методов восстановления удалённой информации.

Союз «Федерация судебных экспертов» выполняет такие исследования на высочайшем научно-техническом уровне. Наши специалисты владеют не только знанием SQL, но и умением читать сырые страницы данных, декодировать журналы транзакций, анализировать дампы памяти и восстанавливать информацию даже после выполнения команд VACUUM, SHRINK или OPTIMIZE. Данная статья представляет собой развёрнутое техническое руководство по методам и инструментарию судебной экспертизы БАЗ ДАННЫХ И СУБД. Мы рассмотрим архитектурные особенности различных СУБД, методы анализа журналов, способы восстановления удалённых записей и приведём три реальных кейса из практики.

Важно отметить, что все технические термины и аббревиатуры в статье приводятся в стандартизированном виде: СУБД (система управления базами данных), ЖТ (журнал транзакций), LSN (Log Sequence Number), WAL (Write-Ahead Log), ACID (Atomicity, Consistency, Isolation, Durability) и другие. Это необходимо для единообразия восприятия материала техническими специалистами. Ключевая фраза, которая будет повторена пять раз в тексте: ЭКСПЕРТИЗА БАЗ ДАННЫХ И СУБД. Приступим к детальному разбору.

💾 Раздел 1: Физическая структура хранения данных в современных СУБД

Для понимания возможностей судебной экспертизы необходимо разобраться, как именно данные физически организованы на диске. Любая СУБД (будь то MS SQL SERVER, POSTGRESQL, MYSQL или ORACLE) использует концепцию страничного хранения. Страница  — это минимальная единица ввода-вывода, обычно размером 4 КБ, 8 КБ или 16 КБ в зависимости от СУБД и настроек.

В MS SQL SERVER: файлы данных имеют расширение .MDF (основной) и .NDF (вторичный). Страница размером 8 КБ содержит заголовок (96 байт), в котором хранятся: идентификатор объекта (ObjectID), идентификатор индекса (IndexID), номер страницы (PageID), а также флаги состояния (включая флаг удаления строки). Каждая строка располагается в слоте  — смещении от начала страницы. При выполнении DELETE строка не удаляется физически, а в заголовке слота выставляется бит DEAD. Это позволяет эксперту восстанавливать удалённые строки до тех пор, пока страница не будет перестроена или сжата.

В POSTGRESQL: используется файл-на-файл (одна таблица может быть разбита на несколько файлов по 1 ГБ). Страница размером 8 КБ содержит структуру ItemIdData (массив указателей на фактические строки-кортежи). Удалённая строка превращается в «dead tuple»  — она физически сохраняется, но помечается как мёртвая в заголовке кортежа. VACUUM позже помечает страницу как свободную, но не затирает данные немедленно.

В MYSQL с движком INNODB: данные хранятся в файлах .IBD. Страница размером 16 КБ (по умолчанию) содержит заголовок, каталог записей и область данных. Удаление строки  — это установка специального бита в заголовке записи, а также запись операции в UNDO LOG. Более того, каждая строка имеет скрытое поле DB_TRX_ID (идентификатор транзакции, которая последней изменила строку) и DB_ROLL_PTR (указатель на предыдущую версию строки в сегменте отката).

Эти архитектурные особенности и позволяют проводить ЭКСПЕРТИЗУ БАЗ ДАННЫХ И СУБД на глубоком техническом уровне. Эксперт, понимающий внутреннее устройство страниц, может извлечь данные даже при полном отсутствии штатных средств доступа.

📝 Раздел 2: Журналы транзакций  — внутреннее устройство и методы парсинга

Журнал транзакций (Transaction Log)  — наиболее ценный объект для технического эксперта. Он существует во всех ACID-совместимых СУБД и предназначен для обеспечения атомарности и долговечности. В MS SQL SERVER это файл .LDF, в POSTGRESQL  — WAL (Write-Ahead Log) в каталоге pg_wal, в MYSQL  — бинарный лог (binlog) и REDO LOG, в ORACLE  — REDO LOG и ARCHIVELOG.

Структура записи журнала (на примере MS SQL SERVER):
Каждая запись лога имеет заголовок фиксированного размера, содержащий:

  • LSN (Log Sequence Number)  — 10-байтовое монотонно возрастающее значение, уникальное для каждой записи.
  • ID транзакции (Transaction ID)  — идентификатор, общий для всех записей одной транзакции.
  • Тип операции (Operation Code): LOP_BEGIN_XACT (начало транзакции), LOP_COMMIT_XACT (фиксация), LOP_ABORT_XACT (откат), LOP_MODIFY_ROW (изменение строки), LOP_INSERT_ROWS (вставка), LOP_DELETE_ROWS (удаление), LOP_FORMAT_PAGE (создание страницы), LOP_HOBT_DDL (изменение структуры таблицы).
  • Идентификатор AllocUnitId  — указывает на таблицу или индекс.
  • Номер страницы (PageID) и номер слота (SlotID)  — физическое расположение строки.
  • Data  — полезная нагрузка: для LOP_MODIFY_ROW это образы «до» и «после» изменения (в формате, зависящем от схемы таблицы).

Методы парсинга:
Прямое чтение LDF-файла (без использования SQL SERVER) требует понимания формата страниц журнала. Каждая страница лога также имеет структуру: заголовок (фиксированный), блоки записей переменной длины. Эксперт может использовать собственные парсеры (на C++ или PYTHON) для извлечения записей. Мы в Союзе «Федерация судебных экспертов» разработали набор утилит, которые позволяют декодировать LDF-файлы любой версии MS SQL SERVER (от 2012 до 2022) и извлекать историю изменений даже при повреждённом заголовке.

В POSTGRESQL WAL-файлы имеют похожую структуру: сегменты по 16 МБ, внутри которых расположены записи с XID (идентификатор транзакции), типом операции (XLOG_HEAP_DELETE, XLOG_HEAP_UPDATE и т.д.) и данными. Для их анализа используется встроенный инструмент pg_waldump, но в судебной практике мы также применяем собственные парсеры для извлечения информации из частично перезаписанных или повреждённых сегментов.

Ограничения: При работе в режиме SIMPLE RECOVERY (MS SQL) или при циклическом логгировании (ORACLE) старые записи могут быть перезаписаны. Однако время жизни журнала зависит от интенсивности изменений. В малоактивных БД журналы могут храниться месяцами. Именно поэтому важна оперативность изъятия носителя.

🔬 Раздел 3: Системные таблицы и метаданные как источник доказательств

Помимо пользовательских данных и журналов, важную информацию содержат системные таблицы (схемы). Они хранят метаданные об объектах БД, правах доступа, истории изменений структуры.

В MS SQL SERVER:

  • sys.tables  — список таблиц с датами создания (create_date), последнего изменения (modify_date).
  • sys.columns  — столбцы, их типы, атрибуты NULL/NOT NULL.
  • sys.indexes  — индексы, включая некластерные и уникальные.
  • sys.sql_modules  — текст хранимых процедур, функций и триггеров (если не зашифрован).
  • sys.database_principals  — учётные записи на уровне БД.
  • sys.server_principals  — учётные записи на уровне сервера.
  • sys.sql_logins  — логины и хеши паролей.

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

В POSTGRESQL:
Системные таблицы находятся в схеме pg_catalog: pg_class (таблицы и индексы), pg_attribute (столбцы), pg_proc (процедуры), pg_authid (роли). Особый интерес представляет pg_stat_all_tables, где хранится статистика: количество живых и мёртвых кортежей (n_live_tup, n_dead_tup). Резкое увеличение n_dead_tup может указывать на массовое удаление данных.

В MYSQL:
Системная БД information_schema содержит таблицы: TABLES, COLUMNS, STATISTICS. Кроме того, таблицы mysql.user, mysql.db хранят права доступа. Для движка INNODB есть таблицы INNODB_TRX (активные транзакции), INNODB_LOCKS (блокировки), INNODB_LOCK_WAITS. Их анализ помогает установить, какие транзакции выполнялись в спорный период.

При проведении ЭКСПЕРТИЗЫ БАЗ ДАННЫХ И СУБД мы всегда начинаем с дампа системных таблиц. Это даёт первичную картину: какие объекты существовали, когда они были созданы/изменены, какие учётные записи имели доступ. Часто эта информация сама по себе является доказательством (например, если таблица была создана за 5 минут до удаления критических данных).

⚙️ Раздел 4: Технические средства и инструментарий эксперта

Для проведения низкоуровневого анализа БАЗ ДАННЫХ И СУБД необходим специализированный инструментарий. В лаборатории Союза «Федерация судебных экспертов» используются следующие категории средств.

Аппаратные средства:

  • Write-blockers (блокираторы записи): Tableau T356789iu, Atola Insight Forensic, Logicube Forensic Falcon. Эти устройства подключаются между оригинальным накопителем и компьютером эксперта, гарантируя, что ни один байт не будет изменён.
  • Аппаратные копировщики: Atola Bandura, Tableau TD2  — позволяют создавать посекторные образы со скоростью до 10 ГБ/мин.
  • Адаптеры для работы с различными типами носителей: SATA, SAS, NVMe, eMMC, SPI Flash.

Программные средства для создания образов:

  • EnCase Forensic (v8.0 и выше)  — позволяет создавать образы в формате E01, сжимать и вычислять контрольные суммы.
  • FTK Imager  — бесплатный инструмент, но с ограниченными возможностями по работе с повреждёнными носителями.
  • dd (Linux) + проверка хешей MD5/SHA-256  — стандартный метод для UNIX-систем.

Анализаторы СУБД низкого уровня:

  • MS SQL Forensic Toolkit (собственная разработка)  — парсинг MDF/LDF без запуска SQL SERVER, восстановление удалённых строк, извлечение истории из ЖТ.
  • PostgreSQL Forensic Analyzer (PFА)  — работа с сырыми файлами данных и WAL, интерпретация страниц и кортежей.
  • MySQL InnoDB Recovery Tool  — извлечение данных из .IBD файлов, включая удалённые и перезаписанные записи.
  • Oracle DUL (Data Unloader)  — коммерческий продукт, позволяющий выгружать данные напрямую из файлов .DBF, минуя экземпляр ORACLE.
  • Средства для анализа файловых систем:
  • X-Ways Forensics  — анализ MFT, журналов USN, теневых копий VSS.
  • Autopsy/The Sleuth Kit  — для анализа EXT4, XFS, APFS.
  • WinHex  — шестнадцатеричный редактор для ручного поиска сигнатур (например, подписи SQLite: 0x53514C69).

Важно: все инструменты должны быть верифицированы. Мы не используем «облачные решения» или непроверенное ПО, поскольку это создаёт риск изменения данных.

🧩 Раздел 5: Методы восстановления удалённых данных  — технический гайд

Восстановление удалённых записей  — одна из ключевых задач экспертизы. Рассмотрим методы для разных СУБД на техническом уровне.

MS SQL SERVER  — восстановление из LDF:
Если удаление произошло недавно и ЖТ не был усечён, эксперт может извлечь записи типа LOP_DELETE_ROWS и LOP_MODIFY_ROW. Алгоритм:

  • Найти в LDF все записи с нужным AllocUnitId.
  • Для каждой записи получить слот и страницу (PageID, SlotID).
  • Из Diff-данных (pre-image) восстановить значение строки. Формат Diff зависит от схемы таблицы. Эксперт должен знать структуру таблицы (или восстановить её из системных таблиц на момент операции).
  • Собрать строки в хронологическом порядке (по LSN).

POSTGRESQL  — восстановление из WAL и страниц:
При DELETE строка превращается в dead tuple. Для восстановления:

  • Использовать расширение pageinspect: SELECT * FROM heap_page_items(get_raw_page(‘table_name’, page_number));
  • Найти кортежи с флагом LP_DEAD.
  • Извлечь данные, интерпретируя их согласно pg_attribute.
  • Если VACUUM ещё не запущен, данные доступны.
  • MYSQL INNODB  — восстановление из UNDO LOG и страниц:
    Каждая строка имеет DB_ROLL_PTR  — указатель на предыдущую версию в UNDO LOG. Для восстановления:
  • Прочитать страницу кластерного индекса (B+tree).
  • Для каждой найденной записи (включая удалённые) перейти по цепочке версий.
  • Извлечь самую раннюю версию (которая соответствует состоянию до всех изменений).
  • Восстановить все промежуточные версии, если необходимо.
  • SQLITE  — восстановление из свободных страниц:
    SQLITE после VACUUM не затирает старые страницы, а помечает их как свободные. Алгоритм:
  • Сканировать файл БД на предмет страниц с корректными заголовками (подпись, размер, номер страницы).
  • Для каждой страницы проверить, не помечена ли она как свободная в freelist (заголовок БД, поле freelist_trunk).
  • Извлечь данные, используя структуру B-tree (интерьерные и листовые страницы).
  • Восстановить записи, сопоставляя с известной схемой.

Важно: процент восстановления зависит от того, насколько активно БД использовалась после удаления. Каждая новая вставка может перезаписать свободные страницы. Поэтому чем раньше выполняется экспертиза, тем лучше. ЭКСПЕРТИЗА БАЗ ДАННЫХ И СУБД в первые 48 часов после инцидента даёт максимальные результаты.

🔍 Раздел 6: Кейс №1  — Восстановление финансовой истории из MS SQL SERVER после удаления через DROP TABLE

Исходные данные: В ООО «ФинансГрупп» произошёл корпоративный конфликт. Один из директоров, имеющий права sysadmin, выполнил команду DROP TABLE Payments, а затем создал новую пустую таблицу с тем же именем. Было удалено 45 000 записей о платежах за 3 года. Регулярные бэкапы не велись. Сторона истца утверждала, что данные можно восстановить из журнала транзакций.

Техническая задача: Восстановить удалённые записи таблицы Payments из LDF-файла, даже если сама таблица была пересоздана.

Методика:

  • Эксперт получил образ диска сервера и файлы БД (MDF, LDF). Размер LDF составлял 280 ГБ  — признак того, что журнал не усекался длительное время.
  • С помощью MS SQL Forensic Toolkit эксперт просканировал LDF на наличие операций, связанных с AllocUnitId исходной таблицы Payments (AllocUnitId был найден через анализ системных таблиц из MDF-файла, который ещё не был полностью перезаписан).
  • Найдены 45 000 операций типа LOP_INSERT_ROWS (история вставок за 3 года) и 1 операция LOP_HOBT_DDL (DROP TABLE). Для каждой вставки экспорт извлёк Diff-образ строки (pre-image не требуется, так как это INSERT).
  • Дополнительно проанализированы операции LOP_MODIFY_ROW для этой же таблицы (было 1 200 обновлений статусов платежей). Восстановлены все версии.

Все строки сгруппированы по Transaction ID и упорядочены по LSN. Построена полная хронология платежей.

Результат: Восстановлено 44 890 записей (99.75%). 110 записей потеряны из-за того, что страницы с ними были переиспользованы после DROP TABLE (но это не повлияло на общую сумму ущерба). Суд принял восстановленную выгрузку как допустимое доказательство. Экспертиза баз данных и субд в данном кейсе продемонстрировала, что DROP TABLE не является безвозвратным уничтожением, если журнал транзакций сохранён.

🛠️ Раздел 7: Анализ временных меток и борьба с фальсификацией времени

Одним из частых приёмов сокрытия следов является изменение системного времени на сервере БД перед выполнением нелегитимных операций. Злоумышленник переводит часы назад, удаляет/изменяет записи, затем возвращает время. В результате в журнале транзакций временные метки (время выполнения операции) могут быть подделаны. Однако существуют технические способы обнаружения такой фальсификации.

Метод 1: Корреляция LSN и времени. LSN в MS SQL SERVER (или WAL-сегменты в POSTGRESQL) растёт строго монотонно. Время же может «скакать». Эксперт строит график зависимости времени (из записи лога) от LSN. Если обнаруживается нелинейность (время уменьшается при росте LSN или остаётся постоянным при росте LSN на сотни тысяч), это явный признак подделки.

Метод 2: Сравнение с внешними источниками времени. Если сервер был синхронизирован с NTP-сервером (Network Time Protocol), логи ОС (Event Log, syslog) сохраняют время до синхронизации. Эксперт анализирует события ОС до и после спорного периода. Если в Event Log есть запись о том, что время было изменено (Event ID 1 в Windows, сообщение «System time changed»), фиксируется факт манипуляции.

Метод 3: Анализ временных меток файлов СУБД. Файлы .MDF, .LDF, .WAL имеют временные метки в файловой системе (CreateTime, ModifyTime, AccessTime). Если время создания файла БД позже времени операций, которые в нём якобы записаны,  — это противоречие, указывающее на подделку. Например, если в LDF есть операция за 01.01.2023, а сам файл .LDF был создан 15.01.2023  — очевидно, временные метки были подделаны или БД была восстановлена из бэкапа с изменённым временем.

В нашей практике был случай, когда злоумышленник изменил время на POSTGRESQL сервере с 2023-04-10 на 2023-01-01, выполнил DELETE, затем вернул время. Эксперт обнаружил аномалию: в WAL-файлах LSN росли, а время в записях следовало в обратном порядке. Кроме того, в системном журнале POSTGRESQL (pg_log) сохранились записи об ошибках из-за резкого переключения времени. Суд признал эти доказательства достаточными.

📁 Раздел 8: Экспертиза производительности СУБД как техническая диагностика

Необычный, но востребованный вид экспертизы  — анализ причин замедлений, сбоев или нештатного поведения СУБД. Часто это необходимо в спорах о нарушении SLA (Service Level Agreement) между хостинг-провайдером и клиентом, или при расследовании умышленного замедления работы системы.

  • Технические индикаторы:
  • План выполнения запроса (execution plan). Если он изменился с эффективного (INDEX SEEK) на неэффективный (TABLE SCAN)  — это может быть результатом изменения статистики, удаления индексов или изменения объёма данных.
  • Счётчики производительности (DMV в MS SQL: sys.dm_os_performance_counters, sys.dm_exec_query_stats; в POSTGRESQL: pg_stat_database, pg_stat_statements). Резкое увеличение времени выполнения запросов, роста блокировок (lock waits), deadlock’ов.
  • Журнал ошибок СУБД (ERRORLOG). Сообщения типа «IO requests taking longer than 15 seconds» или «Timeout expired» могут указывать на проблемы с дисковым вводом-выводом.

События расширенных событий (Extended Events)  — трассировка, включаемая администратором для детального логирования.

Методика:

  • Сбор всех доступных логов и DMV-снимков за спорный период (если они сохранились).
  • Восстановление конфигурации СУБД (файлы postgresql.conf, my.cnf, sp_configure) на момент инцидента.
  • Сравнение с эталонной конфигурацией или с аналогичными системами.
  • Моделирование нагрузки на копии БД для проверки гипотез (например, отключение индекса и выполнение типовых запросов).

В одном из дел провайдер утверждал, что БД работала медленно из-за ошибок в приложении клиента. Эксперт нашего Союза проанализировал планы запросов из кэша и обнаружил, что за 2 дня до инцидента был удалён кластерный индекс на таблице Orders. Индекс был удалён через DROP INDEX командой, которая сохранилась в журнале транзакций (LOP_HOBT_DDL). Удаление выполнил администратор провайдера по ошибке. В итоге провайдер выплатил компенсацию.

🗄️ Раздел 9: Кейс №2  — Техническое расследование SQL-инъекции в MYSQL базе данных интернет-магазина

Контекст: Интернет-магазин «ТехноМир» подвергся атаке. Неизвестный через форму поиска на сайте выполнил SQL-инъекцию, получил доступ к таблице Users и скопировал 50 000 хешей паролей и email-адресов. Администрация обнаружила атаку через 2 недели, когда начали поступать жалобы на взлом аккаунтов на сторонних ресурсах.

  • Вопросы эксперту:
  • Каков механизм атаки (тип инъекции, уязвимый параметр)?
  • Какие данные были извлечены, и в какое время?
  • Сохранились ли следы атаки в логах MYSQL?
  • Можно ли установить IP-адрес злоумышленника?

Технические методы:
Эксперт проанализировал:

  • Логи доступа WEB-сервера (NGINX)  — поиск запросов, содержащих SQL-синтаксис (UNION, SELECT, FROM, WHERE, INFORMATION_SCHEMA). Обнаружены GET-параметры вида: ?search=’ UNION SELECT username, password FROM users WHERE ‘1’=’1.
  • Бинарные логи MYSQL (binlog). Они хранят все запросы, изменяющие данные, а также SELECT-запросы (если включено логгирование всех запросов). В данном случае binlog был включён в режиме STATEMENT. Экспорт извлёк все SELECT-запросы, выполненные к таблице users за период атаки. Это позволило восстановить точную структуру извлечённых данных (какие столбцы, какие строки).
  • Логи подключений MYSQL (general log, если был включён). В данном случае general log не вёл запись, но в error log сохранились сообщения о необычно большом количестве соединений из одного IP.
  • Анализ временных меток: атака происходила с 02:14 до 02:43 ночи 12.06.2024 с IP 185.XX.XXX.45 (провайдер подтвердил, что IP принадлежит анонимному VPN, но дальнейшие запросы в другие системы помогли установить личность).

Результат: Эксперт восстановил полный список извлечённых пользователей (50 000 записей), установил способ инъекции (UNION-based injection с использованием уязвимой функции поиска), определил временной интервал. Суд признал, что администрация магазина не обеспечила должную защиту (не использовала параметризованные запросы). Экспертиза баз данных и субд в связке с анализом WEB-логов позволила полностью реконструировать инцидент.

🔐 Раздел 10: Защита от экспертизы  — технические методы противодействия и их преодоление

Злоумышленники, зная возможности судебной экспертизы, применяют методы активного противодействия. Рассмотрим наиболее эффективные из них и способы их преодоления.

Метод 1: Шифрование всей БД (TDE  — Transparent Data Encryption). В MS SQL SERVER, ORACLE, MYSQL Enterprise есть встроенное шифрование файлов данных и журналов. Ключи шифрования хранятся в мастер-БД или на сертификатах. Эксперт без ключей видит только зашифрованные байты.
Преодоление: Запрос ключей шифрования у стороны, владеющей сервером. Если ключи не предоставлены  — эксперт может попытаться извлечь их из дампа оперативной памяти (сервер хранит ключи в памяти во время работы). Используя анализ RAM-дампа (например, через volatility framework), можно найти паттерны ключей.

Метод 2: Немедленное усечение журналов транзакций. После выполнения нелегитимной операции злоумышственник выполняет ALTER DATABASE SET RECOVERY SIMPLE и CHECKPOINT, затем BACKUP LOG WITH TRUNCATE_ONLY (устаревшая команда) или SHRINKFILE. Журнал усекается, и следы теряются.
Преодоление: Даже после усечения физические страницы журнала могут сохраняться в файловой системе до тех пор, пока они не будут перезаписаны. Эксперт исследует нераспределённое пространство диска (slack space) и находит фрагменты старых страниц LDF. Это трудоёмко, но возможно.

Метод 3: Перезапись свободного места нулями (cipher /w, sdelete). После удаления БД выполняется команда, которая затирает все свободные кластеры нулями.
Преодоление: На SSD из-за wear-leveling (выравнивания износа) физические ячейки могут сохранять данные даже после TRIM. Эксперт может отключить контроллер и считать чипы напрямую (спецоборудование, например, PC-3000 Flash). Это дорого, но применяется в особо важных делах.

Метод 4: Физическое уничтожение носителя (механическое повреждение, поджог).
Преодоление: Если повреждение неполное, эксперт может извлечь уцелевшие чипы памяти и считать их. Например, после пожара на складе серверов, мы смогли восстановить 70% данных с обгоревших SSD, распаяв чипы на программатор.

Ни один метод не даёт 100% гарантии уничтожения. ЭКСПЕРТИЗА БАЗ ДАННЫХ И СУБД в руках профессионалов способна воскресить данные даже из пепла  — буквально.

🧬 Раздел 11: Особенности экспертизы NoSQL и нереляционных СУБД

Традиционные SQL-СУБД  — не единственные объекты. Всё чаще встречаются иски, связанные с MONGODB, CASSANDRA, REDIS, ELASTICSEARCH.

  • MONGODB (движок WIREDTIGER):
  • Данные хранятся в файлах .WT, внутри  — страницы B+ дерева.
  • Журнал операций  — это oplog.rs (кэппированная коллекция) в replica set. Он содержит все операции изменения в формате BSON.
  • Удаление документа (db.collection.remove()) физически не удаляет страницу, а лишь помечает документ как удалённый в B+ дереве. Эксперт может просканировать файлы .WT на предмет живых и мёртвых записей.

При выполнении команды drop() коллекция удаляется из каталога, но файлы .WT не перезаписываются немедленно  — они удаляются из файловой системы, и их кластеры становятся свободными. Восстановление возможно через анализ нераспределённого пространства.

CASSANDRA:

  • Данные хранятся в SSTable (Sorted String Table)  — неизменяемых файлах. При удалении создаётся tombstone (маркер удаления) в новой SSTable, а старые данные остаются до компактизации.
  • Журнал фиксации (commit log)  — аналог WAL, записывает все операции перед записью в SSTable. Он может быть проанализирован для восстановления недавних изменений.
  • Эксперт должен иметь доступ ко всем узлам кластера, так как данные распределены. Важно: даже при удалении строки (DELETE FROM table WHERE key=…), в commit log сохраняется исходное значение.

REDIS (in-memory):

  • Данные в оперативной памяти, но есть два механизма сохранения: RDB (снапшоты) и AOF (журнал команд).
  • При выполнении FLUSHALL (удаление всех ключей) RDB-файлы не удаляются сразу  — они остаются на диске до перезаписи. Эксперт анализирует RDB-файл, извлекая пары ключ-значение.
  • AOF-файл содержит все команды, включая DEL, SET, EXPIRE. Если AOF включён в режиме appendonly yes, можно восстановить всю историю изменений.

В практике Союза был случай, когда администратор REDIS кластера выполнил FLUSHALL, а затем удалил AOF и RDB файлы. Эксперт исследовал образ диска и обнаружил в свободном пространстве фрагменты RDB-файла (сигнатура REDIS). Восстановил 90% ключей, включая пользовательские сессии и корзину покупок.

🔩 Раздел 12: Кейс №3  — Восстановление данных из POSTGRESQL после VACUUM FULL и удаления WAL

Исходные данные: Медицинская клиника «Здоровье+» использовала POSTGRESQL для хранения электронных карт пациентов (200 000 карт). Главный врач, увольняясь, выполнил DELETE FROM patients WHERE discharge_date IS NOT NULL (удалил 50 000 карт выписанных пациентов), затем выполнил VACUUM FULL и удалил все WAL-файлы старше 2 дней. Еженедельные бэкапы существовали, но за последнюю неделю было добавлено 1 200 новых карт, которые не попали в бэкап.

Техническая задача: Восстановить 50 000 удалённых карт и 1 200 новых карт, которых нет в бэкапах.

  • Методика:
  • Эксперт создал образ диска POSTGRESQL сервера.
  • VACUUM FULL перестраивает таблицы, копируя только живые кортежи в новые файлы, а старые файлы удаляет. Однако операционная система не затирает содержимое удалённых файлов немедленно.
  • С помощью утилиты PhotoRec (восстановление по сигнатурам) эксперт просканировал свободное пространство диска на предмет страниц POSTGRESQL (заголовок страницы 0x0700  — магическое число).
  • Найдены 48 000 страниц, содержащих кортежи с удалёнными пациентами. Для каждой страницы эксперт восстановил кортежи, используя структуру заголовка кортежа (xlp_off, xl_flags).
  • Поскольку WAL-файлы были удалены, но не перезаписаны, эксперт также нашёл фрагменты WAL, содержащие операции DELETE (XLOG_HEAP_DELETE). Это позволило подтвердить, что удаление было намеренным (а не ошибкой приложения).
  • Восстановленные 48 200 карт (96.4%) вместе с 1 150 новыми картами, извлечёнными из свободных страниц журнала (до их перезаписи), были переданы клинике.

Результат: Суд обязал уволившегося врача возместить ущерб за попытку уничтожения данных. Экспертиза баз данных и субд с применением низкоуровневого сканирования диска позволила восстановить то, что считалось безвозвратно утерянным.

📊 Раздел 13: Анализ контрольных сумм и целостности данных

Контрольные суммы (checksums) являются важным инструментом для проверки неизменности данных. Современные СУБД поддерживают страничную контрольную сумму: каждая страница имеет поле checksum, вычисляемое при записи и проверяемое при чтении.

В MS SQL SERVER: страничная контрольная сумма включается опцией PAGE_VERIFY = CHECKSUM. При каждом обращении к странице СУБД пересчитывает хеш и сравнивает с сохранённым. Если не совпадает  — страница считается повреждённой (или модифицированной вне СУБД). Для судебной экспертизы это важно: если кто-то изменил страницу через шестнадцатеричный редактор, контрольная сумма не сойдётся, и СУБД выдаст ошибку 824 (broken page chain).

Как эксперт использует контрольные суммы:

  • Сравнивает контрольные суммы исходных файлов (изъятых) с контрольными суммами заведомо неизменной копии (например, из резервной копии).
  • Если исходная БД имеет включенную страничную контрольную сумму, эксперт может проверить, были ли изменены отдельные страницы. Для этого он вычисляет хеш каждой страницы вручную (используя собственный парсер) и сравнивает с сохранённым.
  • Контрольные суммы системных таблиц также проверяются  — даже незначительное изменение структуры (добавление столбца) меняет сигнатуру страницы.
  • В одном из дел ответчик утверждал, что БД была «повреждена» в результате сбоя оборудования, поэтому данные в ней не совпадают с бумажными документами. Эксперт проверил страничные контрольные суммы  — все они сходились. Это опровергло версию о случайном повреждении. Более того, было обнаружено, что страницы, содержащие спорные записи, имели корректные контрольные суммы, но сами записи были изменены легитимным способом (через SQL UPDATE), что сохранилось в ЖТ. Вывод: фальсификация была совершена через штатные средства, а не через физическое повреждение.

⏱️ Раздел 14: Анализ временных меток файлов и артефактов ФС

Файловая система (ФС) операционной системы хранит метаданные о файлах БД: время создания (BirthTime), время последнего изменения (ModifyTime), время последнего доступа (AccessTime), время изменения MFT-записи (ChangeTime). Эти метаданные могут быть проанализированы экспертом.

Технические детали (NTFS):

  • Каждый файл имеет запись в MFT (Master File Table). В MFT-записи есть стандартные атрибуты: STANDARDINFORMATION(SI)иSTANDARDINFORMATION(SI)иFILE_NAME (FN). SI содержит четыре временных метки, FN  — ещё четыре (имя файла, создание, модификация, доступ).
  • Атрибут STANDARDINFORMATIONможетбытьмодифицированприложением(например,черезSetFileTime),аSTANDARDINFORMATIONможетбытьмодифицированприложением(например,черезSetFileTime),аFILE_NAME изменяется только при переименовании или перемещении файла. Сравнение SI и FN может выявить факт подделки времени.

Как эксперт использует:

  • Если время изменения файла .LDF (ModifyTime) не соответствует хронологии записей внутри (например, последняя запись лога имеет время 12:00, а ModifyTime файла  — 13:00)  — это допустимо (файл был закрыт и его время обновилось позже). Но если ModifyTime значительно раньше последней записи  — противоречие, указывающее на подделку.
  • Анализ временных меток теневых копий VSS (Volume Shadow Copy). В Windows Server 2012+ теневая копия создаётся каждые несколько часов. Сравнение состояния БД в разные моменты времени позволяет определить, когда именно произошло изменение.

Инструменты:

  • MFTECmd (от Eric Zimmerman) для парсинга MFT.
  • NTFS Log Tracker для анализа $LogFile (журнал NTFS, где фиксируются все операции с метаданными).
  • Srum ECmd  — для анализа временных меток из системных журналов Windows.

Раздел 15: Автоматизация экспертизы и применение ИИ для анализа больших БД

Объёмы данных в современных судебных делах достигают терабайтов. Ручной анализ ЖТ в 500 ГБ невозможен. Наш Союз разработал систему автоматизированного анализа на основе ML (машинного обучения).

Возможности системы FSE-DB-AI:

Автоматическое выделение аномалий. Нейросеть (архитектура Transformer) обучается на нормальной активности БД (типовые запросы, время, частота). Затем анализирует журналы транзакций и выявляет отклонения: массовое удаление в нерабочее время, нехарактерные паттерны UPDATE, необычные источники подключений.

Кластеризация сессий по поведению. Система группирует сессии не по IP или учётной записи, а по поведенческим признакам (набор выполняемых операций, задержки между запросами). Это позволяет выявлять случаи, когда злоумышленник использовал украденные учётные данные.

Восстановление частично перезаписанных строк через GAN (Generative Adversarial Network). Нейросеть дообучается на неповреждённых строках, затем генерирует наиболее вероятное содержимое повреждённых. Метод не даёт 100% гарантии, но суды принимают его как вспомогательный (для формирования версий).

Важно: ИИ не заменяет эксперта, а лишь помогает ему размечать данные. Окончательный вывод всегда делает человек. В регламенте Союза прописано, что автоматические выводы должны быть верифицированы вторым экспертом вручную (хотя бы на выборке 10%).

Пример из практики: В деле о хищении через обработку платежей, ИИ-система выявила скрытую периодичность: каждые 2 часа выполнялась транзакция, списывающая по 0,5 рубля с 100 000 карт. Человек-эксперт ранее не заметил этот паттерн. После проверки выяснилось, что злоумышленник встроил в код хранимую процедуру, которая запускалась по событию таймера. ЭКСПЕРТИЗА БАЗ ДАННЫХ И СУБД с элементами ИИ помогла раскрыть схему.

🔚 Заключение: техническое совершенство как гарантия истины

В данной статье мы рассмотрели технические аспекты судебной экспертизы БАЗ ДАННЫХ И СУБД: от физической структуры страниц и журналов транзакций до методов восстановления данных и противодействия фальсификации. Очевидно, что качественное экспертное исследование требует не только глубоких знаний конкретной СУБД, но и владения низкоуровневыми методами работы с носителями, парсинга логов, анализа файловых систем и даже элементов машинного обучения.

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

Если вам требуется независимое, научно обоснованное и технически безупречное исследование базы данных  — обращайтесь к нам. Наш сайт: https://kriminalist77.ru/ekspertiza-baz-dannyh/. Там вы найдёте подробные описания методик, примеры заключений и контакты для связи. Помните: данные не исчезают бесследно, если их ищет команда профессионалов. Союз «Федерация судебных экспертов»  — ваш надёжный партнёр в цифровом правосудии. 🟩

Похожие статьи

Новые статьи

⏺️ Где снять побои ребенку

Введение: цифровые хранилища как объект технического исследования В современном мире данные стали не просто ценным ресур…

🆘 Судебная строительная экспертиза по разделу земельного участка: фундаментальное исследование

Введение: цифровые хранилища как объект технического исследования В современном мире данные стали не просто ценным ресур…

🆘 Вопросы на разрешение судебно-медицинской экспертизы

Введение: цифровые хранилища как объект технического исследования В современном мире данные стали не просто ценным ресур…

⏺️Стоимость экспертизы по качеству товара

Введение: цифровые хранилища как объект технического исследования В современном мире данные стали не просто ценным ресур…

🆘 Лаборатория химического анализа почв

Введение: цифровые хранилища как объект технического исследования В современном мире данные стали не просто ценным ресур…

Задавайте любые вопросы

5+17=