1 of 24

Артефакти месенджерів - 2�Цифрова криміналістика

The project has been funded by the European Commission. The Education, Audiovisual and Culture Executive program (EACEA), TEMPUS IV. The content of this presentation reflects the opinion of the author.

2 of 24

КРИМІНАЛІСТИЧНА ЕКСПЕРТИЗА МЕСЕНДЖЕРА WHATSAPP

З цим месенджером складніше, ніж з Viber.

Бази даних WhatsApp можна знайти на мобільному пристрої за шляхом: «\Android\media\com.whatsapp\WhatsApp\Databases».

Віднайдені бази даних показано на рисунку.

На рисунку видно, що БД та її резервні копії є зашифрованими. Розшифрувати цю БД можна двома способами: за допомогою root-прав або через сторонні скрипти.

Локальне сховище баз даних WhatsApp на мобільному пристрої

3 of 24

Використання root-прав для розшифрування бази даних WhatsApp

Перший спосіб вимагає від дослідника отримання на мобільному пристрої адміністративних прав (тобто root). Якщо root-права наявні, достатньо лише перейти до прихованої директорії «/data/data/com.whatsapp/files/» та знайти у ній файл «key». Маючи криптографічний ключ, можна використати, наприклад, програму WhatsApp Viewer для розшифрування файлу «msgstore.db.crypt14». Наступні кроки показані на рисунку.

Розшифрування БД за допомогою WhatsApp Viewer

4 of 24

Отримання доступу до бази даних WhatsApp через сторонні скрипти

Якщо ж root-прав на мобільному пристрої немає, директорія «/data/data/com.whatsapp/files» буде недоступна. Але навіть у такому випадку можна вилучити з неї файл з криптографічним ключем та розшифрувати БД. Для цього потрібно буде використати сторонній скрипт (наприклад «WhatsApp Key Database Extractor Master»).

Для початку потрібно ввімкнути на мобільному пристрої режим розробника (Developer options) та через нього активувати функцію «USB debugging». Далі потрібно на комп’ютер встановити Python та WhatsApp Key Extractor Master. Після цього підключаємо мобільний пристрій до комп’ютера за допомогою кабелю. Коли пристрій під’єднаний, вимикаємо на телефоні інтернет та запускаємо через командний рядок скрипт «wa_kdbe.py» (його можна знайти у файлах WhatsApp Key Extractor Master).

Подальший процес вилучення криптографічного ключа за допомогою WhatsApp Key Extractor Master показано на наступному слайді.

5 of 24

Скрипт, представлений на рисунку працює наступним чином.

Спочатку він видаляє на мобільному пристрої месенджер та встановлює його більш стару версію (у нашому випадку це була legacy V2.11.431 від 2014 року).

На наступному кроці скрипт проводить модифікацію деяких вразливих компонентів месенджера і запитує користувача створити новий обліковий запис (позначено цифрою «1»).

Далі скрипт запитує користувача завантажити у WhatsApp резервну копію БД із хмарного сховища (у цей момент на мобільному пристрої з’явиться відповідне повідомлення, де потрібно буде натиснути кнопку «Backup my data», яку позначено на рисунку червоним кольором). Під час резервного копіювання перехвачуються файли «msgstore.db.crypt14», «wa.db», «axolotl.db», «chatsettings.db» та «key» (на рисунку цей момент позначено цифрою «2»).

На заключному етапі скрипт автоматично розшифровує отримані файли за допомогою ключа «key». Крім цього, скрипт пропонує користувачу створити на робочому столі комп’ютера окрему папку (в яку буде збережено розшифровані файли), а також задати для неї пароль (на рисунку позначено цифрою «3»).

Отримання ключа та бази даних з мобільного пристрою

6 of 24

Результат роботи WhatsApp Key Extractor Master

Як видно на рисунку, скрипт розшифрував нашу БД та зберіг її у вигляді файлу «msgstore.db», який вже можна легко прочитати за допомогою SQLiteStudio.

7 of 24

Файл «axolotl.db», представлений на попередньому рисунку, містить у собі ті самі криптографічні ключі, потрібні користувачу для організації захищеного процесу обміну повідомленнями. Ці криптографічні ключі показано на рисунку:

Вміст бази даних «axolotl.db»

Як видно на рисунку, у файлі «axolotl.db» знаходяться Prekeys, «private_key» та «public_key» користувача. Це означає, що, отримавши доступ до «axolotl.db», зловмисник може порушити конфіденційність та цілісність процесу обміну повідомленнями.

8 of 24

Із вмістом деяких таблиць БД «wa.db» можна ознайомитися, переглянувши наступні рисунки:

Персональні дані контактів користувача

На рисунку можна побачити таблиці «wa_contacts» та «wa_trusted_contacts», позначені цифрами «1» та «2» відповідно. У таблиці «wa_contacts» червоним кольором виділено список усіх контактів (із вказанням телефонних номерів), що записані у телефонній книжці користувача та мають додаток «WhatsApp». У таблиці «wa_trusted_contacts» можна побачити перелік довірених контактів та значення їх токенів (на рисунку виокремлено синім кольором).

9 of 24

Інформація про групи та вебсайти у WhatsApp

На рисунку цифрами «1» та «2» позначено таблиці «wa_biz_profiles» та «wa_biz_profiles_websites» відповідно. У цих таблицях зберігається інформація про бізнес-акаунти, з якими контактував користувач (із вказанням посилань, часових міток, опису, контактів тощо).

10 of 24

Дослідження файлу «msgstore.db».

БД «msgstore.db» складається зі 164 таблиць, серед яких розглянемо лише деякі основні та найбільш інформативні: «android_metadata», «call_log», «jid», «message», «message_add_on_reaction», «message_media», «missed_call_logs» та «props».

Почнемо з «andoroid_metadata» та «call_log». Вміст цих таблиць показаний на рисунку:

Огляд таблиць «android_metadata» та «call_log»

Таблиця «android_metadata», позначена на рисунку цифрою «1», містить у собі інформацію про мову локалізації месенджера.

Таблиця «call_log», позначена на рисунку цифрою «2», зберігає дані про здійснені користувачем дзвінки: ID контакту-співрозмовника (виділено червоною лінією), ID дзвінка (поле «call_id»), часові мітки, чи був це відеодзвінок (поле «video_call» зі значенням «0» вказує, що це був аудіодзвінок), тривалість (виділено синім кольором), кількість переданих під час дзвінка байт даних (позначено зеленим кольором) тощо.

11 of 24

Аналіз таблиць «jid» та «message»

Дані таблиць «message» та «jid»

На рисунку цифрою «1» позначено вміст таблиці «jid». Ця таблиця зберігає інформацію про контакти користувача: номери телефонів та сервер WhatsApp, з яким вони працюють (на рисунку виділено синім кольором).

Цифрою «2» на рисунку позначено таблицю «message», у якій зберігаються: часові мітки, статус, ID, текст (позначено червоним кольором) та інші дані повідомлень користувача.

12 of 24

У файлі «msgstore.db» існує ще дві таблиці, які є доповненням до «message»: «chat_view» та «message_view». У «сhat_view» можна побачити список чатів, які наразі активні у месенджері користувача (із вказанням номерів телефонів контактів-учасників співбесіди). Таблиця «message_view» дублює інформацію з «message».

З таблицею «message» пов’язана ще «message_add_on_reaction», у якій можна побачити ID текстових повідомлень, а також додані до них користувацькі реакції у вигляді смайлів (із часовими мітками).

13 of 24

Дослідження таблиць «message_media» та «props».

У верхній частині рисунка цифрою «1» позначено таблицю «message_media». У ній зберігається інформація про переслані та завантажені через WhatsApp медіафайли (фото, відео, документи тощо) з їх часовими мітками, директоріями зберігання (на рисунку позначено синім кольором), розширенням (параметр «mime_type»), хешем (для перевірки цілісності файлу) та іншими даними. Варто також додати, що у «message_media» є навіть посилання на скачування цих файлів з сервера (параметр «message_url»), але вони будуть зашифрованими (матимуть формат «.enc»). Для розшифрування такого файлу варто використати ключ, який зберігається у тій же таблиці «message_media» (параметр «media_key»).

Цифрою «2» на рисунку позначено вміст таблиці «props», у якій можна побачити технічну інформацію месенджера. Зокрема, у цій таблиці можна побачити ім’я користувача, яке відображається у самому месенджері (у нашому випадку це «Dymytrii»); чи було здійснено міграцію (резервне копіювання) даних, а також часову мітку цієї події; версію схеми БД «msgstore.db» та багато іншого.

14 of 24

Крім зазначених вище, у файлі «msgstore.db» корисну інформацію можуть зберігати такі таблиці:

«user_device_info» (технічна інформація пристрою користувача), «pay_transaction» (пов’язано з бізнес-акаунтом WhatsApp), «message_group_invite» (запрошення до публічних чи приватних груп WhatsApp), «keywords» (ключові слова для швидкого пошуку повідомлень у WhatsApp), «group_participants» та «community_chat» (список груп WhatsApp, членом яких є користувач),

«delete_chat_job» (видалені чати з переліком текстових повідомлень та файлів), «status» (перелік останніх прочитаних повідомлень) та інше.

15 of 24

Аналіз медіафайлів месенджера

Усі голосові повідомлення, графічні зображення різних форматів, відео та інші документи WhatsApp зберігає на мобільному пристрої у директорії «…\Android\media\com.whatsapp\WhatsApp\Media» у відповідних за назвою папках.

Графічні зображення WhatsApp зберігає з мінімальним набором метаданих: дата створення, назва, розширення. Але якщо цей же файл перемістити на робочий стіл та відкрити його властивості, то можна вже дізнатися його точний розмір у пікселях.

Загалом, в обох випадках WhatsApp видаляє практично всі інформативні метадані.

16 of 24

КРИМІНАЛІСТИЧНА ЕКСПЕРТИЗА МЕСЕНДЖЕРА TELEGRAM

Даний месенджер є хмарним (тобто він зберігає персональні дані користувача на територіально рознесених серверах компанії). Але вищезазначене не стосується медіафайлів (фото, відео, документи та аудіоповідомлення), які теж можуть містити чимало конфіденційних даних.

Шляхи зберігання медіафайлів та особливості роботи з метаданими

На мобільних пристроях Telegram зазвичай зберігає медіафайли у двох окремих директоріях: «Internal storage\Telegram» та «\Android\data\org.telegram .messenger\files». На стаціонарних комп’ютерах зазвичай це «C:\Users\ ”user”\Downloads\Telegram Desktop».

17 of 24

Місце зберігання фото та відео Telegram

Як видно на рисунку, у двох окремих директоріях існують однакові папки, але їх вміст дещо відрізняється. Так, директорія, що позначена на рисунку цифрою «1», містить у собі медіафайли, датою створення яких є 2021 рік.

У директорії, позначеній на рисунку цифрою «2», знаходяться медіафайли, датою створення яких є 2022-2023 роки.

Така особливість зберігання файлів, імовірно, обумовлена тим, що у 2021 році месенджер в якості стандартної директорії для збереження файлів використовував «Internal storage\Telegram», а починаючи з 2022 – змінив її на «\Android\data\org.telegram.com\files\Telegram».

Цікавим є ще те, що в «Internal storage\Telegram» (як і в інших директоріях месенджера) можна знайти файли, які було давно остаточно видалено з мобільного пристрою користувача (або його співрозмовників). Але пояснити це теж досить просто: оскільки месенджер зберігає вміст чатів у хмарному сховищі, то і медіафайли, додані користувачем до переписки, завантажуються на сервер. Через таку особливість Telegram часто використовують в якості безкоштовного сховища даних (файли можна видалити з мобільного пристрою, але вони залишаться на серверах, а тому їх можна у будь-який час повторно завантажити).

18 of 24

Аналіз папки «Telegram Audio».

У цій папці месенджер зберігає голосові повідомлення як самого користувача, так і його співрозмовників.

Будь-яке голосове повідомлення можна легко відкрити та прослухати. Але якщо дослідити властивості цих аудіофайлів, то можна побачити, що месенджер видаляє практично всі метадані. При цьому, якщо ці ж голосові повідомлення перемістити з локальних файлів месенджера на робочий стіл комп’ютера, то деякі метадані стають доступними для перегляду.

Аналіз папки «Telegram Files»

У ній зберігаються файли різного формату, які користувач (або його співрозмовник) завантажували до чату.

Файли в Telegram зберігаються аналогічним до голосових повідомлень чином: у локальному сховищі метаданих немає, а при переміщенні на інший пристрій – з’являються (.

19 of 24

Аналіз папок «Telegram Images» та «Pictures»

Загалом, папка «Pictures», знаходиться на мобільному пристрої за адресою «\Android\data\org.telegram.com \files» та використовується месенджером для збереження фотографій, зроблених самим користувачем.

У папці «Telegram Images», можна знайти графічні зображення, отримані користувачем від співрозмовників у чатах або групах (власних фотографій користувача тут немає).

Власні фотографії користувача, які зберігаються у папці «Pictures», мають дуже велику кількість метаданих (виділено червоним кольором), а чужі графічні зображення із папки «Telegram Images» – ні.

20 of 24

Аналіз папки «Telegram Video»

Як видно на рисунку, Telegram зберігає відеофайли аналогічним до фотографій та голосових повідомлень чином.

21 of 24

Місце зберігання Telegram даних облікових записів

Окрім медіафайлів, на комп’ютерах користувачів месенджер зберігає і деяку персональну інформацію. Як відомо, Telegram Desktop (версія месенджера для комп’ютерів) часто зберігає власну технічну інформацію за шляхом «C:\Users\”user”\AppData \Roaming\Telegram Desktop\». У вищезазначеній директорії також можна знайти папку «tdata», яка використовується месенджером для зберігання даних про облікові записи користувача. Вміст папки «tdata» представлено на рисунку.

На рисунку можна побачити велику кількість зашифрованих файлів, у яких зберігаються налаштування месенджера (файл «settingss»), кеш медіафайлів із секретних чатів (папка «user_data\media_cache»), псевдоніми користувача та інші дані облікового запису.

22 of 24

Отримання переписок та інших даних з месенджера

Telegram зберігає переписки користувача у «хмарі». Ці листування, а також інші персональні дані можна скачати з віддаленого сервера та прочитати у зручному форматі за допомогою двох простих способів.

Так, перший спосіб пов’язаний з функцією «Export Telegram data», яку було додано в месенджер у рамках відповідності загальному регламенту із захисту даних. Таким чином, будь-який користувач може у довільний час скачати з месенджера власну персональну інформацію у повному обсязі.

Другий спосіб пов’язаний зі сторонніми скриптами (у нашому випадку йдеться про бібліотеку Python для роботи з протоколом MTProto та Telegram API – Telethon, а також програму «Telegram analysis master»). Приклад використання Telethon у комбінації з telegram analysis master показано на рисунку.

Викачування даних з Telegram

На рисунку можна побачити приклад скачування з віддаленого хмарного сервера Telegram переписок користувача. Загалом, для роботи скрипта, представленого на рисунку у цифрового криміналіста повинна бути наступна інформація: логін та пароль від облікового запису Telegram підозрюваного, а також токен для Telegram API (його можна отримати на сайті «core.telegram.org»).

23 of 24

Результатом роботи скрипта «ChannelMessages.py», показаного на попередньому рисунку будуть файли, зображені на рисунку:

У правій частині рисунка фіолетовим кольором позначено файли, які вдалося витягнути з Telegram Desktop. Вміст, а також структуру одного з цих файлів («Your-Telegram-Username.db») представлено у лівій та центральній частині рисунка.

Файл «Your-Telegram-Username.db» містить у собі декілька таблиць, найінформативнішою з яких є «entities». У «entities» записано інформацію про облікові записи та групові чати (канали), з якими користувач контактував: їх usernames (позначено червоним кольором на рисунку), номери телефонів (виділено синім кольором), дату комунікації (позначено зеленим кольором), ім’я, хеш, ID тощо.

У таблицях «sent_files» та «sessions», представлених на рисунку, можна побачити перелік пересланих користувачем файлів і IP-адресу з ключем авторизації відповідно. Таблиці «versions» та «update_state» містять у собі деякі технічні відомості месенджера.

24 of 24

У файлі «channel_messages.json» можна побачити перелік текстових повідомлень, скачаних з Telegram. Вміст вищезазначеного файлу представлений на рисунку:

Як видно на рисунку, текстові повідомлення зберігаються у файлі «channel_messages.json» у JavaScript Object Notation форматі. Для перегляду файлу «channel_messages.json» можна використати будь-який редактор, який вміє працювати з таким форматом (у нашому випадку це був сайт «jsonviewer.stuck.hu»).

На рисунку вміст текстових повідомлення можна побачити у полі «message» (підкреслено червоною лінією).

Кожен символ такого повідомлення представлений у специфічному форматі, а тому його потрібно перекодувати у зрозумілий текст. Це можна зробити, наприклад, за допомогою декодера «online-decoder.com». Перекодоване повідомлення виділене на рисунку зеленим кольором.

У «channel_messages.json» можна ще знайти велику кількість додаткової інформації про текстові повідомлення: дату та час відправки, прикріплені файли, ідентифікатор користувача тощо (це все підкреслено на рисунку червоною лінією).