Saltar al contenido principal

Servicios de Windows

Introducción​

Los servicios de Windows son programas que se ejecutan en segundo plano, independientemente de las sesiones de usuario. Proporcionan funcionalidades esenciales al sistema.

Características de los Servicios​

Diferencias con las aplicaciones​

CaracterísticaAplicaciónServicio
InterfazGeneralmente gráficaSin interfaz (o limitada)
SesiónLigada a un usuarioIndependiente
InicioManual por el usuarioAutomático al arrancar
EjecuciónDurante la sesiónContinua en segundo plano

Tipos de inicio​

TipoDescripción
AutomaticInicia al arrancar el sistema
Automatic (Delayed)Inicia después del arranque, con retardo
ManualInicia solo bajo demanda
DisabledNo puede iniciar

Cuentas de servicio​

CuentaPrivilegiosUso
LocalSystemCompleto (admin)Servicios críticos del sistema
LocalServiceLimitado, solo localServicios con pocos privilegios
NetworkServiceLimitado, acceso a redServicios que requieren red
Cuenta de usuarioSegún la cuentaServicios personalizados

Gestión mediante GUI​

Services.msc​

Win+R > services.msc

Información disponible:

  • Nombre y descripción del servicio
  • Estado (En ejecución, Detenido)
  • Tipo de inicio
  • Cuenta de ejecución

Task Manager​

Pestaña Servicios para vista rápida.


Gestión mediante PowerShell​

Listar los servicios​

# Todos los servicios
Get-Service

# Servicios en ejecución
Get-Service | Where-Object {$_.Status -eq "Running"}

# Buscar por nombre
Get-Service -Name "*update*"

# Con detalles WMI
Get-WmiObject Win32_Service | Select-Object Name, DisplayName, State, StartMode, PathName

Iniciar/Detener servicios​

# Iniciar
Start-Service -Name "NomService"

# Detener
Stop-Service -Name "NomService"

# Reiniciar
Restart-Service -Name "NomService"

# Con confirmación
Stop-Service -Name "Spooler" -Confirm

Modificar el tipo de inicio​

# Cambiar a automático
Set-Service -Name "NomService" -StartupType Automatic

# Deshabilitar
Set-Service -Name "NomService" -StartupType Disabled

Crear un servicio​

# Crear un nuevo servicio
New-Service -Name "MonService" `
-BinaryPathName "C:\chemin\vers\programme.exe" `
-DisplayName "Mon Service Personnalise" `
-Description "Description du service" `
-StartupType Manual

# Eliminar (vía sc.exe)
sc.exe delete "MonService"

Gestión mediante CMD​

Comando SC (Service Control)​

:: Listar los servicios
sc query

:: Estado de un servicio
sc query "NomService"

:: Iniciar
sc start "NomService"

:: Detener
sc stop "NomService"

:: Configurar el inicio
sc config "NomService" start= auto
sc config "NomService" start= disabled

:: Crear un servicio
sc create "MonService" binPath= "C:\chemin\programme.exe"

:: Eliminar
sc delete "MonService"

Comando NET​

:: Iniciar
net start "NomService"

:: Detener
net stop "NomService"

Servicios del Sistema Importantes​

Servicios Críticos​

ServicioNombre cortoRol
Windows UpdatewuauservActualizaciones
Windows DefenderWinDefendAntivirus
Remote Procedure CallRpcSsComunicación del sistema
DCOM Server Process LauncherDcomLaunchActivación DCOM
Windows Event LogEventLogRegistro de eventos
Task SchedulerScheduleTareas programadas
Print SpoolerSpoolerImpresión

Servicios de Red​

ServicioNombre cortoRol
DHCP ClientDhcpConfiguración IP automática
DNS ClientDnscacheResolución de nombres
Windows FirewallmpssvcCortafuegos
Remote Desktop ServicesTermServiceEscritorio remoto
ServerLanmanServerCompartición de archivos
WorkstationLanmanWorkstationAcceso a recursos compartidos

Seguridad de los Servicios​

Riesgos​

  1. Servicios vulnerables:

    • Ejecutables modificables
    • Permisos demasiado amplios
    • Cuentas sobre-privilegiadas
  2. Vectores de ataque:

    • Reemplazo del binario
    • DLL Hijacking
    • Ruta de servicio sin comillas

Verificaciones de seguridad​

# Verificar rutas sin comillas
Get-WmiObject Win32_Service | Where-Object {
$_.PathName -notmatch '^"' -and
$_.PathName -match ' '
} | Select-Object Name, PathName

# Verificar los permisos de los ejecutables
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. Principio de menor privilegio:

    • Utilizar LocalService o NetworkService en lugar de LocalSystem
    • Crear cuentas de servicio dedicadas
  2. Proteger los binarios:

    • Permisos restrictivos sobre los ejecutables
    • Rutas entre comillas
  3. Deshabilitar servicios innecesarios:

    • Remote Registry
    • Print Spooler (si no se imprime)
    • Telnet (obsoleto)

Dependencias de Servicios​

Comprender las dependencias​

Un servicio puede depender de otros servicios para funcionar.

# Ver las dependencias de un servicio
Get-Service -Name "NomService" -DependentServices

# Servicios de los que depende este servicio
Get-Service -Name "NomService" -RequiredServices

Ejemplo: Print Spooler​

Print Spooler
├── Depende de: Remote Procedure Call (RPC)
└── Servicios dependientes: (a menudo ninguno)

Registro de los Servicios​

Event Log​

# Eventos relacionados con los servicios
Get-WinEvent -FilterHashtable @{
LogName = 'System'
ProviderName = 'Service Control Manager'
} -MaxEvents 20 | Format-Table TimeCreated, Message -Wrap

IDs de eventos importantes​

Event IDDescripción
7000El servicio no pudo iniciarse
7001El servicio depende de un servicio no iniciado
7009Timeout al iniciar
7034El servicio terminó de forma inesperada
7035Solicitud de inicio/detención enviada
7036Servicio iniciado o detenido

Ejercicios​

  1. Liste todos los servicios en ejecución en su sistema
  2. Identifique los servicios que se ejecutan bajo LocalSystem
  3. Encuentre los servicios con rutas sin comillas
  4. Cree un servicio de prueba y elimínelo

Referencias​