Как «защищенные» мессенджеры защищены от кражи SMS

9787
1

Популярные приложения для обмена сообщениями заявляют о том, что переписка в них надежно защищена от посторонних глаз. Но насколько это соответствует правде? Консультант по цифровой безопасности Николай Костинян разбирался в этом — специально для AIN.UA.

После взлома Telegram-аккаунтов российских оппозиционеров путем получения кодов подтверждения из SMS третьими лицами, мы решили экспериментальным путем разобраться, насколько «защищенные» мессенджеры — Signal, WhatsApp и Telegram — защищены от такого рода атак. По результатам эксперимента мы предложим рекомендации для пользователей как обезопасить свои аккаунты.

Под угоном аккаунта пользователя мы понимаем получение доступа к аккаунту жертвы атакующим — или одновременно с жертвой (у обоих будут активные сессии), или вместо жертвы (у жертвы активная сессия прекратится). То есть злоумышленник на своем устройстве зарегистрировал/активировал/вошел в приложение Signal, WhatsApp или Telegram от вашего имени и может писать сообщения или звонить от вашего имени другим пользователям.

Итак, если злоумышленник сможет получить SMS пользователя вместо него или вместе с ним, то:

  1. Сможет ли он угнать аккаунт пользователя Signal, WhatsApp или Telegram, который зарегистрирован на этот номер телефона?
  2. Может ли пользователь встроенными в мессенджер средствами предотвратить такой угон своего аккаунта?
  3. Какую информацию в результате успешной атаки получит атакующий (контакты, содержимое переписки, историю звонков)?
  4. Узнает ли жертва, что у нее угнали аккаунт?
  5. Если атакующий напишет от имени жертвы кому-нибудь из ее контактов, сможет ли собеседник понять, что ему пишут с угнанного аккаунта? Или что «что-то не так»?

Краткие результаты эксперимента:

1 9f7k71hFN3K7GxYSjHpU1gДля эксперимента мы использовали смартфон Google Nexus 5x на Adnroid 6.0.1, обычный телефон Nokia 1280 для получения SMS и iPhone 4s на iOS 9.3.1.

Злоумышленник получает доступ к SMS жертвы и угоняет аккаунт

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

Итак, атакующий установил себе на Android-смартфон все мессенджеры, в этом смартфоне НЕ установлена сим-карта с номером жертвы. Сим-карта жертвы находится в телефоне Nokia 1280.

Атакующий у себя на смартфоне указывает номер телефона жертвы и пытается войти в приложение:

WhatsApp позволяет вручную ввести код подтверждения, полученный через SMS на Nokia, и атакующий успешно угоняет аккаунт жертвы

Telegram позволяет вручную ввести код подтверждения, и атакующий успешно угоняет аккаунт жертвы

Telegram, если была включена двухфакторная авторизация, позволяет вручную ввести код подтверждения, и атакующий успешно угоняет аккаунт жертвы (подробности — в разделе о неработающей двухфакторной авторизации в Telegram)

Signal не позволяет вручную ввести код подтверждения в приложении на Android, но позволяет в приложении на iOS (об этом ниже). На Android приложение требует автоматического поттягивания кода из SMS или получения его через телефонный звонок. При этом если переслать полученную SMS с Nokia на Android , то Signal код подтверждения из такой SMS не «узнает».

Если атакующий может принять телефонный звонок на номер жертвы, то во время звонка робот продиктует код подтверждения, который приложение Signal на Android предложит ему ввести вручную. То есть Signal на Android не позволяет вручную ввести код подтверждения из SMS, но позволяет вручную ввести код подтверждения, полученный через телефонный звонок.

Если атакующий не может принять телефонный звонок, существует другое решение: попробовать не с Android, а с iPhone — Signal для iPhone позволяет ввести код подтверждения вручную, и SMS выглядит по-другому:

1 drovzFs9ibTn1k_uyZdt3A

Именно для этого нам понадобился iPhone. В дальнейшем в ходе эксперимента мы для удобства используем Android (зарегистрировались через телефонный звонок на Nokia 1280).

В результате, если мессенджеры настроены «по умолчанию», то атакующий может угнать любой аккаунт пользователя любого из них, если получит доступ к содержанию SMS жертвы. При этом атакующему не нужна SIM-карта с номером жертвы, ему просто нужны данные из SMS с кодом подтверждения, которые он может ввести в мессенджере вручную.

Какую информацию при этом получает атакующий

  • WhatsApp: никакую, «голый» аккаунт.
  • Telegram: все контакты из несекретных чатов, всю переписку из несекретных чатов. Из секретных чатов не получает ничего.
  • Telegram (при активной двухфакторной авторизации): никакую, «голый» аккаунт.
  • Signal: никакую, «голый» аккаунт.

Что при этом видит жертва и понимает ли, что ее аккаунт угнали

WhatsApp: жертва видит уведомление, что «невозможно верифицировать этот телефон», так как с этим номером телефона зарегистрировались на другом устройстве. В WhatsApp одновременно может быть зарегистрировано (активировано) только одно устройство (веб-версия не в счет, это не отдельный вход в систему).

WhatsApp при этом предлагает жертве «верифицироваться», то есть активировать приложение на своем телефоне снова. Если жертва способна получать SMS на свой номер, она может «верифицироваться» — и тогда атакующего, в свою очередь, выкинет из системы (деактивирует аккаунт на его телефоне). Одновременно с жертвой атакующий не сможет пользоваться этим аккаунтом:

1 2fkwEXWsoaK9AK6iYDya2A

Telegram: жертва видит сообщение о входе в свой аккаунт с другого устройства, инструкцию как завершить Telegram-сессию на устройстве атакующего, а также предложение включить двухфакторную авторизацию. Перед этим жертва также получит код для входа, так как при входе с нового устройства Telegram сначала отправляет код на другие приложения в виде сервисного сообщения, а уже потом (если нажать на «Didn’t get the code?») через SMS:

1 AU_jf1MFOyUpKf959Kccsg

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

1 8Az7kkB2zQ-c4MoIIV5wfg

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

1 e3u-PDYszvPtfSo7PVDrHQ

Нажав на сообщение для просмотра подробностей, жертва тоже не увидит никаких объяснений почему сообщение не отправляется. «Failed to send», и все. Более того, жертву вводит в заблуждение кнопка «RESEND», которая не работает снова и снова:

1 XGiltbrsQgBHHGKcKh0fwA

У Signal, как и у WhatsApp, на один номер телефона одновременно может быть зарегистрировано только одно приложение (веб-версия не в счет, это «присоединенное» устройство, а не отдельный основной вход в систему), об этом можно почитать на сайте разработчика.

То есть когда атакующий успешно угоняет аккаунт жертвы, Signal жертвы перестает работать («уходит в офлайн») — но никак об этом жертве прямо не сообщает (в отличие от WhatsApp), а вместо этого выдает ошибки при попытке отправить сообщения. Эти ошибки идентичны тем, которые видит пользователь при проблемах с подключением к сети.

Для сравнения: если у пользователя WhatsApp угнали аккаунт, он не может посмотреть свою переписку в чатах, контакты, историю звонков — ничего, только предложение «верифицироваться». Для пользователя все выглядит так, будто он только что с нуля установил WhatsApp себе на устройство. Если у пользователя Telegram с включенной двухфакторной авторизацией угнали аккаунт, для него все выглядит так же: будто он только что с нуля установил приложение Telegram себе на устройство.

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

Атакующий от имени жертвы пишет собеседнику жертвы — увидит ли собеседник, что «что-то не так»?

WhatsApp: при настройках по умолчанию собеседник ничего не видит. Если же собеседник у себя в настройках включит «Show Security notifications» (Settings => Account => Security => Show security notifications), то увидит в том же чате предупреждение о том, что у собеседника изменился «код безопасности»:

1 zgxACxDv4oYW7qzYBLJXtA

Если собеседник нажмет на это уведомление, то увидит подробности — что, возможно, собеседник переустановил приложение на своем телефоне или же сменил телефон; а также предложение верифицировать новое приложение собеседника:

1 jREP0vepV18hR1sVDDyx3w

Telegram: собеседник увидит просто еще один секретный чат. Это может насторожить, а может и не насторожить: для Telegram вполне штатная ситуация, когда тот же собеседник создает новый секретный чат, их может быть сколько угодно. Никакого специального предупреждения по этому поводу собеседник не получит:

1 qyczmdbzUSEPWKJwtb_7gw

Telegram, если была включена двухфакторная авторизация: собеседник увидит, что жертва снова зарегистрировалась в Telegram (присоединилась к Telegram). Позже, через 12–16 часов, в старых чатах вместо имени жертвы будет указано «Deleted Account»:

1 5AKHdNMI3jWpn1ZViE6mpw

Signal: собеседник в том же чате увидит уведомление, что получено сообщение с неизвестным ключом. И чтобы увидеть полученное сообщение, нужно нажать на уведомление:

1 RMILO3uXXE2EwIX7VQksOA

Когда собеседник нажмет на уведомление, система заставит его верифицировать новый ключ — или же просто «поверить» и принять его без проверки. Стоит отметить, что большинство пользователей так и сделают — просто примут новый ключ без проверки:

1 -GMJA_TOkBLtAkBi7AUb0Q

Может ли жертва встроенными в мессенджер средствами предотвратить угон своего аккаунта путем кражи данных из SMS

WhatsApp: нет, не может. Тут предусмотрена верификация только через получение SMS. Соответственно, у кого данные для входа из SMS — того и аккаунт.

Signal: нет, не может. Тут тоже предусмотрена верификация только через получение SMS (или телефонный звонок).

Telegram: нет, не может. Включенная двухфакторная авторизация не помешает атакующему угнать аккаунт. Подробнее об этом в следующем разделе.

Почему двухфакторная авторизация в Telegram не работает, то есть не предотвращает угон аккаунта

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

Если у жертвы в Telegram включена двухфакторная авторизация, то у атакующего происходит следующее:

1. Атакующий у себя в приложении указывает номер телефона жертвы и пытается войти в аккаунт. Тут он видит сообщение, что код отправлен не по SMS, а на приложение, зарегистрированное на этот номер, на другом устройстве:

1 t_x9BWvDtMsHZYdP4KDyjQ

2. В этот момент жертва получает системное уведомление у себя в приложении (или приложениях) Telegram:

1 nAZ3_beTdmH1iMZcdKm-vw

3. Атакующий нажимает «Didn’t get the code?» и Telegram отправляет код через SMS:

1 refN3Tqoffno2wENbQarlA

4. Тут атакующий вводит код из SMS и узнает, что в настройках аккаунта включена двухфакторная авторизация и что ему нужно ввести пароль (в данном случае «10» это подсказка для пароля, выбранная при включении двухфакторной):

1 zb1mln_FHdXV1lAtvfU1jg

5. Далее атакующий притворяется, будто он забыл пароль — «Forgot password?». Тут атакующему сообщают, что код восстановления отправлен на электронную почту (если жертва при включении двухфакторной авторизации указала адрес электронной почты). Атакующий не видит адреса электронной почты — он видит лишь то, что после «собачки»:

1 3R8VegJa4h3aWLUbjLIcHg

6. В этот момент жертва получает код для сброса пароля на адрес электронный почты (если она указала адрес электронной почты при включении двухфакторной авторизации):

1 fZIzr85Rm7eNTjhIZjJGoA

7. Атакующий нажимает «ok» и видит окошко, куда нужно ввести код для сброса пароля, который был отправлен на электронную почту. Тут атакующий говорит, что у него проблемы с доступом к своей почте — «Having trouble accessing your e-mail?». Тогда Telegram предлагает «reset your account»:

1 0nFVes-5FZdXUAy-NR1b5Q

8. Атакующий нажимает «ok» и видит два варианта — или ввести пароль, или нажать «RESET MY ACCOUNT». Telegram объясняет, что при «переустановке» аккаунта потеряется вся переписка и файлы из всех чатов:

1 1AijjC71dL91fRjNPKQCmQ

9. Атакующий нажимает «RESET MY ACCOUNT» и видит предупреждение, что это действие невозможно будет отменить и что при этом все сообщения и чаты будут удалены:

1 nrTT4krdrtFZ65LhlTx34g

10. Атакующий нажимает «RESET» и Telegram просит указать имя для «переустановленного» аккаунта:

1 SUUdkuA8ChTP7Z6hYAdk4A

11. Собственно, все, атакующий успешно угнал аккаунт: он вошел под номером телефона жертвы и может писать от ее имени сообщения:

1 JgHPJLbNb87SQwV3_x5ndQ

12. Жертва при этом видит приложение таким, каким оно было сразу после установки. Приветственный экран рассказывает о Telegram и предлагает зарегистрироваться или войти в уже существующий аккаунт:

1 8Az7kkB2zQ-c4MoIIV5wfg

13. Когда атакующий пишет от имени жертвы кому-нибудь из контактов жертвы, этот контакт видит, что жертва только что присоединилась к Telegram (что подозрительно), а также новое сообщение (или сообщения) в новом чате от жертвы. Через 12–16 часов контакт также увидит, что в старых чатах вместо имени жертвы указано «Deleted Account»:

1 5AKHdNMI3jWpn1ZViE6mpw

Если жертва имеет возможность получать SMS на этот номер телефона, она может войти в приложение Telegram на своем устройстве. Если атакующий на угнанном аккаунте не включил двухфакторную авторизацию, жертва может войти и в меню Settings => Privacy and Security => Active Sessions прекратить все остальные сессии (то есть сессии атакующего):

1 G-tAdR0ti1yseygVD8eeMw

Если же атакующий на угнанном аккаунте включил двухфакторную авторизацию — жертва, в свою очередь, таким же образом может «угнать обратно» свой аккаунт.

Получается, что единственная польза от двухфакторной авторизации в Telegram — чтобы атакующий не получил переписку из обычных (не секретных) чатов. То есть Telegram с включенной двухфакторной авторизацией дает приблизительно то же самое, что Signal и WhatsApp обеспечивают и так, без никакой двухфакторной авторизации.

Павел Дуров, создатель мессенджера Telegram, сказал:

…Есть двухфакторная авторизация (пароль на аккаунт), аккаунт привязан к SIM-карте адекватной юрисдикции, наиболее деликатные моменты обсуждаются в секретных чатах. В принципе, любая из этих мер по отдельности позволяет защитить важную информацию…

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

Рекомендации для пользователей

WhatsApp:

1. Обязательно включить в настройках Settings => Account => Security => Show security notifications. Тогда вы будете получать системные уведомления, если ваш собеседник напишет вам с другого приложения или устройства, — и сможете, заподозрив неладное, проверить, действительно ли вы общаетесь с тем, с кем вы думаете, или это атакующий пишет от его имени. Для этого нужно нажать на уведомление об изменении кода безопасности:

1 zgxACxDv4oYW7qzYBLJXtA

Далее нужно нажать «VERIFY»:

1 jREP0vepV18hR1sVDDyx3w

И верифицировать код безопасности вашего собеседника. Для этого попросите собеседника тоже открыть экран верификации кода безопасности вашего с ним разговора (из вашего чата ему нужно перейти в Меню настроек — View contact — Encryption). Тут вы можете или отсканировать QR-код друг друга, или сверить 60-тизначный номер (например, просто позвонив по телефону и поочередно зачитывая друг другу наборы цифр):

1 dqfU9u7mujn7yGuYi6L4KA

2. Попросите ваших собеседников сделать то же самое — включить отображение сообщений безопасности. А также всегда верифицировать коды безопасности, когда приходит такое уведомление.

3. Если вы видите уведомление, что «невозможно верифицировать этот телефон», так как с этим номером телефона зарегистрировались на другом устройстве, и предложение «верифицироваться» — сделайте это как можно быстрее (это деактивирует аккаунт на устройстве атакующего). А также сообщите всем важным контактам об инциденте, спросите, не писал ли им кто-то от вашего имени, пока ваше приложение было деактивировано.

4. Напишите разработчикам WhatsApp, чтобы они сделали двухфакторную авторизацию ([email protected]).

Signal:

1. Если видите в чате уведомление, что получено сообщение с неизвестным ключом и Signal предлагает вам верифицировать его — обязательно сделайте это. Любым другим способом свяжитесь (позвоните, например) с вашим собеседником, спросите переустанавливал ли он Signal, в идеале сверьте отпечатки («фингерпринты») ключей (в вашем текущем чате нужно нажать на Меню => Conversation settings => Verify identity).

2. Попросите собеседников делать то же самое: если от вашего имени приходит сообщение с неизвестным ключом, они должны связаться с вами и все выяснить.

3. Если при попытке отправить сообщение вы видите ошибку — возможно, кто-то другой зарегистрировался в Signal с вашим номером телефона, а ваше текущее приложение «ушло в офлайн» (и Signal вам об этом никак не сообщает). Если кнопка «RESEND» не работает снова и снова, а видимых проблем с подключением к сети у вас нет (работают другие мессенджеры, почта, открываются сайты в браузере), — проще всего переустановить Signal (удалить приложение и установить снова) и зарегистрироваться заново.
Если после переустановки и перерегистрации все заработало — спросите у своих контактов не писал ли им кто-нибудь от вашего имени пока вы были «в офлайне».

4. Напишите разработчикам Signal, чтобы они сделали двухфакторную авторизацию.

5. Напишите разработчикам Signal, чтобы они сделали внятное уведомление о том, что ваше текущее приложение «ушло в офлайн» из-за того, что кто-то зарегистрировал другое приложение с вашим номером телефона. И что до перерегистрации ваше приложение работать не будет.

Telegram:

1. Включите двухфакторную авторизацию: Settings => Privacy and Security => Two-Step Verification. Это не защитит ваш аккаунт от угона, но защитит вашу переписку из не секретных чатов от атакующего.

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

3. Если видите уведомление о входе в аккаунт с другого устройства, следуйте инструкциям из уведомления. Сообщите важным контактам об инциденте, спросите, не писал ли им кто-нибудь от вашего имени пока активная сессия на этом «другом устройстве» не была завершена.

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

5. Если видите еще один секретный чат от какого-нибудь собеседника, лучше связаться с ним любым другим способом и проверить действительно ли это он вам пишет. В идеале, нужно верифицировать собеседника секретного чата всегда (в вашем текущем секретном чате нужно нажать на имя собеседника => Encryption Key). То же самое нужно сделать если видите, что ваш собеседник «присоединился к Telegram».

6. Попросите собеседников делать то же самое: если от вашего имени они видят еще один секретный чат, или что вы «присоединились к Telegram» — пусть свяжутся с вами и все выяснят.

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

8. Напишите разработчикам Telegram и попросите сделать настоящую двухфакторную авторизацию — такую, которая работает и которая не позволит атакующему угнать ваш аккаунт.

Автор: Николай Костинян, тренер и консультант по цифровой безопасности

Оставить комментарий

Комментарии | 1

Поиск