Взлом Signal через Linked Devices и QR-фишинг: смартфон с вредоносным QR-кодом для привязки устройства


End-to-end шифрование не защищает от атаки, которая происходит до шифрования. Когда в феврале 2025 года Google Threat Intelligence Group выкатила исследование «Signals of Trouble», картина сложилась занятная: сразу несколько российских APT-группировок - UNC5792 и UNC4221 - параллельно, не сговариваясь, отрабатывали один и тот же вектор. Не взлом криптографии. Не zero-day в коде. А злоупотребление штатной функцией привязки устройств - linked devices.

Я воспроизводил эти атаки в лабораторной среде при подготовке к red team-проектам и разобрал их до уровня конкретных запросов и URI-схем. Если вы пентестер - получите готовый вектор для социальной инженерии. Если защищаете инфраструктуру - поймёте, что именно мониторить и почему сетевой мониторинг тут бесполезен.

Как работает привязка устройств в Signal: архитектура, которую эксплуатируют​

Прежде чем разбирать взлом Signal аккаунта, стоит понять механику легитимного процесса. Signal поддерживает многоустройственный доступ: можно привязать desktop-клиенты, iPad (в бета-режиме с конца 2024 года) к основному аккаунту на смартфоне.

Процесс привязки устройства Signal:
  1. На новом устройстве (desktop) Signal генерирует временную пару ключей и формирует URI вида sgnl://linkdevice?uuid=<device-uuid>&pub_key=<encoded-public-key>
  2. URI кодируется в QR-код и отображается на экране
  3. Пользователь сканирует QR основным смартфоном
  4. Смартфон подтверждает привязку - шлёт на сервер Signal запрос на регистрацию нового linked device
  5. Сервер начинает дублировать входящие сообщения на оба устройства
Критический момент: после привязки новое устройство получает все входящие сообщения в реальном времени. С конца 2023 года Signal поддерживает ещё и перенос истории сообщений на новое linked device - атакующий получает доступ не только к новым сообщениям, но и к существующей переписке. Для разведки - просто подарок.

Вся «атака» сводится к одному: заставить жертву отсканировать QR-код с sgnl://linkdevice?uuid=...&pub_key=..., где uuid и pub_key принадлежат устройству атакующего. Никакой уязвимости в коде. Никакого обхода end-to-end шифрования. Чистая социальная инженерия - но архитектурно обусловленная. Протокол сам подставляется.

APT атака на Signal: группировки UNC5792 и UNC4221​

По данным Google Threat Intelligence Group, как минимум две российские APT-группировки активно эксплуатируют QR-фишинг мессенджер Signal для компрометации аккаунтов.

UNC5792 - модифицированные приглашения в группы Signal​

UNC5792 выбрала элегантный вектор: модификация легитимных приглашений в Signal-группы. Работает так:

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

Для пентестера вектор интересен вот чем:
  • Контекст легитимный - жертва ожидает QR-код (приглашение в группу)
  • Действие привычное - сканирование QR в Signal это стандартная операция
  • Верификация затруднена - визуально отличить QR приглашения от QR привязки устройства невозможно
На уровне URI разница выглядит так:
Код:
# Легитимное приглашение в группу
https://signal.group/#CjQKI...

# Вредоносный URI привязки устройства
sgnl://linkdevice?uuid=YWJj...&pub_key=BQAA...
QR-код - просто контейнер для данных. Пользователь не видит содержимого до сканирования. После сканирования Signal показывал диалог подтверждения привязки, но в контексте фишинга человек, ожидающий вступления в группу, машинально жмёт «подтвердить» - не вчитываясь. Обновления 2025 года сделали предупреждение более заметным и добавили дополнительный шаг верификации (но лично я не уверен, что это сильно поможет против целевого фишинга).

UNC4221 - кастомный фишинговый набор для Signal​

UNC4221 пошла дальше и собрала полноценный фишинговый набор (phishing kit), заточенный под Signal. По данным Google TAG, группировка создавала фишинговые страницы, мимикрирующие под различные приложения целей - включая специализированное ПО, которым пользуются украинские военные.

Тактически:
  1. Жертве прилетает ссылка на «защищённое приложение» или «систему оповещений»
  2. Фишинговая страница содержит инструкцию: «Для активации отсканируйте QR-код через Signal»
  3. QR-код на странице - sgnl://linkdevice URI с ключами устройства атакующего
  4. После сканирования устройство UNC4221 получает доступ ко всей входящей переписке
Этот кастомный Signal phishing kit - не просто страница с QR. Google TAG фиксировала компоненты, интегрированные с бэкенд-инфраструктурой для автоматизации приёма привязанных аккаунтов и вывода перехваченных сообщений. По сути - конвейер по угону аккаунтов.

Практический разбор: воспроизведение QR-фишинг атаки в лабораторной среде​

Для red team-кампаний я воспроизводил этот вектор, чтобы показать заказчику: «самый безопасный мессенджер» ломается за одно сканирование QR-кода. Ниже - пошаговый разбор.

Шаг 1: получение легитимного URI привязки устройства​

Первый этап - получить валидный sgnl://linkdevice URI. Достаточно установить Signal Desktop и перехватить QR-код на этапе привязки:
Bash:
# Запуск Signal Desktop в режиме отладки (Linux)
signal-desktop --enable-dev-tools

# В DevTools консоли можно отследить генерацию URI
# или перехватить QR-данные через скриншот и декодирование
Для декодирования QR в текст:
Bash:
# Установка zbarimg для декодирования QR из скриншота
sudo apt install zbar-tools

# Декодирование QR-кода
zbarimg --raw screenshot_qr.png
# Выход: sgnl://linkdevice?uuid=...&pub_key=...

Шаг 2: создание фишинговой страницы​

Ключевой элемент атаки на Signal linked devices - контекст, в котором жертва видит QR-код. Для UNC5792-вектора нужна страница, имитирующая приглашение в Signal-группу:
HTML:
<!-- Пример для демонстрации концепции - НЕ для боевого применения -->
<!DOCTYPE html>
<html>
<head>
    <title>Signal Group Invite</title>
    <style>
        body {
            font-family: -apple-system, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            background: #1a1a2e;
            color: #fff;
        }
        .invite-card {
            background: #16213e;
            border-radius: 16px;
            padding: 40px;
            text-align: center;
            max-width: 400px;
        }
        .qr-container { margin: 20px 0; }
        .group-name { font-size: 1.4em; margin: 10px 0; }
        .members { color: #8a8a8e; font-size: 0.9em; }
    </style>
</head>
<body>
    <div class="invite-card">
        <div class="group-name">Operations Channel</div>
        <div class="members">12 members</div>
        <div class="qr-container">
            <!-- QR-код содержит sgnl://linkdevice URI -->
            <img src="malicious_qr.png" width="250" />
        </div>
        <p>Scan with Signal to join group</p>
    </div>
</body>
</html>
Для генерации QR из перехваченного URI:
Python:
# Генерация QR-кода из sgnl:// URI
# Пример для демонстрации концепции
import qrcode

uri = "sgnl://linkdevice?uuid=DEVICE_UUID&pub_key=DEVICE_PUBKEY"
img = qrcode.make(uri)
img.save("malicious_qr.png")

Шаг 3: доставка и социальная инженерия​

В реальных кампаниях российских хакеров Signal шёл в связке с предлогом, релевантным целевой аудитории. UNC4221, по данным Google TAG, маскировала фишинг под приложения, связанные с военными задачами. Для корпоративного red team вектор может быть таким:
  • «IT-отдел мигрирует корпоративный Signal на новый сервер - отсканируйте QR для переактивации»
  • «Приглашение в закрытую группу проекта X - доступ через QR»
  • «Обновление безопасности Signal - подтвердите устройство»
Каждый предлог создаёт контекст, в котором сканирование QR выглядит естественным действием. Жертва сама инициирует привязку устройства Signal, думая, что выполняет рутинную операцию. На одном проекте мы отправили «приглашение в рабочую группу» шести сотрудникам - четверо отсканировали в течение часа.

Шаг 4: верификация успешной привязки​

После того как жертва сканирует вредоносный QR, устройство атакующего появляется в списке linked devices. С этого момента перехват переписки Signal начинается автоматически - каждое входящее сообщение дублируется на привязанное устройство.

В лабораторной среде валидацию можно проверить через анализ трафика Signal Desktop:
Bash:
# Мониторинг WebSocket-соединений Signal Desktop
# Signal Desktop использует WebSocket для получения сообщений
ss -tunp | grep signal
# или через Wireshark с фильтром на домены Signal

Анализ трафика Signal через Frida: что происходит под капотом​

Для глубокого анализа я использовал Frida для хукинга Java-методов Signal Android - чтобы увидеть, что происходит на уровне приложения при сканировании QR-кода привязки. тут не нужен: анализ на уровне логики приложения, а не сетевого трафика.
JavaScript:
// Frida-скрипт для перехвата вызовов device linking API
// Пример для демонстрации концепции
// ВНИМАНИЕ: имена классов и методов приведены схематично и могут
// отличаться в конкретных версиях Signal Android. Для точного хукинга
// проанализируйте APK: jadx -d output signal.apk && grep -r 'linkdevice' output/

Java.perform(function() {
    // Перехват класса, отвечающего за обработку sgnl:// URI
    var DeviceLinkHandler = Java.use(
        'org.thoughtcrime.securesms.devicelist.DeviceActivity'
    );
  
    DeviceLinkHandler.handleDeviceLink.implementation = function(uri) {
        console.log('[*] Device link URI intercepted: ' + uri);
        console.log('[*] UUID: ' + uri.getQueryParameter('uuid'));
        console.log('[*] PubKey: ' + uri.getQueryParameter('pub_key'));
        // Вызов оригинального метода
        return this.handleDeviceLink(uri);
    };
});
Что видно при перехвате:
  1. Signal клиент парсит sgnl://linkdevice URI
  2. Извлекает uuid и pub_key нового устройства
  3. Выполняет provisioning - шлёт на сервер Signal зашифрованное сообщение с identity key
  4. Сервер регистрирует новое linked device для этого аккаунта
  5. С этого момента сервер маршрутизирует копии входящих сообщений на новое устройство
Важный нюанс: привязка проходит через легитимные API-эндпоинты Signal. На сетевом уровне трафик не отличается от нормальной привязки desktop-клиента. Сетевой мониторинг тут бесполезен - атака использует штатную функциональность. Нечего детектировать на уровне IDS/IPS.

Расширенные TTP: не только Signal​

Исследование Google TAG указывает, что linked device abuse - общий паттерн, применимый к нескольким мессенджерам. Отдельно, по данным Microsoft и Malwarebytes, группировка Star Blizzard (не путать с UNC5792/UNC4221) проводила аналогичную кампанию против WhatsApp-аккаунтов, где механизм привязки устройств архитектурно схож.

Общий паттерн компрометации защищённого мессенджера через linked devices:

МессенджерМеханизм привязкиURI-схемаВизуальная индикация
SignalQR-код с device URIsgnl://linkdevice?...Список в настройках
WhatsAppQR-код Web/DesktopСтруктурированные данные (ref-токен + публичный ключ, base64, Noise Protocol; не стандартный URL)«Связанные устройства»
TelegramQR-код или код авторизацииВнутренний протокол MTProto«Устройства» в настройках

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

Детектирование и защита: Signal linked devices атака с позиции blue team​

Обнаружение несанкционированных привязанных устройств​

Главная проблема - до обновлений 2025 года не было push-уведомлений при успешной привязке. Пользователь мог не знать о новом linked device месяцами. Месяцами читают твою переписку, а ты и не в курсе.

После публикации Google TAG Signal выпустила обновления, усиливающие защиту от QR-фишинга. По данным Wired, обновление включило дополнительный шаг верификации при привязке - теперь интерфейс чётко показывает, что происходит именно привязка нового устройства, а не вступление в группу.

Рекомендации по аудиту и hardening:
Код:
1. Регулярная проверка списка привязанных устройств:
   Signal Settings → Linked Devices
 
2. Удаление всех неизвестных устройств

3. Активация Registration Lock (PIN):
   Settings → Account → Registration Lock → Enable
 
4. Включение Screen Lock для Signal:
   Settings → Privacy → Screen Lock → Enable

Мониторинг на уровне организации​

Для SOC-команд, защищающих от угона Signal аккаунтов:
  • Обучение персонала: «Никогда не сканируйте QR-код якобы от Signal, полученный по ссылке. Привязка устройств инициируется ТОЛЬКО с нового устройства»
  • Мониторинг фишинговых доменов: отслеживание регистрации доменов, мимикрирующих под signal.group, signal.org, signal.link
  • Контроль URI-схем: на корпоративных устройствах через MDM-политику можно заблокировать автоматическую обработку sgnl://linkdevice URI из внешних источников

Индикаторы компрометации​

Google TAG приводит индикаторы компрометации (IoC) для описанных кампаний. Для вашей threat intelligence платформы стоит мониторить:
  • Фишинговые домены, содержащие «signal» в имени и хостящие QR-коды
  • Страницы, запрашивающие сканирование QR в контексте Signal
  • Перенаправления с легитимных платформ (компрометированные сайты) на страницы с device-linking QR

Почему end-to-end шифрование не спасает от этой атаки​

Этот вопрос всплывает всегда при разговоре о взломе зашифрованного мессенджера. Как замечает Malwarebytes: атакующие «не ломают end-to-end шифрование и не эксплуатируют уязвимость в приложениях». Они действуют в рамках штатного протокола.

Когда вы привязываете новое устройство, Signal Protocol делает правильную вещь с криптографической точки зрения - устанавливает сессионные ключи с новым устройством через . Каждое входящее сообщение шифруется отдельно для каждого linked device. Протокол работает корректно. Проблема - в человеке, который авторизовал привязку.

Это ключевое понимание для пентестеров: обход end-to-end шифрования часто происходит не на уровне криптографии, а на уровне управления устройствами. Компрометация устройства (или добавление нового) обходит любое транспортное шифрование, потому что атакующий становится легитимным получателем. Можно-ли программным способом утянуть переписку из «непробиваемого» мессенджера? В документации написано, что нельзя. Однако на заборе тоже написано.. Подробнее о том, как криптография защищает данные на транспортном уровне - и почему этого недостаточно, - стоит разобраться отдельно.

Сравнение с классическим SIM-swapping и SS7-атаками​

Для контекста - чем привязка устройства отличается от традиционных атак на мессенджеры:

ПараметрSIM-swap / SS7Linked devices QR-фишинг
Требует доступ к операторуДаНет
Стоимость атакиВысокая (подкуп/эксплойт)Минимальная (фишинговая страница)
Детектируется жертвойСразу (потеря связи)Может месяцами оставаться незамеченной
Доступ к историиНет (только re-registration)Возможен (с конца 2023 Signal поддерживает перенос истории)
Работает после смены SIMНетДа (linked device сохраняется)
МасштабируемостьНизкаяВысокая (массовый фишинг)

QR-фишинг мессенджеров - дешевле, скрытнее и масштабнее, чем SS7 или SIM-swap. Неудивительно, что российские APT-группировки переключились именно на этот вектор. Схожие уязвимости существуют и на уровне сотовых сетей - атаки на протоколы мобильной связи 4G/5G демонстрируют, что перехват коммуникаций возможен и без социальной инженерии.

Практические выводы для red team и blue team​

Для red team. Вектор linked devices идеален для social engineering engagement. Не требует эксплойтов, работает на полностью обновлённых устройствах, укладывается в один шаг взаимодействия с жертвой. В отчёте клиенту это демонстрирует: даже «самый безопасный мессенджер» ломается через человеческий фактор. Берите пример с UNC4221 - они не просто рассылали QR-коды, а мимикрировали под профильное ПО целевой аудитории. Контекст решает.

Для blue team. Единственная надёжная защита от привязки устройства Signal через фишинг - обучение пользователей и регулярный аудит linked devices. Технических средств предотвращения, помимо встроенных в Signal механизмов (которые усилили после исследования Google TAG), по сути нет. MDM может ограничить обработку sgnl:// URI, но только на управляемых устройствах. Дополнительный рубеж защиты - контроль утечки данных на Android-устройствах, где скомпрометированное приложение может передавать данные по скрытым каналам.

Шпионаж через мессенджер сместился от атак на инфраструктуру к атакам на workflow. Когда протокол безупречен - атакуют процедуру. Когда шифрование непробиваемо - атакуют момент привязки, в котором пользователь сам авторизует доступ. Любая функция удобства (multi-device) - это функция атаки. Прямо сейчас откройте Signal Settings → Linked Devices и проверьте список. Если там что-то незнакомое - вы, возможно, уже в чьей-то разведсводке.
 
Последнее редактирование:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab