Mettre en œuvre des techniques de corrélation avancées pour identifier les menaces sophistiquées qui utilisent l'installation de services dans le cadre d'une chaîne d'attaque plus large.
- Créer une chronologie complète des événements système autour de l'installation de services :
$TargetTime = (Get-Date "2026-03-18 14:30:00")
$TimeWindow = 1800 # 30 minutes
$StartTime = $TargetTime.AddSeconds(-$TimeWindow)
$EndTime = $TargetTime.AddSeconds($TimeWindow)
# Collecter plusieurs types d'événements
$Events = @()
$Events += Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045; StartTime=$StartTime; EndTime=$EndTime} | Select-Object TimeCreated, Id, LevelDisplayName, @{Name='EventType';Expression={'ServiceInstall'}}, @{Name='Details';Expression={"Service: $($_.Properties[0].Value), Path: $($_.Properties[1].Value)"}}
$Events += Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688; StartTime=$StartTime; EndTime=$EndTime} | Select-Object TimeCreated, Id, LevelDisplayName, @{Name='EventType';Expression={'ProcessCreation'}}, @{Name='Details';Expression={"Process: $($_.Properties[5].Value)"}}
$Events += Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; StartTime=$StartTime; EndTime=$EndTime} | Select-Object TimeCreated, Id, LevelDisplayName, @{Name='EventType';Expression={'Logon'}}, @{Name='Details';Expression={"User: $($_.Properties[5].Value), Type: $($_.Properties[8].Value)"}}
$Events | Sort-Object TimeCreated | Format-Table -AutoSize
- Analyser les modèles d'installation de services pour détecter des anomalies :
# Vérifier la présence de plusieurs services installés dans un court laps de temps
$RecentServices = Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045; StartTime=(Get-Date).AddHours(-24)}
$ServicesByHour = $RecentServices | Group-Object {$_.TimeCreated.ToString("yyyy-MM-dd HH")} | Where-Object {$_.Count -gt 3}
if ($ServicesByHour) {
Write-Warning "Activité d'installation de services inhabituelle détectée :"
$ServicesByHour | ForEach-Object {
Write-Host "$($_.Name): $($_.Count) services installés"
}
}
- Vérifier les services présentant des caractéristiques suspectes :
$SuspiciousServices = Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045; StartTime=(Get-Date).AddDays(-7)} | Where-Object {
$ServiceName = $_.Properties[0].Value
$ImagePath = $_.Properties[1].Value
# Signaler les services avec des noms ou chemins suspects
($ServiceName -match "[0-9]{8,}" -or
$ServiceName -match "^[a-f0-9]{32}$" -or
$ImagePath -like "*\temp\*" -or
$ImagePath -like "*\appdata\*" -or
$ImageName -like "*.tmp" -or
$ServiceName.Length -lt 3)
}
if ($SuspiciousServices) {
Write-Warning "Services potentiellement malveillants détectés :"
$SuspiciousServices | ForEach-Object {
Write-Host "Heure : $($_.TimeCreated), Service : $($_.Properties[0].Value), Chemin : $($_.Properties[1].Value)"
}
}
- Exporter les résultats pour une analyse plus approfondie :
$Report = @()
Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045; StartTime=(Get-Date).AddDays(-30)} | ForEach-Object {
$Report += [PSCustomObject]@{
Timestamp = $_.TimeCreated
ServiceName = $_.Properties[0].Value
ImagePath = $_.Properties[1].Value
ServiceType = $_.Properties[2].Value
StartType = $_.Properties[3].Value
UserSID = $_.UserId
Suspicious = ($_.Properties[1].Value -like "*\temp\*" -or $_.Properties[1].Value -like "*\appdata\*")
}
}
$Report | Export-Csv -Path "C:\Temp\ServiceInstallationAnalysis.csv" -NoTypeInformation
Avertissement : Toujours corréler l'ID d'événement 7045 avec les connexions réseau, les modifications du système de fichiers et les modifications du registre pour obtenir une image complète des menaces potentielles.