Question Analysis
A threat actor on a Windows system crafted and registered a service named almost identically to the standard time service, but redirecting execution to a custom script. Review the logging data to determine which native command-line tool was used to perform this action. What utility was invoked?
b721c6ef-472c-4263-a0d9-37f1f4ecff66
Question ID
9/23
Models Correct
1
Valid Answer
39%
Success Rate
Reference Answer
Human-validated correct answer for this question
sc
Model Performance Comparison
See how different AI models performed on this question
Model | Answer | KQL Query | Status | Attempts | Time | Cost |
---|---|---|---|---|---|---|
gemini-2.5-flash-preview-04-17 | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0532 |
gpt-35-turbo | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0110 |
gpt-4-turbo-2024-04-09 | sc | DeviceProcessEvents
| where FileName has_any ('sc.exe', 'svchost.exe')
| where ProcessCommandLine contains 'create' or ProcessCommandLine contains 'config' or ProcessCommandLine contains 'delete'
| summarize Count=count() by ProcessCommandLine, InitiatingProcessFileName
| order by Count desc | Correct | 1 | 14.63s | 0.0552 |
gpt-4.1 | sc.exe | DeviceProcessEvents
| where Timestamp >= ago(7d) // Adjust as needed for your investigation window
| where FileName in~ ("sc.exe", "powershell.exe", "cmd.exe", "reg.exe")
| where ProcessCommandLine has_any ("create", "config", "service")
| where ProcessCommandLine matches regex @"(?i)w?32?time"
| project Timestamp, DeviceName, FileName, ProcessCommandLine | Correct | 1 | 7.84s | 0.0124 |
gpt-4.1-finetuned | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0413 |
gpt-4.1-mini | sc | DeviceProcessEvents
| where ProcessCommandLine has_any ("create", "config", "delete")
| where ProcessCommandLine contains_cs "time" or ProcessCommandLine contains_cs "w32time" or ProcessCommandLine contains_cs "tim"
| where InitiatingProcessFileName in ("sc.exe", "powershell.exe", "cmd.exe", "New-Service", "net.exe") or FileName in ("sc.exe", "powershell.exe", "cmd.exe", "net.exe")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, ProcessCommandLine
| sort by TimeGenerated desc
| distinct InitiatingProcessFileName, ProcessCommandLine, DeviceName, TimeGenerated | Correct | 2 | 8.54s | 0.0047 |
gpt-4.1-nano | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0015 |
gpt-4o | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0494 |
gpt-5-high | reg.exe | let script_indicators = dynamic([".ps1", ".bat", ".cmd", ".vbs", ".js", "wscript.exe", "cscript.exe", "powershell.exe", "cmd.exe", " /c ", " -file "]);
let svc_mods =
DeviceEvents
| where ActionType in ("ServiceInstalled","ServiceCreated","ServiceRegistered","ServiceModified","ServiceConfigurationChanged")
| extend svcName = tostring(AdditionalFields.ServiceName),
svcDisp = tostring(AdditionalFields.ServiceDisplayName),
imgPath = tolower(coalesce(tostring(AdditionalFields.NewBinaryPathName), tostring(AdditionalFields.BinaryPathName), tostring(AdditionalFields.ImagePath), tostring(AdditionalFields.ServiceImagePath)))
// Heuristics: name/display similar to time service (contains w32+time or windows+time) OR image path points to a script
| extend name_l = tolower(svcName), disp_l = tolower(svcDisp)
| extend IsTimeLike = (name_l has "time" or disp_l has "time")
| extend IsW32Timeish = (name_l has "w32" and name_l has "time") or (disp_l has "windows" and disp_l has "time")
| extend IsScriptPath = iff(isempty(imgPath), bool(false), imgPath has_any (script_indicators))
| where IsScriptPath or IsW32Timeish
| project TimeGenerated, DeviceId, DeviceName, Source="ServiceEvent", ServiceName=svcName, ServiceDisplayName=svcDisp, ImagePath=imgPath,
ActorProcess=tolower(InitiatingProcessFileName), ActorCommand=InitiatingProcessCommandLine;
let reg_mods =
DeviceRegistryEvents
| where ActionType in ("RegistryValueSet","RegistryKeyCreated","RegistryKeyRenamed")
| where tolower(RegistryValueName) == "imagepath"
| extend ServiceName = extract(@"\\services\\([^\\]+)", 1, tostring(RegistryKey))
| extend name_l = tolower(ServiceName), key_l = tolower(RegistryKey)
| where key_l contains "\\system\\currentcontrolset\\services\\"
// Heuristics: similar to time service
| where (name_l has "time" and (name_l has "w32" or name_l has "windows"))
| extend ImagePath = tolower(tostring(RegistryValueData))
| where ImagePath has_any (script_indicators)
| project TimeGenerated, DeviceId, DeviceName, Source="Registry", ServiceName, ServiceDisplayName=strcat(""), ImagePath,
ActorProcess=tolower(InitiatingProcessFileName), ActorCommand=InitiatingProcessCommandLine;
let process_cmds =
DeviceProcessEvents
| where FileName in~ ("sc.exe","sc","reg.exe","powershell.exe","wmic.exe")
| extend cmd_l = tolower(ProcessCommandLine)
| where cmd_l matches regex @"\b(sc(\.exe)?\s+(create|config)|reg(\.exe)?\s+add|wmic(\.exe)?\s+service|powershell(\.exe)?\s+.*(new-service|set-service))"
| where cmd_l has_any ("w32","windows"," time ")
| project TimeGenerated, DeviceId, DeviceName, Source="ProcessCmd", ServiceName=strcat(""), ServiceDisplayName=strcat(""), ImagePath=strcat(""),
ActorProcess=tolower(FileName), ActorCommand=ProcessCommandLine;
union isfuzzy=true svc_mods, reg_mods, process_cmds
| summarize FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), Events=count(), ExampleCommands=make_set(ActorCommand, 5) by DeviceName, ActorProcess
| order by Events desc, LastSeen desc
| project DeviceName, ActorProcess, Events, FirstSeen, LastSeen, ExampleCommands | Incorrect | 2 | 230.08s | 0.1359 |
gpt-5-mini-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0209 |
gpt-5-mini-low | sc.exe | let TimeWindow = 5m;
let ScriptIndicators = dynamic([".ps1",".bat",".cmd",".vbs",".js","powershell.exe","C:\\Users\\"]);
// Registry writes that set ImagePath under Services
let svcReg = DeviceRegistryEvents
| where RegistryKey has_cs "\\Services\\" and RegistryValueName == "ImagePath"
| where (
RegistryValueData has_any (".ps1", ".bat", ".cmd", ".vbs", ".js")
or tolower(RegistryValueData) contains "powershell.exe"
or RegistryValueData contains "C:\\Users\\"
)
| project DeviceId, DeviceName, ServiceKey = RegistryKey, ImagePath = RegistryValueData, RegTime = TimeGenerated, RegInitiatingProcessFileName = InitiatingProcessFileName, RegInitiatingProcessCommandLine = InitiatingProcessCommandLine;
// Candidate processes that can create or modify services
let svcCreators = DeviceProcessEvents
| where (
(ProcessCommandLine has_cs "sc.exe" and ProcessCommandLine has_cs "create")
or (ProcessCommandLine has_cs "sc create")
or (ProcessCommandLine has_cs "reg.exe" and ProcessCommandLine has_cs "add")
or (ProcessCommandLine has_cs "reg add")
or (ProcessCommandLine has_cs "New-Service")
or (ProcessCommandLine has_cs "InstallUtil")
or (ProcessCommandLine has_cs "nssm.exe")
or (ProcessCommandLine has_cs "sdset")
or (ProcessCommandLine has_cs "sc config")
)
| extend ProcFile = tostring(FileName), ProcCommandLine = tostring(ProcessCommandLine), ProcTime = TimeGenerated
| project DeviceId, DeviceName, ProcFile, ProcCommandLine, ProcTime, ProcessId;
// Correlate by device and time
svcReg
| join kind=leftouter (svcCreators) on DeviceId
| where abs(RegTime - ProcTime) <= TimeWindow
| summarize Count = count(), AnyImagePath = any(ImagePath), AnyServiceKey = any(ServiceKey), AnyRegInitiatingProcessFileName = any(RegInitiatingProcessFileName), AnyRegInitiatingProcessCommandLine = any(RegInitiatingProcessCommandLine), ProcFiles = make_set(ProcFile), ProcCmds = make_set(ProcCommandLine) by DeviceId, DeviceName
| extend InvokedUtilities = strcat_array(ProcFiles, ", ")
| project DeviceId, DeviceName, Count, AnyServiceKey, AnyImagePath, AnyRegInitiatingProcessFileName, AnyRegInitiatingProcessCommandLine, InvokedUtilities, ProcCmds
| order by Count desc
| take 50
// also show direct registry initiators for entries with no matching process
| union (
svcReg
| where isnull(RegInitiatingProcessFileName) == false
| summarize DirectRegWrites = count(), ExampleImagePath = any(ImagePath) by RegInitiatingProcessFileName, RegInitiatingProcessCommandLine
| order by DirectRegWrites desc
| project DeviceId = "-", DeviceName = "-", Count = DirectRegWrites, AnyServiceKey = "-", AnyImagePath = ExampleImagePath, AnyRegInitiatingProcessFileName = RegInitiatingProcessFileName, AnyRegInitiatingProcessCommandLine = RegInitiatingProcessCommandLine, InvokedUtilities = RegInitiatingProcessFileName, ProcCmds = pack_array(RegInitiatingProcessCommandLine)
)
| Correct | 2 | 45.87s | 0.0127 |
gpt-5-mini-medium | sc | (
DeviceProcessEvents
| where ProcessCommandLine has_any ("sc.exe","sc ","reg.exe","reg ","New-Service","InstallUtil.exe","installutil","schtasks","nssm","powershell")
// match common service-creation patterns and a service name that includes "time"/"w32time"/"windows time"
| where ProcessCommandLine matches regex @"(?i).*(((\bsc(\.exe)?\b).*\bcreate\b)|((\breg(\.exe)?\b).*\badd\b)|(\bNew-Service\b)|(\bInstallUtil\b)|(\bschtasks\b.*\bcreate\b)).*(time|w32time|windows\s*time).*"
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, ProcessCommandLine, ProcessId, InitiatingProcessId
)
| union (
DeviceRegistryEvents
| where RegistryKey contains "SYSTEM\\CurrentControlSet\\Services"
// registry key name contains "time" (covers similarly-named crafted service keys)
| where tolower(RegistryKey) contains "time"
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RegistryKey, RegistryValueName, RegistryValueData, InitiatingProcessId
)
| order by TimeGenerated desc
| limit 50 | Correct | 1 | 26.44s | 0.0072 |
gpt-5-nano-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0101 |
gpt-5-nano-medium | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0092 |
grok-3-beta | sc | let TimeRange = ago(30d);
union DeviceRegistryEvents, DeviceProcessEvents, DeviceEvents
| where Timestamp > TimeRange
| where (Type == 'DeviceRegistryEvents' and RegistryKey contains 'SYSTEM\\CurrentControlSet\\Services' and RegistryKey matches regex '(?i)(w32time|time|timeservice)')
or (Type == 'DeviceProcessEvents' and ProcessCommandLine matches regex '(?i)(sc\\s+create|sc\\s+config|New-Service|Set-Service|reg\\s+add|reg\\s+set)' and ProcessCommandLine matches regex '(?i)(w32time|time|timeservice)')
or (Type == 'DeviceEvents' and InitiatingProcessCommandLine matches regex '(?i)(sc\\s+create|sc\\s+config|New-Service|Set-Service|reg\\s+add|reg\\s+set)' and InitiatingProcessCommandLine matches regex '(?i)(w32time|time|timeservice)')
| where InitiatingProcessFileName matches regex '(?i)(sc\\.exe|reg\\.exe|powershell\\.exe|cmd\\.exe)'
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RegistryKey, RegistryValueName, RegistryValueData, ProcessCommandLine, Type, ActionType
| order by Timestamp desc | Correct | 5 | 53.72s | 0.1061 |
grok-3-mini-beta | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0071 |
o1-high | sc.exe | DeviceProcessEvents
| where ActionType == "ProcessCreated"
| where FileName in~ ("sc.exe","reg.exe","cmd.exe","powershell.exe","wmic.exe","net.exe")
| where ProcessCommandLine has_any ("create", "config", "service", "binPath", "w32time")
| project TimeGenerated, DeviceName, InitiatingProcessAccountName, FileName, ProcessCommandLine
| order by TimeGenerated desc | Correct | 1 | 47.99s | 0.2770 |
o1-low | sc | DeviceProcessEvents
| where ActionType == "ProcessCreated"
| where tolower(ProcessCommandLine) has_any ("sc create", "sc config")
and tolower(ProcessCommandLine) contains "time"
| project TimeGenerated, DeviceName, InitiatingProcessCommandLine, ProcessCommandLine, AccountName
| order by TimeGenerated desc | Correct | 1 | 36.70s | 0.2778 |
o3-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0946 |
o3-mini-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0490 |
o3-mini-low | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0500 |
o4-mini-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0536 |
o4-mini-low | sc | DeviceProcessEvents
| where ProcessCommandLine has_cs "sc create"
| project TimeGenerated, DeviceName, Account=InitiatingProcessAccountName, FileName, ProcessCommandLine
| order by TimeGenerated desc | Correct | 1 | 41.83s | 0.0126 |