Skip to content

Exercice 04 : Gestion et Sécurisation des Comptes de Service

Niveau de Difficulté

Intermédiaire

Objectifs Pédagogiques

  • Modifier les attributs des comptes de service pour renforcer leur sĂ©curitĂ©
  • CrĂ©er et gĂ©rer des groupes de sĂ©curitĂ© pour les comptes de service
  • DĂ©lĂ©guer des permissions AD appropriĂ©es Ă  des comptes de service sans leur donner des droits excessifs

Durée Estimée

60 minutes

Prérequis

  • Exercices 01 Ă  03 complĂ©tĂ©s
  • Connaissance des droits AD et des bonnes pratiques pour les comptes de service

Contexte / Scénario

Scénario réel

Lors d'un audit de sécurité, le consultant externe a identifié plusieurs problÚmes avec les comptes de service de MonitoringTech SPRL :

  1. Les comptes de service n'ont pas de description suffisamment détaillée
  2. Le compte svc_monitoring a besoin du droit de lire les journaux d'événements à distance
  3. Le compte svc_audit doit ĂȘtre membre du groupe "Lecteurs du journal des Ă©vĂ©nements" pour fonctionner
  4. Aucun groupe de sécurité ne regroupe les comptes de service pour faciliter leur gestion

Votre mission est de corriger ces problĂšmes selon le principe du moindre privilĂšge.


Tùches à Réaliser

TĂąche 1 : Inventaire et mise Ă  jour des descriptions

Objectif : Ajouter une description détaillée et une adresse email fonctionnelle à chaque compte de service.

Contraintes :

  • svc_monitoring : "Compte de service - Application de monitoring rĂ©seau - Contact: monitoring@monitoringtech.be"
  • svc_backup : "Compte de service - Solution de sauvegarde Veeam - Contact: backup@monitoringtech.be"
  • svc_audit : "Compte de service - Agent d'audit de sĂ©curitĂ© - Contact: audit@monitoringtech.be"
  • svc_replication : "Compte de service - RĂ©plication AD et bases de donnĂ©es - Contact: replication@monitoringtech.be"

Indices :

  • Utilisez Set-ADUser -Identity "svc_monitoring" -Description "..." -EmailAddress "..."
  • Ou via ADUC : clic droit > PropriĂ©tĂ©s > onglet GĂ©nĂ©ral

Vérification :

Get-ADUser -Filter { SamAccountName -like "svc_*" } `
    -SearchBase "OU=ServiceAccounts,OU=MONITORING,DC=maxtec,DC=be" `
    -Properties Description, EmailAddress |
    Select-Object Name, SamAccountName, Description, EmailAddress |
    Format-Table -AutoSize -Wrap

Résultat attendu

Les 4 comptes de service affichent une description et une adresse email.


Tùche 2 : Vérifier le groupe de sécurité des comptes de service et ajuster sa description

Contexte : Le script de setup a déjà créé le groupe GG-MONITORING-ServiceAccounts dans l'OU OU=ServiceAccounts,OU=MONITORING,DC=maxtec,DC=be et y a ajouté les 4 comptes de service. Votre rÎle ici est d'auditer ce groupe et de mettre sa description à jour.

Objectif :

  1. Vérifier que le groupe GG-MONITORING-ServiceAccounts existe bien, est de portée Globale et de type Sécurité
  2. Vérifier que les 4 comptes de service en sont membres
  3. Ajuster sa description pour inclure le nom de l'entreprise et la date du dernier audit

Contraintes :

  • Nom (Ă  vĂ©rifier, pas Ă  crĂ©er) : GG-MONITORING-ServiceAccounts
  • PortĂ©e attendue : Global
  • Type attendu : Security
  • Description Ă  appliquer : "Groupe de sĂ©curitĂ© - Tous les comptes de service MonitoringTech - Dernier audit : $(Get-Date -Format 'dd/MM/yyyy')"
  • Membres attendus : svc_monitoring, svc_backup, svc_audit, svc_replication

Indices :

  • Get-ADGroup pour rĂ©cupĂ©rer les propriĂ©tĂ©s du groupe existant
  • Get-ADGroupMember pour lister les membres
  • Set-ADGroup -Description pour mettre Ă  jour la description
  • Si un membre manque, utilisez Add-ADGroupMember pour l'ajouter
  • Si le groupe n'existe pas (anomalie), c'est que le setup a Ă©chouĂ© — relancez MonitoringLab_Setup.ps1

Vérification :

# Vérifier l'existence et les propriétés
$group = Get-ADGroup "GG-MONITORING-ServiceAccounts" -Properties Description, Members
Write-Host "Groupe : $($group.Name)"
Write-Host "Portée : $($group.GroupScope) (attendu : Global)"
Write-Host "Type   : $($group.GroupCategory) (attendu : Security)"
Write-Host "Description : $($group.Description)"

# Vérifier les membres
$attendus = @("svc_monitoring", "svc_backup", "svc_audit", "svc_replication")
$presents = Get-ADGroupMember "GG-MONITORING-ServiceAccounts" |
    Select-Object -ExpandProperty SamAccountName
$manquants = $attendus | Where-Object { $_ -notin $presents }

if ($manquants) {
    Write-Host "Membres manquants : $($manquants -join ', ')" -ForegroundColor Red
} else {
    Write-Host "Tous les comptes de service sont bien membres." -ForegroundColor Green
}

Résultat attendu

Le groupe existe avec portée Global, type Security, contient les 4 comptes de service, et sa description a été mise à jour avec la date du dernier audit.


Tùche 3 : Ajouter svc_audit au groupe "Lecteurs du journal des événements"

Objectif : Le compte svc_audit doit pouvoir lire les journaux d'événements à distance. Ajoutez-le au groupe intégré Lecteurs du journal des événements (Event Log Readers).

Contraintes :

  • N'accordez que ce droit minimal, pas les droits Administrateur
  • Ce groupe se trouve dans CN=Builtin,DC=maxtec,DC=be

Indices :

  • Nom du groupe en anglais : "Event Log Readers"
  • Nom du groupe en français : "Lecteurs du journal des Ă©vĂ©nements"
  • Utilisez Add-ADGroupMember -Identity "Event Log Readers" -Members "svc_audit"

Vérification :

$membres = Get-ADGroupMember "Event Log Readers" | Select-Object -ExpandProperty SamAccountName
if ($membres -contains "svc_audit") {
    Write-Host "svc_audit est bien membre de Event Log Readers" -ForegroundColor Green
} else {
    Write-Host "svc_audit n'est PAS membre de Event Log Readers" -ForegroundColor Red
}

Résultat attendu

svc_audit est membre du groupe "Event Log Readers".


Tùche 4 : Configurer les options de sécurité des comptes de service

Objectif : Vérifier et configurer les options de sécurité appropriées pour chaque compte de service.

Contraintes pour tous les comptes de service :

  • Le mot de passe ne doit pas expirer (PasswordNeverExpires = $true)
  • L'utilisateur ne doit pas pouvoir changer son mot de passe (CannotChangePassword = $true)
  • Kerberos prĂ©-authentification activĂ©e (option par dĂ©faut, ne pas dĂ©sactiver)

Attention

Dans un environnement réel, il est recommandé d'utiliser des gMSA (Group Managed Service Accounts) plutÎt que de désactiver l'expiration du mot de passe. Pour ce lab, nous utilisons des comptes standard pour simplifier l'apprentissage.

Indice :

# Syntaxe pour modifier les options d'un compte
Set-ADUser -Identity "svc_monitoring" `
    -PasswordNeverExpires $true `
    -CannotChangePassword $true

Vérification :

Get-ADUser -Filter { SamAccountName -like "svc_*" } `
    -SearchBase "OU=ServiceAccounts,OU=MONITORING,DC=maxtec,DC=be" `
    -Properties PasswordNeverExpires, CannotChangePassword, Enabled |
    Select-Object SamAccountName, Enabled, PasswordNeverExpires, CannotChangePassword |
    Format-Table -AutoSize

Résultat attendu

Les 4 comptes affichent PasswordNeverExpires = True et CannotChangePassword = True.


TĂąche 5 : Documenter les comptes de service (rapport PowerShell)

Objectif : Générer un rapport complet de tous les comptes de service avec leurs propriétés et appartenances aux groupes.

Contrainte : Le rapport doit afficher pour chaque compte : nom, description, statut, email, groupes d'appartenance, derniĂšre connexion.

Indice :

# Combiner Get-ADUser avec Get-ADPrincipalGroupMembership
$svcComptes = Get-ADUser -Filter * `
    -SearchBase "OU=ServiceAccounts,OU=MONITORING,DC=maxtec,DC=be" `
    -Properties Description, EmailAddress, PasswordNeverExpires, LastLogonDate

foreach ($compte in $svcComptes) {
    $groupes = Get-ADPrincipalGroupMembership $compte.SamAccountName |
        Select-Object -ExpandProperty Name
    # Afficher les informations...
}

Résultat attendu

Un rapport lisible s'affiche dans la console PowerShell avec toutes les informations demandées pour chaque compte de service.


Vérification de la Réussite

Commandes PowerShell de Vérification

Import-Module ActiveDirectory
Write-Host "=== Vérification Exercice 04 ===" -ForegroundColor Cyan

# Test 1: Descriptions mises Ă  jour
$svcUsers = Get-ADUser -Filter * `
    -SearchBase "OU=ServiceAccounts,OU=MONITORING,DC=maxtec,DC=be" `
    -Properties Description
$avecDescription = ($svcUsers | Where-Object { $_.Description -ne $null -and $_.Description -ne "" }).Count
Write-Host "Comptes de service avec description : $avecDescription/4" -ForegroundColor $(if ($avecDescription -eq 4) { "Green" } else { "Red" })

# Test 2: Groupe GG-MONITORING-ServiceAccounts
try {
    $group = Get-ADGroup "GG-MONITORING-ServiceAccounts" -Properties Members
    $memberCount = (Get-ADGroupMember $group).Count
    Write-Host "Groupe GG-MONITORING-ServiceAccounts : OK ($memberCount membres)" -ForegroundColor Green
} catch {
    Write-Host "Groupe GG-MONITORING-ServiceAccounts : INTROUVABLE" -ForegroundColor Red
}

# Test 3: svc_audit dans Event Log Readers
$elrMembers = Get-ADGroupMember "Event Log Readers" | Select-Object -ExpandProperty SamAccountName
if ($elrMembers -contains "svc_audit") {
    Write-Host "svc_audit dans Event Log Readers : OK" -ForegroundColor Green
} else {
    Write-Host "svc_audit dans Event Log Readers : ABSENT" -ForegroundColor Red
}

CritÚres de Réussite

  • Les 4 comptes de service ont une description dĂ©taillĂ©e et une adresse email
  • Le groupe GG-MONITORING-ServiceAccounts existe avec portĂ©e Global
  • Les 4 comptes de service sont membres de GG-MONITORING-ServiceAccounts
  • svc_audit est membre du groupe "Event Log Readers"
  • Les 4 comptes ont PasswordNeverExpires = True
  • Vous avez gĂ©nĂ©rĂ© le rapport de documentation des comptes de service

Solution ComplĂšte (Pour Instructeur)

Méthode PowerShell

Import-Module ActiveDirectory
$baseOU = "OU=ServiceAccounts,OU=MONITORING,DC=maxtec,DC=be"

# TĂąche 1 : Mise Ă  jour des descriptions
$descriptions = @{
    "svc_monitoring"   = @{ Desc = "Compte de service - Application de monitoring réseau - Contact: monitoring@monitoringtech.be"; Email = "monitoring@monitoringtech.be" }
    "svc_backup"       = @{ Desc = "Compte de service - Solution de sauvegarde Veeam - Contact: backup@monitoringtech.be"; Email = "backup@monitoringtech.be" }
    "svc_audit"        = @{ Desc = "Compte de service - Agent d'audit de sécurité - Contact: audit@monitoringtech.be"; Email = "audit@monitoringtech.be" }
    "svc_replication"  = @{ Desc = "Compte de service - Réplication AD et bases de données - Contact: replication@monitoringtech.be"; Email = "replication@monitoringtech.be" }
}

foreach ($sam in $descriptions.Keys) {
    Set-ADUser -Identity $sam `
        -Description $descriptions[$sam].Desc `
        -EmailAddress $descriptions[$sam].Email `
        -PasswordNeverExpires $true `
        -CannotChangePassword $true
    Write-Host "Compte $sam mis Ă  jour." -ForegroundColor Green
}

# Tùche 2 : Vérifier le groupe GG-MONITORING-ServiceAccounts et mettre sa description à jour
$groupName = "GG-MONITORING-ServiceAccounts"
$group = Get-ADGroup -Filter { Name -eq $groupName } -ErrorAction SilentlyContinue

if (-not $group) {
    Write-Host "ANOMALIE : le groupe $groupName n'existe pas. Relancez MonitoringLab_Setup.ps1." -ForegroundColor Red
} else {
    # Mettre Ă  jour la description
    $newDesc = "Groupe de sécurité - Tous les comptes de service MonitoringTech - Dernier audit : $(Get-Date -Format 'dd/MM/yyyy')"
    Set-ADGroup -Identity $groupName -Description $newDesc
    Write-Host "Description du groupe $groupName mise Ă  jour." -ForegroundColor Green

    # Vérifier que les 4 comptes de service sont bien membres ; ajouter ceux qui manquent
    $svcAccounts = @("svc_monitoring", "svc_backup", "svc_audit", "svc_replication")
    $presents = Get-ADGroupMember $groupName | Select-Object -ExpandProperty SamAccountName
    $manquants = $svcAccounts | Where-Object { $_ -notin $presents }

    if ($manquants) {
        Add-ADGroupMember -Identity $groupName -Members $manquants
        Write-Host "Comptes manquants ajoutés : $($manquants -join ', ')" -ForegroundColor Yellow
    } else {
        Write-Host "Tous les comptes de service sont déjà membres." -ForegroundColor Green
    }
}

# TĂąche 3 : Ajouter svc_audit Ă  Event Log Readers
Add-ADGroupMember -Identity "Event Log Readers" -Members "svc_audit"
Write-Host "svc_audit ajouté à Event Log Readers." -ForegroundColor Green

Méthode GUI (ADUC)

Pour chaque compte de service :

  1. ADUC > OU=ServiceAccounts > OU=MONITORING
  2. Clic droit sur le compte > Propriétés
  3. Onglet Général : remplir Description et Adresse email
  4. Onglet Compte : cocher "Le mot de passe n'expire jamais"

Pour le groupe (déjà créé par le setup, vous ne devez que vérifier et ajuster) :

  1. ADUC > OU=ServiceAccounts > localisez GG-MONITORING-ServiceAccounts > Propriétés
  2. Onglet Général : vérifiez Portée = Globale et Type = Sécurité ; mettez à jour la Description avec la date du jour
  3. Onglet Membres : vérifiez que les 4 comptes svc_ sont bien listés (sinon ajoutez les manquants)

Pour Event Log Readers :

  1. ADUC > Builtin > Event Log Readers > Propriétés > Membres > Ajouter
  2. Chercher "svc_audit" et l'ajouter

Points Clés à Retenir

  • Les comptes de service doivent toujours ĂȘtre documentĂ©s avec une description claire indiquant leur rĂŽle et le responsable technique
  • Le principe du moindre privilĂšge s'applique aussi aux comptes de service : n'accordez que les droits strictement nĂ©cessaires
  • Regrouper les comptes de service dans un groupe GG- permet de gĂ©rer leurs permissions collectivement
  • PasswordNeverExpires = $true est acceptable pour les comptes de service, mais doit ĂȘtre compensĂ© par des mots de passe trĂšs forts (ou l'utilisation de gMSA en production)

Dépannage (Erreurs Courantes)

Erreur Possible Cause Solution
"Le groupe n'existe pas" lors de Add-ADGroupMember Groupe pas encore créé Exécuter d'abord la commande New-ADGroup
"AccÚs refusé" sur Set-ADUser Droits insuffisants Utiliser un compte Domain Admin
"Event Log Readers" introuvable Nom en français Utiliser le SID ou chercher "S-1-5-32-573"
Propriétés non sauvegardées via GUI Oublié de cliquer OK/Appliquer Toujours cliquer Appliquer avant de fermer

Exercice Suivant Suggéré

Exercice 05 - Politique d'Audit Personnalisée : Vous allez concevoir et implémenter une politique d'audit sur mesure pour surveiller les accÚs aux dossiers financiers sensibles de MonitoringTech SPRL.