An endpoint shows a PowerShell process that downloaded and executed a remote script aimed at extracting credentials from the Windows Credential Manager. Review the process creation logs and identify the function name that was invoked to dump the web credentials.
KQL answer reference and model-by-model benchmark comparison
8fd5a296-6772-4766-9991-ff4e92af7240
Question ID
2/23
Models Correct
1
Valid Answer
9%
Success Rate
Reference Answer
Human-validated correct answer for this question
Get-CredManCreds
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 | Invoke-Inveigh | DeviceProcessEvents
| where FileName in ("powershell.exe", "pwsh.exe")
| where ProcessCommandLine has_any ("iex", "downloadstring", "iwr", "webclient")
| where ProcessCommandLine has_any ("webcredentials", "vaultcmd", "CredentialManager", "VaultCli", "dpapi", "sekurlsa", "::")
| project Timestamp, DeviceName, AccountName, ProcessCommandLine, InitiatingProcessCommandLine | Incorrect | 3 | 75.47s | 0.0367 |
| gpt-35-turbo | Invoke-WebRequest | DeviceProcessEvents
| where ProcessCommandLine contains 'powershell'
| where ProcessCommandLine contains 'Invoke-Expression' or ProcessCommandLine contains 'Invoke-WebRequest' or ProcessCommandLine contains 'Invoke-RestMethod'
| project ProcessCommandLine | Incorrect | 1 | 2.85s | 0.0027 |
| gpt-4-turbo-2024-04-09 | $host.UI.PromptForCredential | DeviceProcessEvents
| where FileName =~ 'powershell.exe' or FileName =~ 'pwsh.exe'
| where ProcessCommandLine has_any('DownloadString', 'WebRequest', 'Invoke-WebRequest', 'Invoke-Expression', 'Net.WebClient', 'IEX', 'Invoke')
| where ProcessCommandLine has_any('credentials', 'password', 'secret', 'dump')
| project DeviceName, AccountName, ProcessCommandLine, TimeGenerated, FileName, FolderPath
| summarize CommandLines = make_set(ProcessCommandLine) by DeviceName, FileName | Incorrect | 4 | 30.84s | 0.1945 |
| gpt-4.1 | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0517 |
| gpt-4.1-finetuned | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0496 |
| gpt-4.1-mini | Invoke-WebRequest | DeviceProcessEvents
| where FileName == "powershell.exe"
| where ProcessCommandLine contains_cs "CredentialManager" or ProcessCommandLine contains_cs "WebCredentials" or ProcessCommandLine contains_cs "dump" or ProcessCommandLine contains_cs "Invoke-WebRequest"
or InitiatingProcessCommandLine contains_cs "CredentialManager" or InitiatingProcessCommandLine contains_cs "WebCredentials" or InitiatingProcessCommandLine contains_cs "dump" or InitiatingProcessCommandLine contains_cs "Invoke-WebRequest"
| project ProcessCreationTime, DeviceName, ProcessId, InitiatingProcessId, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine
| extend DumpFunction= extract(@"(Get-WebCredentials|Dump-Credentials|Invoke-WebRequest|Invoke-CredentialDump|Get-Credential|Dump-WebCredentials)" , 1, ProcessCommandLine)
| where isnotempty(DumpFunction)
| order by ProcessCreationTime desc | Incorrect | 1 | 24.06s | 0.0030 |
| gpt-4.1-nano | wificreds | DeviceProcessEvents
| where TimeGenerated >= ago(7d) // Adjust time range as necessary
| where FileName in ('powershell.exe', 'pwsh.exe') // Focus on PowerShell processes
| where ProcessCommandLine has_any ('Invoke-WebRequest', 'Invoke-RestMethod', 'DownloadString', 'Invoke-Expression') // Commands indicating script download or execution
| project ProcessId, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessId, InitiatingProcessCreationTime, DeviceName, InitiatingProcessParentFileName, InitiatingProcessParentId
| order by InitiatingProcessCreationTime desc | Incorrect | 4 | 8.57s | 0.0018 |
| gpt-4o | Get-CredManCreds | DeviceProcessEvents
| where FileName endswith "powershell.exe" and ProcessCommandLine contains "http" and ProcessCommandLine has_any("Credential", "Dump")
| where ActionType == "ProcessCreated"
| extend InvokedFunctionName = tostring(parse_json(AdditionalFields).FunctionName)
| project TimeGenerated, DeviceName, InitiatingProcessCommandLine, ProcessCommandLine, InvokedFunctionName
| order by TimeGenerated desc | Correct | 4 | 24.29s | 0.0376 |
| gpt-5-high | Get-PasswordVaultCredentials | let psh_bins = dynamic(["powershell.exe","pwsh.exe","powershell_ise.exe"]);
let dl_terms = dynamic(["DownloadString","Invoke-WebRequest","Invoke-RestMethod","iwr","irm","curl","wget","Start-BitsTransfer","Net.WebClient","WebClient"]);
let exec_terms = dynamic(["iex","Invoke-Expression"]);
let func_re = "(?i)\\b((?:Invoke|Get|Dump|Search|Show|Out|New|Set|Export|Read)-?(?:Web|Cred|Credential|Credman|Vault)[A-Za-z]*|DumpCreds|Invoke-WCMDump|Invoke-CredManDump)\\b";
let base = DeviceProcessEvents
| where ActionType == "ProcessCreated"
| where FileName in~ (psh_bins)
| project TimeGenerated, DeviceId, DeviceName, AccountDomain, AccountName, FileName, ProcessCommandLine;
let dec = base
| extend EncArg = extract("(?i)(?:^|\\s)(?:-|/)(?:enc|encodedcommand|encoded|e|ec)\\s+['\\\"]?([A-Za-z0-9+/=]{20,})['\\\"]?", 1, ProcessCommandLine)
| where isnotempty(EncArg)
| extend Decoded = base64_decode_tostring(EncArg)
| extend Cmd = strcat(ProcessCommandLine, " ; ", Decoded);
let plain = base
| where isempty(extract("(?i)(?:^|\\s)(?:-|/)(?:enc|encodedcommand|encoded|e|ec)\\b", 0, ProcessCommandLine))
| extend Cmd = ProcessCommandLine;
union dec, plain
| extend CmdN = replace_string(Cmd, "`", "")
| where (CmdN contains "http" or CmdN contains "https")
| where CmdN has_any (dl_terms) and CmdN has_any (exec_terms)
| extend Functions = extract_all(func_re, CmdN)
| mv-expand Functions
| where isnotempty(Functions)
| summarize FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), Count=count(), SampleCmd=any(CmdN) by InvokedFunction=tostring(Functions), DeviceName
| order by LastSeen desc | Incorrect | 5 | 435.41s | 0.2477 |
| gpt-5-mini-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0286 |
| gpt-5-mini-low | Get-PasswordVaultCredentials | let suspects = DeviceProcessEvents
| where Timestamp between (startofday(ago(7d)) .. now())
| where tolower(FileName) has_any ("powershell", "pwsh", "wsmprovhost")
| where ProcessCommandLine has_any ("Invoke-Expression", "IEX", "Invoke-WebRequest", "wget", "curl", "DownloadString", "DownloadFile", "Invoke-RestMethod", "-EncodedCommand", "-Command")
| project Timestamp, DeviceId, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, ProcessId, ProcessCreationTime, FileName, ProcessCommandLine, AdditionalFields;
// also include DeviceEvents which may include script blocks or network download details
let devEvents = DeviceEvents
| where Timestamp between (startofday(ago(7d)) .. now())
| where tolower(FileName) has_any ("powershell", "pwsh", "wsmprovhost")
| project Timestamp, DeviceId, DeviceName, FileName, ProcessId, ProcessCreationTime, ProcessCommandLine, AdditionalFields, RemoteUrl, FileOriginUrl;
suspects
| union devEvents
| extend cmd = tostring(ProcessCommandLine)
| extend combined = strcat(cmd, " ", tostring(AdditionalFields), " ", tostring(RemoteUrl), " ", tostring(FileOriginUrl))
// look for likely function names that reference credential manager or web credentials
| extend fn_candidates = extract_all(@"(?i)(Get|Dump|Export|Read|Find|Unlock)?-?(Web|WinCred|Credential|Cred|StoredCredential|Vault|CredentialManager|Password|Chrome|Edge|Firefox)[A-Za-z0-9_\-]*", combined)
| mv-expand fn_candidates to typeof(string)
| where isnotempty(fn_candidates)
| summarize count = count(), any_CommandLine = any(cmd), any_InitiatingProcess = any(InitiatingProcessCommandLine), any_AdditionalFields = any(AdditionalFields) by FunctionName = fn_candidates, DeviceId, DeviceName
| sort by count desc
| take 50 | Incorrect | 1 | 14.02s | 0.0030 |
| gpt-5-mini-medium | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0192 |
| gpt-5-nano-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0079 |
| gpt-5-nano-medium | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0078 |
| grok-3-beta | Get-CredManCreds | let TimeRange = ago(7d);
DeviceProcessEvents
| where Timestamp >= TimeRange
| where InitiatingProcessFileName =~ "powershell.exe" or FileName =~ "powershell.exe"
| where ProcessCommandLine contains "Invoke-WebRequest" or ProcessCommandLine contains "DownloadString" or ProcessCommandLine contains "IEX" or ProcessCommandLine contains "Invoke-Expression"
| join kind=leftouter (
DeviceNetworkEvents
| where Timestamp >= TimeRange
| where RemoteUrl != ""
| summarize FirstRemoteUrl = min(RemoteUrl) by DeviceId, InitiatingProcessId, Timestamp
) on DeviceId, InitiatingProcessId
| where ProcessCommandLine matches regex @"(?i)(credential|password|dump|extract|get|vault|credman)"
| project Timestamp, DeviceName, ProcessCommandLine, InitiatingProcessFileName, RemoteUrl=FirstRemoteUrl, ProcessId, InitiatingProcessId
| order by Timestamp desc | Correct | 2 | 20.97s | 0.0452 |
| grok-3-mini-beta | Get-PasswordVaultCredentials | DeviceProcessEvents
| where FileName has "powershell.exe"
| where ProcessCommandLine has_any ("Invoke-WebRequest", "IEX", "downloadstring", "credential", "CredEnumerate")
| project TimeGenerated, DeviceName, ProcessCommandLine, ProcessId
| order by TimeGenerated desc | Incorrect | 1 | 17.26s | 0.0023 |
| o1-high | Get-PasswordVaultCredentials | DeviceProcessEvents
| where ActionType == "ProcessCreated"
| where tolower(FileName) has "powershell"
| where tolower(ProcessCommandLine) has_any ("download", "iwr", "wget", "curl", "invoke-webrequest", "system.net.webclient", "invoke-expression", "iex", "new-object net.webclient", "invoke-restmethod")
| where tolower(ProcessCommandLine) contains "vault" or tolower(ProcessCommandLine) contains "cred"
| project TimeGenerated, DeviceName, AccountName, ProcessCommandLine
| order by TimeGenerated desc | Incorrect | 4 | 130.91s | 0.9809 |
| o1-low | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.9557 |
| o3-high | Get-PasswordVaultCredentials | DeviceProcessEvents
| where ActionType == "ProcessCreated"
| where FileName in~ ("powershell.exe", "pwsh.exe", "powershell_ise.exe")
// --- Remote download & execution indicators
| where ProcessCommandLine has_any ("Invoke-WebRequest", "Invoke-RestMethod", "New-Object Net.WebClient", "iwr", "irm", "wget", "curl", "Start-BitsTransfer")
// --- Credential-manager related keywords
| where ProcessCommandLine has_any ("Vault", "Cred", "Credential", "CredEnumerate", "VaultCmd")
// --- Extract name of the function/cmdlet that dumps the web creds
| extend FunctionInvoked = iff(
ProcessCommandLine matches regex @"\b((Get|Invoke|Set|Remove|New|Import|Export|Clear)-[A-Za-z][A-Za-z0-9]*Cred[A-Za-z0-9]*)\b",
extract(@"\b((Get|Invoke|Set|Remove|New|Import|Export|Clear)-[A-Za-z][A-Za-z0-9]*Cred[A-Za-z0-9]*)\b", 1, ProcessCommandLine),
iff(ProcessCommandLine has "CredEnumerate", "CredEnumerate", iff(ProcessCommandLine has "VaultCmd", "VaultCmd", "")))
| where isnotempty(FunctionInvoked)
| project TimeGenerated, DeviceName, ProcessCommandLine, FunctionInvoked
| summarize FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), CommandLineSample=any(ProcessCommandLine) by DeviceName, FunctionInvoked
| order by LastSeen desc | Incorrect | 1 | 53.58s | 0.0313 |
| o3-mini-high | Minidump | DeviceProcessEvents
| where FileName =~ "powershell.exe"
| where ProcessCommandLine has_any ("http", "https")
// Extract any function name containing 'Dump' (case-insensitive)
| extend DumpFunction = extract("(?i)([A-Za-z0-9_]+Dump[A-Za-z0-9_]*)", 1, ProcessCommandLine)
| where isnotempty(DumpFunction)
| project TimeGenerated, DeviceName, ProcessCommandLine, DumpFunction | Incorrect | 2 | 30.83s | 0.0204 |
| o3-mini-low | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0423 |
| o4-mini-high | Seatbelt | DeviceProcessEvents
| where FileName == "powershell.exe"
// Only include runs that reference a .ps1 script (likely downloaded)
| where ProcessCommandLine contains ".ps1"
// Look for any Invoke- function call in the parameters
| where ProcessCommandLine matches regex @"Invoke-[A-Za-z0-9_]+"
// Extract the function name invoked to dump credentials
| extend FunctionName = extract(@"Invoke-([A-Za-z0-9_]+)", 1, ProcessCommandLine)
| where isnotempty(FunctionName)
// Show the key context to identify the credential dumping routine
| project TimeGenerated, DeviceName, AccountName, ProcessId, FunctionName, ProcessCommandLine
| sort by TimeGenerated desc | Incorrect | 1 | 30.27s | 0.0136 |
| o4-mini-low | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0481 |