Aller au contenu principal

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​

CaracteristiqueApplicationService
InterfaceGeneralement graphiquePas d'interface (ou limitee)
SessionLiee a un utilisateurIndependant
DemarrageManuel par l'utilisateurAutomatique au boot
ExecutionPendant la sessionContinue en arriere-plan

Types de demarrage​

TypeDescription
AutomaticDemarre au boot du systeme
Automatic (Delayed)Demarre apres le boot, avec delai
ManualDemarre uniquement sur demande
DisabledNe peut pas demarrer

Comptes de service​

ComptePrivilegesUtilisation
LocalSystemComplet (admin)Services systeme critiques
LocalServiceLimite, local uniquementServices peu privilegies
NetworkServiceLimite, acces reseauServices necessitant le reseau
Compte utilisateurSelon le compteServices 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​

ServiceNom courtRole
Windows UpdatewuauservMises a jour
Windows DefenderWinDefendAntivirus
Remote Procedure CallRpcSsCommunication systeme
DCOM Server Process LauncherDcomLaunchActivation DCOM
Windows Event LogEventLogJournalisation
Task SchedulerScheduleTaches planifiees
Print SpoolerSpoolerImpression

Services Reseau​

ServiceNom courtRole
DHCP ClientDhcpConfiguration IP automatique
DNS ClientDnscacheResolution de noms
Windows FirewallmpssvcPare-feu
Remote Desktop ServicesTermServiceBureau a distance
ServerLanmanServerPartage de fichiers
WorkstationLanmanWorkstationAcces aux partages

Securite des Services​

Risques​

  1. Services vulnerables:

    • Executables modifiables
    • Permissions trop larges
    • Comptes sur-privilegies
  2. 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​

  1. Principe du moindre privilege:

    • Utiliser LocalService ou NetworkService plutot que LocalSystem
    • Creer des comptes de service dedies
  2. Proteger les binaires:

    • Permissions restrictives sur les executables
    • Chemins entre guillemets
  3. 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 IDDescription
7000Service n'a pas pu demarrer
7001Service depend d'un service non demarre
7009Timeout au demarrage
7034Service s'est termine de facon inattendue
7035Demande de demarrage/arret envoyee
7036Service demarre ou arrete

Exercices​

  1. Listez tous les services en cours d'execution sur votre systeme
  2. Identifiez les services s'executant sous LocalSystem
  3. Trouvez les services avec des chemins non quotes
  4. Creez un service de test et supprimez-le

References​