Services Windows
Introduction
Les services Windows sont des programmes qui s'executent en arriere-plan, independamment des sessions utilisateur. Ils fournissent des fonctionnalites essentielles au systeme.
Caracteristiques des Services
Differences avec les applications
| Caracteristique | Application | Service |
|---|---|---|
| Interface | Generalement graphique | Pas d'interface (ou limitee) |
| Session | Liee a un utilisateur | Independant |
| Demarrage | Manuel par l'utilisateur | Automatique au boot |
| Execution | Pendant la session | Continue en arriere-plan |
Types de demarrage
| Type | Description |
|---|---|
| Automatic | Demarre au boot du systeme |
| Automatic (Delayed) | Demarre apres le boot, avec delai |
| Manual | Demarre uniquement sur demande |
| Disabled | Ne peut pas demarrer |
Comptes de service
| Compte | Privileges | Utilisation |
|---|---|---|
| LocalSystem | Complet (admin) | Services systeme critiques |
| LocalService | Limite, local uniquement | Services peu privilegies |
| NetworkService | Limite, acces reseau | Services necessitant le reseau |
| Compte utilisateur | Selon le compte | Services personnalises |
Gestion via GUI
Services.msc
Win+R > services.msc
Informations disponibles:
- Nom et description du service
- Etat (En cours, Arrete)
- Type de demarrage
- Compte d'execution
Task Manager
Onglet Services pour vue rapide.
Gestion via PowerShell
Lister les services
# Tous les services
Get-Service
# Services en cours d'execution
Get-Service | Where-Object {$_.Status -eq "Running"}
# Rechercher par nom
Get-Service -Name "*update*"
# Avec details WMI
Get-WmiObject Win32_Service | Select-Object Name, DisplayName, State, StartMode, PathName
Demarrer/Arreter des services
# Demarrer
Start-Service -Name "NomService"
# Arreter
Stop-Service -Name "NomService"
# Redemarrer
Restart-Service -Name "NomService"
# Avec confirmation
Stop-Service -Name "Spooler" -Confirm
Modifier le type de demarrage
# Passer en automatique
Set-Service -Name "NomService" -StartupType Automatic
# Desactiver
Set-Service -Name "NomService" -StartupType Disabled
Creer un service
# Creer un nouveau service
New-Service -Name "MonService" `
-BinaryPathName "C:\chemin\vers\programme.exe" `
-DisplayName "Mon Service Personnalise" `
-Description "Description du service" `
-StartupType Manual
# Supprimer (via sc.exe)
sc.exe delete "MonService"
Gestion via CMD
Commande SC (Service Control)
:: Lister les services
sc query
:: Etat d'un service
sc query "NomService"
:: Demarrer
sc start "NomService"
:: Arreter
sc stop "NomService"
:: Configurer le demarrage
sc config "NomService" start= auto
sc config "NomService" start= disabled
:: Creer un service
sc create "MonService" binPath= "C:\chemin\programme.exe"
:: Supprimer
sc delete "MonService"
Commande NET
:: Demarrer
net start "NomService"
:: Arreter
net stop "NomService"
Services Systeme Importants
Services Critiques
| Service | Nom court | Role |
|---|---|---|
| Windows Update | wuauserv | Mises a jour |
| Windows Defender | WinDefend | Antivirus |
| Remote Procedure Call | RpcSs | Communication systeme |
| DCOM Server Process Launcher | DcomLaunch | Activation DCOM |
| Windows Event Log | EventLog | Journalisation |
| Task Scheduler | Schedule | Taches planifiees |
| Print Spooler | Spooler | Impression |
Services Reseau
| Service | Nom court | Role |
|---|---|---|
| DHCP Client | Dhcp | Configuration IP automatique |
| DNS Client | Dnscache | Resolution de noms |
| Windows Firewall | mpssvc | Pare-feu |
| Remote Desktop Services | TermService | Bureau a distance |
| Server | LanmanServer | Partage de fichiers |
| Workstation | LanmanWorkstation | Acces aux partages |
Securite des Services
Risques
-
Services vulnerables:
- Executables modifiables
- Permissions trop larges
- Comptes sur-privilegies
-
Vecteurs d'attaque:
- Remplacement du binaire
- DLL Hijacking
- Unquoted service path
Verifications de securite
# Verifier les chemins non quotes
Get-WmiObject Win32_Service | Where-Object {
$_.PathName -notmatch '^"' -and
$_.PathName -match ' '
} | Select-Object Name, PathName
# Verifier les permissions des executables
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
-
Principe du moindre privilege:
- Utiliser LocalService ou NetworkService plutot que LocalSystem
- Creer des comptes de service dedies
-
Proteger les binaires:
- Permissions restrictives sur les executables
- Chemins entre guillemets
-
Desactiver les services inutiles:
- Remote Registry
- Print Spooler (si pas d'impression)
- Telnet (obsolete)
Dependances de Services
Comprendre les dependances
Un service peut dependre d'autres services pour fonctionner.
# Voir les dependances d'un service
Get-Service -Name "NomService" -DependentServices
# Services dont depend ce service
Get-Service -Name "NomService" -RequiredServices
Exemple: Print Spooler
Print Spooler
├── Depend de: Remote Procedure Call (RPC)
└── Services dependants: (souvent aucun)
Journalisation des Services
Event Log
# Evenements lies aux services
Get-WinEvent -FilterHashtable @{
LogName = 'System'
ProviderName = 'Service Control Manager'
} -MaxEvents 20 | Format-Table TimeCreated, Message -Wrap
Event IDs importants
| Event ID | Description |
|---|---|
| 7000 | Service n'a pas pu demarrer |
| 7001 | Service depend d'un service non demarre |
| 7009 | Timeout au demarrage |
| 7034 | Service s'est termine de facon inattendue |
| 7035 | Demande de demarrage/arret envoyee |
| 7036 | Service demarre ou arrete |
Exercices
- Listez tous les services en cours d'execution sur votre systeme
- Identifiez les services s'executant sous LocalSystem
- Trouvez les services avec des chemins non quotes
- Creez un service de test et supprimez-le