Görev Zamanlayıcı Önbelleği¶
TaskCache nedir¶
Windows Görev Zamanlayıcı (Task Scheduler), SOFTWARE altında görev yollarını GUID'lere, tetikleyicilere/listelere,
sorumlulara (principal), eylemlere, çalışma zamanı meta verilerine ve güvenlik tanımlayıcılarına bağlayan bir kayıt defteri önbelleği tutar. Juntei;
yürütme ve COM işleyici eylemlerinin yanı sıra eski e-posta/ileti eylemlerinin, görev zaman damgalarının ve normal
Görev Zamanlayıcı arayüzünden gizlenmiş görev belirtilerinin kodunu çözer.
Görevler yaygın bir kalıcılık ve uzaktan yürütme mekanizmasıdır. Kayıt defteri önbelleği, bir saldırgan görevin XML dosyasını sildiğinde veya kurcaladığında da değerlidir.
En iyi sonuç: TaskCache görevi/eylemi yapılandırmış veya korumuştur. Belirli bir yürütmeyi kanıtlamak için çalışma zamanı alanları ve bağımsız günlükler gerekir.
Konumlar¶
SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache
C:\Windows\System32\Tasks\... (task XML/files; collect separately)
SOFTWARE kovanını işlem günlükleriyle birlikte ve System32\Tasks ağacının tamamını toplayın. Task Scheduler
Operational ve Security olay günlükleri oluşturma/güncelleme/çalışma zamanı kanıtları ekler.
Analist için uyarılar¶
- Kayıt defteri önbelleği ve görev XML'i; kurcalama, silme, eksik kayıt veya hasar sonrasında birbiriyle çelişebilir.
- Juntei'nin
Hiddendeğeri, yalnızca normal bir “Gizli” kullanıcı arayüzü bayrağıyla yapılandırılmış bir görevi değil, yapısal gizlemeyi (ilgili koşullar altında eksik Tree bağlantısı/güvenlik tanımlayıcısı) belirtir. - Windows 7 görev eylemlerini önbelleğin
Actionsdeğerinde değil, XML'de saklar; orada boş bir eylem otomatik olarak şüpheli değildir. LastRunveLastResultfaydalıdır, ancak eksiksiz ve kurcalamaya karşı korumalı bir yürütme geçmişi değildir.Context, görevi kaydeden kullanıcıyı değil, yapılandırılmış sorumluyu/bağlamı adlandırır.- COM işleyici CLSID'leri ayrıca kayıt defteri/dosya çözümlemesi gerektirir.
Juntei ile ayrıştırma¶
Usage: juntei parse-registry taskcache <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SOFTWARE hives
-f, --file <FILE> Parse one SOFTWARE hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Filtering:
--task <NAME> Full task path or final task name
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry taskcache -f SOFTWARE -o tasks.csv
juntei parse-registry taskcache -f SOFTWARE -t jsonl \
| jq 'select(.Hidden == true or (.Executable? | test("powershell|cmd|mshta"; "i")))'
Çıktı alanları¶
| Alan | Yorumlama |
|---|---|
Host, SourcePath |
Ana bilgisayar bağlamı ve kaynak SOFTWARE kovanı. |
TaskName |
Tam zamanlayıcı yolu. XML ve olay günlüklerine birincil pivot noktası. |
TaskGUID |
Tree ve Tasks önbellek girdilerini birleştiren GUID. Güçlü bir ilişkilendirme anahtarı. |
TaskIndex |
Zamanlayıcının kullandığı Tree/indeks meta verisi; bağlamsaldır, bir yürütme sayısı değildir. |
TaskLists |
Tetiklemeyi/işlemeyi sınıflandıran önbellek listeleri (Boot, Logon, Plain, Maintenance). |
Hidden |
Yapısal gizli görev göstergesi. Kurcalama sonucuna varmadan önce InTree, InTasks ve tanımlayıcı durumunu inceleyin. |
InTree, InTasks |
Önbelleğin her iki tarafının da mevcut olup olmadığı. Eksik bağlantı silme/kurcalama/eksik kaydı gösterebilir. |
HasSecurityDescriptor |
Tree girdisinin SD değerine sahip olup olmadığı; bulunmaması ilgili sürümlerde gizli görev davranışına katkıda bulunabilir. |
TreeKeyLastWrittenUTC, TaskKeyLastWrittenUTC |
Önbelleğin her iki tarafı için anahtar düzeyindeki değişiklikler; kesin oluşturma/çalıştırma zamanları değildir. |
ActionIndex |
Görev içindeki sıfır tabanlı eylem. Bir görev birden fazla satır üretebilir. |
ActionType |
exec, com_handler, send_email veya show_message. |
Executable, Args, WorkingDirectory |
Etkin yürütme eylemi. Tırnaklamayı, değişkenleri, göreli yolları ve LOLBin'leri yorumlayın. |
COM-ClassID, ActionData |
COM işleyici CLSID'i ve verisi ya da eski e-posta/ileti yükü. CLSID'i ayrıca çözümleyin. |
Context |
Eylemlerle birlikte kodlanan sorumlu bağlamı (LocalSystem, Author vb.); kaydeden değil, yapılandırılmış kimliktir. |
Author, URI, Description |
Görev meta verileri. Saldırgan tarafından kolayca denetlenebilir ve güven kanıtı değildir. |
LastRegisteredUTC |
Mevcut olduğunda DynamicInfo kayıt/güncelleme zamanı. |
LastRunUTC, LastSuccessfulRunUTC, LastResult |
Önbelleğe alınmış çalışma zamanı/sonuç meta verileri. Operasyonel günlükler ve işlem kanıtlarıyla ilişkilendirin. |
ActionsRaw |
Kod çözme eksikse veya doğrulama gerekiyorsa özgün eylem baytları. |
TransactionLogStatus, LogsApplied |
Kayıt defteri kurtarma bağlamı. |
Problems |
Yol/GUID uyuşmazlığı, yanlış değer türü, kesilmiş eylem yapısı veya eksik parçalar. |
İnceleme stratejisi¶
- Önce gizli/tutarsız görevleri ve Microsoft dışı yolları inceleyin.
- Bağımsız değişkenler, çalışma dizini, ortam değişkeni genişletmesi ve COM çözümlemesi dahil olmak üzere etkin komutları yeniden oluşturun.
- Kayıt defteri kaydını görev XML'i ile karşılaştırın ve başvurulan yürütülebilir dosyanın karmasını/zaman damgalarını alın.
TaskName/GUID/zaman bilgisini Task Scheduler olayları, Security 4698/4702, işlem günlükleri, Prefetch ve MFT/USN ile ilişkilendirin.- Bir saldırgan görevi kaldırdığında silinmiş/kurtarılmış kayıt defteri verilerinde arama yapın.