Если ты занимаешься DFIR или threat hunting'ом - ты наверняка встречал в логах Windows Event ID 1149 (TerminalServices-RemoteConnectionManager) адрес источника вида
::% 16777216 и думал, что это след ngrok или другого туннелирующего инструмента. Так вот - это не так. Точнее, не совсем так.🐛 Что происходит на самом деле
Это баг в Windows, существующий как минимум с Windows 8 / Server 2012 и не исправленный вплоть до Windows 11 24H2 build 26100.8457.
Суть: при RDP-подключении через IPv6
termsrv.dll передаёт в GetNameInfoW (ws2_32.dll) указатель на структуру WTS_SOCKADDR - но читает её как sockaddr_in6. Проблема в несоответствии: WTS_SOCKADDR содержит 4 байта паддинга после sin_family, из-за чего IPv6-адрес клиента сдвигается на 4 байта вправо. В результате вместо реального адреса в лог пишется ::% 16777216, где 16777216 = 0x01000000 - это значение sin6_scope_id, которое интерпретируется как zone index от сдвинутого ::1 (localhost IPv6).⚙️ Структуры для понимания
WTS_SOCKADDR:USHORT sin_family; // 2 байта
// padding // 2 байта ← вот виновник
union { ... } // от offset 4
sockaddr_in6:short sin6_family; // 2 байта
u_short sin6_port; // 2 байта
u_long sin6_flowinfo;// 4 байта
struct in6_addr ... // 16 байт
u_long sin6_scope_id;// 4 байта
rdpcorets.dll записывает IPv6-адрес клиента в WTS_SOCKADDR с одной структурой. termsrv.dll читает это как sockaddr_in6 с другой - смещение на 4 байта, адрес уезжает в sin6_scope_id, который и попадает в лог как % 16777216.🧪 Как воспроизвести
Любой туннелинг через IPv6 на localhost (
ssh -L, devtunnel, ngrok, localtunnel) → RDP-подключение → в Event ID 1149 будет ::% 16777216.Это происходит не только с ngrok. Любое RDP-подключение через IPv6 localhost даст этот артефакт.
📋 Где проявляется
Event IDs: 1149, 4778, 4779 Журналы:
TerminalServices-RemoteConnectionManager\Operational, Windows Logs\Security🔧 Как восстановить реальный IPv6-адрес
Если в логе:
0:0:fe80::6e1d:980d%2607874452Берём число после
%: 2607874452Конвертируем в HEX:
9B 71 01 94Разворачиваем (little-endian):
94 01 71 9BДописываем к адресу справа:
fe80::6e1d:980d:9401:719bРеализуемо в любом SIEM через enrichment-правило.
📌 Выводы для DFIR
::% 16777216 - всегда признак RDP-подключения по IPv6 через туннель (localhost → порт 3389). Это остаётся валидным IoC для детекта reverse tunnel, независимо от того, ngrok это или ssh -L.Значение само по себе не несёт информации о реальном клиенте - адрес нужно восстанавливать по алгоритму выше.
Microsoft квалифицировал как Moderate / Tampering, CVE не присвоен, патч не обещан (ответ от 08.11.2025). Исправлено тихо в Windows 11 24H2 build 26100.8457+ и 26H1.
🔗 Слайды: ёPRSTCON 2026, автор - Константин Грищенко, Positive Technologies.
🐦⬛ DFIR Father