Question Analysis
On the Windows device, a security check was run to detect debugger processes via PowerShell. Which tool (process) carried out this check?
58bd8c8d-3a1a-4467-a69c-439c75469b07
Question ID
11/23
Models Correct
1
Valid Answer
48%
Success Rate
Reference Answer
Human-validated correct answer for this question
powershell
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 | powershell.exe | DeviceProcessEvents
| where ActionType == "ProcessCreated"
| where FileName =~ "powershell.exe"
| where ProcessCommandLine has_any ("Get-Process", "debugger", "windbg", "ollydbg", "x64dbg", "ida", "process") // Added "process" as a more general term
| distinct InitiatingProcessFileName, InitiatingProcessCommandLine
| project InitiatingProcessFileName, InitiatingProcessCommandLine | Correct | 1 | 11.29s | 0.0054 |
gpt-35-turbo | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0109 |
gpt-4-turbo-2024-04-09 | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.2275 |
gpt-4.1 | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0374 |
gpt-4.1-finetuned | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0408 |
gpt-4.1-mini | powershell.exe | DeviceProcessEvents
| where FileName has "powershell"
| where ProcessCommandLine has_any ("debugger", "debug", "attach")
| project DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, ProcessCommandLine, TimeGenerated
| sort by TimeGenerated desc | Correct | 1 | 3.29s | 0.0022 |
gpt-4.1-nano | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0012 |
gpt-4o | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0646 |
gpt-5-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.2841 |
gpt-5-mini-high | senseir.exe | let pattern = @"(?i)(isdebuggerpresent|isdebuggerpresent\(\)|debugger(attached)?|checkdebugger|ntqueryinformationprocess|debugactiveprocess|enumeratedebuggers|get-process|get-module|get-childitem|get-wmiobject|get-ciminstance|\-executionpolicy\s*bypass|\-noprofile)";
// Search DeviceProcessEvents and DeviceEvents for PowerShell commands that mention debugger-related keywords
(
DeviceProcessEvents
| where TimeGenerated between (startofday(ago(7d))..now())
| extend CmdLine = coalesce(ProcessCommandLine, InitiatingProcessCommandLine, "")
| where tolower(CmdLine) has_any ("powershell","pwsh","powershell.exe","powershell_ise")
| where CmdLine matches regex pattern
| project TimeGenerated, DeviceName, Table = "DeviceProcessEvents", ProcessId, ProcessFileName = FileName, ProcessCommandLine = CmdLine, InitiatingProcessFileName, InitiatingProcessId
)
| union (
DeviceEvents
| where TimeGenerated between (startofday(ago(7d))..now())
| extend CmdLine = coalesce(ProcessCommandLine, InitiatingProcessCommandLine, "")
| where tolower(CmdLine) has_any ("powershell","pwsh","powershell.exe","powershell_ise")
| where CmdLine matches regex pattern
| project TimeGenerated, DeviceName, Table = "DeviceEvents", ProcessId, ProcessFileName = FileName, ProcessCommandLine = CmdLine, InitiatingProcessFileName, InitiatingProcessId
)
| summarize Hits = count(), AnyProcessCommandLine = any(ProcessCommandLine), AnyInitiatingProcessCommandLine = any(InitiatingProcessFileName) by DeviceName, InitiatingProcessFileName, InitiatingProcessId, ProcessFileName, ProcessId
| order by Hits desc
| take 50 | Incorrect | 2 | 36.17s | 0.0102 |
gpt-5-mini-low | powershell.exe | let indicators = dynamic(["isdebuggerpresent","checkremotedebuggerpresent","get-process","get-module","windbg","x64dbg","olly","ida","ida64","cheatengine","frida","dbg","debugger"]);
union DeviceProcessEvents, DeviceEvents
| where isnotempty(ProcessCommandLine) or isnotempty(InitiatingProcessCommandLine)
| where (tolower(ProcessCommandLine) contains "powershell" or tolower(InitiatingProcessCommandLine) contains "powershell")
| where ( (isnotempty(ProcessCommandLine) and tolower(ProcessCommandLine) has_any (indicators)) or (isnotempty(InitiatingProcessCommandLine) and tolower(InitiatingProcessCommandLine) has_any (indicators)) )
| project TimeGenerated, DeviceName, ProcessFileName = FileName, ProcessCommandLine, ProcessId, InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessId, InitiatingProcessAccountName, InitiatingProcessAccountDomain
| summarize Count = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated) by DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessAccountName, InitiatingProcessAccountDomain, ProcessFileName, ProcessCommandLine
| order by Count desc
| top 50 by Count | Correct | 2 | 50.24s | 0.0118 |
gpt-5-mini-medium | powershell.exe | // Find PowerShell executions that check for debugger/processes and show which tool/process initiated them
let suspiciousPS = DeviceProcessEvents
| where FileName has_cs "powershell" or ProcessCommandLine has_cs "powershell"
// look for common debugger-check keywords in the command line
| where ProcessCommandLine has_any ("Get-Process", "-Name Debug", "Debugger", "Get-WmiObject", "Get-CimInstance", "IsDebuggerPresent", "-match 'debug'", "Where-Object", "Get-ItemProperty" , "-and $_.Debugger", "Wow64" )
| project TimeGenerated, DeviceId, DeviceName, ProcessId, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessId, InitiatingProcessCommandLine, InitiatingProcessAccountName, InitiatingProcessAccountDomain
;
// Also search DeviceEvents for PowerShell actions with suspicious command lines (fallback)
let ev = DeviceEvents
| where FileName has_cs "powershell" or ProcessCommandLine has_cs "powershell" or InitiatingProcessFileName has_cs "powershell" or InitiatingProcessCommandLine has_cs "powershell"
| where ProcessCommandLine has_any ("Get-Process", "Debugger", "Get-WmiObject", "Get-CimInstance", "IsDebuggerPresent", "Where-Object", "-match 'debug'", "-Name Debug")
| project TimeGenerated, DeviceId, DeviceName, FileName, ProcessId, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessId, InitiatingProcessCommandLine, InitiatingProcessAccountName, InitiatingProcessAccountDomain
;
// Union and show initiating process details (tool that carried out the check)
union suspiciousPS, ev
| where isnotempty(InitiatingProcessFileName) or isnotempty(InitiatingProcessCommandLine)
| extend Initiator = coalesce(InitiatingProcessFileName, tostring(split(InitiatingProcessCommandLine, ' ')[0]))
| summarize count() , any(InitiatingProcessAccountName), any(InitiatingProcessAccountDomain), any(InitiatingProcessId), any(InitiatingProcessCommandLine) by Initiator, DeviceName, DeviceId
| order by count_ desc
| take 50 | Correct | 1 | 16.07s | 0.0034 |
gpt-5-nano-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0074 |
gpt-5-nano-medium | powershell.exe | DeviceProcessEvents
| where FileName in ("powershell.exe","pwsh.exe")
| where isnotempty(InitiatingProcessFileName)
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, ProcessCommandLine
| summarize by InitiatingProcessFileName, InitiatingProcessCommandLine, DeviceName
| order by DeviceName asc
| take 50 | Correct | 1 | 41.60s | 0.0021 |
grok-3-beta | powershell.exe | DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName contains 'powershell'
| where ProcessCommandLine contains 'debugger'
| project Timestamp, DeviceName, InitiatingProcessFileName, ProcessCommandLine, AccountName
| order by Timestamp desc | Correct | 1 | 7.93s | 0.0209 |
grok-3-mini-beta | powershell.exe | DeviceProcessEvents
| where InitiatingProcessFileName =~ "powershell.exe"
| project Timestamp, DeviceName, InitiatingProcessCommandLine, InitiatingProcessFileName
| order by Timestamp desc
| take 10 | Correct | 1 | 15.21s | 0.0020 |
o1-high | powershell.exe | DeviceProcessEvents
| where FileName =~ "powershell.exe"
| where ProcessCommandLine has_any ("debugger", "Get-Process", "windbg", "debug")
| project TimeGenerated, DeviceName, DeviceId, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessFolderPath, InitiatingProcessVersionInfoCompanyName
| order by TimeGenerated desc | Correct | 1 | 31.49s | 0.2572 |
o1-low | CreateProcessWithPipe.exe | DeviceProcessEvents
| where FileName in~ ("powershell.exe", "powershell_ise.exe", "pwsh.exe")
| where ProcessCommandLine has_any ("debug", "debugger")
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine
| order by TimeGenerated desc | Incorrect | 1 | 36.85s | 0.2815 |
o3-high | powershell.exe | let debugger_keywords = dynamic(["dbg","debug","windbg","x32dbg","x64dbg","ollydbg","ida","dnSpy","devenv","vsjitdebugger","gflags"]);
DeviceProcessEvents
| where FileName in~ ("powershell.exe","pwsh.exe","powershell_ise.exe")
// PowerShell commands that try to find debugger processes
| where ProcessCommandLine has_any (debugger_keywords)
or ProcessCommandLine matches regex @"(?i)Get-Process.*dbg"
or ProcessCommandLine matches regex @"(?i)tasklist.*dbg"
| project TimeGenerated,
DeviceName,
PowerShellCommand = ProcessCommandLine,
InitiatingTool = InitiatingProcessFileName,
InitiatingToolPath = InitiatingProcessFolderPath,
InitiatingToolCmd = InitiatingProcessCommandLine
| summarize FirstSeen=min(TimeGenerated),
LastSeen = max(TimeGenerated),
Executions=count()
by DeviceName, InitiatingTool, InitiatingToolPath, InitiatingToolCmd
| order by Executions desc | Correct | 1 | 33.85s | 0.0224 |
o3-mini-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0479 |
o3-mini-low | powershell.exe | union withsource=EventSource DeviceProcessEvents, DeviceEvents
| where FileName =~ "powershell.exe"
| extend PS_CmdLine = tolower(tostring(ProcessCommandLine)), Init_CmdLine = tolower(tostring(InitiatingProcessCommandLine))
// Look for mentions of debug in either the PowerShell process or its initiator's command line
| where PS_CmdLine contains "debug" or Init_CmdLine contains "debug"
// Summarize by the initiating process name, which is the tool that launched PowerShell
| summarize EventCount = count() by InitiatingProcessFileName, EventSource
| order by EventCount desc | Correct | 4 | 53.57s | 0.0408 |
o4-mini-high | powershell.exe | // 1) Find PowerShell instances invoking debugger checks
let psDebugChecks = DeviceProcessEvents
| where FileName == "powershell.exe"
// look for debugger‐related keywords in the PS command line
| where ProcessCommandLine has_any ("Debugger", "-Debug", "Test-ProcessDebugger")
| project TimeGenerated, DeviceName, PsProcessId = ProcessId, ParentProcessId = InitiatingProcessParentId, PsCommandLine = ProcessCommandLine;
// 2) Lookup parent process details
let parentInfo = DeviceProcessEvents
| project ParentProcessId = ProcessId, ParentFileName = FileName, ParentCommandLine = ProcessCommandLine;
// 3) Join and summarize unique parent tools
psDebugChecks
| join kind=leftouter parentInfo on ParentProcessId
| project TimeGenerated, DeviceName, ParentFileName, ParentCommandLine, PsCommandLine
| distinct ParentFileName, ParentCommandLine
| order by ParentFileName | Correct | 1 | 52.49s | 0.0161 |
o4-mini-low | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0445 |