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:
- На новом устройстве (desktop) Signal генерирует временную пару ключей и формирует URI вида
sgnl://linkdevice?uuid=<device-uuid>&pub_key=<encoded-public-key> - URI кодируется в QR-код и отображается на экране
- Пользователь сканирует QR основным смартфоном
- Смартфон подтверждает привязку - шлёт на сервер 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 привязки устройства невозможно
Код:
# Легитимное приглашение в группу
https://signal.group/#CjQKI...
# Вредоносный URI привязки устройства
sgnl://linkdevice?uuid=YWJj...&pub_key=BQAA...
UNC4221 - кастомный фишинговый набор для Signal
UNC4221 пошла дальше и собрала полноценный фишинговый набор (phishing kit), заточенный под Signal. По данным Google TAG, группировка создавала фишинговые страницы, мимикрирующие под различные приложения целей - включая специализированное ПО, которым пользуются украинские военные.Тактически:
- Жертве прилетает ссылка на «защищённое приложение» или «систему оповещений»
- Фишинговая страница содержит инструкцию: «Для активации отсканируйте QR-код через Signal»
- QR-код на странице -
sgnl://linkdeviceURI с ключами устройства атакующего - После сканирования устройство UNC4221 получает доступ ко всей входящей переписке
Практический разбор: воспроизведение QR-фишинг атаки в лабораторной среде
Для red team-кампаний я воспроизводил этот вектор, чтобы показать заказчику: «самый безопасный мессенджер» ломается за одно сканирование QR-кода. Ниже - пошаговый разбор.Шаг 1: получение легитимного URI привязки устройства
Первый этап - получить валидныйsgnl://linkdevice URI. Достаточно установить Signal Desktop и перехватить QR-код на этапе привязки:
Bash:
# Запуск Signal Desktop в режиме отладки (Linux)
signal-desktop --enable-dev-tools
# В DevTools консоли можно отследить генерацию URI
# или перехватить 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>
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 - подтвердите устройство»
Шаг 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);
};
});
- Signal клиент парсит
sgnl://linkdeviceURI - Извлекает
uuidиpub_keyнового устройства - Выполняет provisioning - шлёт на сервер Signal зашифрованное сообщение с identity key
- Сервер регистрирует новое linked device для этого аккаунта
- С этого момента сервер маршрутизирует копии входящих сообщений на новое устройство
Расширенные TTP: не только Signal
Исследование Google TAG указывает, что linked device abuse - общий паттерн, применимый к нескольким мессенджерам. Отдельно, по данным Microsoft и Malwarebytes, группировка Star Blizzard (не путать с UNC5792/UNC4221) проводила аналогичную кампанию против WhatsApp-аккаунтов, где механизм привязки устройств архитектурно схож.Общий паттерн компрометации защищённого мессенджера через linked devices:
| Мессенджер | Механизм привязки | URI-схема | Визуальная индикация |
|---|---|---|---|
| Signal | QR-код с device URI | sgnl://linkdevice?... | Список в настройках |
| QR-код Web/Desktop | Структурированные данные (ref-токен + публичный ключ, base64, Noise Protocol; не стандартный URL) | «Связанные устройства» | |
| Telegram | QR-код или код авторизации | Внутренний протокол 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://linkdeviceURI из внешних источников
Индикаторы компрометации
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 / SS7 | Linked 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 и проверьте список. Если там что-то незнакомое - вы, возможно, уже в чьей-то разведсводке.
Последнее редактирование: