EmoCheck: start per Powershell und Eventlog
Seit kurzem kann man mit dem Tool EmoCheck nach spezifischen Prozessen von Emotet Ausschau halten.
Mehr Details dazu auf heise.
Leider ist das Programm so nicht geeignet, um es per Aufgabenplanung korrekt auszuführen.
Auch müssen die Log Files manuell gelesen werden.
Um diese "Probleme" zu umgehen habe ich mir ein kleines Powershell-Script geschrieben, welches das Programm startet, wieder beendet und das Ergebnis des Scans in den EventLog schreibt:
Nachdem ich nicht der große Powershell-Scripter bin, sind Verbesserungsvorschläge gerne willkommen
Auch habe ich das Script prinzipiell nur für mich geschrieben. Sprich all zu große Fehlerüberprüfungen gibt es nicht.
Daher auch: Die Anwendung des Skriptes geschieht auf eigene Gefahr. Ich übernehme keine Haftung für eventuelle Schäden!
Grüße
Patrick
Mehr Details dazu auf heise.
Leider ist das Programm so nicht geeignet, um es per Aufgabenplanung korrekt auszuführen.
Auch müssen die Log Files manuell gelesen werden.
Um diese "Probleme" zu umgehen habe ich mir ein kleines Powershell-Script geschrieben, welches das Programm startet, wieder beendet und das Ergebnis des Scans in den EventLog schreibt:
###### EDIT THESE VARIABLES ######
$path = "C:\scripts\emocheck" # without ending \
$file = "emocheck_x64.exe" # emocheck_x64.exe or emocheck_x86.exe
##################################
$fileExt = $file.Replace(".exe","")
$time = Get-Date
#check if Eventlog exists
if ([system.diagnostics.eventlog]::SourceExists("EmoCheck") -eq $False) {
New-EventLog -LogName "Application" -Source "EmoCheck"
}
#start scan
Start-Process -Filepath $path"\"$file -WorkingDirectory $path
#check if emocheck is running. Otherwhise exit script
if ((Get-Process -name $fileExt) -eq $null){
Write-EventLog -LogName "Application" -Source "EmoCheck" -EventID "1003" -EntryType "Error" -Message "Couldn't start emocheck. Please check your script." -Category 0
exit
}
#wait one seconds, until cmd is open
Start-Sleep -s 1
$cmd = Get-Process cmd | Where StartTime -gt $time | ForEach-Object {$_.ID} | Out-String
#wait few seconds, until the logs are written
Start-Sleep -s 30
#kill process because it waiting for a key input
Stop-Process -Name $fileExt
Stop-Process -Id $cmd
#get latest log file
$logfile = Get-ChildItem -Path $path"\*_emocheck.txt" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
$logfilePath = Join-Path -Path $path -Childpath $logfile.name
$content = Get-Content -Path $logfilePath
$contentEvent = $content | Out-String
#check if log file is available
if ($content -eq $null){
Write-EventLog -LogName "Application" -Source "EmoCheck" -EventID "1003" -EntryType "Error" -Message "Couldn't read the log files. Please check your script."
exit
}
#check log
if ($content -like "No detection."){
Write-EventLog -LogName "Application" -Source "EmoCheck" -EventID "1000" -EntryType "Information" -Message $contentEvent -Category 0
}
elseif ($content -like "Detected Emotet process."){
Write-EventLog -LogName "Application" -Source "EmoCheck" -EventID "1001" -EntryType "Critical" -Message $contentEvent -Category 0
}
else
{
$message = "Couldn't interpret the log files. Please check it manually: " + $logfilePath
Write-EventLog -LogName "Application" -Source "EmoCheck" -EventID "1002" -EntryType "Warning" -Message $message -Category 0
}
#delete log files that are older than 30 days
Get-Childitem $path -include "*_emocheck.txt" -recurse | where {$_.lastwritetime -lt (get-date).adddays("-30") -and -not $_.psiscontainer} |% {remove-item $_.fullname -force -whatif}
Nachdem ich nicht der große Powershell-Scripter bin, sind Verbesserungsvorschläge gerne willkommen
Auch habe ich das Script prinzipiell nur für mich geschrieben. Sprich all zu große Fehlerüberprüfungen gibt es nicht.
Daher auch: Die Anwendung des Skriptes geschieht auf eigene Gefahr. Ich übernehme keine Haftung für eventuelle Schäden!
Grüße
Patrick
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 543927
Url: https://administrator.de/contentid/543927
Ausgedruckt am: 21.11.2024 um 15:11 Uhr
9 Kommentare
Neuester Kommentar
zur Info:
Write-EventLog : Der Parameter "EntryType" kann nicht gebunden werden. Der Wert "Critical" kann nicht in den Typ "System.Diagnostics.EventLogEntryType" konvertiert werden. Fehler: "Der Bezeichner "Critical" kann keinem gültigen Enumeratornamen zugeordnet werden. Geben Sie einen der folgenden
Enumeratornamen an, und wiederholen Sie den Vorgang:
Error, Warning, Information, SuccessAudit, FailureAudit"
das Anwendungs-Eventlog mag wohl kein Critical.... nicht dass es bei einer wirklichen Infektion nicht nicht-benachrichtigen würde...
Write-EventLog : Der Parameter "EntryType" kann nicht gebunden werden. Der Wert "Critical" kann nicht in den Typ "System.Diagnostics.EventLogEntryType" konvertiert werden. Fehler: "Der Bezeichner "Critical" kann keinem gültigen Enumeratornamen zugeordnet werden. Geben Sie einen der folgenden
Enumeratornamen an, und wiederholen Sie den Vorgang:
Error, Warning, Information, SuccessAudit, FailureAudit"
das Anwendungs-Eventlog mag wohl kein Critical.... nicht dass es bei einer wirklichen Infektion nicht nicht-benachrichtigen würde...