6882

Что скрывает MAX #3: Переписка в MAX - открытая книга7

Серия Что скрывает MAX

Третья часть цикла

Сегодня затронем все те вопросы которые всплывают в комментариях: есть ли вообще в MAX шифрование? Как он смотрится в сравнении с Telegram, WhatsApp и Signal? Что там с безопасностью личных файлов?


TL;DR

Как сказал один "великий" человек: добавить шифрование можно, а зачем ?

  • В MAX нет сквозного e2e шифрования (от пользователя к пользователю) ни для одного типа общения - личные чаты, группы, звонки, голосовые, файлы

  • Все сообщения идут открытым текстом через внутри обычного TLS - сервер VK видит каждое слово

  • Для сравнения: в Telegram есть Secret Chats и E2E-звонки, в WhatsApp заявлен и проверен исследователями E2E для всего, в Signal - E2E + open source

  • На телефоне всё хранится в открытой SQLite базе данных

  • Фотографии из чатов доступны по прямой ссылке без авторизации и не истекают годами

  • MAX - единственный из четвёрки, где владелец видит 100% сообщений и файлов


Часть 1: Шифрование в MAX - его просто нет

Сначала объясню простыми словами

Когда вы отправляете сообщение в мессенджере, оно проходит через сервер. Вопрос: может ли сервер его прочитать?

Два варианта:

  • TLS (транспортное шифрование) - сообщение зашифровано по дороге от вас до сервера и от сервера до собеседника. Но на сервере оно лежит в открытом виде. Сервер видит всё. Это как если бы вы отправили письмо в конверте через почту, а на сортировочном пункте его открыли, прочитали, положили в новый конверт и только потом отправили получателю.

  • E2E (сквозное шифрование от пользователя к пользователю) - сообщение зашифровано ключом, который есть только у вас и собеседника. Сервер передаёт зашифрованный blob и не может его прочитать. Это как отправить запертый сейф - почта передаёт, но ключ только у получателя.

В MAX - только TLS. E2E нет.


Проверил все типы общения

Декомпилировал APK, посмотрел wire-протокол, проанализировал трафик. Вот мои результаты:

Личные сообщения - plaintext MsgPack по TCP. Из одного перехвата за 30 минут я извлёк 22 телефонных номера и 6 уведомлений о прочтении - всё открытым текстом.

Групповые чаты - тот же протокол, тот же формат. Никакой разницы с личными.

Каналы - аналогично.

Голосовые звонки - шифрование DTLS-SRTP есть, но оно от вас до сервера VK, не от вас до собеседника. Все звонки идут через TURN-сервер VK. Ключи шифрования у VK.

Видеозвонки - то же что голосовые. Тот же TURN-сервер, те же ключи у VK.

Конференции - через отдельный vchat API на OK.ru, та же схема с relay.

Голосовые сообщения - загружаются на CDN без шифрования. Сервер VK их ещё и переводит в текст (отдельная фича).

Видеосообщения - то же что и голосовые.

Файлы / фотографии / Аудио и Видеокружки - без шифрования на CDN. Про это отдельная история ниже.

Секретные чаты - их нет. Вообще. В коде нашёл UI-ресурсы с названиями вроде secret_mode_started, но крипто-кода за ними ноль. Ни DH-обмена ключами, ни отдельного протокола.


А что на сайте MAX написано про шифрование?

Я проверил все официальные документы:

  • legal.max.ru/pp (политика конфиденциальности) - слово «шифрование» не встречается ни разу.

  • legal.max.ru/ps (пользовательское соглашение) - ноль информации

  • help.max.ru/help/security (раздел безопасности) - пароли, сессии, онлайн-статус, родительский контроль. Шифрование не упоминается.

  • «Безопасный режим» - скрытие из поиска, звонки только от контактов, фильтр контента 16+/18+.

Для сравнения: у Telegram есть отдельная страница про MTProto и шифрование . У WhatsApp - Security Whitepaper. У Signal - полная документация протокола и исходный код. У MAX - ничего, потому что нечего описывать.


Часть 2: MAX vs Telegram vs WhatsApp vs Signal

Самый частый запрос в комментариях: «а Telegram тоже так делает?» и «разбери WhatsApp».

Собрал таблицу от наименее защищённого к наиболее. Данные по MAX - мой анализ кода. По Telegram - документация + open source клиент. По WhatsApp - их Whitepaper + внешние аудиты (код закрыт). По Signal - open source + аудиты.

MAX единственный из четырёх, где: код закрыт + нет E2E ни для чего + сервер видит 100% + медиа без авторизации + ни одного аудита.

Источники:


Часть 3: Медиафайлы для всех, удаление не удаляет

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

Фотографии - без авторизации, навсегда

Каждая фотография хранится на CDN по адресу вроде i.oneme.ru/i?r=%3C%D1%82%D0%BE%D0%BA%D0%B5%D0%BD%3E. Токен - подписанная строка, которую генерирует сервер.

  • Авторизация не нужна. Открываете ссылку в любом браузере, без логина - фото загружается

  • Ссылка не истекает.

  • CORS открыт: Access-Control-Allow-Origin: * - любой сайт может подгрузить картинку

  • Удалил сообщение, а фото осталось. Проверено: отправил фото, удалил, открыл по ссылке и увидел свое "удаленное" изображение

Токен уникальный и изменённый токен возвращает 400. Но сами токены раздаются всем участникам чата открытым текстом через wire-протокол. Переслали кому-то фото и этот кто-то навсегда имеет рабочую ссылку. Отозвать ссылку нельзя у пользователя механизма отзыва нет, только у сервера.

Вот пример отправленного фото в чат и позже удаленное из него ссылка :

https://i.oneme.ru/i?r=BTExG6MjcZqk1JkYftXzTuS6B5wJnWe_slW64...

Вы это можете так же легко проверить загрузите большое изображение, удалите его и попробуйте загрузить его еще раз и оно загрузится мгновенно так как файл уже есть...

Аудиосообщения - без авторизации, 24 часа

Голосовые сообщения хранятся на maxvd*.okcdn.ru. Тут чуть лучше - URL подписан и живёт 24 часа. Но:

  • Авторизация не нужна. Так же как с фотографиями

  • Удалил сообщение, а аудио осталось. Проверено: отправил фото, удалил, открыл по ссылке и услышал свое "удаленное" аудио. Вы так же можете это легко проверить

  • Срок жизни - 24 часа (поле expires в URL). В пределах суток аудио доступно кому угодно

  • Все параметры URL подписаны подменить srcIp, id, sig нельзя (400). Но имея полную ссылку - скачать может любой

URL аудио содержит IP (srcIp=146.70.231.14) и ID пользователя (userId=125915255) открытым текстом. Ссылка

https://maxvd177.okcdn.ru/?expires=1776129938878&srcIp=1...


Часть 4: FAQ из комментариев

«TLS - это тоже шифрование. В чём проблема?»

TLS шифрует канал между вами и сервером. Никто посередине (провайдер, сосед с Wi-Fi) не прочитает. Но сервер - прочитает. А сервер MAX - это сервер VK. VK зарегистрирован как «организатор распространения информации» и по закону обязан хранить переписку и отдавать по запросу.

E2E шифрование решает эту проблему - даже владелец сервера не может прочитать сообщения. В MAX его нет.

«Мне скрывать нечего»

Не про то, есть ли что скрывать. Про то, кто контролирует ваши данные.

Без E2E:

  • Взлом сервера = все сообщения утекли.

  • Запрос по закону = все сообщения отдали.

  • Инсайдер в компании = все сообщения / контакты / файлы доступны (а учитывая сколько сейчас стоит пробив по номеру телефона и другие "сервисы". то скоро появится новая услуга).

С E2E: даже если сервер взломан - данные зашифрованы ключами, которые есть только у вас.

«Может, VK добавит шифрование позже?»

Добавить E2E в существующий мессенджер - это не флаг на сервере переключить. Нужно:

  • Реализовать протокол обмена ключами (DH / X3DH)

  • Добавить double ratchet или аналог для каждого чата

  • Переписать хранение сообщений (сервер больше не может их читать)

  • Переделать поиск, превью, пуши (всё это сейчас работает потому что сервер видит текст)

В коде MAX нет ни одного класса связанного с E2E - ни DH, ни pre-keys, ни session keys. Архитектура строилась без расчёта на это.

«В Telegram обычные чаты тоже не E2E - значит то же самое?»

Не совсем. У Telegram есть альтернатива:

  • Есть Secret Chats - настоящий E2E (правда только 1-на-1 и только мобильные)

  • Звонки - E2E с emoji-верификацией

  • CDN-файлы требуют авторизацию и зашифрованы AES-256-CTR

  • Есть certificate pinning

У MAX ничего из этого нет. Ни одной альтернативы для пользователя, который хочет приватность.

Telegram не идеален - обычные чаты действительно сервер может читать и просматривать. Но у пользователя есть выбор открытые чаты или защищенные. В MAX выбора нет.

Если вам нужен E2E для всех чатов (не только секретных) - WhatsApp или Signal. В WhatsApp E2E включён по умолчанию для всего. В Signal - E2E + open source + независимые аудиты. Так же можно еще посмотреть на мессенджер Threema


Часть 5: Доказательства

5.1 Plaintext MsgPack - перехват трафика

Через Frida-хуки на SSL_read/SSL_write я перехватил расшифрованный трафик MAX. Формат - MsgPack (бинарный JSON). Декодер писал сам

За 30 минут работы приложения перехватил 85 фреймов. Из них:

  • Опкод 0x80 (INCOMING_MESSAGE_PUSH) - входящие сообщения, plaintext, видно текст и sender

  • Опкод 0x40 (SEND_MESSAGE_NEW) - исходящие сообщения, plaintext

  • Опкод 0x23 (SUBSCRIBE_PRESENCE) - кто онлайн

    MAX:

    - Формат: точный timestamp + status (1=online, 2=offline)
    - Максимальная точность: секунда. Unix timestamp seen: 1776043570 = 2026-04-13 01:26:10 UTC

    Telegram:

    - Точность плавает: был недавна, был на этой неделе....

  • Опкод 0x84 (REPORT_READ_RECEIPT) - кто прочитал

  • 22 телефонных номера в открытом виде

Всё это идёт внутри TLS. Сервер VK видит тот же plaintext.

5.2 Protos.java - нет полей шифрования

Файл: ru/ok/tamtam/nano/Protos.java

Класс Audio (голосовые сообщения):

  • url, token, audioId, duration, transcription

  • Полей IV, key, cipher, encrypted - нет

Класс Video (видеосообщения):

  • url, token, videoId, duration, thumbnail, transcription

  • Полей IV, key, cipher, encrypted - нет

Для сравнения: в Signal Protocol каждое сообщение содержит ratchet key, counter, cipher header. В MAX - просто текст.

5.3 network_security_config.xml - нет certificate pinning

Файл: res/xml/network_security_config.xml

Ноль элементов <pin-set>. Зато 5 доменов с cleartextTrafficPermitted="true" - это HTTP без шифрования вообще (для MobileID российских операторов).

Certificate pinning - это защита от MiTM-атак (подмена сертификата на уровне провайдера или wifi). Telegram, WhatsApp, Signal - все его используют. MAX - нет.

5.4 Хранение на устройстве

Вся переписка в SQLite без шифрования:

  • Нет SQLCipher - база открывается любым SQLite-просмотрщиком

  • Нет EncryptedSharedPreferences - токены авторизации в plaintext

  • AndroidKeyStore используется только для биометрической авторизации, не для сообщений


Выводы

MAX - мессенджер который не шифрует ничего. Ни сообщения, ни звонки, ни файлы, ни фотографии. Сервер VK видит всё. На устройстве всё так же хранится в открытом виде. Фотографии доступны по ссылке навсегда без входа и проверки прав дотсупа.

VK нигде не обещает шифрование - ни на сайте, ни в документах. Потому что его нет.

В следующей части - практическая защита: что реально можно сделать если MAX приходится использовать. Split VPN, Knox, Frida, Virtual Device...

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества