.job-Dateien Forensik: Legacy-Aufgaben in Windows\Tasks
So lesen Sie alte .job-Dateien: fester und variabler Teil nach MS-TSCH, Trigger, letzte Ausführung als SYSTEMTIME in Ortszeit und .job-Dateien unter modernem Windows.
Kurz gesagt. .job-Dateien sind das Format von Task Scheduler 1.0 und liegen in C:\Windows\Tasks. Microsoft spezifiziert sie in MS-TSCH: ein fester Abschnitt von 68 Bytes (Versionen, Job-UUID, Priorität, Status, Flags, letzte Ausführung als SYSTEMTIME) und ein variabler Abschnitt (Befehl, Parameter, Arbeitsverzeichnis, Autor, Kommentar, Trigger). Unter modernem Windows sind sie selten, und genau deshalb verdient eine dort gefundene .job-Datei Aufmerksamkeit.
Dieser Artikel gehört zur Grundlagenserie, die mit dem Leitfaden zur Forensik geplanter Aufgaben beginnt.
Woher .job-Dateien stammen
| Ära | Primärer Aufgabenspeicher | .job-Dateien |
|---|---|---|
| Windows 2000, XP, Server 2003 | C:\Windows\Tasks\*.job | Jede Aufgabe |
| Vista, 7, Server 2008 (R2) | XML in System32\Tasks + TaskCache | Aufgaben, die über die 1.0-API oder at.exe angelegt werden, können aus Kompatibilitätsgründen zusätzlich eine .job erhalten |
| Windows 8 und neuer | XML + TaskCache | Ungewöhnlich; at.exe ist zugunsten von schtasks veraltet |
Die Übersicht von Cyber Triage beschreibt dieselbe Entwicklung. Auf einem Rechner mit Windows 10 oder 11 bedeutet eine .job-Datei daher eines von dreien: eine sehr alte Anwendung, die noch die 1.0-Schnittstelle nutzt, ein Überbleibsel eines In-Place-Upgrades oder den bewussten Einsatz alter Werkzeuge. Nichts davon ist für sich genommen bösartig; alles davon sollte erklärt werden.
Das KapeFiles-Target ScheduledTasks sichert C:\Windows\Tasks\*.job und das Gegenstück unter Windows.old, zusammen mit SchedLgU.txt, dem Textprotokoll des 1.0-Schedulers.
Der Abschnitt fester Länge
MS-TSCH nennt ihn FIXDLEN_DATA. Die Dokumentation des Job-Dateiformats von libyal beschreibt ihn mit 68 Bytes:
| Offset | Größe | Feld | Forensischer Nutzen |
|---|---|---|---|
| 0 | 2 | Produktversion | Betriebssystem, das die Datei geschrieben hat (z. B. 0x0501 XP, 0x0600 Vista, 0x0a00 Windows 10) |
| 2 | 2 | Version des Dateiformats | |
| 4 | 16 | Job-UUID | Eindeutig pro Job |
| 20 | 2 | Offset des Anwendungsnamens | Beginn des variablen Abschnitts |
| 22 | 2 | Offset der Trigger | |
| 24 | 4 | Anzahl und Intervall der Wiederholungsversuche bei Fehlern | |
| 28 | 4 | Leerlauf-Frist und Wartezeit | |
| 32 | 4 | Prioritätsklasse | Normal, hoch, Leerlauf, Echtzeit |
| 36 | 4 | Maximale Laufzeit (ms) | |
| 40 | 4 | Exit-Code | Letzter Exit-Code des Programms |
| 44 | 4 | Status | Bereit, wird ausgeführt, deaktiviert, noch nicht ausgeführt ... |
| 48 | 4 | Flags | Enthält u. a. die Bits für deaktiviert und versteckt |
| 52 | 16 | Letzte Ausführung | SYSTEMTIME |
Die Produktversion ist eine schnelle Herkunftsprüfung: Eine .job-Datei auf einem Windows-10-Rechner, deren Produktversion auf XP verweist, wurde vermutlich von anderswo kopiert und nicht lokal erstellt.
Die letzte Ausführungszeit
Die letzte Ausführungszeit ist eine SYSTEMTIME (Jahr, Monat, Wochentag, Tag, Stunde, Minute, Sekunde, Millisekunde), keine FILETIME. Sie enthält keine Zeitzone. Allgemein wird sie als Ortszeit behandelt, und die Dokumentation von libyal kennzeichnet das ausdrücklich als noch zu bestätigen. Halten Sie den Wert so fest, wie er gespeichert ist, benennen Sie die Annahme und belegen Sie ihn mit einer weiteren Quelle, bevor Sie eine Zeitachse darauf aufbauen. Ein Nullwert bedeutet, dass der Job nie ausgeführt wurde.
Der Abschnitt variabler Länge
Auf den festen Abschnitt folgen in dieser Reihenfolge:
- Anzahl laufender Instanzen.
- Anwendungsname (der Befehl), UTF-16 mit Längenpräfix.
- Parameter.
- Arbeitsverzeichnis.
- Autor.
- Kommentar.
- Benutzerdaten und reservierte Daten (undurchsichtige Blobs).
- Trigger: eine Anzahl, dann Trigger-Datensätze fester Größe mit Startdatum, Enddatum, Startzeit, Dauer, Intervall, Flags und einem Typ (einmalig, täglich, wöchentlich, monatlich, bei Leerlauf, beim Systemstart, bei Anmeldung).
- Optional eine Job-Signatur.
Trigger speichern Datumsangaben als getrennte Words für Jahr, Monat und Tag, ohne Zeitzone. Es gilt derselbe Vorbehalt wie oben: per Konvention Ortszeit.
Eine .job-Datei in der Praxis auswerten
Der Scheduled Tasks Parser extrahiert aus jeder .job-Datei: Befehl, Parameter, Arbeitsverzeichnis, Autor, Kommentar, Flags (deaktiviert, versteckt), Status, Exit-Code, die Trigger mit Start- und Enddatum sowie die letzte Ausführungszeit wie gespeichert, als Ortszeit gekennzeichnet. Die .job-Zeilen erscheinen neben den XML- und TaskCache-Aufgaben und sind als Legacy-Aktionen markiert, damit sie auf einem modernen System auffallen.
Fragen, die Sie jeder Datei stellen sollten:
- Liegt der Befehl in einem für Benutzer beschreibbaren Pfad? Hier gilt dieselbe Regel wie bei XML-Aufgaben, siehe bösartige geplante Aufgaben erkennen.
- Entspricht der Autor einem echten Konto? Wie das XML-Feld
Authorist er Freitext. - Gibt es eine passende XML-Aufgabe? Unter Vista und 7 sollte ein über die Kompatibilitätsschicht registrierter Job eine haben. Eine
.jobohne XML- oder TaskCache-Eintrag wurde nicht vom aktuellen Dienst registriert oder nur teilweise bereinigt. - Passen die Zeitstempel des Dateisystems dazu? Die
$MFT-Zeiten der.job-Datei und vonC:\Windows\Tasksselbst grenzen ihre Erstellung und letzte Änderung ein. Der Scheduler aktualisiert die Datei, wenn der Job läuft, daher folgt die Änderungszeit oft der letzten Ausführungszeit. Ein USN-Journal kann zeigen, wann die Datei erstellt oder gelöscht wurde.
Alte Werkzeuge und moderne Erkennung
at.exe existiert aus Gründen der Abwärtskompatibilität auch unter aktuellem Windows noch, ist aber veraltet; Microsoft verweist stattdessen auf schtasks. Taucht at.exe auf einer modernen Workstation in Ausführungsspuren auf (Prefetch, Amcache), ist das ungewöhnlich und sollte Anlass sein, C:\Windows\Tasks und den TaskCache nach Aufgabennamen im Stil von At1 zu durchsuchen.
FAQ
Was ist eine .job-Datei?
Eine binäre Datei für geplante Aufgaben, die von Task Scheduler 1.0 verwendet und in C:\Windows\Tasks abgelegt wird. Microsoft dokumentiert das Format in MS-TSCH als Abschnitt fester Länge, gefolgt von einem Abschnitt variabler Länge mit Befehl, Argumenten, Autor, Kommentar und Triggern.
Verwenden Windows 10 und 11 noch .job-Dateien?
Selten. Moderne Aufgaben bestehen aus XML plus TaskCache. Eine .job-Datei kann dennoch auftauchen, wenn Aufgaben über die alten Schnittstellen von Task Scheduler 1.0 oder den veralteten Befehl at registriert wurden, sowie auf Systemen, die von alten Versionen aktualisiert wurden. Sichern Sie C:\Windows\Tasks trotzdem.
Ist die letzte Ausführungszeit in einer .job-Datei UTC?
Sie wird als SYSTEMTIME-Struktur ohne Zeitzoneninformation gespeichert und gilt allgemein als Ortszeit. Die Dokumentation von libyal kennzeichnet das weiterhin als noch zu bestätigen, belegen Sie den Wert also mit weiteren Quellen, bevor Sie sich darauf stützen.