Question Analysis

Review the Linux process creation records to find which user account management utility was used to reactivate the previously locked and expired account.

d2b95631-62d7-45a3-aaef-0972cea97931
Question ID
16/23
Models Correct
1
Valid Answer
70%
Success Rate
Reference Answer

Human-validated correct answer for this question

usermod
Model Performance Comparison

See how different AI models performed on this question

ModelAnswerKQL QueryStatusAttemptsTimeCost
gemini-2.5-flash-preview-04-17
usermod
DeviceProcessEvents | where ActionType == "ProcessCreated" | where (ProcessCommandLine contains "usermod" and (ProcessCommandLine contains "-U" or ProcessCommandLine contains "-e")) or (ProcessCommandLine contains "chage" and ProcessCommandLine contains "-E") or (ProcessCommandLine contains "passwd" and ProcessCommandLine contains "-u") | project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine
Correct
4
46.47s
0.0229
gpt-35-turbo
No answer provided
No query generated
Incorrect
5
0.00s
0.0109
gpt-4-turbo-2024-04-09
usermod
DeviceProcessEvents | where ActionType == 'ProcessCreated' | where FileName in ('usermod', 'passwd') and ProcessCommandLine has_any ('-U', 'unlock') | project DeviceName, FileName, ProcessCommandLine, TimeGenerated
Correct
1
11.05s
0.0542
gpt-4.1
usermod
DeviceProcessEvents | where FileName in~ ('usermod','passwd','chage','gpasswd','vipw','vigr') | where ProcessCommandLine has_any('--unlock','-U','--expiredate','passwd') | project TimeGenerated, DeviceName, AccountName, InitiatingProcessAccountName, FileName, ProcessCommandLine
Correct
1
4.79s
0.0133
gpt-4.1-finetuned
No answer provided
No query generated
Incorrect
5
0.00s
0.0287
gpt-4.1-mini
usermod
DeviceProcessEvents | where FileName in ("usermod", "passwd", "chage", "gpasswd") or ProcessCommandLine has_any ("usermod", "passwd", "chage", "gpasswd") | where ProcessCommandLine has_any ("reactivate", "unlock", "unlocked", "lock", "locked", "expire", "expired", "activate", "activated") | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, AccountName | summarize count(), make_list(ProcessCommandLine, 10) by FileName, AccountName | order by count_ desc
Correct
1
3.85s
0.0025
gpt-4.1-nano
No answer provided
No query generated
Incorrect
5
0.00s
0.0013
gpt-4o
No answer provided
No query generated
Incorrect
5
0.00s
0.0681
gpt-5-high
usermod
DeviceProcessEvents | where ActionType == "ProcessCreated" // Candidate Linux account management utilities | where FileName in~ ("usermod", "passwd", "chage", "faillock", "pam_tally2") // Look for commands indicative of unlocking or removing expiration/inactivity | where ( tolower(FileName) == "usermod" and ProcessCommandLine matches regex @"(^|\s)(-U|--unlock)($|\s)" ) or ( tolower(FileName) == "passwd" and ProcessCommandLine matches regex @"(^|\s)(-u|--unlock)($|\s)" ) or ( tolower(FileName) == "chage" and (ProcessCommandLine has "-E -1" or ProcessCommandLine has "--expiredate -1" or ProcessCommandLine has "-E never" or ProcessCommandLine has "--expiredate never" or ProcessCommandLine has "-I -1" or ProcessCommandLine has "--inactive -1") ) or ( tolower(FileName) == "faillock" and ProcessCommandLine matches regex @"(^|\s)--reset($|\s)" ) or ( tolower(FileName) == "pam_tally2" and (ProcessCommandLine matches regex @"(^|\s)--reset($|\s)" or ProcessCommandLine matches regex @"(^|\s)-r($|\s)") ) // Only Linux endpoints | join kind=leftsemi ( DeviceInfo | where OSPlatform =~ "Linux" | project DeviceId ) on DeviceId | extend Utility = tolower(FileName) // Best-effort extraction of target username (varies by utility) | extend TargetUser = case( Utility in ("usermod","passwd","chage"), extract(@"(?:^|\s)([^-\s][^\s]*)\s*$", 1, ProcessCommandLine), Utility in ("faillock","pam_tally2"), coalesce(extract(@"--user\s+([^\s]+)", 1, ProcessCommandLine), extract(@"(^|\s)-u\s+([^\s]+)", 2, ProcessCommandLine)), "" ) | extend ReactivationAction = case( Utility == "usermod", "Unlock account (usermod -U/--unlock)", Utility == "passwd", "Unlock account (passwd -u/--unlock)", Utility == "chage" and (ProcessCommandLine has "-E -1" or ProcessCommandLine has "-E never" or ProcessCommandLine has "--expiredate -1" or ProcessCommandLine has "--expiredate never"), "Remove/disable account expiration (chage -E -1/never)", Utility == "chage" and (ProcessCommandLine has "-I -1" or ProcessCommandLine has "--inactive -1"), "Remove password inactivity (chage -I -1)", Utility == "faillock", "Reset failed logon counter (faillock --reset)", Utility == "pam_tally2", "Reset failed logon counter (pam_tally2 --reset)", "Possible reactivation" ) // Summarize which utility was used (avoids returning too many rows) | summarize FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), EventCount=count(), SampleCommand=any(ProcessCommandLine), AnyTarget=anyif(TargetUser, isnotempty(TargetUser)) by Utility, ReactivationAction | order by LastSeen desc
Correct
2
245.08s
0.1274
gpt-5-mini-high
usermod
let linuxDevices = DeviceInfo | where isnotempty(OSPlatform) and tolower(OSPlatform) contains "linux" | distinct DeviceId; let utilities = dynamic(["passwd","usermod","chage","chpasswd","gpasswd","pwconv","pwunconv","faillock","pam_tally2","pam_faillock"]); DeviceProcessEvents | where DeviceId in (linuxDevices) | where isnotempty(ProcessCommandLine) or isnotempty(FileName) | extend FileNameLower = tolower(tostring(FileName)), Cmd = tostring(ProcessCommandLine) // match known utilities in filename or command line | where FileNameLower in (utilities) or tolower(Cmd) has_any(utilities) | extend CmdLower = tolower(Cmd) // derive the utility name (prefer file name if present) | extend UsedUtility = iff(FileNameLower in (utilities), FileNameLower, tostring(extract(@"\b(passwd|usermod|chage|chpasswd|gpasswd|pwconv|pwunconv|faillock|pam_tally2|pam_faillock)\b", 1, CmdLower))) // detect common unlock/unexpire/reactivation indicators | extend HasUnlockFlag = CmdLower matches regex @"\b(-u|--unlock|\-U|--unlock|\-U|--reset)\b" or CmdLower contains "unlock" or CmdLower contains "reset=" | extend HasExpireRemove = CmdLower matches regex @"\b(-E|--expire|--inactive|\-I)\b" or CmdLower contains "chage -e -1" or CmdLower matches regex @"chage\s+-E\s+-1" or CmdLower matches regex @"chage\s+-d\b" | extend LikelyReactivation = HasUnlockFlag or HasExpireRemove or CmdLower contains "reactivate" or CmdLower contains "unexpire" | where LikelyReactivation // reduce volume by returning the most recent matching event per initiating account + utility + device | summarize arg_max(ProcessCreationTime, *) by InitiatingProcessAccountName, UsedUtility, DeviceId | project ProcessCreationTime, TimeGenerated, DeviceName, DeviceId, InitiatingProcessAccountName, InitiatingProcessAccountDomain, UsedUtility, HasUnlockFlag, HasExpireRemove, ProcessCommandLine, ProcessId, InitiatingProcessId | order by ProcessCreationTime desc | take 200
Correct
2
45.37s
0.0122
gpt-5-mini-low
No answer provided
No query generated
Incorrect
5
0.00s
0.0211
gpt-5-mini-medium
No answer provided
No query generated
Incorrect
5
0.00s
0.0150
gpt-5-nano-high
usermod
DeviceProcessEvents | where tolower(InitiatingProcessFileName) in ("passwd", "usermod", "chage") | extend Cmd = tostring(InitiatingProcessCommandLine) | extend CmdLC = tolower(Cmd) | extend UtilityUsed = case( CmdLC contains_cs "passwd", "passwd", CmdLC contains_cs "usermod", "usermod", CmdLC contains_cs "chage", "chage", "unknown") | extend TargetAccount = tostring(extract(@"([A-Za-z0-9._-]+)$", 1, CmdLC)) | project TimeGenerated, DeviceName, InitiatingProcessAccountName, InitiatingProcessAccountDomain, UtilityUsed, TargetAccount, Cmd, CmdLC | sort by TimeGenerated desc
Correct
1
44.25s
0.0027
gpt-5-nano-medium
usermod
DeviceProcessEvents | where InitiatingProcessFileName in ('usermod','passwd','chage') or InitiatingProcessCommandLine contains 'usermod' or InitiatingProcessCommandLine contains 'passwd' or InitiatingProcessCommandLine contains 'chage' | extend CmdLine = tostring(InitiatingProcessCommandLine) | where CmdLine contains '-U' or CmdLine contains '--unlock' or CmdLine contains 'passwd -u' or CmdLine contains 'passwd --unlock' or CmdLine contains 'usermod -U' or CmdLine contains 'usermod --unlock' | join kind=inner (DeviceInfo | where tolower(OSPlatform) contains 'linux') on DeviceId | project TimeGenerated, DeviceName, InitiatingProcessAccountName, AccountName, InitiatingProcessFileName, CmdLine | summarize LastActionTime = max(TimeGenerated) by Actor = InitiatingProcessAccountName, Utility = InitiatingProcessFileName, TargetAccount = AccountName | sort by LastActionTime desc | take 5 | project LastActionTime, Actor, Utility, TargetAccount
Correct
1
35.51s
0.0028
grok-3-beta
No answer provided
No query generated
Incorrect
5
0.00s
0.1552
grok-3-mini-beta
usermod
DeviceProcessEvents | where ActionType == 'ProcessCreated' | where ProcessCommandLine contains 'usermod' or ProcessCommandLine contains 'chage' or ProcessCommandLine contains 'passwd' | where ProcessCommandLine contains '-U' or ProcessCommandLine contains '-E' // Filtering for unlock (-U) or expiration-related (-E) options | project TimeGenerated, DeviceName, AccountName, ProcessCommandLine, FileName | order by TimeGenerated desc
Correct
1
12.27s
0.0028
o1-high
usermod
// Replace YOUR_TIME_FILTER with your desired time filter, e.g. TimeGenerated >= ago(7d) DeviceInfo | where OSPlatform == "Linux" | join kind=inner ( DeviceProcessEvents | where ActionType == "ProcessCreated" // you can adjust the file names or commands as needed | where FileName in~ ("passwd", "usermod", "chage") // look for keywords typical of reactivating/unlocking accounts | where ProcessCommandLine has_any ("unlock", "-u", "-U", "--unlock") ) on DeviceId | where TimeGenerated >= ago(7d) // or your custom time filter | project TimeGenerated, DeviceName, InitiatingProcessAccountName, AccountName, FileName, ProcessCommandLine, FolderPath | order by TimeGenerated desc
Correct
1
22.17s
0.2161
o1-low
usermod
DeviceProcessEvents | join kind=inner ( DeviceInfo | where OSPlatform == "Linux" | project DeviceId ) on DeviceId | where ActionType == "ProcessCreated" | where FileName in~ ("passwd", "chage", "usermod", "chpasswd") | where ProcessCommandLine has_any (" -u", " -U", " -e", " -E", "unlock", "unexpire") | project TimeGenerated, DeviceName, AccountDomain, AccountName, InitiatingProcessAccountName, FileName, ProcessCommandLine | order by TimeGenerated desc | limit 100
Correct
2
39.26s
0.3208
o3-high
usermod
// --------------------------------------------- // Which Linux user-account utility (passwd/usermod/chage …) was used // to reactivate a previously locked & expired account? // --------------------------------------------- let AccountMgmtBins = dynamic(["passwd","usermod","chage"]); // common binaries let UnlockFlags = dynamic(["-u","-U","--unlock"]); // unlock a locked account let ExpireFlags = dynamic(["-e","-E","--expiredate"]); // change / reset expiry date (incl. "-E -1") // 1. Identify Linux endpoints so we don’t mix in Windows data let LinuxDevices = DeviceInfo | where OSPlatform =~ "Linux" | project DeviceId, DeviceName; // 2. Look for process-creation events that match our criteria DeviceProcessEvents | where ActionType == "ProcessCreated" | join kind=inner (LinuxDevices) on DeviceId | where FileName in~ (AccountMgmtBins) // the binary and (ProcessCommandLine has_any (UnlockFlags) // unlock flags or ProcessCommandLine has_any (ExpireFlags) // expiry-date flags or ProcessCommandLine matches regex "-E\\s+-1") // typical “set to never expire” // 3. Surface the interesting information | extend Utility = tolower(FileName) | project TimeGenerated, DeviceName, Utility, InitiatingUser = InitiatingProcessAccountName, ProcessCommandLine // 4. Summarise so we can see which utility was used and when | summarize FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated), Executions = count(), ExampleCmds = make_set(ProcessCommandLine, 5) by Utility | order by LastSeen desc
Correct
2
65.16s
0.0451
o3-mini-high
usermod
DeviceProcessEvents // Timerange is set externally via function parameters | where FileName in ("usermod", "passwd", "chage") | where ProcessCommandLine has_any ("-U", "--unlock", "unlock") | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, AccountName | distinct TimeGenerated, DeviceName, FileName, ProcessCommandLine, AccountName
Correct
2
34.94s
0.0195
o3-mini-low
usermod
DeviceProcessEvents | where FileName has_any ("usermod", "passwd") | where ProcessCommandLine contains "-U" | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessAccountName | order by TimeGenerated desc
Correct
1
11.43s
0.0111
o4-mini-high
usermod
DeviceProcessEvents // Limit to process creation events | where ActionType in ("ProcessCreated", "Start", "ProcessStart") // Focus on known user account management utilities | where FileName in ("passwd", "usermod", "chage", "gpasswd") // Look for flags related to unlocking or re‐enabling accounts | extend Cmd = ProcessCommandLine | where Cmd has_any ("--unlock", "-u", "-U", "--expire", "-E") // Only successful operations (if exit code is captured) | extend ExitCode = toint(AdditionalFields.ExitCode) | where isnull(ExitCode) or ExitCode == 0 // Restrict to Linux devices | join kind=inner ( DeviceInfo | where OSPlatform == "Linux" | project DeviceId, OSPlatform ) on DeviceId // Present the key details | project TimeGenerated, DeviceName, InitiatingProcessAccountName, FileName, ProcessCommandLine, ExitCode | sort by TimeGenerated desc
Correct
3
72.29s
0.0326
o4-mini-low
usermod
DeviceProcessEvents | where ActionType == "ProcessCreated" | where FileName in ("passwd", "usermod", "chage") | extend LowerCmd = tolower(ProcessCommandLine) // passwd unlock flags, usermod unlock flags, chage expiredate flags | where (FileName == "passwd" and (LowerCmd contains "-u " or LowerCmd contains "--unlock")) or (FileName == "usermod" and (LowerCmd contains "-u " or LowerCmd contains "--unlock")) or (FileName == "chage" and (LowerCmd contains "-e " or LowerCmd contains "--expiredate")) | project TimeGenerated, DeviceName, InitiatingProcessAccountName, FileName, ProcessCommandLine | order by TimeGenerated asc
Correct
2
63.73s
0.0179