Перейти к основному содержимому
Reincubate

Technology, security analysis

Криминалистика iOS и восстановление данных SQLite: подробный разбор и сравнение

Aidan FitzpatrickОпубликовано 1 июня 2018 г.Обновлено 17 февраля 2020 г.
На этой странице
Cover image for: Криминалистика iOS и восстановление данных SQLite: подробный разбор и сравнение

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

Как вообще iPhone хранят данные?

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

В SQLite такие операции очистки и оптимизации возможны, но обычно выполняются нечасто. Для пользователей это правильный баланс: ваш iPhone работает достаточно быстро, а данные остаются надёжными. И если потребуется, у вас будут выше среднего шансы восстановить удалённые данные iOS именно потому, что это обслуживание выполняется редко.

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

  • Когда в них нужно добавить информацию, вы кладёте папку с аккуратной этикеткой, поясняющей, что в ней лежит, — так работает ваш телефон.
  • Но когда вы удаляете данные, телефон не вынимает папку из шкафа, а просто снимает с неё этикетку. Старые данные не удаляются, они остаются без этикетки («осиротевшими», как мы могли бы сказать технически). Поэтому при удалении данных телефону не нужно проходить сравнительно медленный процесс освобождения места в шкафу. Он просто говорит: «А, забудем об этом» — и идёт дальше.
  • Когда нужно добавить новые данные, телефон при наличии места просто кладёт новые папки. Если места не хватает, он смотрит, нет ли где-нибудь таких папок без этикеток, и если есть, выбрасывает из них столько, сколько нужно, чтобы освободить место.

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

Восстановление удалённой информации из SQLite на iOS

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

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

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

  • Хорошие. Они используют множество разных приёмов, созданных и проверенных на тысячах разных примеров удаления или повреждения.
  • Плохие. Они восстанавливают только оставшееся содержимое, которое полностью цело и содержит ряд подсказок о том, куда оно относится.
  • Злые. Они сканируют осиротевшее содержимое и помечают любой старый мусор, который хоть как-то может вписаться в контекст, если прищуриться. «NSMutableArray» — может ли это быть названием вашей пропавшей записи контакта? Хм.

Восстановление удалённых данных SQLite с iOS в реальных условиях

Теперь, когда мы немного рассказали о том, как это работает, посмотрим, насколько это эффективно в реальных условиях. Ведь мы хотим дать обычным пользователям возможность вернуть свои данные, не будучи экспертами. Получается ли у нас? Мы сравним четыре ведущих инструмента восстановления SQLite с iPhone Backup Extractor. На момент написания статьи последние версии этих инструментов таковы:

НазваниеВерсия и дата выпускаПлатформыЦена
Reincubate iPhone Backup Extractor7.6.1.2201, май ’18Windows и macOS$34.95
SQLite Doctor от SQLabs1.3.0, авг. ’13Windows и macOS$49
Sqlite Database Recovery от SysTools1.2, дата выпуска не указанаТолько Windows$149
Stellar Phoenic Repair For Sqlite от Stellar Data Recovery 1.0, дата выпуска не указанаТолько Windows$599
Forensic Explorer (FEX) от GetData4.3.5.7364, май ’18Только Windows$1,695
Sqlite Forensics Explorer от Acquire Forensics2.0, дата выпуска не указанаТолько Windows$149

Для этого теста мы возьмём большую базу данных, полную реальных данных. В нашем случае это база данных «Messages» размером 169 МБ с iPhone под управлением iOS 11. Посмотрим на неё: приведённые ниже команды показывают размер файла и результат запроса, подсчитывающего, сколько в ней сообщений.

$ ls -l sms.db
-rw------- 1 afitzpatrick 177565696 Oct  2  2017 sms.db

$ sqlite3 sms.db
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite> SELECT COUNT(*) FROM message;
220261

Итак, сообщений больше 220 000. Это те, которые не были удалены. Но сколько удалённых сообщений смогут найти инструменты восстановления?

Восстановление данных SQLite с iOS: результаты

Мы запустили все перечисленные выше инструменты на одном и том же файле и записали результаты в таблицу ниже. Мы бы с удовольствием использовали Mac, но поскольку не все инструменты поддерживают macOS, мы взяли ПК с 16 ГБ ОЗУ под управлением Windows 10 Pro (версия 1803, сборка 17134.48).

ReincubateAcquire ForensicsSQLabsSysToolsStellar Data RecoveryGetData
Восстановлено34256 (но в основном мусор)00 (после долгого сканирования найдено 220 261 — столько же, сколько уже было действительных записей!)0 (при каждом запуске он досчитывал до 37 удалённых сообщений, но не завершал процесс и вылетал с ошибкой 0x40000015. Экспортировать или сохранить что-либо не удалось.)0 (We reached out multiple times to purchase a license, but never heard back.)
Восстановлен «мусор»?Нет; все найденные сообщения оказались действительными восстановленными. Эмодзи, даты, время и номера отправителей и получателей восстановлены.Большая часть восстановленного — мусорНам несколько раз пришлось вручную вводить максимальные значения ROWID, чтобы попробовать разные параметры. Ничего не было восстановлено ни разу.Найдены только уже существовавшие сообщения.Вылетал каждый раз, поэтому сказать ничего нельзя.Wasn’t possible to get it running.
Эффективная стоимость одного восстановленного сообщения (в этом примере)$0.10$2.66>$49>$149>$599>$1,695

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

Восстановление данных SQLite в разных версиях iOS

С каждым новым выпуском iOS у Apple есть возможность изменить то, как операционная система работает с базами данных SQLite. Это касается и оптимизации того, как часто выполняются очистка и другие операции обслуживания и когда они запускаются.

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

В iOS 11 мы начали замечать рост активности по очистке баз данных SMS и iMessage. Восстановление по-прежнему возможно, и вероятнее для более свежих сообщений, удалённых позже, но не гарантировано.

В iOS 12 частота очистки базы данных SMS и iMessage заметно выросла. Поскольку этот выпуск позиционировался как сосредоточенный на обслуживании и ускорении, такое изменение логично: оно, вероятно, обеспечит более плавную работу в самых распространённых операциях.

Что нужно сделать, чтобы воспользоваться этим при восстановлении данных iOS?

Возможно, это самое приятное: эта технология встроена в Reincubate iPhone Backup Extractor с самых первых дней. Когда вы работаете с приложением, оно применяет эту технологию при просмотре или экспорте сообщений и ряда других типов данных. В зависимости от того, какие данные вы смотрите и как, приложение покажет, какие фрагменты данных были восстановлены, а какие нет. Всё это уже включено.


Об авторе

Aidan Fitzpatrick

Основатель, генеральный директор

Aidan основал Reincubate в 2008 году, создав первый в мире инструмент восстановления данных для iOS. С тех пор он превратил компанию в одного из ведущих в мире независимых поставщиков программного обеспечения (ISV), сотрудничая с такими компаниями, как AMD, Qualcomm и HP, чтобы создавать значимые функции машинного обучения для видеопрограмм, главным примером которых служит экосистема приложений Camo. Под руководством Aidan Reincubate четыре раза получала высшую бизнес-награду Великобритании, вошла в список The Sunday Times 100 Tech и была отмечена номинациями на Apple Design Award и в App Store. Его работы и методы нередко цитируются в научных статьях по мобильной криминалистике, а его приглашают выступать на мероприятиях таких компаний, как Google, Microsoft и Snap.


Комментарии (1)

jon 22 мая 2019 г.

I have a question. When apple release new ios , do they provide any information about schema change? or we can get them from ios backup. Thanks in advance.

Ответ службы поддержки Reincubate 22 мая 2019 г.

Hey Jon. Apple don't, and it's not just them changing things: any time a third-party app gets updates things can change. We have a set of tools and a team testing these things every day.


Похожие материалы


Популярные статьи

Помощь