Serviços Windows
Introdução
Os serviços Windows são programas que rodam em segundo plano, independentemente das sessões de usuário. Eles fornecem funcionalidades essenciais para o sistema.
Características dos Serviços
Diferenças em relação aos aplicativos
| Característica | Aplicativo | Serviço |
|---|---|---|
| Interface | Geralmente gráfica | Sem interface (ou limitada) |
| Sessão | Vinculado a um usuário | Independente |
| Inicialização | Manual pelo usuário | Automática no boot |
| Execução | Durante a sessão | Contínua em segundo plano |
Tipos de inicialização
| Tipo | Descrição |
|---|---|
| Automatic | Inicia no boot do sistema |
| Automatic (Delayed) | Inicia após o boot, com atraso |
| Manual | Inicia somente sob demanda |
| Disabled | Não pode iniciar |
Contas de serviço
| Conta | Privilégios | Utilização |
|---|---|---|
| LocalSystem | Completo (admin) | Serviços críticos do sistema |
| LocalService | Limitado, apenas local | Serviços pouco privilegiados |
| NetworkService | Limitado, acesso à rede | Serviços que precisam de rede |
| Conta de usuário | Conforme a conta | Serviços personalizados |
Gerenciamento via GUI
Services.msc
Win+R > services.msc
Informações disponíveis:
- Nome e descrição do serviço
- Estado (Em execução, Parado)
- Tipo de inicialização
- Conta de execução
Task Manager
Aba Serviços para visualização rápida.
Gerenciamento via PowerShell
Listar os serviços
# Todos os serviços
Get-Service
# Serviços em execução
Get-Service | Where-Object {$_.Status -eq "Running"}
# Buscar por nome
Get-Service -Name "*update*"
# Com detalhes WMI
Get-WmiObject Win32_Service | Select-Object Name, DisplayName, State, StartMode, PathName
Iniciar/Parar serviços
# Iniciar
Start-Service -Name "NomService"
# Parar
Stop-Service -Name "NomService"
# Reiniciar
Restart-Service -Name "NomService"
# Com confirmação
Stop-Service -Name "Spooler" -Confirm
Modificar o tipo de inicialização
# Definir como automático
Set-Service -Name "NomService" -StartupType Automatic
# Desabilitar
Set-Service -Name "NomService" -StartupType Disabled
Criar um serviço
# Criar um novo serviço
New-Service -Name "MonService" `
-BinaryPathName "C:\chemin\vers\programme.exe" `
-DisplayName "Mon Service Personnalisé" `
-Description "Description du service" `
-StartupType Manual
# Remover (via sc.exe)
sc.exe delete "MonService"
Gerenciamento via CMD
Comando SC (Service Control)
:: Listar os serviços
sc query
:: Estado de um serviço
sc query "NomService"
:: Iniciar
sc start "NomService"
:: Parar
sc stop "NomService"
:: Configurar a inicialização
sc config "NomService" start= auto
sc config "NomService" start= disabled
:: Criar um serviço
sc create "MonService" binPath= "C:\chemin\programme.exe"
:: Remover
sc delete "MonService"
Comando NET
:: Iniciar
net start "NomService"
:: Parar
net stop "NomService"
Serviços do Sistema Importantes
Serviços Críticos
| Serviço | Nome curto | Papel |
|---|---|---|
| Windows Update | wuauserv | Atualizações |
| Windows Defender | WinDefend | Antivírus |
| Remote Procedure Call | RpcSs | Comunicação do sistema |
| DCOM Server Process Launcher | DcomLaunch | Ativação DCOM |
| Windows Event Log | EventLog | Registro de eventos |
| Task Scheduler | Schedule | Tarefas agendadas |
| Print Spooler | Spooler | Impressão |
Serviços de Rede
| Serviço | Nome curto | Papel |
|---|---|---|
| DHCP Client | Dhcp | Configuração automática de IP |
| DNS Client | Dnscache | Resolução de nomes |
| Windows Firewall | mpssvc | Firewall |
| Remote Desktop Services | TermService | Área de trabalho remota |
| Server | LanmanServer | Compartilhamento de arquivos |
| Workstation | LanmanWorkstation | Acesso a compartilhamentos |
Segurança dos Serviços
Riscos
-
Serviços vulneráveis:
- Executáveis modificáveis
- Permissões muito amplas
- Contas superprivilegiadas
-
Vetores de ataque:
- Substituição do binário
- DLL Hijacking
- Caminho do serviço sem aspas
Verificações de segurança
# Verificar caminhos sem aspas
Get-WmiObject Win32_Service | Where-Object {
$_.PathName -notmatch '^"' -and
$_.PathName -match ' '
} | Select-Object Name, PathName
# Verificar permissões dos executáveis
Get-WmiObject Win32_Service | ForEach-Object {
$path = $_.PathName -replace '"', '' -replace ' .*', ''
if (Test-Path $path) {
Get-Acl $path | Select-Object @{N='Service';E={$_.Name}}, Path, Owner
}
}
Hardening
-
Princípio do menor privilégio:
- Usar LocalService ou NetworkService em vez de LocalSystem
- Criar contas de serviço dedicadas
-
Proteger os binários:
- Permissões restritivas nos executáveis
- Caminhos entre aspas
-
Desabilitar serviços desnecessários:
- Remote Registry
- Print Spooler (se não houver impressão)
- Telnet (obsoleto)
Dependências de Serviços
Compreender as dependências
Um serviço pode depender de outros serviços para funcionar.
# Ver dependências de um serviço
Get-Service -Name "NomService" -DependentServices
# Serviços dos quais este serviço depende
Get-Service -Name "NomService" -RequiredServices
Exemplo: Print Spooler
Print Spooler
├── Depende de: Remote Procedure Call (RPC)
└── Serviços dependentes: (geralmente nenhum)
Registro de Eventos dos Serviços
Event Log
# Eventos relacionados a serviços
Get-WinEvent -FilterHashtable @{
LogName = 'System'
ProviderName = 'Service Control Manager'
} -MaxEvents 20 | Format-Table TimeCreated, Message -Wrap
Event IDs importantes
| Event ID | Descrição |
|---|---|
| 7000 | Serviço não pôde iniciar |
| 7001 | Serviço depende de um serviço não iniciado |
| 7009 | Timeout na inicialização |
| 7034 | Serviço terminou de forma inesperada |
| 7035 | Solicitação de início/parada enviada |
| 7036 | Serviço iniciado ou parado |
Exercícios
- Liste todos os serviços em execução no seu sistema
- Identifique os serviços rodando sob LocalSystem
- Encontre os serviços com caminhos sem aspas
- Crie um serviço de teste e exclua-o