Работа с базами данных SQLite

Содержание

  1. Зачем нужен ручной анализ баз SQLite?
  2. Строение баз SQLite
  3. Структура базы SQLite
  4. Команды SQLite
  5. Инструмент анализа
  6. Примеры восстановления данных
  7. Восстановление удаленных данных из поврежденной базы SQLite
  8. Поиск по ключевым словам
  9. Заключение

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

 

1. Зачем нужен ручной анализ баз SQLite?

Несмотря на огромное количество средств автоматизации работы эксперта, не стоит пренебрегать ручным исследованием баз SQLite по следующим причинам:

  • Удаленные данные. Некоторые средства автоматизации работы эксперта игнорируют поврежденные базы SQLite базы, что приводит к тому, что эксперт утрачивает ценную криминалистическую информацию, содержащуюся в подобных базах. В тоже время в ручном режиме эксперт может получить доступ к этим данным, извлечь их и в дальнейшем использовать в своей работе. Некоторые криминалистические продукты помещают подобные данные в отдельный раздел, и в дальнейшем они могут быть обработаны как текстовые данные (в них может быть проведен контекстный поиск или поиск с использованием регулярных выражений). Если эксперт использует в работе инструменты, не ориентированные на криминалистический анализ, он может упускать удаленные данные. Так как разработчики подобных инструментов не предполагают, что пользователю могут потребоваться сведения из удаленных данных.
  • Извлечение данных из облачных хранилищ. Как бы это не показалось странным на первый взгляд, но исследование баз SQLite напрямую связано с исследованием облачных хранилищ. Доступ к облачным хранилищам возможен не только по имени пользователя и паролю, но и по токену. В базах SQLite могут быть найдены токены, которые могут быть использованы для извлечения данных из облачных хранилищ. Кроме токена, хранящегося в базе SQLite в явном виде, могут быть найдены иные токены в удаленных записях. Если в исследуемом устройстве используется шифрование (мобильные устройства фирмы Apple, новейшие модели Android, некоторые смартфоны под управлением Windows Phone), извлечение данных из резервных копий, в том числе из облачных хранилищ, является практически единственным шансом восстановить удаленные данные и файлы этих устройств. Извлечение данных из облачных хранилищ с помощью токенов, реализовано в ряде криминалистических продуктов. Например, в ПО «Мобильный Криминалист».  [1].
  • Новые и старые приложения. Как правило, производители экспертного программного обеспечения выпускают обновления с определенной задержкой, что в определенных случаях не позволяет эксперту оперативно предоставлять результаты исследований инициатору, скажем, в случае смены разработчиком мобильного приложения формата хранения данных. В данном случае анализ баз данных имеет особую значимость. Та же самая ситуация складывается с поддержкой извлечения данных из устаревших операционных систем. Например, поддержка данных, извлекаемых из операционной системы Symbian OS, ограниченно реализована в криминалистических продуктах. Поэтому анализ баз SQLite для данной операционной системы, является обязательным условием результативного анализа устройства.
  • Зашифрованные базы данных. Кажется, что если база SQLite зашифрована и ключ шифрования не известен (или утерян), сделать что – либо с такими данными нельзя. Однако, на практике оказывается, что некоторые подобные базы данных содержат кеш с незашифрованными данными. Содержимое кеша может дать общее представление о сообщениях, хранящихся в базе данных.
  • Приложения для настольных компьютеров и ноутбуков. Базы SQLite получили широкое распространение не только для хранения данных мобильных приложений, но также для приложений, используемых в настольных компьютерах и ноутбуках. Данные базы данных также содержат удаленные данные, которые могут быть восстановлены с помощью Просмотрщика баз данных SQLite в ПО «Мобильный Криминалист».
  • Ошибки реализации стандарта. Удаленные данные, находящиеся в них, из-за ошибок реализации стандарта, имеющие криминалистическую значимость, также можно восстановить из баз данных SQLite. Так, в соответствии со стандартом, страницы freelist баз данных должны быть пустыми. Однако, на практике в них содержатся удаленные данные, которые могут быть восстановлены и проанализированы. Именно из-за ошибок реализации стандарта можно восстановить историю обмена сообщениями из freelist баз данных программы Skype.

 

2. Строение баз SQLite

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

 

3. Структура базы SQLite

Основной файл базы состоит из одной или нескольких страниц. Все страницы в одной базе имеют одинаковый размер, который может быть от 512 до 65536 байт. Размер страницы для файла базы определяется целым 2-ух байтовым числом со смещением 16 байт от начала файла базы данных.

Все страницы пронумерованы от 1 до 2147483646 (2^31 – 2). Минимальный размер базы: одна страница размеров 512 байт, максимальный размер базы: 2147483646 страниц по 65536 байт (~140 Тбайт).[3]

Каждая база SQLite имеет заголовок размером 100 байт, в котором описана его структура [2]:

Смещение Размер Описание
0 16 Строка заголовка “Формат SQLite 3”. Каждый правильный файл базы данных SQLite со следующих 16 байт (в HEX): 53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00.
16 2 Размер страницы базы данных в байтах. Должен быть степенью двойки между 0х09 (29=512) и 0х0F (215=32768) включительно, или значение 0х01, представляющий размер страницы 65536.
18 1 Формат файла записи. 1-roll back journal; 2-WAL.
19 1 Формат файла чтения. 1-rollbackjournal; 2-WAL.
20 1 Байты  зарезервированного пространства в конце каждой страницы. Обычно 0. Данное пространство может использоваться расширениями, например Extension SQLite использует это пространство для хранения хеш-суммы страницы.
21 1 Максимальный размер полезной нагрузки. Должно быть 64. Не поддерживается.
22 1 Минимальный размер полезной нагрузки. Должно быть 32. Не поддерживается.
23 1 Лист полезной нагрузки. Должно быть 32. Не поддерживается.
24 4 Счетчик изменения файла. Увеличивается каждый раз, после разблокирования файла базы, после изменений. Когда несколько процессов используют базу, они могут использовать этот счетчик для контроля изменений. Не используется в режиме WAL.
28 4 Размер файла базы данных в страницах. Размер считается верным, только если счетчик не равен нулю и счетчик изменений (смещение 0х24)  соответствует version-valid-for number (смещение 0х92). Если размер не валидный, то он вычисляется исходя из фактического размера базы.
32 4 Номер первой страницы freelist, или 0х00 если свободных страниц нет.
36 4 Чисто freelist страниц.
40 4 Увеличивается каждый раз при изменении схемы база данных.
44 4 Номер формата схемы. Поддерживаемые форматы 1, 2,  3 и 4.
48 4 Размер кеша по умолчанию.
52 4 Номер крупнейшей страницы  корня B-дерева, в auto_vacuum или incremental_vacuum режимах, или нулю в противном случае.
56 4 Кодировка базы данных. 1-UTF-8; 2-UTF-16LE; 3-UTF-16BE.
60 4 Номер версии пользователя. Не используется.
64 4 Не ноль для режима incremental_vacuum. Ноль в противном случае.
68 4 ID приложения. Используется для application file-format.
72 20 Зарезервировано для расширения. Должна быть равна нулю.
92 4 version-valid-for number. Счётчик изменений, изменяется, когда сохраняется номер версии (0х96).
96 4 Номер версии сервера, записывает значение после изменения базы.

 

Также любая база SQLite содержит следующие макроструктуры:

  • Lock-byte страница - страница блокировки.
  • Freelist - список пустых страниц.
  • B — tree - структура SQLite используемая для хранения данных.
  • Representation - раздел, где описана структура хранения данных в базе.

Более подробно о данных структурах можно прочитать в статье “Файловое строение SQLite” [2].

 

4. Команды SQLite

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

Для установки SQLite используются пакеты и инструкции, расположенные на странице загрузки SQLite Download Page [3] сайта SQLite.

Для управления базами данными SQLite используются два типа команд [4]. Это:

  • Мета команды
  • Стандартные команды

Мета команды.

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

Основные мета команды [6]:

Команда Описание
.show Показывает текущие настройки заданных параметров
.databases Показывает название баз данных и файлов
.quit Выход из sqlite3
.tables Показывает текущие таблицы
.schema Отражает структуру таблицы
.header Отобразить или скрыть шапку таблицы
.mode Выбор режима отображения данных таблицы
.dump Сделать копию базы данных в текстовом формате

Стандартные команды.

Стандартные команды – команды, используемые для взаимодействия с базой данных SQLite. Основными стандартными командами являются:

Команды управления базами данных: CREATE, ALTER, DROP.

Команды управления данными: INSERT, UPDATE, DELETE.

Язык запросов: SELECT.

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

 

5. Инструмент анализа

В сети Интернет можно найти сотни инструментов для анализа баз данных SQLite. Многие из этих инструментов были протестированы нами и в результате данных тестов было установлено, что наиболее оптимальным решением для анализа баз данных SQLite мобильных приложений и баз данных веб-браузеров, программ обмена мгновенными сообщениями, используемых в настольных компьютерах и ноутбуках, является Просмотрщик баз данных SQLite компании «Оксиджен Софтвер».

 

6. Примеры восстановления данных

Восстановление удаленных данных из базы SQLite.

В качестве примера восстановления данных из базы SQLite рассмотрим задачу восстановления информации об удаленных вызовах. Для этого в программе «Мобильный Криминалист» перейдем в раздел “Файловый браузер” и выберем категорию “Файлы базы данных”.

Илл. 1. Категория “ Файлы базы данных ”, содержащая в том числе файлы баз данных SQLite

Далее поместим курсор на файл “contacts2.db” и кликнем правой клавишей мыши. В выпавшем меню выберем опцию “Открыть в Просмотрщике баз данных SQLite”.

В открывшемся файле выберем раздел “calls”

Илл.2. Таблицы, содержащиеся в файле “contacts2.db”

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

Илл. 3. Записи, содержащиеся в таблице “calls”

 

7. Восстановление удаленных данных из поврежденной базы SQLite

В данном примере в ходе исследования дампа телефона в автоматическом режиме не были извлечены сведения о совершенных вызовах. В результате анализа произошедшего было установлено, что в копии памяти устройства (дампе) имеется файл “contacts2.db”, но его структура повреждена, что, вероятно, и было причиной того, что автоматический анализ данного файла закончился провалом.

Илл. 4. Удаленные сведения о вызовах, содержащиеся в поврежденном файле “contacts2.db”

 

8. Поиск по ключевым словам

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

Илл. 5. Просмотр результатов поиска, в базе SQLite, по ключевому слову «thanks»

 

9. Заключение

Базы SQLite являются значимым источником криминалистической информации. Данные базы можно найти практически в любом компьютере, ноутбуке или мобильном устройстве. В базах SQLite, содержащихся в этих устройствах, может быть найдено огромное количество информации, имеющей значение, для расследуемых дел. Часть этой информации может быть извлечена автоматически, с помощью использования специализированных криминалистических программ (например, «Мобильный Криминалист»). Исследование этих баз данных в ручном режиме может быть использовано как для подтверждения достоверности извлечения данных из них, произведенного помощью специализированных криминалистических программ, а также это может быть использовано для более глубокого криминалистического анализа подобных баз данных.

Источники:

  1. Извлечение данных из облачных сервисов http://www.oxygensoftware.ru/download/articles/MK_Clouds.pdf
  2. Файловое строение SQLite https://habrahabr.ru/post/223449/
  3. SQLite Download Page http://www.sqlite.org/download.html
  4. Команды SQLite https://www.sqlite.org/lang.html
  5. Стартуем с SQLite3 – Основные команды http://ruseller.com/lessons.php?rub=28&id=2277

 

Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 0 из 0
Еще есть вопросы? Отправить запрос

0 Комментарии

Статья закрыта для комментариев.