Чекист 42
3.38K subscribers
116 photos
3 videos
23 files
178 links
Другой канал с мыслями про безопасность iPhone: @apple_automation
Download Telegram
извлекаем метаданные с заблокированного Telegram Desktop на MacOS

на маках нельзя вот так просто вмешаться в оперативную память и дампнуть память процесса, чтобы извлечь оттуда localkey как я писал ранее https://t.me/chekist42/374

тем не менее можно запустить команду
log stream --predicate 'process == "usernoted"' --debug --style syslog

когда придет уведомление - вы увидите Reset badge count for com.tdesktop.Telegram
ждем после этого 30 секунд, получаем что-то вида [com.apple.unc:application] Request from <LegacyConnection identifier: com.tdesktop.Telegram type: NCCenterType(rawValue: 1)> to add request <NotificationRecord app:"com.tdesktop.Telegram"

там будет поле req:"1384629105748392615_6892991962_104238"
первое число не знаю что обозначает, далее 6892991962 - id пира от которого пришло сообщение,
104238 - message_id (если в ЛС пришло, то mailbox id, по которому можно разграничить аккаунты куда приходят сообщения)

таким образом можно будет узнать кто пишет человеку после задержания например, из минусов - не показываются чаты в муте (хотя Reset badge count для них приходит)
Классная аватарка у Павла Дурова 👍🏻
Чекист 42
Почему GrapheneOS не следует использовать в России или стоит делать это крайне осторожно? По умолчанию «в целях анонимизации от Google» многие пункты проксируются через сервера GrapheneOS, это: - internet connectivity check который идет вне vpn даже если…
сюрприз пользователям GrapheneOS,
в каком-то обновлении появился пункт "certificate transparency downloads"

я выставил все остальные пункты на гугловские домены (connectivity checks, widevine provisioning и т д), и графенос очередным обновлением просто добавил новый запрос через свои сервера по умолчанию...

очередной пример, что приватность не равно анонимность. (хотя я тут даже не уверен что есть приватность, а что есть анонимность)

поставите вы у себя дома шредер для дисков крутой, но представьте, что он будет скидывать свои координаты третьим лицам.
вот и у меня возникают вопросы к "производителям" такого.

какой смысл в приватных коммуникациях signal если через cdn очень легко построить дерево пользователей, и signal нигде об этом не пишет? появился у такера карлсона например информатор, скинул ему документ в сигнале, ну и все, когда такер скачает документ от этого информатора их связь засекут (а может и раньше, точно не знаю как там аватарки скачиваются).
классно конечно что сообщения зашифрованы (хотя тут тоже вопрос учитывая безопасность конечных устройств, напримеи signal убрал намеренно шифрование бд своего клиента).

это какой-то заговор - предлагают/продают приватность и не пишут об очевидных рисках.
пишете вы e2e protonmail письмо, а заголовок (тема) письма у него не будет зашифрован. как и имена файлов кстати. узнаете вы об этом, конечно, потом, если вообще узнаете.
Чекист 42
что остается когда вы выходите с интернетом: auth_key остается там же, просто он больше неактивен. значит, из него можно получить auth_key_id. допустим вы с exit ноды tor сидели в телеграм, а они записывали весь трафик, или вычленяли auth_key из пакетов …
Telegram для iPhone хранит токен входа у Apple в iCloud,

через NSUbiquitousKeyValueStore, который, судя по всему, не покрывается e2e шифрованием при Advanced Data Protection

как отключить это сохранение в облаке - непонятно.
дебаг функция Disable relogin tokens не поможет - она активна только при входе в аккаунт и не влияет на сохранение токенов.

именно поэтому удаление приложения не поможет - повторная установка подтянет данные из iCloud и при вводе номера телефона позволит доказать что вы пользовались этим аккаунтом (а заодно обойти первый фактор авторизации)

насколько знаю, Apple делится данными из iCloud со спецслужбами.

важное уточнение - токен входа который хранится это просто мусор который ничего не означает (future_auth_token). android же сериализует и сохраняет все поле auth.authorization в saved_tokens_login.xml

честно говоря, я в этом моменте сразу не разобрался и чуть было не выложил пост о том что телега слила всех юзеров apple.
когда я вставлял картинку баг Telegram Desktop стер мне половину поста и я пошел его переписывать.
Звонки Telegram

их факт можно увидеть в трафике, у них понятная сигнатура

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

недавно телеграм ввел зашифрованные групповые звонки. их сигнатура трафика отличается от обычных звонков.
если в обычных звонках пакеты в основном идут на 91.108.9.* порт 1400 и 91.108.9.*(другой) порт 596-599
то в групповых трафик идет на 91.108.9.* и порт там 32002

конвертировать обычный звонок в групповой можно, бесшовно - собеседник подключится к нему автоматически.
и вот теперь задайтесь вопросом - а сколько вообще людей конвертирует звонок в групповой? то есть не изначально создают групповой по ссылке, а именно чтобы был обычный звонок и затем стал групповым. я думаю это 0.1% или даже меньше (в основном люди просто звонят либо подключаются по ссылке)

вы сразу скажете - но ведь в россии звонки через телеграм, да и сам телеграм заблокированы. все так. только сигнализация звонков проходит через основные датацентры телеграм. иными словами - у человека может быть включен прокси телеграм, вы ему позвоните, и сам факт звонка ему приходит через те сервера телеграм соединение к которым у него за mtproxy. но когда он примет звонок, устройство начнет слать пакеты к серверу звонков уже вне прокси (и они будут заблокированы ТСПУ). а когда произойдет конвертация звонка, пакеты начнут отправляться уже на другой адрес с другой сигнатурой (и тоже скорее всего не доходить).

я думаю что нескольких секунд неудачного звонка с конвертацией в групповой будет достаточно чтобы найти человека сидящего в том числе за mtproxy.
неудавшийся звонок в, допустим, 7 секунд и последующее присоединение к звонку по ссылке тоже сузит круг слишком сильно.

кстати, совершить конвертацию звонка через telegram desktop до соединения нельзя, а через android клиент можно.
ранее я также писал что если у человека в telegram desktop даже socks5, а не mtproxy, звонки будут все равно идти напрямую к серверам в обход любых прокси.
почему Telegram Desktop не стоит пользоваться в публичных местах, про серьезные риски localkey

когда вы запускаете tdesktop, на вашем устройстве создается папка со случайным ключом шифрования - localkey. он шифрует все данные, кеш и авторизационные ключи от вашего аккаунта (которые дают к нему полный доступ).

этот ключ в свою очередь шифруется пасскодом/системным пасскодом.

проблема в том, что нельзя создать localkey с шифрованием изначально.

например когда я входил в публичном месте через Telegram Desktop, я бы не додумался что умник мог скопировать папку tdata заранее, и если бы я включил пароль даже длиной 128 символов, а затем закрыл Telegram Desktop, он бы получил доступ к моему аккаунту просто расшифровав новую папку через ключ который лежал в старой.

пока я ломал голову как извлечь localkey из памяти macos, я не понимал очевидных рисков.
можно просто нажать кнопку log out пока ключ в ram! localkey не дропнется.
то есть мы просто копируем текущую папку tdata с кешем, нажимаем выйти, localkey оголяется, и мы дешифруем старую папку получая id аккаунтов, и весь кеш с file_id. доступа к аккаунту не будет, потому что выход осуществится только когда уйдет запрос на выход, но ценные данные все равно останутся.

инструмент который я писал ранее для извлечения данных из tdata - https://t.me/chekist42/340
поддержки localkey в этой версии нету, но добавить ее - тривиальная задача

чтобы воспроизвести масштаб проблемы добавьте у файла decrypter.py в функцию read_key_data вывод localkey. теперь запустите скрипт на пустом Telegram, войдите в аккаунт и установите пароль, добавьте флаг -p "вашпароль" к скрипту, увидите тот же localkey. выйдите из аккаунта с паролем пока ключ в ram - запустите скрипт без указания пароля - localkey все еще не изменился.
не знал что указывая разные логины и пароли для прокси socks5 tor можно разграничивать цепочки 🤷‍♂️

например запускаете один экземпляр Telegram Desktop, там указываете прокси 127.0.0.1 9150, имя пользователя telegram1 пароль telegram1, для другого с telegram2 будет другая цепочка.

очень полезно может быть, чтобы разграничить несколько сессий вне браузера, так их будет в разы сложнее коррелировать между собой.
поддержка apple:

I would like to inform you that the app is not available temporarily due to inappropriate content violations done.
Telegram для iOS все это время раскрывал геолокацию серверу при ее отправке в секретные чаты

когда вы открываете меню геолокации, показываются места рядом. потому что запрос автоматически уходит инлайн боту @foursquare с вашей геолокацией чтобы их загрузить 🤷‍♂️ проблема в том, что это работает в том числе для секретных чатов.

интересно, в чем смысл такого e2e, когда сервер телеграм может легко коррелировать запрос локации через инлайн бота и отправки сообщения в секретный чат. вроде бы e2e задумывался как без доверия серверу телеграм

security@telegram.org сказали что все работает как задумано и ничего не дали.....
1-click Telegram для Android

спасибо за предложенные 100$, но пост для канала мне сердцу дороже

@durov

если вы нажмете на эту ссылку на текущей версии Telegram для Android, да и на предыдущих, у вас откроется miniapp безо всяких предупреждений. сейчас попробую расписать проблему:

помните я писал про уязвимость с прокси? забудьте.
здесь утекает вся инфа webview браузера, user-agent например, ip, разрешение экрана, можно js любой встроить и выполнить (например собрать отпечаток). человек просто жмет на юзернейм, и вся инфа утекает.
но также это не простой логер данных браузера:

кто не знал, в miniapp встроена авторизация telegram. можно настроить сервер таким образом что человек просто нажмет на ссылку или юзернейм допустим в канале и у вас появится информация о его аккаунте, о его айпи, юзер агенте, ну и других метаданных, подробнее смотрите на сайте тг что доступно миниаппам.

бонусом - фишинг поддержка телеграм может отправлять безобидные ссылки https://telegram.org за которыми будет скрыт запуск miniapp с вредоносным url. эти вредоносные ссылки не видны пользователю при запуске miniapp

я также расписывал telegram security что через бизнес бота можно создать огромную зеленую кнопку, ссылки на телеграм за которой будут работать при первом контакте. (то есть если человек при первом контакте скинет ссылку/юзернейм - будут некликабельными, но если через бизнес бота кнопку инлайн слать - все обойдется). ну они мне сказали что это соц инженерия и послали.

уязвимость с утечкой данных о любом Android пользователе Telegram при нажатии на безобидный с виду юзернейм / ссылку стоит 100$?
почему?
владелец крупного бизнес бота savemod собирающего все личные чаты пользователей для сохранения удаленных сообщений и не только, через swiftgram пишет разработчику одного из крупнейших юзерботов heroku в котором он нашел бэкдор собирающий данные пользователей и дающий возможность получить полный контроль над аккаунтом,

тот предлагает первому показать сурсы (как будто это что-то докажет?)

приехали

поясню:
- владелец крупного бизнес бота хранит у вас свои переписки, вы ему их доверяете
- swiftgram сливает ваш аккаунт с айпишником на свои сервера, а также id ваших собеседников
- владелец юзербота оставил бэкдор чтобы тоже собирать айдишники и иметь возможность подсунуть левый код нужным пользователям

в этой истории не хватает одной красивой детали - нужно чтобы разраб heroku сидел через nekogram, который сливал номера телефонов своих юзеров
ну или чтобы они через telega созвонились (увы проект закрылся)
veracrypt читает только первый мегабайт от keyfile о чем сказано в их документации.
https://veracrypt.io/en/Keyfiles.html

плюсы - там используется не просто хеш файла, а самописная схема чтения в которой задействован пароль. иными словами нельзя заранее вычислить значение от keyfile и использовать его при бруте контейнера с разными паролями.

думаю если использовать 3 случайные файла из разных мест системы сбрутить будет невозможно даже если у вас легкий пароль.

я думал в качестве keyfile использовать какое-нибудь видео размером в несколько гигабайт, чтобы было невыгодно переносить такие файлы. как видите, заблуждался.

как минимум в macos сохраняется access time файла - при каждом монтировании оно будет обновляться. увидеть его можно через команду stat -f "%Sa" file (для тех кто решил что хранить keyfile в папке анапа 2007 отличная идея)
тем кто не доверяет Telegram:

допустим вы решили использовать прокси Tor для подключения в telegram desktop
когда вы откроете телеграм впервые, прокси настроен не будет, уйдет запрос с вашего айпи, телеграм уже забиндит tempauthkey, с которым получит qr код. если вы после этого установите прокси, для telegram будет тривиально связать ip за двумя tempauthkey. чтобы сменить tempauthkey придется переоткрыть приложение, ну и цепочку тоже надо будет сменить перед повторным открытием.

на телефонах телеграм постоянно работает в фоне. учтите, что если вы выключите VPN, он тут же подхватит ваш IP. допустим, фоновая синхронизация отключена - но телеграм самостоятельно расшифровывает пуш уведомления, так что он будет вероятно слать какие-то запросы каждый раз когда вам приходит уведомление.

долгое время в нативной версии для macos была сломана работа прокси - запросы могли пойти просто мимо него с вашего основного айпи.

мне кажется самый анонимный вариант - сидеть через веб версию в Tor браузере:
1. шифруется ваш auth_key_id, потому что все пакеты идут через wss
2. маскируется ваша платформа с которой вы выходите (вместо этого передается юзерагент)
3. гарантированно скрывается ip
4. есть браузерная песочница которую надо сломать чтобы добраться до вашего хоста

из минусов - непонятно входить в аккаунт. но можно и через chromium/vanadium + tor, чтобы была поддержка пасскеев.
PFS в pyrogram, telethon, а соответственно в юзерботах не работает.
это значит что если ваш трафик был записан, а затем был получен доступ к auth_key, весь этот трафик расшифровывается.
учитывая что auth_key постоянный на всю сессию, покажу простой пример:

вы используете pyrogram/юзербот целый год, и весь год ваш провайдер записывает трафик. затем даже если вы дропните сессию pyrogram, файл с auth_key скорее всего останется. через него можно будет расшифровать весь ваш трафик.

запуская юзербот на стороннем сервере вы должны понимать что даете серверу полный доступ к своему аккаунту потому что передаете auth_key
https://github.com/tomer8007/mtproto-dissector

очень крутой и довольно полезный инструмент - позволяет через auth_key расшифровать трафик MTProto и красиво отобразить его в Wireshark.

популярные клиенты создают временный ключ на каждое открытие, который можно извлечь из ОЗУ различными способами.
в MacOS гибкая система паролей для доступа к диску

ознакомьтесь с cli утилитой fdesetup
- например, можно создать несколько пользователей и каждый из них своим паролем сможет расшифровать диск
- можно создать длинный ключ восстановления который сработает независимо от паролей пользователей.

почему это важно:
менять регулярно пароль в MacOS не страшно. можно создать второй аккаунт администратора и передать пароль от него, допустим, адвокату. даже если забудете основной - не потеряете доступ.

сейчас я думаю насчет реализации автоматической смены пароля при входе - чтобы я вводил пароль от Mac из приложения 2FA на GrapheneOS (HOTP)- даже если получится подсмотреть как я ввожу пароль, он уже будет неактивен для следующей разблокировки.

предположим, вы разблокируете свой macbook в кафе и находитесь под камерами которые записали ваши нажатия по клавиатуре, в 99% процентов случаев macbook можно забрать в разблокированном состоянии, если вы не реализовали схему с выключением, например, через акселерометр. еще в 99% его можно разблокировать по тому паролю что вы ввели (нужно ли говорить что в данном случае touch id ненадежный метод).

мои идеи по этому поводу закрывают обе проблемы.

чтобы исправить окно с вводом пароля (например вы готовы ввести пароль, увидели его, но у вас тут же изымают ноутбук и готовятся доставать пароль из вашей памяти - при выполнении шортката добавьте смену пароля, в таком случае ваше устройство поменяет пароль и выключится, и его придется запрашивать заново)

как уже говорил, я бы поставил очень много на физическую безопасность, акселерометр отличный фактор, но не единственный. подумайте тоже что изменится в момент когда вас "ограничат в свободе". это могут быть очки с камерами которые сразу спровоцируют сорвать их с вас, это может быть что-то другое.
как понять чей экспорт чата Telegram Desktop :

можно посмотреть на имена людей в нем - если пользователь добавил кого-то в контакты, будет передано имя из контактов

если вы ставили реакцию в чате, в экспорте она будет выделена синим цветом. достаточно посмотреть список ставивших реакции на таких сообщениях и найти пересечения.

несмотря на то что в отображении видно лишь первую букву имени, в исходниках html имя сохранено целиком. также передается цвет аватарки что поможет сузить круг:
https://t.me/chekist42/94

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

ну что в любом случае весь трафик виден cloudflare до сайтов за ним

это полностью перевернуло мою картину

🤷‍♂🤷‍♂🤷‍♂
hook.js
2.1 KB
хук из репозитория для Android у меня не работал, поэтому прикрепляю работающий у меня

сначала получаю адрес через команду:
objdump -T libtmessages.49.so | grep -i "getauthkey"
0000000000da0350 g DF .text 0000000000000138 _ZN10Datacenter10getAuthKeyE14ConnectionTypebPli

подчеркнутое значение вписывается в хуке к mod.base.add

https://t.me/chekist42/442
пока в Android настройках разработчика можно настроить лишь лимит на загрузку из нескольких значений,

на iOS это гораздо гибче (все значения со скриншота можно поменять).

зачем нужно - дополнительный фактор безопасности. как выкачать терабайты контента с устройства, если его пропускная способность всего несколько килобайт в секунду?

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

кстати, при 100% дропе пакетов даже к wifi не удается подключиться, а устройства в локаторе теряются.