В этой статье мы рассмотрим Telegram в целом, поговорим об используемом протоколе и проведем сравнение с другими аналогичными продуктами.
Авторы: Hayk Saribekyan (hayks@mit.edu), Akaki Margvelashvili (margvela@mit.edu)
Аннотация
Telegram представляет собой платформу для обмена мгновенными текстовыми сообщениями на базе протокола безопасности MTProto. Компания была основана в 2013 году, а сам мессенджер на данный момент имеет более 100 миллионов активных пользователей. Одна из главных целей Telegram – защита пользователей от слежки. Утверждается, что у этого мессенджера наилучшая защита на рынке и железобетонные гарантии безопасности среди приложений подобного рода. В этой статье мы рассмотрим Telegram в целом, поговорим об используемом протоколе и проведем сравнение с другими аналогичными продуктами. Кроме того, мы воспользуемся утечкой, связанной с доступностью пользователей, с целью обнаружение временных интервалов, когда два абонента разговаривают друг с другом.
Введение
За последнее десятилетие, по мере того как все больше и больше людей получают доступ к интернету, возрастает популярность приложений для обмена мгновенными сообщениями. По состоянию на май 2017 года 2 из 5 наиболее загружаемых Android-приложений используются для обмена мгновенными сообщениями [1]. За последние годы пользователи коммуникационных протоколов, в том числе связанные со службами обмена мгновенными сообщениями, становятся все более озабоченными относительно своей безопасности. С целью удовлетворения этих потребностей многие платформы стали предоставлять сквозное (оконечное) шифрование [2, 3]. Например, в WhatsApp сквозное шифрование появилось 3 года назад, и на данный момент эта функция используется во всех коммуникациях. Этот мессенджер имеет наибольшее количество пользователей, пользующихся сквозным шифрованием.
Telegram – еще одна служба, связанная с обменом мгновенными сообщениями, которая была основана в 2013 году. Несмотря на свою молодость, на данным момент ежемесячно Telegram используют более 100 миллионов пользователей, особенно в Западной Европе. Создатели Telegram утверждают, что у этого мессенджера наилучшая защита среди аналогичных продуктов на рынке, однако в целом доверие пользователей основывается лишь на истории появления этого приложения и таланте разработчиков. Мы поставили задачу проанализировать безопасность Telegram [4], поскольку этот мессенджер находится под непрерывной критикой многих специалистов по криптографии из-за неоднозначных решений, используемых разработчиками.
В этом разделе мы поговорим об истории Telegram и пользовательском интерфейсе. В разделе 2 будет описана архитектура Telegram. В разделе 3 описываются предыдущие проблемы, найденные в Telegram. В разделах 4 и 5 рассматриваются раскрытые уязвимости, связанные с безопасностью в Telegram. В разделе 6 мы рассмотрим текущие проблемы в Telegram и сделаем выводы.
История появления Telegram
Среди других технологических стартапов Telegram занимает особое место, вследствие чего получил повышенное внимание и доверие со стороны пользователей, и мы считаем, что полезно будет затронуть историю появления этого мессенджера.
Telegram был основан в 2013 году братьями Николаем и Павлом Дуровыми, которые были основателями популярной российской социальной сети Vkontakte. После давления со стороны российских властей на предмет получения специфических возможностей (или специальных лазеек для государственных органов) Дуров покинул компанию и заявил, что VK находится под контролем политической партии, находящейся у власти [5]. Затем Дуров покинул Россию и основал Telegram с целью предоставления средства обмена мгновенными сообщениями для простых пользователей, которое было бы защищено от слежки представителями государственных структур.
Благодаря популярности Павла Дурова в России, Telegram быстро завоевал популярность среди русскоязычной аудитории. Кроме того, по факту Telegram предоставляет наиболее удобное средство по сравнению с аналогичными продуктами за счет своей скорости и функциональности.
Протокол, используемый для обмена сообщениями, был разработан братом Павла Николаем, который является математиком, но малоизвестным специалистом по безопасности.
Telegram – уникальное явление среди технологических стартапов, в том числе благодаря тому, что Павел Дуров является единственным спонсором этого проекта. Кроме того, в Telegram отсутствует реклама, а сам клиент – не только бесплатный, но и с открытым исходным кодом.
Функциональность Telegram
Telegram позволяет обмениваться текстовыми и голосовыми сообщениями, а также общаться в группах. Кроме того, у этого мессенджера есть каналы, на которые пользователи могут подписываться и получать сообщения от создателя канала (обычно новостного веб-сайта или знаменитости).
Telegram также имеет функцию под названием «секретный чат», которая не включена по умолчанию. Секретные чаты доступны в версии Telegramа со сквозным шифрованием. Сообщения удаляются по прошествии определенного времени, устанавливаемого пользователем, и не могут быть восстановлены. Разработчики Telegram решили не включать сквозное шифрования по умолчанию с целью удобства: секретные чаты связаны с конкретными устройствами, и невозможно продолжить разговор там, где не был начат разговор. Мы не считаем, что такое положение вещей является бесспорным. Многие обычные пользователи полагают, что никто не может получить доступ к сообщениям, хотя по факту просто доверяют безопасности сервера.
Пользователи Telegram могут создавать учетные записи и выполнять авторизацию при помощи аутентификационного кода, получаемого в виде текстового сообщения. После первоначальной авторизации пользователи могут выполнять настройки и искать друг друга. У Telegram также есть функция двухфакторной верификации, если есть желание вводить пароль во время каждого входа в учетную запись.
Клиенты Telegram
У Telegram есть клиенты под все популярные платформы, включая веб-приложения. На Рисунке 1 показана Desktop- и Android-версия. Официальные клиенты идут с открытым исходным кодом, хотя есть и бинарные блобы (то есть исполняемые бинарные файлы без доступных исходных текстов).
Рисунок 1: Официальные клиенты Telegram. Слева: мобильная версия, справа: desktop-клиент. Все официальные клиенты имеют открытый исходный код. Пользовательский интерфейс Telegram довольно быстрый и удобный
У Telegram также есть возможность работать с командной строкой [6], обладающей практически полным функционалом платформы, хотя и не очень удобной для использования. Например, для добавления контакта нужно ввести следующую команду:
tg> add contact <phone number> <name> <lastname>
Во время исследования безопасности Telegram мы часто пользовались командной строкой.
2. Архитектура Telegram
Как и многие аналогичные приложения Telegram следует традиционному подходу и использует облако для хранения данных. То есть, если злоумышленник сможет получить контроль над сервером, то получит (как минимум) доступ к незашифрованным сообщениям и ко всем метаданным. Обмен сообщениями между пользователями и сервером происходит на базе собственно разработанного протокола MTProto.
Пользователи обмениваются информацией по методу Диффи-Хеллмана для создания общего ключа, который затем используется при передаче сообщений. Коммуникация с сервером осуществляется при помощи публичного RSA-ключа, который прописан внутри клиента Telegram и меняется достаточно редко.
Telegram используется протокол собственной разработки MTProto, который не использует множество традиционных подходов при обмене сообщениями. Создатели Telegram утверждают, что подобный подход используется с целью улучшения производительности, однако у многих экспертов по безопасности на этот счет есть большие сомнения.
3. Известные и исправленные проблемы
Как все компании с технологическим уклоном, у Telegram были, есть и будут уязвимости, связанные с безопасностью, и нестандартные проблемы, которые имеют косвенное отношение к безопасности. Мы расскажем о некоторых из этих проблем, а в последствии рассмотри более подробно один из таких случаев.
3.1 Проблемы нетехнического характера
На концептуальном уровне у Telegram есть несколько нестандартных решений, которые, как мы полагаем, не должны быть частью протокола безопасности. А конкретно:
3.2 Проблемы, связанные с технической безопасностью
Как показывают предыдущие примеры, во многих случаях пользователи Telegram должны полностью доверять безопасности сервера, что немного иронично, поскольку изначальной целью основателей Telegram было создание продукта, защищенного от слежки. Даже несмотря на то, что многие уязвимости, связанные с безопасностью, были устранены, некоторых найденных проблем не должно было быть изначально.
4. Эксплоит для обнаружения доступности пользователей
Как было упомянуто в предыдущих разделах, Telegram передает информацию о доступности каждому, у кого есть телефонный номер нужного пользователя. Предположим, Ева добавила Алису в список контактов. В этом случае протокол Telegram не оповещает Алису об этом событии. В свою очередь Ева начинает регулярно получать информацию о том, когда Алиса использует Telegram, а Алиса все также не получает никаких оповещений.
Рисунок 2: В командной строке выводится имя пользователя, если тот использует Telegram. В противном случае ничего не выводится
Проблема, связанная с утечкой, легко обнаруживается в командной строке Telegram, как показано на Рисунке 2.
Более того, на Рисунке 3 показано, что Ева может видеть, что Акакий и Хайк выходят в онлайн и уходят в оффлайн. Затем Ева может сопоставить временные интервалы и сделать вывод, что Акакий и Хайк общаются между собой. В следующих разделах будет рассказано, как можно использовать эксплоит для обнаружения того, что два пользователя разговаривают друг с другом.
4.1 Постановка эксперимента
Для отслеживания использования Telegram и коммуникаций мы выбрали 15 активных пользователей среди международных студентов Массачусетского технологического института. Таким образом, мы знали, что студенты общались между собой на ежедневной/еженедельной основе.
Для подключения к пользователям мы использовали командную строку Telegram. Для отслеживания и сбора метаданных был выделен специальный сервер. В итоге было собрано несколько мегабайт необработанных метаданных для последующего анализа.
4.2 Алгоритм корреляции
Мы создали алгоритм корреляции, которые анализирует информацию об использовании Telegram двумя пользователя и выводит последовательность совпадений, где каждое совпадение представляет собой временной интервал с вероятностью того, что пользователи общаются между собой (вероятность всегда не менее 0.5).
Рисунок 3: Ева отслеживает активность Хайк и Акакия и может сказать, когда каждая персона появлялась в онлайне. Обратите внимание на проблему: разница между появлением в онлайне и уходом в оффлайн составляет примерно 5 минут
На базе полученных метаданных на каждого пользователя была создана последовательность временных интервалов активности отсортированных по времени. Алгоритм находит совпадения по двум пользователям, общающихся между собой, на базе последовательностей временных интервалов.
Рисунок 4: Диаграмма, иллюстрирующая основные концепции алгоритма корреляции
Утверждается, что два активных временных интервала Алисы и Боба соединены (см. фиолетовые стрелки на рисунке выше), если эти промежутки пересекаются в течение времени gap_time. То есть, два временных интервала пересекаются, если две точки пересечения находятся на расстоянии больше, чем gap_time. Этот допущение введено потому, что требуется время для открытия приложения после получения сообщения.
Теперь, рассматривая каждый активный временной интервал в качестве вершины и каждое соединение как ребро, мы получаем двухсторонний граф. В этом двухстороннем графе мы ищем связанные компоненты, которые имеют как минимум одно ребро. Если мы отсортируем активные временные интервалы в связанном компоненте, то увидим цепочку пересекающихся интервалов, в течение которых Алиса и Боб использовали Telegram. Каждая соединенная пара временных интервалов указывает на определенную вероятность того, что два пользователя общаются друг с другом. Цепочка соединенных интервалов значительно повышает шанс того, что Алиса и Боб общаются с друг с другом.
Каждый связанный компонент представляет возможную коммуникацию (во время которой происходит обмен сообщениями за относительно короткое время) между пользователями. Поскольку пользователь может оставить Telegram открытым (когда метаданные передаваться не будут), мы не принимаем во внимание размер активного временного интервала. Мы полагаем, что количество активных временных интервалов – наиболее важный показатель, поскольку пользователь, часто выходящий в онлайн и уходящий в оффлайн, скорее всего, активно использует Telegram.
Мы ввели коэффициент вероятности (likelihood coefficient), который определяет, насколько вероятно связанный компонент представляет собой коммуникацию между пользователями. Обратите внимание, ребро внутри связанного компонента, принадлежащее активному временному интервалу, которое соединено со многими другими вершинами, рассматривается как менее значимое по сравнению с ребром, концы которого не соединены с другими интервалами. По этой причине, вместо подсчета количества ребер в связанном компоненте, мы определили коэффициент вероятности как половину всех соединенных вершин внутри компонента. Таким образом, очень длинный активный временной интервал, который пересекает множество других интервалов не особо влияет на увеличение коэффициента вероятности.
Как только коэффициент вероятности рассчитан, вычисляем вероятность общения двух пользователей в течение промежутка времени внутри связанного компонента по следующей формуле:
Рисунок 5: Формула расчета вероятности общения двух пользователей
Идея заключается в том, что если коэффициент вероятности равен 0, то и вероятность общения тоже равна нулю. С другой стороны, каждая единица коэффициента вероятности увеличивает вероятность общения на половину. Альфа-множитель определяет степень влияния коэффициента вероятности на итоговую вероятность.
5. Результаты использования эксплоита
После реализации алгоритма, описанного выше, мы проанализировали метаданные, полученные сервером. Поскольку мы использовали Telegram во время работы сервера, то подстроили параметры на базе частоты нашей коммуникации и внесли некоторые коррективы.
Наиболее приемлемые значения: gap_time = 30 секунд, альфа-множитель = 1. При таких значения нам удалось отследить все коммуникации и не обрезать лишнего. Результаты показали, что количество ошибочных совпадений колеблется в районе 15%. Другими словами, иногда, когда два пользователя одновременно используют приложение, алгоритм работает некорректно.
Рисунок 6: Совпадения, найденные алгоритмом корреляции
Рисунок 7: Сообщения, соответствующие найденным совпадениям. Предпоследнее совпадение соответствует сообщениям, написанным в интервале от 23:31 до 23:35
6. Заключение
В этом проекте мы провели исследование мессенджера Telegram. Когда Telegram оформился как самостоятельная компания, то приобрел популярность, благодаря заявлениям создателей, доверием и удачным временем выхода (в то же время произошли утечки с подачи Сноудена). Если верить заявлениям создателей Telegram, можно подумать, что этот мессенджер обладает высоким уровнем безопасности. Однако наше исследование показывает, что у Telegram были серьезные и в тоже время простые проблемы в протоколе (например, модифицированный и уязвимый алгоритм обмена ключами по методу Диффи-Хеллмана), которые может обнаружить любой знающий эксперт по безопасности.
При помощи командной строки мы смогли подключиться к некоторым нашим друзьям, и обнаружить интервалы общения. Мы полагаем, что это серьезная проблема, связанная с утечкой персональной информации, которая может, например, помочь обнаружить, у кого из группы более тесные взаимоотношения.
Из всего вышесказанного можно сделать вывод, что Telegram, как и все другие продукты, имеет уязвимости, о которых пользователи должны знать. Однако, к сожалению, заявления компаний заставляют пользователей верить в то, что переписка защищена от прочтения третьей стороной.
Ссылки
[1] Android market app ranklist. http://www.androidrank.org/. Accessed: 2017-05-16.
[2] Secret conversations in facebook. https://www.facebook.com/help/ messenger-app/1084673321594605. Accessed: 2017-05-16.
[3] End-to-end encryption (whatsapp). https://www.whatsapp.com/faq/en/general/28030015. Accessed: 2017-05-16.
[4] Telegram. telegram.org. Accessed: 2017-05-16.
[5] Vkontakte founder pavel durov learns he's been _red through media. Accessed: 2017-05-16.
[6] Telegram messenger cli. https://github.com/vysheng/tg. Accessed: 2017-05-16.
[7] Operational telegram. https://medium.com/@thegrugq/operational-telegram-cbbaadb9013a. Accessed: 2017-05-16.
[8] Matt green on twitter about telegram. https://twitter.com/matthew_d_green/status/582916365750669312. Accessed: 2017-05-16.
[9] Is telegram secure (russian). https://habrahabr.ru/post/206900/. Accessed: 2017-05-16.
[10] Shattered. https://shattered.io. Accessed: 2017-05-16.
Но доступ к знаниям открыт для всех