Question Analysis
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.
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 |