Inhaltsverzeichnis
Einleitung
Ich möchte meine Windows Server und Clients automatisch an mein Elastic SIEM anschließen. Dafür muss ich den Agent mit einem GPO-ScriptTask installieren und am Fleet-Server registrieren. Den Rest sollte dann der Fleet-Server übernehmen.
Der Artikel gehört zur Serie „Bereitstellung eines Elastic SIEM„.
Aufbau einer Gruppenrichtlinie
Das Setup habe ich über den PowerShell-Befehl auf dem ersten Windows Server heruntergeladen. Die entpackten Dateien kopiere ich in meine Netlogon-Freigabe auf einem der Domain Controller:
Invoke-WebRequest -Uri https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.15.3-windows-x86_64.zip -OutFile M:\Zwischenablage\Temp\elastic-agent-8.15.3-windows-x86_64.zip
Expand-Archive M:\Zwischenablage\Temp\elastic-agent-8.15.3-windows-x86_64.zip -DestinationPath C:\Windows\SYSVOL\domain\scripts\ElasticAgent
Nun benötige ich ein PowerShell-Script, welches das Setup auf dem Zielsystem ausführt. Den Code dafür habe ich bereits für meinen ersten Server genutzt:
Copy-Item -Recurse -Path '\\ws.its\NETLOGON\ElasticAgent' -Destination 'c:\windows\temp\ElasticAgent'
cd 'C:\Windows\Temp\ElasticAgent'
Start-Process -FilePath .\elastic-agent.exe -ArgumentList 'install --url=https://siem.ws.its:8220 --enrollment-token=WEerftgnlaSUJGMXYbgtTZ5Us4fV0I6MzhgererGemNUQk9wUngtydfkrfgF9hQQ=='
Remove-Item -Path 'C:\Windows\Temp\ElasticAgent' -Recurse
Das Script selber soll aber nur installieren, wenn noch kein Agent vorhanden ist. Daher benötige ich noch etwas Logik. Zudem möchte ich gerne einige Logs zum Setup generieren. Das ist mein finaler Code:
##### Scriptinfo ##################################################################################
# Scriptreihe: ElasticAgent-installer
# Datum: 2024-11-20
# Version: V1.00
# Programmierer: Stephan Walther
###################################################################################################
# Variablen
$PathAD = "\\ws.its\NETLOGON\ElasticAgent"
$Logfile = @()
# Ermittle Aktion
$action = "none"
if (-not (Get-Service | Where-Object { $_.name -eq 'Elastic Agent' })) {
$action = "installiere ElasticAgent"
$param = "-i"
$exit = 1
}
# starte Aktion bei Bedarf
New-EventLog -LogName "Application" -Source "ElasticAgentInstaller" -ErrorAction SilentlyContinue
if ($action -ne 'none') {
try {
$Logfile += "Aktion: $action"
$Logfile += "kopiere Dateien nach lokal"
Copy-Item -Recurse -Path $PathAD -Destination 'c:\windows\temp\ElasticAgent' -ErrorAction Stop -Force
$Logfile += "starte setup:C:\Windows\Temp\ElasticAgent\elastic-agent.exe -install --url=https://siem.ws.its:8220 --enrollment-token=xxxx=="
Start-Process -FilePath 'C:\Windows\Temp\ElasticAgent\elastic-agent.exe' -ArgumentList 'install --force --url=https://siem.ws.its:8220 --enrollment-token=WEtKsdvsdGsdfvsvwe5U1Jon6MtgtzdbzhnbEJGemNdfgbwUnllckdwTF9hQQ==' -wait -ErrorAction Stop
Start-Sleep -Seconds 5
$Logfile += "entferne Arbeitsverzeichnis C:\windows\Temp\ElasticAgent"
Remove-Item -Path 'C:\Windows\Temp\ElasticAgent' -Recurse
$Logfile += "erfolgreich abgeschlossen"
Write-EventLog -LogName "Application" -Source "ElasticAgentInstaller" -EntryType Information -EventId 2 -Message "$( $Logfile -join "`r`n" )"
}
catch {
$Logfile += "Fehler in Zeile $( $error[0].InvocationInfo.ScriptLineNumber ): $( $error[0].Exception.Message )"
Write-EventLog -LogName "Application" -Source "ElasticAgentInstaller" -EntryType Error -EventId 3 -Message "$( $Logfile -join "`r`n" )"
}
} else {
$Logfile += "keine Aktion erforderlich"
Write-EventLog -LogName "Application" -Source "ElasticAgentInstaller" -EntryType Information -EventId 1 -Message "$( $Logfile -join "`r`n" )"
}
Das Script speichere ich ebenfalls im SYSVOL-Verzeichnis meiner Domain Controller:
Nun erstelle ich eine geplante Aufgabe in einer Gruppenrichtlinie, welche das Script ausführen soll. Die passende GPO habe ich bereits: Meine Richtlinie, mit welcher ich ebenfalls das Audit vom Windows konfiguriere:
Testlauf
Zum Testen schränke ich die Aufgabe auf einen meiner Windows Server mit dem Feature „Item Level Targeting“ ein:
Auf diesem Server starte ich die Aufgabenverwaltungskonsole und lade mit einem gpupdate die Gruppenrichtlinien neu. Die Aufgabe wird erstellt und direkt gestartet:
Im Fleet-Server taucht der neue Server auf:
Rollout auf alle Windows Systeme
Die GPO funktioniert. Nun erstelle ich noch eine Firewall-Ausnahme, damit auch meine Clients den Fleet-Server erreichen können:
Final entferne ich den Item-Level-Target-Filter in der geplanten Aufgabe. Nun kommen meine Windows Systeme nach und nach im Elastic an:
Fazit
Diese Aufgabe wäre damit abgeschlossen. Meine GPO und das Script findet ihr hier: zip
Weitere Artikel findet ihr in meiner Serie „Bereitstellung eines Elastic SIEM„.
Stay tuned 🙂