Pular para o conteúdo principal

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ísticaAplicativoServiço
InterfaceGeralmente gráficaSem interface (ou limitada)
SessãoVinculado a um usuárioIndependente
InicializaçãoManual pelo usuárioAutomática no boot
ExecuçãoDurante a sessãoContínua em segundo plano

Tipos de inicialização​

TipoDescrição
AutomaticInicia no boot do sistema
Automatic (Delayed)Inicia após o boot, com atraso
ManualInicia somente sob demanda
DisabledNão pode iniciar

Contas de serviço​

ContaPrivilégiosUtilização
LocalSystemCompleto (admin)Serviços críticos do sistema
LocalServiceLimitado, apenas localServiços pouco privilegiados
NetworkServiceLimitado, acesso à redeServiços que precisam de rede
Conta de usuárioConforme a contaServiç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çoNome curtoPapel
Windows UpdatewuauservAtualizações
Windows DefenderWinDefendAntivírus
Remote Procedure CallRpcSsComunicação do sistema
DCOM Server Process LauncherDcomLaunchAtivação DCOM
Windows Event LogEventLogRegistro de eventos
Task SchedulerScheduleTarefas agendadas
Print SpoolerSpoolerImpressão

Serviços de Rede​

ServiçoNome curtoPapel
DHCP ClientDhcpConfiguração automática de IP
DNS ClientDnscacheResolução de nomes
Windows FirewallmpssvcFirewall
Remote Desktop ServicesTermServiceÁrea de trabalho remota
ServerLanmanServerCompartilhamento de arquivos
WorkstationLanmanWorkstationAcesso a compartilhamentos

Segurança dos Serviços​

Riscos​

  1. Serviços vulneráveis:

    • Executáveis modificáveis
    • Permissões muito amplas
    • Contas superprivilegiadas
  2. 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​

  1. Princípio do menor privilégio:

    • Usar LocalService ou NetworkService em vez de LocalSystem
    • Criar contas de serviço dedicadas
  2. Proteger os binários:

    • Permissões restritivas nos executáveis
    • Caminhos entre aspas
  3. 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 IDDescrição
7000Serviço não pôde iniciar
7001Serviço depende de um serviço não iniciado
7009Timeout na inicialização
7034Serviço terminou de forma inesperada
7035Solicitação de início/parada enviada
7036Serviço iniciado ou parado

Exercícios​

  1. Liste todos os serviços em execução no seu sistema
  2. Identifique os serviços rodando sob LocalSystem
  3. Encontre os serviços com caminhos sem aspas
  4. Crie um serviço de teste e exclua-o

Referências​