Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/smtimesiwndr/gdid-reversal
Обратная инженерияФорензикаКонфиденциальностьОбучение и Образование
GitHubsmtimesiwndr/gdid-reversal

gdid-reversal

Анализ с обратным проектированием глобального идентификатора устройства Microsoft (GDID), раскрывающий его генерацию как назначенного сервером MSA Device PUID, хранение в реестре и передачу через Connected Devices Platform, с воспроизводимой криминалистической методологией.

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
7064262 месяцев назадПроверено Kitploit

Полная документация Windows GDID

Глобальный идентификатор устройства полностью реконструирован

Primary source Platform Symbols Method Claims

Как «Глобальный идентификатор устройства» Microsoft, постоянный отпечаток Windows, упомянутый в жалобе Scattered Spider от июля 2026 года, на самом деле создается, хранится и передается.


TL;DR

[!NOTE] Перечисленное ниже верно, но не хватает некоторой информации. Независимо от того, выполнен ли вход с MSA, GDID у вас будет. Я не осознавал этого на момент публикации, но потом изучил. У CDP есть анонимный путь устройства, который используется, если не подключена MSA. Базовая система по-прежнему фактически верна, просто не хватает нескольких деталей.

  • GDID — это реальный элемент телеметрии. Он фигурирует в федеральной уголовной жалобе США (United States v. Peter Stokes, N.D. Ill., июль 2026) как Global Device Identifier g:6755467234350028.
  • Это «Device PUID» учетной записи Microsoft. 64-битный Passport Unique ID, присваиваемый установке Windows при регистрации с учетной записью Microsoft, записываемый в графе устройств как g:<десятичное>.
  • Утверждения неверны. Он не «128-битный» и не «создается из серийных номеров». В самом судебном документе сказано, что переустановка создает новый GDID, что исключает его происхождение от аппаратных серийных номеров, например, GPU.
  • Стек, снизу вверх: wlidsvc (служба учетной записи Microsoft) подготавливает устройство через login.live.com и получает обратно device PUID -> сохраняет его в реестре -> Connected Devices Platform (cdp.dll / CDPSvc) считывает его и регистрирует в графе Device Directory Service (DDS) -> Delivery Optimization сообщает его как документированный UCDOStatus.GlobalDeviceId.
  • Все это было воспроизведено на живой Windows 11 (26200) с публичными символами. Вы можете найти свой собственный GDID одним чтением реестра (§7).

[!NOTE] Маркировка достоверности. Каждое утверждение помечено, чтобы вы могли самостоятельно оценить его: [COURT] факт из первоисточника, [OBSERVED] воспроизведено на моем тестовом компьютере, [STATIC] доказано с помощью бинарных файлов и публичных PDB Windows, [ASSESSED] сильный вывод на основе доказательств.


Содержание

  1. Предыстория: что на самом деле сказал суд
  2. Опровержение вирусных мифов
  3. Где проявляется GDID: Delivery Optimization
  4. Кто им владеет: Connected Devices Platform вплоть до DDS
  5. Как CDP его получает: потребляет, а не вычисляет
  6. Чеканка: MSA Device PUID (wlidsvc)
  7. Найдите свой собственный GDID
  8. Снижение подверженности
  9. Методология (воспроизводимая)
  10. Ограничения и честные оговорки

1. Предыстория: что на самом деле сказал суд

1 июля 2026 года Министерство юстиции США обнародовало уголовную жалобу на Питера Стокса, предполагаемого члена Scattered Spider (также известного как Octo Tempest / UNC3944 / 0ktapus). В аффидевите описывается, как Microsoft помогла ФБР связать активность с устройством.

[!IMPORTANT] [COURT] Из дополнительной жалобы (¶25, стр.34), дословно:

«Учетная запись ngrok была настроена через Global Device Identifier g:6755467234350028 («GDID»). По словам представителя Microsoft, Global Device Identifier в экосистеме Windows — это постоянный идентификатор на уровне устройства, предназначенный для уникальной идентификации установки операционной системы Windows на устройстве... GDID — это глобально уникальный идентификатор, привязанный к установке Windows на устройстве. GDID остается неизменным при обновлениях операционной системы Windows на устройстве, но переустановка Windows... будет связана с новым уникальным GDID.»

В сноске добавляется, что один пользователь Microsoft может иметь несколько GDID. Затем в аффидевите коррелируется история IP-адресов и просмотров страниц GDID (например, empirehotelnyc.com, URL входа в Growtopia/Ubisoft) с учетными записями, в которые был выполнен вход подозреваемого.

Два момента здесь определяют остальное содержание этой документации:

  1. Значение — g: плюс десятичное целое (g:6755467234350028). В шестнадцатеричном виде это 0x0018000FC8CB93CC, то есть 64-битное число.
  2. Переустановка дает новый GDID. Значит, это не может быть просто функция неизменяемого оборудования.

2. Опровержение вирусных мифов

В кратком изложении в социальных сетях утверждалось, что GDID — это «128-битный идентификатор, созданный из серийных номеров при установке». Обе половины ложны:

Утверждение (социальные сети)Реальность (первоисточник)
«128-битный»Значение в жалобе — g:6755467234350028, десятичное число, помещающееся в 64 бита (0x0018000FC8CB93CC).

[!NOTE] После дополнительного реверс-инжиниринга CDP. Я предоставил некоторую дезинформацию. Использование локальной учетной записи не предотвращает появление GDID. У CDP есть анонимный путь устройства, который используется, если нет учетной записи Microsoft. Учтите это при чтении.


3. Где проявляется GDID: Delivery Optimization

[STATIC] В публичной документации Azure Monitor от Microsoft определена колонка GlobalDeviceId в таблице UCDOStatus (Update Compliance / Delivery Optimization):

GlobalDeviceId (string): «Глобальный идентификатор устройства Microsoft. Это идентификатор, используемый Microsoft внутри компании.»

Он находится рядом с LastCensusSeenTime, ISP, City, Country, так что идентификатор устройства привязан к геоданным и IP. Это единственное место, где Microsoft называет это значение в публичной документации. Но Delivery Optimization только сообщает его. Важно, что оно НЕ является его владельцем. Прослеживая вверх по стеку, мы попадаем на Connected Devices Platform.


4. Кто им владеет: Connected Devices Platform вплоть до DDS

[STATIC] C:\Windows\System32\cdp.dll (Connected Devices Platform, службы CDPSvc + CDPUserSvc) содержит символ GlobalDeviceId и целую подсистему регистрации Device Directory Service:

root@kitploit:~
ddsregistrationclient.cpp   ddsregistrationmanager.cpp   ddsregistrationinfo.cpp
DdsRegistrationClient   RegisterUserDevicesObserver   DdsRegistrationInfoProviderForCDP
endpoints: dds.microsoft.com  fd.dds.microsoft.com  aad.cs.dds.microsoft.com  cdpcs.access.microsoft.com
device-id format string: "g:%s"

DDS = Device Directory Service, кросс-устройственный граф идентификации Microsoft (бэкенд, лежащий в основе Phone Link, облачного буфера обмена, «Продолжить на ПК», Nearby Share). CDP — это клиент Windows, который регистрирует установку в этом графе, где она получает ключ g:<десятичное>.

4.1 Запись в реальном времени

[OBSERVED] Принудительная свежая регистрация (перезапуск CDPSvc с очисткой локального состояния) и захват собственных провайдеров ETW от CDP дали полное рукопожатие:

root@kitploit:~
DdsClient::RegisterUserDeviceAsync()   RegistrationReason: Startup   Account Type: MSA
DDSClient: Registration response received. HTTP status code: 200
OnRegisterUserDeviceComplete
GetDeviceIdAndTicketActivity -> deviceid: 0018XXXXXXXXXXXX

Этот deviceid, записанный как g:<десятичное>, структурно соответствует значению из жалобы:

Оба — 64-битные значения в одном классе старшего слова 0x0018 (пространство device PUID, см. §6). Префикс g: — это просто то же целое число в десятичном виде.


5. Как CDP его получает: потребляет, а не вычисляет

[STATIC] С помощью публичного PDB (cdp.pdb) путь идентификатора устройства в cdp.dll — это просто запрос и ожидание стека идентификации. CDP никогда не вычисляет идентификатор сам:

root@kitploit:~
flowchart TD
    A["GetStableDeviceIdFromProvider<br/>0x0A3140"] --> B["provider.GetStableDeviceIdAsync<br/>(vtable +0x48)"]
    B --> C["OneCoreAccountProvider::<br/>GetStableDeviceIdAsync 0x0C8370"]
    C --> D["IWebAccountBackedAccountProvider<br/>(MSA / AAD identity COM)"]
    D --> E["OnGetStableDeviceIdCompleted<br/>(const char* deviceId) 0x06CEA0"]
    E -->|"assign() string, signal flag"| A

Обратный вызов, который его получает, делает очевидным, что это строка, и просто сохраняется:

root@kitploit:~
; OnGetStableDeviceIdCompleted
mov  rbp, r9                 ; r9 = device-id STRING, переданный провайдером идентификации
lea  rcx, [rsi+0xD8]         ; поле-член CDP
mov  rdx, rbp
call assign@basic_string     ; сохранить, без вычислений, без серийных номеров
call Set@CdpWaitableFlag      ; разблокировать ожидающего

Суть: GDID чеканится ниже CDP, в стеке идентификации Windows, и передается CDP как непрозрачная строка. Это указывает на службу учетной записи Microsoft.


6. Чеканка: MSA Device PUID (wlidsvc)

[STATIC] C:\Windows\System32\wlidsvc.dll, служба Microsoft Account / Passport (Windows Live ID), является единственным бинарным файлом идентификации, содержащим буквально GlobalDeviceId, и содержит весь механизм подготовки устройства:

root@kitploit:~
CDeviceIdentityBase::CreateNewDeviceIdentity / Provision / BindDeviceToHardware / GetDeviceCert
DeviceAssociateRequest      (Passport PPCRL SOAP -> login.live.com)
<ps:DevicePUID> ... </ps:DevicePUID>
DeviceIdStore::LogToRegistry
BCryptGenRandom / CCryptRandom::GenRandom     (device KEY, не идентификатор)

Идентификатор — это Device PUID (Passport Unique ID), 64-битный MSA-идентификатор. BCryptGenRandom используется для создания ключа аутентификации устройства, который BindDeviceToHardware привязывает к машине, а не PUID.

6.1 Он назначается сервером

[STATIC] Клиент извлекает PUID из SOAP-ответа сервера, используя XPath в тело ответа:

root@kitploit:~
/S:Envelope/S:Body/ps:DeviceUpdatePropertiesResponse/HWPUIDFlipped

CAssociateDeviceRequest::ParseResponseBody и связанные методы ParseResponse читают узлы XML ответа в BSTR. Таким образом, поток выглядит так: клиент подготавливает устройство -> login.live.com назначает и возвращает device PUID -> клиент сохраняет его. Именно поэтому при переустановке создается новый GDID (новая подготовка, новый PUID, назначенный сервером), и почему это не хэш оборудования.

6.2 Он сохраняется в открытом виде

[OBSERVED] Хранилище идентификации учетной записи Microsoft хранит значение прямо в реестре, в вашем собственном пользовательском кусте:

root@kitploit:~
HKCU\SOFTWARE\Microsoft\IdentityCRL\ExtendedProperties
    LID = 0018XXXXXXXXXXXX

HKCU\SOFTWARE\Microsoft\IdentityCRL\Immersive\production\Token\{...}
    DeviceId = 0018XXXXXXXXXXXX

Байт в байт то же значение, которое CDP зарегистрировал в DDS в реальном времени. Ваш PUID пользователя — другое число, хранящееся в другом месте как puid = 0003... (например, 00034002XXXXXXXX). Также есть ключ кэша HKLM, названный по PUID (HKLM\SOFTWARE\Microsoft\IdentityCRL\NegativeCache\<PUID>_<userSID>), но он доступен только SYSTEM, поэтому вы читаете значение из HKCU.

[!NOTE] Префикс говорит вам, что это. PUID пользователей — это класс 0003, device PUID — это класс 0018. GDID из суда (0018000FC8CB93CC) находится в пространстве 0018 device PUID, так же как и мой.

6.3 Он аутентифицирует конечные точки графа

[OBSERVED] Кэш токенов MSA (HKLM\SOFTWARE\Microsoft\IdentityCRL\NegativeCache\...) содержит токены устройства, ограниченные именно теми конечными точками, которые использует CDP:

root@kitploit:~
scope=service::dds.microsoft.com::MBI_SSL_TOKEN_BROKER
scope=service::activity.windows.com::MBI_SSL_SA_TOKEN_BROKER

Таким образом, служба учетной записи Microsoft выдает учетные данные устройства, которые аутентифицируют регистрацию DDS и загрузки активности, несущие GDID.

6.4 Полная цепочка

root@kitploit:~
flowchart TD
    subgraph MSA["Уровень идентификации MSA: wlidsvc.dll"]
        A1["Подготовка устройства через login.live.com<br/>(Passport PPCRL SOAP)"] --> A2["Сервер назначает Device PUID<br/>&lt;ps:DevicePUID&gt; / HWPUIDFlipped"]
        A2 --> A3["Сохранение DeviceId / LID = PUID<br/>HKLM\...\IdentityStore"]
        A3 --> A4["Выдача токенов устройства для<br/>dds.microsoft.com и activity.windows.com"]
    end
    subgraph CDP["Клиент графа устройств: cdp.dll / CDPSvc"]
        B1["GetStableDeviceId -> получение строки PUID"] --> B2["RegisterUserDeviceAsync -> DDS<br/>OBSERVED: HTTP 200"]
    end
    subgraph SRV["Сервер: Device Directory Service"]
        C1["Ключи g:PUID к учетной записи MSA,<br/>активность и история IP"]
    end
    subgraph REP["Отчетность"]
        D1["Delivery Optimization -><br/>UCDOStatus.GlobalDeviceId"]
    end
    A4 --> B1
    B2 --> C1
    C1 --> D1

Все, на что жалуется жалоба в отношении «GDID»: постоянный для каждой установки, переживает обновления, новый при переустановке, привязан к учетной записи Microsoft, отслеживается по IP и посещениям страниц — все это вытекает из того, что это назначенный сервером MSA Device PUID, который CDP регистрирует в графе устройств.


7. Найдите свой собственный GDID

[OBSERVED] На машине, выполнившей вход в учетную запись Microsoft, одно чтение реестра из вашего собственного пользовательского куста, без прав администратора:

root@kitploit:~
(Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\IdentityCRL\ExtendedProperties').LID

Это даст вам ваш device PUID в виде 16 шестнадцатеричных цифр (например, 0018XXXXXXXXXXXX). Чтобы увидеть его в форме g:<десятичное>, как он отображается на стороне сервера:

root@kitploit:~
$hex = (Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\IdentityCRL\ExtendedProperties').LID
"g:$([Convert]::ToUInt64($hex,16))"

Если ExtendedProperties\LID пуст на вашем компьютере, то же самое значение находится в HKCU\SOFTWARE\Microsoft\IdentityCRL\Immersive\production\Token\{...}\DeviceId.

[!WARNING] Не публикуйте собственное значение. Ваш device PUID, ваш MSA CID (0003...) и ваш SID пользователя — все это деанонимизирует вас. Отредактируйте их в любой публичной документации. Единственное значение, которое безопасно цитировать, — это значение из суда, так как оно уже общедоступно.


8. Снижение подверженности

GDID существует, потому что ваше устройство зарегистрировано в графе устройств учетной записи Microsoft, а Connected Devices Platform поддерживает его синхронизацию. Чтобы его ограничить:

  • Отключите Connected Devices Platform (CDPSvc, CDPUserSvc) и выключите Activity History (Настройки, Конфиденциальность, Журнал действий), чтобы остановить синхронизацию графа и загрузки активности.
  • Удаление %LOCALAPPDATA%\ConnectedDevicesPlatform только очищает локальное состояние CDP. PUID вернется из хранилища идентификации, так что это само по себе не поможет.
  • Переустановка дает вам новый GDID (об этом говорится в жалобе), но он будет привязан к новому, как только он снова зарегистрируется.

9. Методология (воспроизводимая)

Все это было получено на стандартной Windows 11 (сборка 26200).

  • Запись в реальном времени: Провайдеры TraceLogging ETW CDP (Microsoft.Windows.CDP.*) через logman с принудительной свежей регистрацией CDPSvc, декодировано с помощью tracerpt.
  • Реестр и кэш токенов: IdentityStore и IdentityCRL в HKLM\SOFTWARE\Microsoft.

ETW и статический анализ — это то, что реально сработало. Прокси только потратит ваше время.

Приложение: GUID провайдеров ETW CDP (нажмите, чтобы развернуть)

Вычислено с помощью хэша имени пространства имен EventSource (SHA1 пространства имен плюс UTF-16BE имя провайдера в верхнем регистре). Проверьте это по известному значению System.Runtime 49592c0f-5a05-516d-aa4b-a64e02026c89:

root@kitploit:~
Microsoft.Windows.CDP.Core                    {7762de0c-b0a6-571a-68d3-c018bf009496}
Microsoft.Windows.CDP.Core.Error              {a1ea5efc-402e-5285-3898-22a5acce1b76}
Microsoft.Windows.CDP.CDS                     {dfa6e32a-095f-5f57-d025-0887d33507a1}
Microsoft.Windows.CDP.Aggr                    {bc1826c8-369c-5b0b-4cd1-3c6ae5bfe2e7}
Microsoft.Windows.CDP.AFS                     {5fe36556-c4cd-509a-8c3e-2a547ea568ae}
Microsoft.Windows.CDP.OnecoreAccountProvider  {4ee5bf9a-3e8f-540b-8bfb-12457a2854b6}
Microsoft.Windows.CDP                          {9f4cc6dc-1bab-5772-0c71-a89954718d66}
Приложение: ключевые бинарные файлы и символы (нажмите, чтобы развернуть)

[!NOTE] NullZeroX в твиттере сообщил, что GDID также отправляется независимо от того, выполнен ли вход с учетной запись MS на вашем устройстве. Я не уверен, насколько это правда, но стоит принять к сведению.


Анализ из первых рук. Исправления приветствуются. Также спасибо claude за помощь в написании этой документации и диаграмм :3

Скачать инструмент
«создан из серийных номеров при установке»
В жалобе сказано, что переустановка создает новый GDID. Значение, полученное из фиксированных серийных номеров, после переустановки было бы тем же самым, а не изменилось бы.
значениеhex (64 bit)префикс класса
Моя машина (отредактировано)g:XXXXXXXXXXXXXXXX0x0018XXXXXXXXXXXX0018
Судовой экспонатg:67554672343500280x0018000FC8CB93CC0018
Бинарный файлРольПримечательные символы
wlidsvc.dllСлужба Microsoft Account / Passport, чеканит Device PUIDCDeviceIdentityBase::CreateNewDeviceIdentity, CAssociateDeviceRequest::ParseResponseBody, DeviceIdStore::LogToRegistry
cdp.dllConnected Devices Platform, регистрирует PUID в DDSDdsRegistrationClient, GetStableDeviceIdFromProvider (0x0A3140), OnGetStableDeviceIdCompleted (0x06CEA0)
dosvc.dll / DOСообщает идентификатор как UCDOStatus.GlobalDeviceIdн/д

Реестр: HKLM\SOFTWARE\Microsoft\IdentityStore (DeviceId и LID), HKLM\SOFTWARE\Microsoft\IdentityCRL\NegativeCache (области действия токенов).