QR-аутентификация не так безопасна, как принято считать



Мохамед Басет (Mohamed Baset) — специалист по информационной безопасности, разработавший метод атаки на пользователей интернет-мессенджеров. Метод этот основан на использовании QR-кодов. Сейчас QR-коды используются для аутентификации во многих приложениях, включая WeChat, Line и WhatsApp. SQRL (Secure QR Logins) считался вполне безопасным методом, но похоже, что это не так.

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



Метод состоит из следующих этапов:

1. Злоумышленник инициирует клиентскую QR-сессию и клонирует код QR-логина на фишинговую страницу;
2. Жертве отправляется ссылка на эту страницу. Выглядит страничка вполне безопасно;
3. Жертва сканирует поддельный QR-код, а приложение отправляет секретный токен, завершающий процесс аутентификацию;
4. Злоумышленник получает подтверждение и теперь может контролировать аккаунт жертвы.

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

QRLJacking уже тестировался на ряде мессенджеров, включая QRLJacking на WhatsApp, WeChat, Line, Weibo, QQ Instant Messaging, QQ Mail, Alibaba. Все атаки, по словам разработчика, были завершены успешно.



Исходный код proof-of-concepp опубликован Басетом на GitHub.

Для того, чтобы опробовать скрипт в работе, нужно настроить серверную часть:

1. Загружаем «qrHandler.php» на сервер. Этот скрипт конвертирует строку base64 QR-code в валидное изображение в формате jpg. Имя файла изображения по умолчанию — tmp.jpg. Располагается он в корневой папке файлов скрипта и обновляется каждый раз при запросе php-файла. Для привлечения пользователей можно подделать страницу WhatsApp, можно создать сайт с каким-либо привлекательным приложением для пользователей мессенджера и т.п.
2. Обновляем файл «phishing.html», который и является исходником фишинговой веб-страницы.

Настройка клиента (браузер злоумышленника)

1. Открываем Firefox
2. Прописываем «about:config» и, конечно, соглашаемся быть осторожными;
3. Ищем строку «security.csp.enable» и меняем значение на false. После того, как скрипт будет опробован, лучше вернуть все обратно;
4. Устанавливаем add-on Greasemonkey, убеждаемся в том, что файл «WhatsAppQRJackingModule.js» загружен и работает.
5. Теперь все готово. Попробуйте открыть пример «web.whatsapp.com», ждем, пока загружается сессия WhatsApp. Greasemonkey начинет работать, используя WhatsApp модуль;
6. Отправляем прямую ссылку на фишинговую страницу жертве.

Смотрим на результат:



Какие ресурсы уязвимы?


По мнению разработчика, метод QRLJacking можно применять не только для интернет-мессенджеров, но и для прочих сервисов. Список уязвимых ресурсов и сервисов ниже:

Чаты : WhatsApp, WeChat, Line, Weibo, QQ Instant Messaging
Почтовики : QQ Mail, Yandex Mail
eCommerce: Alibaba, Aliexpress, Taobao, Tmall, 1688.com, Alimama, Taobao Trips
Online-банкинг: AliPay, Yandex Money, TenPay
Сервисы идентификации: Yandex Passport (Yandex Mail, Yandex Money, Yandex Maps, Yandex Videos, etc...)
Мобильное ПО: AirDroid
Другие сервисы: MyDigiPass, Zapper & Zapper WordPress Login by QR Code plugin, Trustly App, Yelophone, Alibaba Yunos
Поделиться с друзьями
-->

Комментарии (10)


  1. TimsTims
    10.08.2016 17:23
    +1

    Вполне обычный MITM + фишинг, ничего нового или удивительного.
    Для более *убедительного* способа стоило привести пример со ссылкой типа
    https://whatsapp.com....seekurity.net/, и тогда даже на скриншоте не было бы ничего подозрительного.


  1. nmk2002
    10.08.2016 17:40

    Такой атаке подвержены и простой пароль и одноразовый.
    Защитой от фишинга может быть, если браузер будет генерировать QR на основании информации, полученной от сервера и текущего URL или доменного имени.


    1. Tihon_V
      10.08.2016 17:45

      А в чем разница, если злоумышленник отдает уже сгенерированый QR?


      1. nmk2002
        10.08.2016 17:56

        я имею в виду, что если бы браузер мог в своем интерфейсе отображать QR(данные_полученные_от_сервера+URL/domain), то выводить QR на самой станице не надо было бы. То есть это конечно возможно, если станет стандартом.
        Например, рядом с адресной строкой предусмотреть поле для QR, при наведении мышкой на которое отображается QR.
        image


      1. Tihon_V
        10.08.2016 18:15

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


        1. nmk2002
          10.08.2016 18:32

          Суть в том, чтобы QR рассчитывал и рисовал сам браузер.


  1. KulakovAD
    10.08.2016 17:56

    А чем это отличается от обычного фишинга с просьбой ввести пароль?


  1. rumkin
    10.08.2016 18:49
    +1

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


    1. eps
      10.08.2016 21:31

      Атака на невнимательность пользователя — это тоже атака. Вспомните, сколько malware так распространяется.


      А квалификации у пользователя может не быть вообще никакой — на то он и пользователь


      1. ZaEzzz
        10.08.2016 22:00
        +1

        Я с вами согласен — охота бывает и с ружьем, и на капкан, но от способа она не перестает быть охотой.
        Но все же хотелось бы в заголовках видеть что-то в роде ловушки, а не атаки, ведь стрельба ведется по конкретно определенной цели, а капкан ставится на кого попадется (не на вот этого конкретного медведя, а на медведя).

        Мне кажется примерно такую мысль хотел донести товарищ rumkin.