Scriptmanipulation @Taskscheduler

Scriptmanipulation @Taskscheduler

Allzuoft liegen Skripte auf dem Dateisystem, die von einem hochprivilegiertem Useraccount per Aufgabenplanung ausgeführt werden sollen in Bereichen, die von anderen Administratoren erreichbar sind. Um dieser Sicherheitslücke nun ein wenig entgegenzuwirken, könnte der Aufruf eines Powershell-Scripts folgendermaßen ausgeführt werden.

Powershell.exe -Command " if( (Get-FileHash .\userChange.ps1 -Algorithm MD5).hash -eq 'AECB48B304428C41EF66576B90110A94') {& .\userChange.ps1} "

Der Taskscheduler führt die Powershell.exe mit dem Scriptblock {if….} aus.

Der Scriptblock prüft nun, ob der Filehash des Scripts mit dem zuvor ermittelten Hash übereinstimmt, ist das der Fall, wird das Script „& .\userChange.ps1“ ausgeführt.

Da Windows einen Hash auf die Aufgaben selbst erzeugt, würde bei einer Manipulation der Aufgabe ohne eingabe des Passworts des privilegiertem Users, der die Aufgabe als Batch ausführt, als korrupt ansehen und nicht starten. (ob es Möglichkeiten gibt, einen ScheduledTask ohne Passwort des Users, der den Task ausführt, zu manipulieren, weiß ich zur Zeit leider nicht.)

Codesigning wäre mit Sicherheit die bessere Lösung.