Публикация к юбилею Telegram
В секретных чатах Telegram используется «сквозное шифрование», и что? End to end encryption Telegram слабо защищает переписку пользователей. Простой пример: злоумышленник достал приватный ключ gpg Алисы, естественно, чтобы расшифровать сообщение, зашифрованное для Алисы необходим пароль от этого ключа, который невозможно сбрутить, придерживаясь современной доктрины парольной защиты. В Telegram end to end encryption на Android — это становится возможно с вероятностью 100%. Обход двухфакторной аутентификации, восстановление пин-кода и угон секретных чатов в Telegram об этой уязвимости и будет статья.
В своей работе я постараюсь описать подробный мануал по уязвимости в Telegram на Android-девайсах, приведу примеры по восстановлению local code Telegram на Android, Desktop Linux/Windows. Скомпрометирую секретный чат Telegram. В этом противостоянии с командой Дурова мне поможет моя компания: Я; Android 7.0; Android 6.0 (root); Android 4.4.2 (root); ПК с OS Linux/Windows. На первый взгляд кажется силы не равны, посмотрим…
ИМХО. С чего все началось
В моем случае всю мощь PR-компании вокруг платформы Telegram ощутил и я. На огромных колесах «Телеги» хайп катился от месяца к месяцу, не имея ни центра, ни границ. Влияние Э. Сноудена на популяризацию повсеместного пользовательского шифрования переписки. Вспомните культовый мессенджер ICQ с его приложением QIP 2005 на Desktop-е, там вся переписка хранилась на ПК в открытом доступе в файлах .txt. Telegram по поводу шифрования переписки «кто первый стал массово шифровать частную переписку» не сразу, но позже заявил, что пионер – это он. История Telegram ничем особо не выделялась: конкурс на безопасность протокола MTProto от durov; калымы для художников и художниц (рисование стикеров); API по созданию ботов/приложений; ICO TON, принесшее хозяевам Telegram немалые деньги; блокировка мессенджера в Иране, РФ и снова в Иране; а также поступлению в сеть редких онлайн-вбросов подноготной Telegram. В июле 2018г. «Телега промчалась и по мне». Когда на массовом рынке мессенджеров появился «очередной Telegram» со своим слоганом и небольшой оговоркой (это супер быстро, просто и бесплатно). «Telegram — это приложение для обмена сообщениями с акцентом на скорость и безопасность». На счет последнего в таком крутом слогане, durov и его команда (за счет Николая Дурова техническая сторона команды сильная) открыто взаимодействуют со специалистами по ИБ/багхантерами, которые находят/пытаются найти уязвимости в протоколе MTProto или баги на платформе Telegram. Специалисты присылают свой материал на почту security@telegram.org — это официальный метод такого взаимодействия «охотниками за головами» и разработчиками Telegram, так же об этом упоминается и тут
На самом деле мы приветствуем экспертов по безопасности для аудита нашей системы и будем благодарны за любые отзывы ( security@telegram.org )
Неофициальный формат общения, когда письма игнорируются со стороны разработчиков Telegram, и тогда спецы обычно постят свои твиты в микроблоге, где некоторые из них комментирует durov.
К услугам
Обойдя end to end encryption Telegram мессенджера на Android, баг-репорт отправил письмом на вышеупомянутый e-mail. Ответа не получил, спустя несколько дней написал в техподдержку волонтерам Telegram. Волонтеры мне ответили, что донесут мою мысль до руководства Telegram, запросив с меня уточнение: откуда и когда я отправил свое письмо. Спустя две недели тишины я еще раз напомнил о своем письме волонтерам, на этот раз и добровольцы мессенджера полностью проигнорировали моё напоминание. Через неделю я снова повторил отправку письма на официальную почту Telegram — нет ответа. Что же остается, чем же заняться? докучать со своим баг-репортом по Telegram через микроблог?, осаждать неофициальные источники общения команды durov-а? Или написать и выложить статью для СМИ? Прямо какая-то кибербюрократия сформировалась в рядах Telegram. Не могу не отметить w9w с habr.com, который, по моему мнению, нашел лучшую уязвимость на платформе Telegram: уязвимость в telegra.ph. Суть – любой юзер мог отредактировать чужую статью на telegra.ph. Со своим отчетом об уязвимости w9w (он нашел их несколько) так же не смог достучаться на security@telegram.org. После прохождения бюрократического квеста, w9w получил за найденные уязвимости маленькое финансовое вознаграждение. Интересно, это жадность Telegram? или какая-то другая причина? Вернемся к Telegram, немного отзывов о нем.
У многих людей есть свой семейный фотоальбом, у багхантеров — свой послужной список «найденных багов/ошибок/уязвимостей». В своем ПС, по окончанию работы над статьей, я равнодушно закрашу ячейку B30 в красный цвет, тем самым, оставив свой вопрос к команде Telegram открытым.
Часть 1. Восстановление local code Telegram на OS Android Linux/Windows Desktop. Основано на реальных событиях
В июле летом 2018г. на Github-е один из разработчиков
Схема восстановления local code Telegram — многоэтапный процесс:
Read the salt (32 bytes), encrypted data and sha1 of decrypted data from a file.
Compute a PKCS5_PBKDF2_HMAC_SHA1 on the UTF8 (passcode), using the salt, 4000 iterations, keysize of 256 bytes
Use a Telegram-specific KDF to get the AesKey and AesIV (Relatively cheap - bunch of memcpy and 4x sha1)
Perform an AES-IGE-DECRYPT on the encrypted data using the derived key and IV from step 3.
Compare sha1 of decrypted data with the sha1 read in step 1. If they match - passcode is correct.
Для пользователя JTR операция «кровотечения» упрощается до двухэтапного процесса: с помощью модуля «telegram2john.py» «вытягивание хэша» для Джоновского процессора из файла userconfing.xml, принадлежащему приложению Telegram (моментальная по времени операция), и brute force этого «хэша» с помощью JTR. При такой операции вероятность восстановления local code на Android-е составляет 100% успеха, время ожидания несколько секунд. Вероятность восстановления local code на Desktop-е Linux/Windows составляет X% успеха, время ожидания неопределенное. Почему? Потому что, во-первых, local code — обычный цифровой pin код на Telegram из четырех цифр (10^4 всевозможных комбинаций pin-а) ни больше ни меньше, во-вторых, алгоритм шифрования local code Telegram на Android-е не криптостойкий, отсюда высокая скорость перебора пароля. По-другому обстоят дела с Desktop-приложениями Telegram, где нет секретных чатов: в приложении на Desktop-е, шифрование local code криптостойкое (скорость перебора на CPU хэша Desktop/Telegram в 10000 раз медленнее скорости перебора хэша Anroid/Telegram), а главное local code на Desktope/Telegram можно задавать «любой» длины и использовать любые символы.
Криптостойкость local code Desktop Telegram высокая, скорость brute force в 10k раз медленнее brute force local code Android Telegram.
Лично у меня складывается впечатление, что разработчики Telegram трудились над созданием уникального и защищенного своего протокола MTProto, а не над всесторонней конфиденциальностью пользователя, например, открытый кэш приложения, хранящийся в не под корневым каталогом Android или не криптостойкий local code Android, который, как оказывается восстанавливается с вероятностью 100%.
На момент написания статьи, JTR-ы, из коробки в свежих Kali Linux и Parrot Security OS имеют баги, не позволяющие парсить local code Telegram (JTR jumbo-1-bleeding всегда имеет какие-то баги, но его функционал развивается круче чем вы думаете, если вы думаете о ПО Hashcat). Итак, искушенный пользователь Kali/Parrot взломать восстановить Local code Telegram не сможет, в Windows JTR усеченный по функционалу — тоже не годится. Поэтому необходимо устанавливать на свою OS JTR c Github (для Linux-систем). Чтобы компиляция ПО JTR прошла успешно, до компиляции программы доставляете пакет в вашу OS «libssl-dev», далее
• git clone git://github.com/magnumripper/JohnTheRipper -b bleeding-jumbo john && cd john/src
• ./configure && make -s clean && make -sj4
• john/run/telegram2john.py userconfing.xml > хэш (если модуль telegram2john.py доставляете например в Kali Linux отдельно, тогда запускаете так: python telegram2john.py userconfing.xml > хэш)
• JohnTheRipper/run/john хэш - -mask=?d?d?d?d
Результат последних двух команд – получение local code Android Telegram за две секунды.
Восстановлен local code Android Telegram. Pin 5369.
Аналогично и с брутом local code Telegram приложений Desktop Linux/Windows, вместо файла «userconfing.xml» указывается путь к каталогу Telegram:
(Linux): ~/telegram2john.py ~/.local/share/TelegramDesktop;
(Windows): ~/telegram2john.py «C:/Users/Name/AppData/Roaming/Telegram Desktop» (для устаревшего приложения Telegram на Windows);
(Windows): ~/telegram2john.py ”Telegram Desktop" (для обновленного приложения Telegram на Windows).
Обратите внимание, если вы повторно захотите распарсить local code Telegram, JTR выдаст «No password». Причина — пароль уже был найден ранее, Джонни – никогда не восстанавливает пароль по второму и последующему разу, для этого используйте опцию «- -show хэш», но иногда могут случаться баги, и опция — -show не отработает как надо (с другими хэшированиями такие баги встречал, но все уже поправили разработчики JTR). В таком случае загляните в файл ~/run/john/pot, все найденные пароли хранятся в нем, если его очистить, то можно повторно брутить хэши с найденными паролями.
John The Ripper не собирается повторно «пачкать руки
файл userconfing.xml, который является мишенью JTR расположен в под корневом каталоге Android:
/data/data/org.telegram.messenger/shared_prefs/userconfing.xml
а значит добраться до файла можно имея root права, или через TWRP или с помощью digital forensics.
Подробный видео-мануал по восстановлению local code Telegram на Android/Linux/Windows ссылка в конце статьи.
Часть 2. Белые начинают и проигрывают. Угон секретных чатов в Telegram. Основано также на реальных событиях
Как базируется защита в Telegram:
- Ввод номер телефона;
- Получение смс, либо кода в приложении на другом устройстве – по желанию, ввод смс-кода или кода полученного в приложении на другом устройстве.
- Временная блокировка аккаунта при частом (в том числе успешном) залогиннировании пользователя.
При перехвате такой смс можно ворваться в учетку пользователя, но доступ к секретным чатам
Опциональная, базовая + усиленная защита Telegram:
- Ввод номер телефона;
- Получение смс, либо кода в приложении на другом устройстве – по желанию, ввод смс-кода или кода с приложения;
- Ввод cloud code Telegram (хранится на сервере Telegram и у вас в уме, сбрасывается/привязывается через e-mail);
- Установка local code (на Android-е, настройки — конфиденциальность и безопасность – код пароль);
- Проверка текущей/последних сессий входа в мессенджер;
- Выход из всех сессий кроме текущей;
- Очистка содержимого СЧ по таймеру;
- Запрет на скрин/запись экрана СЧ;
- Временная блокировка аккаунта при частом (в том числе успешном) залогиннировании пользователя;
- Как выяснилось при угоне СЧ (вход в чужую учетку с другого ip) временный бан реального/скомпрометированного аккаунта ~ через 5 минут и отмена СЧ в Telegram. В одной же сети реальной/скомпрометированной учетки, Telegram забывает банить за угон аккаунта.
Ниже я покажу, что СЧ уязвимы, один из таких СЧ я угоню (свой тестовый аккаунт в Telegram) и буду выдавать себя за пользователя «Хозяин»
После успешного восстановления local code Telegram я решил пощупать файлы рядом с файлом userconfing.xml на Android-е. Создал секретный чат, посмотрел какие файлы и в каких подкаталогах обновляются по времени. Попробовал скопировать эти файлы с OS Android 4.4.2 на другой гаджет с OS Android 6.0 (перенос файлов между гаджетами осуществлял через архивы rar; zip). Установил с GP последнюю версию Telegram на Android 6.0. Перенес c Android 4.4.2 > Android 6.0 обновленные файлы в аналогичные каталоги
/data/data/org.telegram.messenger/shared_prefs
/data/data/org.telegram.messenger/files
/data/data/org.telegram.messenger/no_backup
Согласно
Запустил приложение. Тут же все ворованные файлы обновились по времени, а меня приветствовал экран «нового пользователя». Telegram вел себя так, как будто я новый юзер и предлагал зарегаться или войти через телефон (стандартная процедура при первоначальной установке Telegram на Android). То есть я не смог ворваться в чужую учетку. Подкрался еще и еще несколько раз с разных сторон, но в конченом итоге – фэйл.
Попробовал другой способ – бэкап тестовой учетки Telegram через Titanium backup.
Сделал бэкап приложения на Android 4.4.2, развернул бэкап 4.4.2. на Android 6.0.
Права на «ворованное» приложение, смена UID/GID не требуется – все сделает Titanium Baсkup. Запускаю Telegram скомпрометированной учетки на Android 6.0 и магия! Получаю запрос на ввод local code пользователя «Хозяин». Такой способ с Бэкапом предоставил обход двухфакторной аутентификации без танцев с бубном. Telegram со своей стороны запросил лишь local code от угнанной учетки. Отправляю украденный файл
/data/data/org.telegram.messenger/shared_prefs/userconfing.xml
на удаленную свою VDS Kali Linux, ставлю задачу на брут pin-кода и тут же получаю результат
Красным выделил (сверху вниз) полученные:
- Хэш для JTR с помощью модуля telegram2john.py;
- Восстановленный local code Android Telegram;
- Джонни full time job (неприлично-высокая скорость brute force пароля, опцию — - -mask=?d?d?d?d, сообщающая Джонни чтобы он подбирал 4х значный цифровой код не включил, чтобы JTR разогнался и показал свою
яростьскорость); - Запрос к JTR восстановленного local code.
Крутой Джонни! неправда ли?
Восстановив с помощью JTR Android local code Telegram, вошел c другого ip в
Реальный пользователь через активные сессии не видит, что он скомпрометирован. В истории последних сеансов не фиксируются точки входа злоумышленника. Более того, в реальном аккаунте «Хозяина» я щелкнул «выйти из всех сеансов кроме текущего». Злоумышленника при этом не выкинуло из сеанса, независимо от онлайн/офлайн статуса атакующего.
Попробовал туже операцию относительно скомпрометированной учетки – результат аналогичен: «Хозяина» не выкинуло из Telegram, сессионные ключи прежние.
Может графические ключи СЧ индикатор безопасности? Ключи секретных чатов не индикатор безопасности, в данном эксперименте они все три бьются между собой.
Все ключи одинаковые в том числе и у скомпрометированной учетки.
Telegram заявляет, если ключи бьются на 2х устройствах, вы в безопасности — это не так. (Отступление. Сверять ключи все же нужно, после установки Telegram на Android и при создании самого первого СЧ, у пользователей СЧ отсутствовали слепки ключей, а графическое изображение ключа отличалось на устройствах. СЧ работал как обычно, что произошло я так и не разобрался, и это был единичный случай, когда ключи не бились между собой).
Вернулся к первому методу «copy-paste», который у меня изначально не получился.
Повторил все свои предыдущие шаги, добавив промежуточное 3-е действие.
1) Установил с GP последнюю версию Telegram.
2) Перенес каталоги с OS 4.4.2 на другой гаджет с OS 6.0 (перенёс только чувствительные данные. Приложение Telegram и другие его каталоги не копировал)
/data/data/org.telegram.messenger/shared_prefs
/data/data/org.telegram.messenger/files
/data/data/org.telegram.messenger/no_backup
3) Удалил папку на Android 6.0, шах
/data/data/org.telegram.messenger/code_cache
4) Права не восстанавливал персонально, вместо этого, раздал всем вышеописанным каталогам «рекурсивно» права 777 (полный доступ). Назначил тем же каталогам владельца и владельца группы (UID/GID) «Telegram» (на самом деле «рекурсивно» в root каталоге плохо работает в TC, поэтому пришлось перепроверять назначение прав).
5) Вперёд! Запускаю Telegram в другой сети с другим ip – неудача, снова это приветствие нового пользователя на английском языке.
6) Вперёд! Перезапускаю Telegram, шах и мат! Telegram выдал предупреждение на ввод local code пользователя, который был на Androide 6.0 (и который восстанавливается с вероятностью 100%), при этом запросы со стороны Telegram на cloud code или смс отсутствовали и до сих пор отсутствует напрочь. Обход двухфакторной аутентификации, нет! обход End to end encryption Telegram выполнен успешно.
Результат: сообщения злоумышленника в СЧ так же успешно отправлялись от имени реального пользователя, и так же была доступна вся переписка СЧ. Спустя ~400 ударов моего тревожного сердца, опасения подтвердились: угнанная учетка была заблокирована Telegram-ом у злоумышленника и у реального пользователя; СЧ – отменен.
Временная блокировка учетки Telegram.
Авторизовавшись повторно в Telegram (иногда бан бывает на сутки, но мне повезло, почему-то в этот день все баны раздавались на секунды), у реального пользователя было все как обычно, а злоумышленник уже не мог снифить скомпрометированную учетку (сессионные ключи обновились).
Несколько официальных утверждений Telegram мне удалось опровергнуть
telegram.org/faq – «СЧ могут быть только на устройствах происхождения СЧ».Я – «как видите СЧ могут быть не только на устройствах происхождения СЧ, но и на устройствах, где имеется Root и ключ СЧ, независимо от версии OS Android».
telegram.org/faq – «Вы можете сравнить это изображение (примечание: изображение СЧ ключа) с тем, которое имеет ваш друг — если оба изображения одинаковы, вы можете быть уверены, что секретный чат безопасен»Я – «нельзя быть уверенным, что чат безопасен».
telegram.org/faq – «Мы также рекомендуем включить двухэтапную аутентификацию и установить сильный код доступа для блокировки вашего приложения, вы найдете обе опции в настройках — Конфиденциальность и безопасность».Я — «Сильный код доступа установить можно только в приложении Telegram Desktop Linux/Windows, но не pin в приложении на Android»
telegram.org/faq – «Пользователь с корневым доступом может легко обойти функции безопасности, встроенные в операционную систему, прочитать память процесса или получить доступ к ограниченным областям, таким как внутреннее хранилище. Как только у злоумышленника есть доступ к корню, любые усилия по смягчению угроз становятся бесполезными. Никакое приложение не может быть названо безопасным в этих обстоятельствах, независимо от того, насколько сильно шифруется».Я – «Или восстановить local code Android и получить/клонировать учетку. С каждой новой неверной попыткой ввода pin, Telegram увеличивает время ожидания между попытками ввода pin. Видимо, таким алгоритмом Telegram удовлетворен в защите пользователя от ручного brute force 10^4 всевозможных комбинаций pin-ов, но удовлетворен ли пользователь, когда его легко так скомпрометировать? Если разработчики Telegram хотели бы смягчить угрозы в этих обстоятельствах, они могли бы это реализовать ни как временную блокировку на несколько секунд на неверный ввод local code, а заменить на Telegram Android-е функцию pin на password, с шифрованием PBKDF2 — это сильно замедлит атаку brute force. Как пример хорошей защиты – password на вход в зашифрованную БД паролей Keepass2Android.
telegram.org/faq «Вы можете получать доступ к сообщениям в секретном чате из своего устройства происхождения. Они безопасны до тех пор, пока ваше устройство безопасно в вашем кармане».Я – «Вот где, оказывается правда!»
Выводы
- Local code Telegram (pin) на Android-е взламывается в JTR мгновенно и c вероятностью 100%, это ведет к последствиям: угон секретных чатов, вскрытию переписки СЧ, выдавание злоумышленника за реального пользователя. Защита от этого «трюка» — временный бан от Telegram и новые сессионные ключи для реального пользователя.
- Операция по угону СЧ схожа с воровством cookie + взлом pin + «заморочка с правами» если использовать метод «copy-paste».
- Для восстановления pin-а Telegram на Android-е, необходимо работать с файлом приложения мессенджера расположенным в
/data/data/org.telegram.messenger/shared_prefs/userconfing.xml
Добраться до чувствительных файлов можно, имея root права, или через TWRP или с помощью digital forensics. - Часто пользователи ставят local code на Telegram Desktop-e такой же, как pin на Android-e — это ловушка, 4х значный local code Telegram на Windows/Linux перебирается <1минуты, а доступ к ПК получить зачастую проще, чем доступ к гаджету.
- Разработчики Telegram должны заменить «pin» на Android-е на «password», с криптостойким шифрованием (как реализованно на Telegram Desktop-e или в других мобильных приложениях, например Keepass...) используя PBKDF2, таким образом проблема будет фактически решена.
- security@telegram.org, да и в целом техподдержка в Telegram, как сервис реагирования и взаимодействия пользователь-разработчик не на высоте.
- За период «молчания» Telegram выпустил обновление в GP, но обновление плановое и было связано с Passport telegram, также выходило еще обновление, но уязвимость, которую я продемонстрировал в данной статье все еще действует и любой желающий может воспользоваться ей.
- На баг-репорт (обнаруженную уязвимость) Telegram ни как не отреагировал.
Демонстрация восстановления local code Telegram на Android/Linux/Windows.
Демонстрация уязвимости секретных чатов Telegram.
P.S.: дата/время на отдельных скринах или скрин-видео может не совпадать, так как эксперименты в Telegram и скрины делал по ходу написания статьи, а из-за раздачи банов Telegram-ом статья писалась несколько дней.
P.P.S.: в комментариях некоторых пользователей интересует свойства root-прав. Имея зашифрованные: переписку писем почтового приложения своим gpg/pgp ключом, или БД паролей keepassdroid, или обычный текст в запароленном архиве rar. Это «невозможно» вскрыть злоумышленнику/правоохранителю даже если у него полный root и ваш разлоченный гаджет. В Telegram Android по умолчанию с pin, можно сдампить всю переписку и все СЧ с вероятностью 100% успеха.
Так же в комментариях был совет использовать local code на Android-e «password» вместо pin. Будьте осторожны (нужно ставить сложный пароль), хэш остается
Комментарии (80)
vics001
07.08.2018 19:14+10Я правильно понял, что подход заключается в том, чтобы склонировать Android устройство и показать, что Telegram не проверяет, что клонированное устройстово не является автором секретных ключей. Cложно поверить, что это представляет хоть какой-то интерес, потому что любое устройство так же уязвимо.
Меня честно говоря не интересует реклама безопасности и приватности, потому что абсолютной безопасности не существует. Больше интересен «вектор атаки»: злоумышленник может получить root к Android устройству и тем самым угнать сессию. Единственной защитой представляется: 1) whitelisting IP addresses 2) включение в протокол проверки, что IP адрес связан с сессионным ключом 3) запрос пароля — токена при любой смене IPebragim
08.08.2018 02:33+5Как раз проверяет, но в статье это мягко обошли. Через «400 ударов сердца» — это 5 минут или 10? — сервера заметили коллизию и сбросили всем коннект, вызвав генерацию новых ключей.
NINeOneone
08.08.2018 11:24Что как бы тоже странное решение, ибо секретный чат навсегда потерян в таком случае. Как по мне, так лучше бы сделали плаху во весь экран — «этот чат скомпрометирован, новые сообщение писать нельзя. Сохраните переписку если это требуется.» Да, злоумышленник сохранит доступ к чату, но если это профессионал, то переписка у него и так уже скопирована.
GH0st3rs
07.08.2018 19:18+3В Андроид версии, ЕСТЬ возможность установить произвольный пароль, для тех кому мало 4х значного PIN
Alex_Q
07.08.2018 19:19+33Я то думал, успешный MITM, а тут атака из серии «забрали телефон у спящей жертвы».
makdoc
07.08.2018 21:29Поправьте если я не прав, но насколько я осведомлен, есть возможность получить удалено доступ к телефону и провернуть все пока жертва спит.
shifttstas
08.08.2018 00:02Если телефон без рута и на нем последние обновления ПО, то как?
Protos
08.08.2018 04:38Видимо через Троян
shifttstas
08.08.2018 07:47Как троян будет работать без рута?
Protos
08.08.2018 09:06+1Проэксплуатирует одну из уязвимостей для повышения привилегий благо очень малый процент устройств на Android имеет security патчи либо в принципе поддерживает обновления
shifttstas
08.08.2018 09:15Чуть выше я написал про последнюю версию ПО, и опять же — дырявость/медленное обновление Android — это проблема платформы а не телеги
Protos
08.08.2018 09:33Ну и кстати стоит разделять 4 я и указал: последние обновления ПО опять же это самая свежая версия ОС или последняя не свежая доступная для конкретного телефона, она же тоже последняя
shifttstas
08.08.2018 09:34Очевидно без привязки к устройству, какой смысл смотреть на дырки в win95 ?
Protos
08.08.2018 09:55Что значит какой смысл, у меня есть телефон с версий 4.х, и он уже годами не обновляется, патчи безопасности не выходят, таких пользователей миллионы, банки даже не блокируют доступ к своим ДБО и мобильным приложением зная что у них ~16-20% таких пользователей — принимают риск что у клиента сопрут деньги, не заставлять же его новый телефон покупать
shifttstas
08.08.2018 09:58-1Это проблема вашего вендора и вашего выбора данного вендора, берём пример Apple, 5S вышел в далеком 2013 году (5 лет карл!) и он поддерживает самую новую iOS, насколько мне известно с Galaxy от Samsung тоже все неплохо с обновлениями
Protos
08.08.2018 10:54В статье речь о многих возможностях Android которые с iOS вообще не провернуть. Выбор вендора согласен мой.
Protos
08.08.2018 10:55В статье речь о многих возможностях Android которые с iOS вообще не провернуть. Выбор вендора согласен мой.
Fracta1L
07.08.2018 19:25+16Я не эксперт в безопасности, но статья почему-то напомнила посты типа «смотрите как я взломал Линукс простым редактированием конфига grub и перезагрузкой!»
Error1024
07.08.2018 21:09+2А где уязвимость то?
Автору: а ещё приложения можно декомпилировать!ValdikSS
08.08.2018 03:13+7И даже отлаживать, и воровать ключи шифрования из памяти! ШОК!
saboteur_kiev
08.08.2018 09:59+1На мой взгляд, автор не понял где именно он обнаружил уязвимость.
Меня смутил только один момент — что сидя с двух устройств, телеграмм показывал только одну сессию. То есть MTProto не отслеживает, что сессия идет с разных IP/разных устройств. IMHO это все-таки уязвимость протокола.
makdoc
07.08.2018 21:31-1Как говориться ломать не строить, удивляет другое, тех службы не реагирует на такие письма.
anonymous
07.08.2018 21:52+8А они и не должны. Если устройство заведомо скомпрометировано ( а тут именно такой случай), то это не проблема приложения. Рискну предположить, что таких сообщений уйма и их проще игнорировать, чем каждому доказывать, почему проблема не на их стороне
shifttstas
08.08.2018 00:07+3Гм, мне всегда казалось, что пароль при вхоже в приложения должен ещё сузить список доверяемых лиц (условно если разблокироваться телефон может еще кто то помимо вас а вот в телегу пускать вы его не готовы)
Но есть одно маленькое но, точнее даже два:
1) атакуемое устройство доложено быть разблокировано
2) должен быть root доступ
На примере iOS даже если устройство разблокировано, доступ к файлам приложения получить все равно нельзя, на Android насколько мне известно все так же.
Тогда я не понимаю в чем тут взлом, точнее говоря его нет от слова совсем и отсутствие реакции команды телеграмм вполне оправдано.
А статью можно сократить до 3 пунктов:
Взламываем любое приложение!
- Делаем полный бэкап телефона
- Восстанавливаем его на точно таком же телефоне
- Мы взломали %appname% !
ne555 Автор
08.08.2018 00:46-2Но есть одно маленькое но, точнее даже два:
1) атакуемое устройство доложено быть разблокировано
2) должен быть root доступ
если Вы об Android устройстве, то по умолчанию они не все шифруют свои данные, это уже уязвимо.
Такие устройства (изьятые правоохранительными органами) делают бэкап (монтируют раздел, скачивают файлы) до загрузки OS, цифровая форензика (в статье я упомянул об этом).
Windows например тоже не каждый 2й пользователь шифрует Veracrypt к примеру, а обойти пароль на вход windows и скачать Telegram (потом его распарсить JTR, если там код 4цифры) любая live-usb подойдет.
Делаем полный бэкап телефона
Восстанавливаем его на точно таком же телефоне
Мы взломали %appname% !
Толсто конечно, но отвечу. Сделайте бэкап KeePassDroid, разверните на любом гаджете и получите запрос на ввод пароля, который Вы в ближайшие несколько лет не узнаете (если сегодня приступите ко взлому).
Тогда я не понимаю в чем тут взлом
Потому что статью не читали.Protos
08.08.2018 04:42+1Нет панацеи, Элкомсофт официально продает софт для обхода Veracrypt для конкретных случаев, типо как здесь нужен root, так и для обхода Veracrypt нужны условия
shifttstas
08.08.2018 07:48Т.е дырка скорее в системе которая не шифрует данные получается, а не в прикладном ПО
dartraiden
09.08.2018 01:59если Вы об Android устройстве, то по умолчанию они не все шифруют свои данные
Если мне не изменяет память, force encryption (включение шифрования при установке пароля на блокировку экрана) — обязательное требование для сертификации современных Android-устройств.
Если же пользователь имел несчастье приобрести телефон у китайских «брендов», которые официально за пределы Китая не продают и поэтому сертификацию не проходят… что ж, отсутствие шифрования по умолчанию это наименьшая из проблем такого пользователя на фоне неотключаемых без рута вирусов, встроенных заботливыми китайцами в системный софт.ne555 Автор
10.08.2018 00:47Такой вариант популярный обошли, прошивки на основе исходных кодов Lineage (RR) и др, дает свободу: изначально GP там нет (для параноиков), шифрование по умолчанию не включено, root, который при правильной настройке дает права.
К примеру под windows вы же не от учетки «гость» работаете, а root, в linux постоянные вызовы от root требуются. Так и на Android-e без root, ограничено все, но немного безопасней и неудобней.
SergeyMax
08.08.2018 12:10+1А статью можно сократить до 3 пунктов:
Делаем полный бэкап телефона
Восстанавливаем его на точно таком же телефоне
Мы взломали %appname%!
Как-то слишком сложно. Почему бы просто не посмотреть содержимое чатов, заглянув через плечо владельца телефона? Шах и мат, горе-криптографы!
ebragim
08.08.2018 02:39+8Автор, а ещё на рутованное устройство можно поставить кейлоггер и запись скринов из конкретного приложения, что гораздо проще и даст тебе содержимое не только сохранённых секретных чатов, но и чатов с самоудаляющимися сообщениями.
И что, вы это тоже уязвимостью обзовёте?
Ещё можно методом терморектального криптоанализа узнать у пользователя содержимое чатов, ужас то какой!
А если серьёзно, то «уязвимость» не имеет реального применения. Вам надо соблюсти кучу условий: прямой доступ к рутованному девайс для скачки файлов телеграма, разблокировка девайса, сам рут устройства — что уже позволяет просто взять и прочитать нужные сообщения или установить ПО для записи и отправки их вам потом… И всё ради чего? 5 минут чтения переписки, после чего файлы становятся бесполезными?ne555 Автор
08.08.2018 08:34-1запись скринов из конкретного приложения
На Android >5 Telegram предупреждает хозяина о записи экрана (на видио есть моиент)
не имеет реального применения
Изьяв гаджет правоохранители получат доступ ко всей переписке в том числе и СЧ, но то, что зашифровано по настоящему (например своим ключом gpg письма из почты) не расшифруют.
И всё ради чего? 5 минут чтения переписки, после чего файлы становятся бесполезными?
за 5 минут можно сдампить всю переписку Androida, получить бан от Telegram, и дальше работать с кэшем, т.е. вся переписка остается на телефоне злоумышленника (разве кому-то понравится, что его переписку читают?).
Почему-то ни кто не поинтересовался кроме переписки что происходит в таком случае (скомпрометированном СЧ Android) со звонками, или с файлами…EviGL
08.08.2018 19:54На Android >5 Telegram предупреждает хозяина о записи экрана
На рутованном телефоне не обязательно снимать скриншоты приложением "скриншоты", которое обеспечивает все эти запреты или предупреждения.
На нём ты можно записывать экран каким угодно образом в обход всей андроид-экосистемы и песочницы.
sbh
08.08.2018 07:38+3ну хрень же собачья. Сидит держа в руках телефон с рутом и говорит что защита Телеграмм полное фуфло.
gecube
08.08.2018 09:00-1Считаю, что статья имеет право на существование, т.к. показывает, что действительно е2е в телеграмме нет. Иначе невозможно было открыть секретный чат после клонирования пакета файлов на другое устройство. В этом кейсе мы видим лишь то, что пвторы и владельцы телеграм немного лукавят относительно защищенности продукта.
Я очень удивлен, что секретная сессия не привязана к какому-либо уникальному идентификатору устройства (хотя бы imei). Понятно, что и это можно отломать ) но поверхность атаки резко уменьшается, а ее сложность — возрастает.
С другой стороны, если кем-то заинтересовались органы, то есть у них есть способы получить желаемое и не через телеграм. И в этом случае пора заматываться в простынку и ползти в сторону кладбища, а не рассуждать о безопасности ТГ
shifttstas
08.08.2018 09:16+1А кто вам даст доступ к IMEI? Идеология сейчас такая, что приложения не должно иметь возможности однозначно идентифицировать пользователя
gecube
08.08.2018 10:19Приложение может идентифицировать пользователя — хотя бы по учетным данным google account (иначе как можно «восстановить» свои покупки в условно-бесплатных программах?).
Насчет IMEI — наверняка есть способ получить уникальный идентификатор устройства (любой). К сожалению, я давно не следил за этой темой, поэтому либо придется сидеть и изучать вопрос, либо положиться на Ваше мнение.shifttstas
08.08.2018 15:26Интересно, что у Apple подход совершенно другой и кроме временного ID устройства который модно менять хоть каждый день более ничего не передаётся.
Восстановление покупок кстати там завязано на внутренние API платформы и приложению не возвращается статус что за пользователь, а только есть ли данный контент или нет
Groosha
08.08.2018 11:25+2действительно е2е в телеграмме нет. Иначе невозможно было открыть секретный чат после клонирования пакета файлов на другое устройство
Автор переносит приложение с одного смартфона на другой, делая "слепок" всего состояния, включая ключи. e2e как было, так и есть.
Gordon01
08.08.2018 09:371) Секретные чаты не должны работать на рутованых устройствах
2) Секретные чаты должны быть привязаны к уникальному идентификатору оборудования
3) Смешно, но получается, что приложение сбербанка для android защищено лучше telegram.
Корпорации: Хипстеры
1:0Ilyasyakubov
08.08.2018 10:17+1Была похожая история с 1Password и Сбербанком. Дело в том, что начиная с iOS10 приложениям разрешили проверять были ли добавлены новые отпечатки пальцев для разблокирования с момента последнего запуска. Сделано это для того, чтобы исключить атаку когда злоумышленник завладев iPhone и ЗНАЯ pin пользователя, мог добавить свой отпечаток и попасть в приложение.
Молнеиносно среагировали разработчики Сбербанк, обновив свое приложение всего через пару недель после релиза iOS10. А вот канадские «хипстеры» из Agilebits закрыли «дыру» только через полтора года после выхода iOS10 и через год после того как им первый раз написал я. Самое интересное, что в ответных письмах канадцы писали, что знают о новой функции, но не хотят её добавлять из-за большого числа пользователей, которые один раз придумали пароль, включили разблокирование по отпечатку и навсегда забыли пароль. Якобы такие пользователи потеряют доступ к сейфу в будущем.
Пришлось пользоваться 1password с оглядкой на «дыру», я даже pin на телефоне сделал 6-значным.springimport
08.08.2018 17:20Вы о чем, многие банки не имеют двухфакторной аутентификации когда даже у приватбанка это года с 2012.
В СНГ все таки очень развито it, многие это не замечают.
aamonster
08.08.2018 21:121 — к сожалению, на нерутованном устройстве порой нельзя обеспечить ни удобство, ни безопасность.
Помнится, когда у меня был смартфон на android 4.4 — я охренел от наглости сберовского приложения, возжелавшего читать мои sms (в 4.4 ещё нельзя было просто отказать приложению в этом — если у тебя нет root).
dragoangel
08.08.2018 10:58Можно юзать не пин, а пароль. Да и если у тебя root или разлоченый бутлоадер или не шифрованный телефон то о какой бесопасности личных данных вообще можно говорить?!
Все вышесказанное касается Androidne555 Автор
09.08.2018 11:43+1Можно, но по умолчанию local code в Telegram стоит pin, многие ли пользователи знают, что pin Telegram взламывается (мгновенно)?, к тому же алгоритм атаки на шифрование доступен лишь с прошлого месяца.
«Юзать пароль» можно, но шифрование осталось прежним (не криптостойкое) и например буквенно-цифровой пароль из 8 символов восстанавливается до ~14ч. (cpu+gpu, я проверил).
Поэтому рекомендация для разработчиков Telegram остается прежняя (написал в выводе статьи).dragoangel
09.08.2018 12:07Давайте говорить по теме:
1. То что по дефолту вам предлагает любой софт зачастую не безопасно в пользу «удобства», нужно думать самому вам нужна безопасность или простота.
2. Перебор 8 символов по словарю или только цыфренно-буквенный, или вообще возможные комбинации ASCII символов? Это ведь кардинально меняет время под брутфорс.
3. Двухфакторка это маст хев любого кто дорожит безопасностью, и она же = спасение в данной ситуации. Жаль только что нету поддержки TOTP со стороны Телеграма. Перехват сим-карт становится все популярней.
4. То что я писал выше: файл не доступен на залоченом даже зарутованом устройстве. Если вы отдаете разлоченый телефон без шифрования /data или с рутом (опять таки разлоченый) или с разлоченым загрущиком другому человеку то кто вам доктор? Вы делаете всю ОС уязвимой, и поверьте не только Телеграм, тут Вы виновны делаете уязвимость, а не они. Я уверен что та же розблокировка по отпечатку пальца на розлоченом рутовом телефоне может скомпрометировать телеграм и другие приложения. С таким же успехом можно пытать человека паяльником и он сам все роскажет. P.S. У меня пароли где это возможно 32 символа вплоть до ASCII вида: «2yA??yo.?Pu4A%5O^a:&r&µy±dxeQ*?b» потому что я их пофиг не ввожу руками, брутфорсьте на здоровье.ne555 Автор
09.08.2018 12:342. Меняет кардинально, в посте я упомянул спецсимволы или словари? нет.
4.Можно и паяльником пытать, но на сколько я знаю по закону в РФ пытки запрещенны, а изьятие, (правоохранителями) гаджетов разрешено.
То, что Вы пользуетесь паролями 32 символами, не делает Вас среднестатистическим юзером Телеги.
Приложили скрин, получили ответ. Спасибо.dragoangel
09.08.2018 12:592. Вы всеравно не ответили какой шаблон использовали при брутфорсе в 8 символов. Такой сложный вопрос?
4. Ну вы и наивный. Ну да ладно припустим что мир идеальный и у нас никого не избиваю/пытают, опять так предположим что они чесно изымают телефон и что они получат от среднестатистического пользователя:
- Рута нет, бутлоадер
девственнозалочен - Телефон залочен под пароль и отпечаток пальца
- Припустим они
как последние негодяиразблокировали вашим пальцем телефон без вашего на то разрешения (всеравно нарушили закон) - /data/data без root не достать, что бы поставить root нужно либо А: найти експлойт для вашей ОС, что на Android 7+ сложновато либо ставить кастомный рекавери для которой нужно розлочить загрущик что произведет к Wipe всей Userdata
- И вишенька на торте: автор не просто показывает что с помощью этой уязвимости можно прочитать чужие СЧ, он еще й говорит о том что это можно делать «незаметно», как вы все это незаметно провернете с чужим телефоном
украв его минимум на пол часа?
5. То что я юзаю 32 значные пароли и вправду не делает меня среднестатистическим юзером телеграма, но и наличие root прав на телефонах и полностью скомпрометированых заводских мер безопасности ОС Android тоже не подпадает под характеристику среднестатистического юзера телеги.- Рута нет, бутлоадер
apapacy
08.08.2018 12:14-3Я не нуждаюсь в каких то секретных чатах и даже не сильно опасаюсь что мою переписку просто прочитать. Но Телеграфом не пользуюсь тк немного напрягает какое-то просто гугллвское стремление заполучить номер моего телефона. Зачем он ему?
Delphinum
08.08.2018 16:14Чет как то слишком много звезд должно сойтись, чтобы этот финт ушами провернуть. С тем же успехом можно попросить жертву отдать телефон с открытым приватным чатом телеги, шансов примерно столько же будет.
dartraiden
09.08.2018 02:08«Здравствуйте, я молдавский вирус. По причине ужасной бедности моего создателя и низкого уровня развития технологий в нашей стране я не способен причинить какой-либо вред вашему компьютеру. Поэтому очень прошу вас, пожалуйста, сами сотрите какой-нибудь важный для вас файл, а потом разошлите меня по почте другим адресатам. Заранее благодарю за понимание и сотрудничество»
Xaliuss
08.08.2018 16:53ИМХО уязвимость может заключаться разве что в незаметном клонировании. То есть злоумышленник (спецслужбы после ареста и т.п.) может читать чаты, а хозяин устройства не подозревать о взломе. И это может касаться не только секретных чатов. В первом сценарии взлома описанном в статье не указано явно, прошел ли бан аккаунта от телеграмма (во втором 5 минут). С учетом того, что кнопка выйти на других устройствах не помогает, то нужно будет или выполнить полный сброс приложения, или сделать это с другого устройства.
Если телеграм при клонировании сессии убивает её в течении 5 минут, то урон безопасности минимальный. Вопрос только, при всех ли сценариях это так (в статье этот вопрос не раскрыт подробно). С учетом того, что часть клонирования, требующая доступ к устройству может занять только несколько минут, то сценарии использования появляются.
apapacy
09.08.2018 11:08Может быть кто нибудь объяснит мне в чем прикол секретных чатов телеграмм? Если вы обменивается по протоколу типа https то вас читать никто кроме самого телеграмма не сможет. Если же вы используете какой то дополнительный уровень касторового шифрования то это ещё ничего не гарантирует. Могут использоваться некриптостойкие генераторы ключей, методы шифрования с бэкдорами и тому подобное. Я бы сказал что единственное что вы делаете создавая секретный чат это помечается ваш диалог как потенциально интересный для его прочтения
combonik
09.08.2018 14:57Статья не оправдывает свое название, нужно было назвать как то так: «Как я взломал сам себя, имея все исходные данные и физически телефон используя чужой скрипт на питоне».
Единственная полезная часть — elegram2john.pyne555 Автор
09.08.2018 15:18Прежде чем постить такие низкие заявления, сначало проверьте под какой лицензией выпускается софт.
Иначе для вас будет все чужое: nmap, ютуб, хабр.
evgenWebm
09.08.2018 17:11-3Автору спасибо за пост.
Ещё один камень в ложь Дурова о исключительной безопасности Телеграмма.
Хорошая программа, с хорошим уровнем безопасности, но вот ложь о уровне безопасности немного раздражает.
Дюв комментариях, пользователи, на рефлексе защищают телеграмм. Хотя автор все свои утверждения подтвердил фактами.
dmitry_dvm
10.08.2018 10:08+1Такое ощущение, что большинство комментаторов за деревьями не видят леса.
Берём некоего "нарушителя", сажаем в ИВС, забираем ремень, шнурки и телефон. Клонируем телегу, возвращаем вещи и отпускаем.
"Нарушитель", не видя явных следов взлома и считая правоохранительной дебилами, юзает дальше свои СЧ, а мы их параллельно читаем, а при необходимости ещё и пишем. И телега не замечает что у приватного чата внезапно 3 участника, из которых 2 — одинаковые. Если это не уязвимость телеги, то что это?
aamonster
Чувак, о чём всё это? Если у тебя есть полный контроль над андроидным телефоном (рутованный же) — то опаньки, все данные приложения доступны, и оно ничего не может с этим поделать (разве что заставить пользователя на каждый чих вводить достаточно сложный пароль и шифровать всё им — и то никаких гарантий, что его не перехватит кейлоггер).
Решается только аппаратно — выделить какой-то модуль, данные из которого недоступны без аутентификации (и который, к примеру, сам проверяет отпечаток пальца или сам препятствует попыткам подбора pin-кода). Это есть в современных iOS устройствах (Secure Enclsve) и в каких-то андроидных посерьёзнее (Trusted Execution Environment (TEE), Secure Element (SE)).
Хорошо бы знать, использует ли их Телеграм, если они доступны.
geisha
aamonster
Ну да. Я и охреневаю: он что — с самого начала не знал, что это можно сделать?
Хотя, кстати, я подумал — всё-таки можно сделать защиту. Если pin будет не к локальному ключу, а ко второму, хранящемуся на сервере. Который используется для шифрования локального ключа. Тогда можно ограничить скорость подбора. Но это отход от e2e, защита начинает зависеть от сервера. Плюс работа только в онлайне, плюс, как тут уже сказали "если устройство скомпрометировано"...
geisha
Знать — одно, а сделать — совершенно другое. Я бы посоветовал автору писать нормальным языком и выражаться прямо. Очень уныло читать вначале, если честно (обида, ИМХО, вот это вот всё). А так — исследование имеет право на существование.
saboteur_kiev
Поддерживаю.
Я вообще предполагаю, что если я под виндой просто скопирую папку с телеграмом(и профайлом юзера) на другой комп и просто запущу — то все должно работать. Даже буду удивлен, если это не так.
На самом деле, самый важный момент в статье — что Телеграм не отобразил в списке сессий еще один левый сеанс. Это явная недоработка и уязвимость протокола.
ne555 Автор
aamonster
Точно не помню, что и как под виндой, но вроде системное хранилище ключей привязано к компьютеру, и его копирование представляет определённую сложность (но ничего такого, с чем нельзя справиться). В MacOS — точно именно так и сделано. Так что если программа пользуется системным хранилищем ключей — такая атака несколько затрудняется.
В iOS (на относительно новых девайсах) вообще всё ещё лучше — есть отдельный аппаратный Secure Enclave, который вы так просто не скопируете.
В Android ситуацию толком не знаю (хотя при случае спрошу у коллег из андроидного отдела), гугл выдаёт умные слова Trusted Execution Environment (TEE), Secure Element (SE) — но, как я понимаю, они не на всех девайсах есть.
saboteur_kiev
Я не помню чтобы я вводил какой-либо local code на Windows клиенте…
anonymous
Stalker_RED
>> что если я под виндой просто скопирую папку с телеграмом(и профайлом юзера)
Если скопировать хром с профилем или стим например, то они начнут сигналить, мол «произведен вход с другого устройства, а давайте-ка мы это подтвердим»
А телега просто молча работает, но называет себя очень секьюрной.