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ística | Aplicación | Servicio |
|---|---|---|
| Interfaz | Generalmente gráfica | Sin interfaz (o limitada) |
| Sesión | Ligada a un usuario | Independiente |
| Inicio | Manual por el usuario | Automático al arrancar |
| Ejecución | Durante la sesión | Continua en segundo plano |
Tipos de inicio
| Tipo | Descripción |
|---|---|
| Automatic | Inicia al arrancar el sistema |
| Automatic (Delayed) | Inicia después del arranque, con retardo |
| Manual | Inicia solo bajo demanda |
| Disabled | No puede iniciar |
Cuentas de servicio
| Cuenta | Privilegios | Uso |
|---|---|---|
| LocalSystem | Completo (admin) | Servicios críticos del sistema |
| LocalService | Limitado, solo local | Servicios con pocos privilegios |
| NetworkService | Limitado, acceso a red | Servicios que requieren red |
| Cuenta de usuario | Según la cuenta | Servicios 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
| Servicio | Nombre corto | Rol |
|---|---|---|
| Windows Update | wuauserv | Actualizaciones |
| Windows Defender | WinDefend | Antivirus |
| Remote Procedure Call | RpcSs | Comunicación del sistema |
| DCOM Server Process Launcher | DcomLaunch | Activación DCOM |
| Windows Event Log | EventLog | Registro de eventos |
| Task Scheduler | Schedule | Tareas programadas |
| Print Spooler | Spooler | Impresión |
Servicios de Red
| Servicio | Nombre corto | Rol |
|---|---|---|
| DHCP Client | Dhcp | Configuración IP automática |
| DNS Client | Dnscache | Resolución de nombres |
| Windows Firewall | mpssvc | Cortafuegos |
| Remote Desktop Services | TermService | Escritorio remoto |
| Server | LanmanServer | Compartición de archivos |
| Workstation | LanmanWorkstation | Acceso a recursos compartidos |
Seguridad de los Servicios
Riesgos
-
Servicios vulnerables:
- Ejecutables modificables
- Permisos demasiado amplios
- Cuentas sobre-privilegiadas
-
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
-
Principio de menor privilegio:
- Utilizar LocalService o NetworkService en lugar de LocalSystem
- Crear cuentas de servicio dedicadas
-
Proteger los binarios:
- Permisos restrictivos sobre los ejecutables
- Rutas entre comillas
-
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 ID | Descripción |
|---|---|
| 7000 | El servicio no pudo iniciarse |
| 7001 | El servicio depende de un servicio no iniciado |
| 7009 | Timeout al iniciar |
| 7034 | El servicio terminó de forma inesperada |
| 7035 | Solicitud de inicio/detención enviada |
| 7036 | Servicio iniciado o detenido |
Ejercicios
- Liste todos los servicios en ejecución en su sistema
- Identifique los servicios que se ejecutan bajo LocalSystem
- Encuentre los servicios con rutas sin comillas
- Cree un servicio de prueba y elimínelo