Windows Service Triggers: Enumeration and Abuse

Reading time: 7 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Windows Service Triggers permettent au Service Control Manager (SCM) de dĂ©marrer/arrĂȘter un service lorsqu'une condition se produit (par ex., une adresse IP devient disponible, une connexion Ă  un named pipe est tentĂ©e, un Ă©vĂ©nement ETW est publiĂ©). MĂȘme si vous n'avez pas les droits SERVICE_START sur un service cible, vous pouvez parfois le dĂ©marrer en provoquant le dĂ©clenchement de son trigger.

Cette page se concentre sur l'énumération pratique orientée attaquant et les moyens peu contraignants d'activer des triggers courants.

Astuce : Démarrer un service intégré privilégié (par ex., RemoteRegistry, WebClient/WebDAV, EFS) peut exposer de nouveaux listeners RPC/named-pipe et débloquer d'autres chaßnes d'abus.

Enumerating Service Triggers

  • sc.exe (local)
  • Lister les triggers d'un service : sc.exe qtriggerinfo <ServiceName>
  • Registry (local)
  • Les triggers se trouvent sous : HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\TriggerInfo
  • Dump rĂ©cursif : reg query HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\TriggerInfo /s
  • Win32 API (local)
  • Appeler QueryServiceConfig2 avec SERVICE_CONFIG_TRIGGER_INFO (8) pour rĂ©cupĂ©rer SERVICE_TRIGGER_INFO.
  • Docs: QueryServiceConfig2[W/A] and SERVICE_TRIGGER/SERVICE_TRIGGER_SPECIFIC_DATA
  • RPC over MS‑SCMR (remote)
  • Le SCM peut ĂȘtre interrogĂ© Ă  distance pour rĂ©cupĂ©rer les infos de trigger en utilisant MS‑SCMR. Titanis de TrustedSec expose ceci : Scm.exe qtriggers.
  • Impacket dĂ©finit les structures dans msrpc MS-SCMR ; vous pouvez implĂ©menter une requĂȘte distante en utilisant celles-ci.

High-Value Trigger Types and How to Activate Them

Network Endpoint Triggers

Ceux-ci démarrent un service lorsqu'un client tente de parler à un endpoint IPC. Utile pour des utilisateurs à faibles privilÚges car le SCM démarrera automatiquement le service avant que votre client puisse réellement se connecter.

  • Named pipe trigger
  • Comportement : Une tentative de connexion client Ă  \.\pipe<PipeName> provoque le dĂ©marrage du service par le SCM afin qu'il puisse commencer Ă  Ă©couter.
  • Activation (PowerShell):
powershell
$pipe = new-object System.IO.Pipes.NamedPipeClientStream('.', 'PipeNameFromTrigger', [System.IO.Pipes.PipeDirection]::InOut)
try { $pipe.Connect(1000) } catch {}
$pipe.Dispose()
  • Voir aussi : Named Pipe Client Impersonation pour l'abus post-dĂ©marrage.

  • RPC endpoint trigger (Endpoint Mapper)

  • Comportement : Interroger l'Endpoint Mapper (EPM, TCP/135) pour un interface UUID associĂ©e Ă  un service provoque le dĂ©marrage du service afin qu'il puisse enregistrer son endpoint.

  • Activation (Impacket):

bash
# Queries local EPM; replace UUID with the service interface GUID
python3 rpcdump.py @127.0.0.1 -uuid <INTERFACE-UUID>

Custom (ETW) Triggers

Un service peut enregistrer un trigger lié à un provider/événement ETW. Si aucun filtre additionnel (keyword/level/binary/string) n'est configuré, n'importe quel événement provenant de ce provider démarrera le service.

  • Exemple (WebClient/WebDAV) : provider {22B6D684-FA63-4578-87C9-EFFCBE6643C7}
  • Lister le trigger : sc.exe qtriggerinfo webclient
  • VĂ©rifier que le provider est enregistrĂ© : logman query providers | findstr /I 22b6d684-fa63-4578-87c9-effcbe6643c7
  • Émettre des Ă©vĂ©nements correspondants nĂ©cessite gĂ©nĂ©ralement du code qui logge vers ce provider ; s'il n'y a pas de filtres, n'importe quel Ă©vĂ©nement suffit.

Group Policy Triggers

Sous-types : Machine/User. Sur des hĂŽtes joint au domaine oĂč la policy correspondante existe, le trigger s'exĂ©cute au boot. gpupdate seul ne dĂ©clenchera rien sans modifications, mais :

  • Activation : gpupdate /force
  • Si le type de policy pertinent existe, cela provoque de maniĂšre fiable le dĂ©clenchement et le dĂ©marrage du service.

IP Address Available

Se déclenche lorsque la premiÚre IP est obtenue (ou la derniÚre perdue). Souvent déclenché au démarrage.

  • Activation : basculer la connectivitĂ© pour retrigger, par ex. :
cmd
netsh interface set interface name="Ethernet" admin=disabled
netsh interface set interface name="Ethernet" admin=enabled

Device Interface Arrival

DĂ©marre un service lorsqu'une interface d'appareil correspondante arrive. Si aucun data item n'est spĂ©cifiĂ©, n'importe quel pĂ©riphĂ©rique correspondant au GUID de sous-type du trigger le fera dĂ©clencher. ÉvaluĂ© au boot et lors du hot‑plug.

  • Activation : Attacher/insĂ©rer un pĂ©riphĂ©rique (physique ou virtuel) qui correspond Ă  la classe/ID matĂ©riel spĂ©cifiĂ©e par le sous-type du trigger.

Domain Join State

Malgré la formulation confuse de MSDN, ceci évalue l'état de jointure au domaine au boot :

  • DOMAIN_JOIN_GUID → dĂ©marrer le service si la machine est jointe au domaine
  • DOMAIN_LEAVE_GUID → dĂ©marrer le service seulement si elle N'EST PAS jointe au domaine

System State Change – WNF (undocumented)

Certains services utilisent des triggers basés sur WNF non documentés (SERVICE_TRIGGER_TYPE 0x7). L'activation nécessite la publication de l'état WNF pertinent ; les détails dépendent du nom de l'état. Contexte de recherche : internals de Windows Notification Facility.

Aggregate Service Triggers (undocumented)

Observés sur Windows 11 pour certains services (par ex., CDPSvc). La configuration agrégée est stockée dans :

  • HKLM\SYSTEM\CurrentControlSet\Control\ServiceAggregatedEvents

La valeur Trigger d’un service est un GUID ; la sous-clĂ© avec ce GUID dĂ©finit l'Ă©vĂ©nement agrĂ©gĂ©. Le dĂ©clenchement de n'importe quel Ă©vĂ©nement constituant dĂ©marre le service.

Firewall Port Event (quirks and DoS risk)

Un trigger ciblĂ© sur un port/protocole spĂ©cifique a Ă©tĂ© observĂ© se dĂ©clencher sur n'importe quel changement de rĂšgle firewall (dĂ©sactivation/suppression/ajout), pas seulement sur le port spĂ©cifiĂ©. Pire, configurer un port sans protocole peut corrompre le dĂ©marrage de BFE Ă  travers les reboots, entraĂźnant l'Ă©chec en cascade de nombreux services et cassant la gestion du firewall. À traiter avec une extrĂȘme prudence.

Practical Workflow

  1. ÉnumĂ©rez les triggers sur les services intĂ©ressants (RemoteRegistry, WebClient, EFS, 
) :
  • sc.exe qtriggerinfo <Service>
  • reg query HKLM\SYSTEM\CurrentControlSet\Services\<Service>\TriggerInfo /s
  1. Si un Network Endpoint trigger existe :
  • Named pipe → tenter une ouverture client vers \.\pipe<PipeName>
  • RPC endpoint → effectuer une lookup Endpoint Mapper pour l'interface UUID
  1. Si un ETW trigger existe :
  • VĂ©rifiez le provider et les filtres avec sc.exe qtriggerinfo ; s'il n'y a pas de filtres, n'importe quel Ă©vĂ©nement de ce provider dĂ©marrera le service
  1. Pour Group Policy/IP/Device/Domain triggers :
  • Utilisez des leviers environnementaux : gpupdate /force, basculer les NICs, hot-plug de pĂ©riphĂ©riques, etc.
  • After starting a privileged service via a Named Pipe trigger, you may be able to impersonate it:

Named Pipe Client Impersonation

Quick command recap

  • List triggers (local): sc.exe qtriggerinfo <Service>
  • Registry view: reg query HKLM\SYSTEM\CurrentControlSet\Services\<Service>\TriggerInfo /s
  • Win32 API: QueryServiceConfig2(..., SERVICE_CONFIG_TRIGGER_INFO, ...)
  • RPC remote (Titanis): Scm.exe qtriggers
  • ETW provider check (WebClient): logman query providers | findstr /I 22b6d684-fa63-4578-87c9-effcbe6643c7

Detection and Hardening Notes

  • Faire une baseline et auditer TriggerInfo sur les services. Examiner aussi HKLM\SYSTEM\CurrentControlSet\Control\ServiceAggregatedEvents pour les triggers agrĂ©gĂ©s.
  • Surveiller les requĂȘtes EPM suspectes pour des UUID de services privilĂ©giĂ©s et les tentatives de connexion Ă  des named-pipe prĂ©cĂ©dant des dĂ©marrages de services.
  • Restreindre qui peut modifier les triggers de service ; considĂ©rer comme suspect toute dĂ©faillance inattendue de BFE aprĂšs des changements de trigger.

References

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks