Важнейшим источником криминалистически значимой цифровой информации являются программы (системы) обмена мгновенными сообщениями, которые в пользовательском пространстве называются «мессенджерами». Среди многообразия существующего программного обеспечения именно мессенджеры (Telegram, WhatsApp, Signal, Viber, Max и др.) выделяются колоссальным объемом пользовательской информации: сведениями об обмене сообщениями и медиаконтентом, аудио- и видеозвонках, геометках, а в отдельных случаях даже о криптотранзакциях.

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

SQLite в цифровой криминалистике

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

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

2. Кроссплатформенность. Один и тот же формат может использоваться приложением для хранения данных в различных операционных системах: Microsoft Windows, Apple macOS, Linux.

3. Часто используется для хранения данных в браузерах (Chrome, Mozilla Firefox и др.), мессенджерах (Signal, Viber и др.), офисных пакетах (LibreOffice), редакторах изображений и иных программных продуктах.

На практике для цифровых криминалистов и компьютерно-технических экспертов формат SQLite представляет профессиональный интерес по следующим причинам:

Среди таких программных продуктов необходимо выделить инструменты с открытым исходным кодом (Open Source), такие как DB Browser for SQLite и MiTeC SQLite Query. Также существует множество модулей для работы с SQLite, встроенных в платформы цифровой криминалистики.

Организация хранения данных в Signal Desktop

В целях наглядной демонстрации особенностей хранения данных в базах SQLite популярных мессенджеров и обеспечения к ним доступа рассмотрим вариант организации хранения информации в десктоп-версии мессенджера Signal для ОС MS Windows — Signal Desktop.

Приложение Signal Desktop представляет собой десктопную версию Signal для ОС MS Windows, Apple macOS и Linux, которая синхронизируется с мобильным приложением. Данный мессенджер поддерживает определенный набор функциональных свойств, типовых для таких сервисов:

Одной из ключевых особенностей Signal Desktop является то, что при инсталляции, первом запуске программы и аутентификации с использованием конкретной учетной записи пользователь определяет его настройки: загружать всю историю сообщений и вложения (медиафайлы) за последние 45 дней либо не синхронизировать имеющиеся данные. Эта особенность при регистрации приложения влияет на то, что в итоге будет содержаться в базе данных Signal Desktop (рис. 1).

Рис. 1. Процесс активации Signal Desktop на компьютерном устройстве.
Рис. 1. Процесс активации Signal Desktop на компьютерном устройстве.

Рассматривая организацию хранения данных в Signal Desktop, необходимо обратить внимание на его файловую структуру. Каталог регистрации Signal Desktop в MS Windows по умолчанию расположен в системном каталоге %AppData%, имеет наименование Signal и содержит ряд внутренних подкаталогов и служебных файлов (рис. 2).

Рис. 2. Структура каталога регистрации Signal Desktop в файловой системе.
Рис. 2. Структура каталога регистрации Signal Desktop в файловой системе.

Кратко его структуру можно описать следующим образом:

Шифрование базы данных Signal Desktop

Если говорить об архитектуре приложения Signal Desktop, то оно построено на платформе Electron. В приложении используется база данных формата SQLite со встроенным шифрованием SQLCipher. Также дополнительно шифруются отправленные и полученные пользователем вложения.

SQLCipher представляет собой специализированное расширение с функцией шифрования для баз данных SQLite, основанное на алгоритме AES-256. Оно шифрует каждую страницу базы данных в отдельности. В результате этого процесса файл базы данных выглядит как случайный бинарный массив без наличия каких-либо идентификаторов и сигнатур, позволяющих категорично определить его формат.

Обычные программные инструменты, предназначенные для работы с SQLite, по умолчанию не поддерживают работу с SQLCipher. Для демонстрации этого факта представлен фрагмент попытки открытия базы данных SQLCipher при помощи DB Browser for SQLite и получения соответствующего уведомления об ошибке (рис. 3).

Рис. 3. Попытка открытия файла базы данных в DB Browser for SQLite.
Рис. 3. Попытка открытия файла базы данных в DB Browser for SQLite.

Получение ключа дешифрации

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

В целях обеспечения доступа необходимо использовать версию программы DB Browser for SQLite, предназначенную для работы с SQLCipher. Для этого запускается инструмент, в рабочем окне указывается адрес расположения файла базы данных, после чего отображается диалоговое окно с предложением ввести ключ дешифрации (рис. 4).

Рис. 4. Процесс открытия файла базы данных в DB Browser SQLCipher.
Рис. 4. Процесс открытия файла базы данных в DB Browser SQLCipher.

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

Учитывая, что рассматриваемая база данных Signal Desktop шифруется сразу при инсталляции пакетов приложения и защищена механизмом MS Windows DPAPI, ключ дешифрации имеет системное происхождение, и для обеспечения доступа к содержимому базы необходимо установить его значение.

Для этого необходимо изучить содержимое двух ранее указанных служебных файлов, размещенных в каталоге регистрации приложения Signal Desktop: Local State и config.json.

Файл Local State

Как ранее указывалось, в файле Local State содержится вспомогательный ключ шифрования. Изучая его содержимое, можно извлечь закодированную в base64 строку и выполнить ее декодирование.

Затем в полученном результате следует отбросить hex-значения, соответствующие DPAPI, а оставшиеся hex-значения необходимо использовать как строку для вычисления вспомогательного ключа через механизм MS Windows DPAPI. Для этого также используем утилиту с открытым исходным кодом Nirsoft DataProtectionDecryptor. Дешифрацию через механизм MS Windows DPAPI можно выполнять как в запущенной (текущей) системе, так и на внешнем диске/примонтированной системе. Для доступа к механизму MS Windows DPAPI должны быть предварительно установлены учетные данные пользователя системы (учетная запись и пароль).

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

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

Рис. 5. Процесс получения вспомогательного ключа шифрования.
Рис. 5. Процесс получения вспомогательного ключа шифрования.

Файл config.json

Для установления ключа дешифрации требуется изучить содержимое файла config.json, который содержит ключ шифрования. Необходимо его извлечь, при этом никаких дополнительных операций преобразования выполнять не требуется. Извлеченный ключ следует проанализировать в hex-редакторе (рис. 6).

Рис. 6. Анализ содержимого файла config.json.
Рис. 6. Анализ содержимого файла config.json.

В hex-редакторе требуется выделить четыре параметра:

Общий алгоритм получения ключа для дешифрации базы данных выглядит следующим образом: совокупность значений псевдослучайного числа, шифротекста и кода аутентификации из файла config.json, а также вспомогательный ключ из файла Local State, на основе которых выполняется преобразование функции AES-256 в режиме Galois/Counter Mode (GCM).

Дешифрация и анализ базы данных

В результате преобразования устанавливается ключ дешифрации, при помощи которого обеспечивается доступ к информационному содержимому базы данных SQLite с SQLCipher приложения Signal Desktop (рис. 7).

Рис. 7. Содержимое базы данных db.sqlite.
Рис. 7. Содержимое базы данных db.sqlite.

База db.sqlite имеет типовую структуру реляционной базы данных, состоящей из таблиц с параметрами и данными. Так, в таблице messages_fts_content содержатся тексты отправленных и полученных пользователем сообщений. Дата и время сообщений традиционно представлены в формате Unix Epoch. Также имеются иные таблицы, которых всего порядка 56. Приведем малую часть из них:

Каждая из таблиц содержит некоторое количество столбцов. В частности, таблица messages содержит порядка 44 столбцов данных, включая идентификаторы сообщений и чатов, дату и время отправки/получения, сведения о наличии или отсутствии вложений и др.

Дешифрация вложений

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

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

В декодированном (из base64) значении localKey, размер которого составляет 64 байта, необходимо выделить два параметра (рис. 8):

Рис. 8. Анализ содержимого localKey.
Рис. 8. Анализ содержимого localKey.

Далее для вычисления ключа дешифрации каждого вложения применяется алгоритм AES-256-CBC.

Общий алгоритм получения ключа для дешифрации каждого вложения в Signal Desktop выглядит следующим образом: совокупность значений size, plaintextHash и localKey (вектор инициализации и ключ AES-256), а также адрес файла и формат, на основе которых выполняется преобразование функции AES-256 в режиме Cipher Block Chaining. После дешифрации каждого из вложений в его структуре необходимо удалить служебный заголовок — первые 16 байт. Далее сопоставляются размер полученного файла-вложения и его хеш с данными, которые соответствуют значениям в таблице базы данных. Если они идентичны, это свидетельствует о том, что процесс дешифрации выполнен успешно.

Таким образом, в статье наглядно продемонстрирован рабочий алгоритм обеспечения доступа к информационному содержимому локальной базы данных приложения Signal Desktop, зашифрованной через расширение SQLCipher с защитой MS Windows DPAPI, с отдельным шифрованием вложений и их последующей дешифрацией. Также необходимо отметить, что указанный алгоритм имеет ограничения, одним из которых является необходимость наличия сведений об учетных данных пользователя MS Windows.

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