Event ID 7045 explicado: instalação de serviço como sinal de persistência
Criação de serviço é uma das técnicas de persistência mais barulhentas. O event 7045 captura cada install — leia esses três campos e você pega a maior parte.
O Event ID 7045 — "A service was installed in the system" — dispara no canal System sempre que o Service Control Manager registra um novo serviço. É barulhento em um build stock (drivers, updates), mas em regime permanente de ambientes corporativos é quieto o bastante para que anomalias se destaquem. Também é uma das técnicas de persistência mais citadas do MITRE ATT&CK: T1543.003.
O que o registro contém
<Data Name="ServiceName">UpdateSrv</Data>
<Data Name="ImagePath">C:\Windows\Temp\u.exe</Data>
<Data Name="ServiceType">user mode service</Data>
<Data Name="StartType">auto start</Data>
<Data Name="AccountName">LocalSystem</Data>
Cinco campos, três dos quais importam para IR.
Os três campos para ler primeiro
ImagePath é o campo mais útil. Serviços legítimos vivem sob C:\Windows\System32\, C:\Program Files\ ou C:\Program Files (x86)\. Qualquer serviço cujo binário fica em C:\Windows\Temp\, C:\Users\<user>\AppData\, C:\ProgramData\ ou um diretório de nome aleatório merece uma olhada. ImagePath também pode ser uma linha cmd.exe /c … ou powershell.exe -e … — essas são quase sempre maliciosas; serviços legítimos não chamam shell.
AccountName geralmente é LocalSystem. Um serviço instalado sob um usuário de domínio ou uma service account específica que não casa com o padrão da organização é incomum.
StartType de auto start significa que o serviço roda em todo boot. demand start significa manual. Persistência quase sempre quer auto start; execução lateral one-shot pode usar demand start e limpar atrás — fazendo do 7045 o único artefato restante.
O padrão de execução lateral
Quando um atacante roda PsExec ou qualquer ferramenta que usa o SCM para remote-execute em outro host, você obtém um 7045 no host alvo com um ImagePath como %SystemRoot%\PSEXESVC.exe (padrão) ou um equivalente renomeado. O serviço aparece, roda e frequentemente é deletado em segundos. O 7045 é o fingerprint sobrevivente muito depois do serviço em si ter sumido.
Um 7045 com ImagePath terminando em .exe seguido segundos depois por 4624 LogonType 3 de um host de origem específico é a assinatura escolar do PsExec. Variantes como SMBExec, WMIExec e psexec.py do Impacket produzem valores de ImagePath levemente diferentes, mas o mesmo padrão geral.
O que 7045 não te diz
7045 dispara em instalação, não em cada start subsequente. Para ver o serviço efetivamente rodando você precisa de 7036 ("service entered the running state"). Para ver o processo subjacente você precisa do Sysmon event 1 ou 4688 com o caminho Image correspondente.
Para serviços instalados antes do log de auditoria começar (ex., durante install do SO), não há 7045 — eles existem no registry sob HKLM\SYSTEM\CurrentControlSet\Services\ e têm que ser enumerados de lá, não de event logs.
Workflow de triagem
- Filtre o canal System por
EventID:7045. - Sort ou pivote por
ImagePath— qualquer coisa fora dos caminhos de install padrão é suspeita. - Para cada suspeito, puxe o 4624 correspondente por timestamp + host de origem — encontre a credencial que o instalou.
- Puxe o Sysmon event 1 por
Imagecasando com oImagePathpara ver execuções reais. - Note se uma sequência 7036 / 7034 / 7035 mostra uma execução one-shot ou um serviço persistente.
Exemplo de regra Sigma — serviço instalado de caminho não padrão
title: Service Installed from Non-Standard Path
id: 9e1c2f3a-7d3c-4a5f-8a3b-1d2e3f4a5b6c
status: stable
description: A new service was registered whose ImagePath sits in a user-writable directory — common for persistence and PsExec-style execution.
references:
- https://attack.mitre.org/techniques/T1543/003/
- https://attack.mitre.org/techniques/T1569/002/
logsource:
product: windows
service: system
detection:
selection:
Provider_Name: 'Service Control Manager'
EventID: 7045
suspicious_path:
ImagePath|contains:
- '\Windows\Temp\'
- '\Users\'
- '\ProgramData\'
- '\AppData\'
- '\Public\'
shell_image:
ImagePath|contains:
- 'cmd.exe /c'
- 'cmd /c'
- 'powershell'
- 'pwsh'
- 'rundll32'
- 'mshta'
condition: selection and (suspicious_path or shell_image)
falsepositives:
- Software installers that bootstrap services from a staging directory
- Custom enterprise tooling deployed under ProgramData
level: high
tags:
- attack.persistence
- attack.t1543.003
Exemplo de KQL — fingerprint de execução lateral PsExec
let installs =
Event
| where Source == "Service Control Manager" and EventID == 7045
| extend XmlData = parse_xml(EventData)
| project InstallTime=TimeGenerated, Host=Computer,
ServiceName=tostring(XmlData.EventData.Data[0]["#text"]),
ImagePath=tostring(XmlData.EventData.Data[1]["#text"]);
let logons =
SecurityEvent
| where EventID == 4624 and LogonType == 3 and AuthenticationPackageName == "NTLM"
| project LogonTime=TimeGenerated, LogonHost=Computer, LogonIp=IpAddress,
LogonAccount=AccountName;
installs
| where ImagePath endswith ".exe"
| join kind=inner logons on $left.Host == $right.LogonHost
| where LogonTime between (InstallTime - 30s .. InstallTime + 30s)
| project InstallTime, Host, ServiceName, ImagePath, LogonIp, LogonAccount
| order by InstallTime desc
Um 4624 LogonType-3 em 30 segundos de um 7045 no mesmo host é a assinatura escolar do PsExec.
Exemplo de Splunk — instalador de serviço anômalo
index=wineventlog SourceName="Service Control Manager" EventCode=7045
| eval suspicious=if(match(ImagePath, "(?i)(\\\\Windows\\\\Temp\\\\|\\\\Users\\\\|\\\\ProgramData\\\\|cmd\\.exe|powershell|rundll32|mshta)"), 1, 0)
| where suspicious=1
| table _time host ServiceName ImagePath AccountName StartType
Mapeamento ATT&CK
- T1543.003 — Create or Modify System Process: Windows Service: o mapeamento de manchete. Serviços de longa duração iniciados sob binários controlados pelo atacante.
- T1569.002 — System Services: Service Execution: serviços de vida curta usados puramente como veículo para execução remota (PsExec, SMBExec, movimento lateral baseado em SCM).
- T1078 — Valid Accounts: quando o principal que instala é um domain admin cujas credenciais foram roubadas.
- T1036.005 — Masquerading: Match Legitimate Name or Location: serviços com display names imitando serviços Microsoft reais mas binários em outro lugar.
Falsos positivos que parecem exatamente ataques
- Instaladores de software (Chocolatey, bootstrappers MSI) frequentemente instalam serviços de um diretório de staging antes de mover o binário. O 7045 dispara do caminho de staging mesmo que o install final seja limpo.
- Agentes EDR / AV instalam serviços como parte do setup. O
ImagePathdo vendor será estável e assinado; baseline. - Algumas atualizações Microsoft instalam serviços de servicing temporários; são de vida curta e de
LocalSystem. - Workloads container / Hyper-V às vezes registram serviços transientes por VM.
O sinal é one-off installs em caminhos graváveis por usuário por instaladores non-admin ou non-standard. Um serviço de instalador assinado em C:\Program Files\ não é o ataque.