Whatsapp хранит переписку на смартфоне в открытом виде
https://t.me/plastikruОднажды, почти случайно, залез я посмотреть что хранит Whatsapp в своих базах данных на смартфоне. Изначально цель была не эта, но потом стало интересно.
Мой смартфон — на андроиде. Поскольку есть рут и я не боюсь экспериментов над своим девайсом, мне не составляет труда изредка пользоваться приложением, название которого я не назову :) Во-первых, это может спровоцировать кого-то на неразумные действия в чей-то адрес, а такую ответственность брать на себя мне не хочется, а во-вторых, пикабушники люто не одобряют рекламные (либо похожие на таковые) посты.
Приложение позволяет на рутованном андроиде включать и отключать разные компоненты других приложений, например, выключить активность ("окно"), которое отображает полноэкранную рекламу, либо выключить сервис, в фоне отправляющий какую-то инфу чёрт знает кому. А также даёт просматривать и изменять хранимые другими приложениями данные в их базах данных.
В андроиде есть встроенный механизм баз данных (на движке SQLite). Мулечка в том, что любое приложение может иметь БД в защищённом хранилище системы, где будет накапливать и хранить свои данные. Это если на пальцах объяснять, более опытные разработчики могут внести дополнения в комментах.
Я не силён в шифрованиях, устройстве мессенджеров и шизой на тему информационной безопасности не страдаю. Однако обнаружил любопытную вещь.
После появления Телеграма, Whatsapp начал хвастаться сквозным шифрованием. Даже если оно есть по факту и работает, то почему в БД этого месссенджера хранятся все данные в открытом виде и никак (от слова совсем) не зашифрованы?
Отправляю тестовое сообщение:
Смотрю в базу (БД msgstore, таблица messages):
Список всех баз данных:
Там хранятся различные настройки, которые в рамках данного поста неинтересны.
Список всех таблиц самой интересной БД msgstore:
Если вкратце, тут хранятся служебные данные о чатах, местоположениях и всяком таком.
В том числе — сами переписки.
Список чатов (таблица chat_list). Это тот список контактов, с которыми у вас уже начато общение, и который вы видите в первую очередь, открывая приложение.
Ещё раз покажу таблицу messages — список всех сообщений.
Отображается ИД собеседника (поле key_remote_jid, значения включают номер телефона), само сообщение в открытом виде (data), Unix-метка даты сообщения (timestamp), прямая ссылка на медиа-контент (адрес ведёт на сервера Whatsapp; поле media_url), подпись к медиа-контенту в открытом виде (к фотографии, например; поле media_caption)и много чего ещё.
Поле data пустое там, где вместо чистого текста отправлено, например, фото или состоялся звонок.
Ссылка на медиа примерно следующая:https://mmi652.whatsapp.net/d/кучарандомныхсимволов/кучадруг...
Эту ссылку можно открыть в браузере. Если она действительна, то скачивается файл file.enc, который, к счастью, зашифрован: это может быть фото, аудио, видео, что угодно ещё. Если ссылка оказывается недействительной, то в браузере ответом будет строка Media object not found.
Ниже таблица messages_fts_content (есть ещё аналогичная messages_fts). Тут тоже сообщения, и они тоже в открытом виде. Предназначение таблицы мне непонятно, ибо детально не разбирался.
Чем это опасно?
Если смартфон попадёт в руки опытного и знающего подлеца, получить все ваши переписки в Whatsapp ему не составит никакого труда. Вообще никакого. Защищены только медиафайлы, которые зашифрованы и хранятся на серверах WA.
К слову, для тех, кто не в курсе: это объясняет тот факт, что после удаления папки Whatsapp из памяти телефона, где хранится кеш фотографий, зашифрованные бекапы чатов и прочее, медиа-контент заново выкачивается при открытии чата.
Послесловие
На закуску — вот что хранит Telegram. Одна БД, предназначенная для сбора статистики об использовании приложения для отправки в Google. И все таблицы этой БД пусты!
Может быть, это общеизвестный факт в кругах (около)айтишников, но знать об этом надо каждому. Подумайте, прежде чем отдавать смартфон, например, в сервисный центр (увы, там часто работают нездоровые идиоты) или подпускать к нему идиота типа меня :)