Detect At in Microsoft Sentinel
Adversaries may abuse the at utility to perform task scheduling for initial or recurring execution of malicious code. The at utility exists as an executable within Windows, Linux, and macOS for scheduling tasks at a specified time and date. Although deprecated in favor of schtasks in Windows environments, at can be used to execute programs at system startup or on a scheduled basis for persistence, remote execution as part of lateral movement, and privilege escalation on Linux if allowed to run as superuser via sudo. Adversaries may also leverage the WMI Win32_ScheduledJob class to schedule tasks programmatically.
MITRE ATT&CK
- Technique
- T1053 Scheduled Task/Job
- Sub-technique
- T1053.002 At
- Canonical reference
- https://attack.mitre.org/techniques/T1053/002/
KQL Detection Query
// Detect suspicious use of the 'at' scheduler utility on Windows and WMI-based job scheduling
let AtSuspiciousArgs = dynamic([
"cmd.exe", "powershell", "wscript", "cscript", "mshta", "rundll32", "regsvr32",
"certutil", "bitsadmin", "net use", "net user", "whoami", "mimikatz",
".exe", ".bat", ".vbs", ".ps1", ".hta"
]);
union
(
// Windows: at.exe process creation via DeviceProcessEvents
DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName =~ "at.exe"
| where ProcessCommandLine has_any (AtSuspiciousArgs)
or ProcessCommandLine matches regex @"\d{1,2}:\d{2}\s+(AM|PM|/every|/next)"
or ProcessCommandLine has "/interactive"
| extend Source = "at.exe direct execution"
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName, InitiatingProcessCommandLine,
InitiatingProcessAccountName, FolderPath, Source
),
(
// Windows: at.exe spawned by unusual parents (lateral movement pattern)
DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName =~ "at.exe"
| where InitiatingProcessFileName in~ ("cmd.exe", "powershell.exe", "wscript.exe", "cscript.exe",
"mshta.exe", "python.exe", "python3.exe", "perl.exe")
| extend Source = "at.exe spawned by scripting engine"
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName, InitiatingProcessCommandLine,
InitiatingProcessAccountName, FolderPath, Source
),
(
// WMI Win32_ScheduledJob creation detected via DeviceProcessEvents (wmic or powershell invoking Win32_ScheduledJob)
DeviceProcessEvents
| where Timestamp > ago(24h)
| where (FileName =~ "wmic.exe" and ProcessCommandLine has "ScheduledJob")
or (FileName in~ ("powershell.exe", "pwsh.exe") and ProcessCommandLine has "Win32_ScheduledJob")
| extend Source = "WMI Win32_ScheduledJob"
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName, InitiatingProcessCommandLine,
InitiatingProcessAccountName, FolderPath, Source
)
| sort by Timestamp desc Detects abuse of the Windows 'at.exe' scheduler utility and WMI Win32_ScheduledJob class for task scheduling. Covers direct at.exe execution with suspicious arguments (executable payloads, scripting engines), at.exe spawned by scripting interpreters (indicative of lateral movement via CrackMapExec or similar tools), and WMI-based job scheduling via wmic.exe or PowerShell. Uses union across multiple detection patterns to maximize coverage.
Data Sources
Required Tables
False Positives & Tuning
- Legacy enterprise applications that still use at.exe for scheduled maintenance tasks (e.g., older backup software or batch job schedulers)
- IT administrators manually scheduling jobs via at.exe on older Windows Server systems that have not migrated to schtasks
- Security testing tools or vulnerability scanners that enumerate or test scheduled task functionality
- Automated build or CI/CD pipelines that invoke at.exe for timed job coordination on legacy systems
Other platforms for T1053.002
Testing Methodology
Validate this detection against 5 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.
- Test 1Schedule Command Execution via at.exe (Windows)
Expected signal: Sysmon Event ID 1: Process Create with Image=at.exe, CommandLine containing a time value and 'cmd.exe /c whoami'. Security Event ID 4688 (if command line auditing enabled). Security Event ID 4698 (Scheduled Task Created) capturing the job. When the job fires, Security Event ID 4624 for the SYSTEM logon context and another Sysmon Event ID 1 for cmd.exe spawned by the Task Scheduler service (parent: svchost.exe).
- Test 2Schedule PowerShell Execution via at.exe (Windows)
Expected signal: Sysmon Event ID 1 for at.exe with CommandLine containing 'powershell.exe'. Security Event ID 4698 for scheduled task creation. When fired: Sysmon Event ID 1 for powershell.exe spawned by svchost.exe (Task Scheduler context), Sysmon Event ID 11 for file creation in TEMP.
- Test 3WMI Win32_ScheduledJob Creation via PowerShell (Windows)
Expected signal: Sysmon Event ID 1: powershell.exe with CommandLine containing 'Win32_ScheduledJob' and 'Create'. Microsoft-Windows-WMI-Activity/Operational Event ID 5861. Security Event ID 4698 (Scheduled Task Created) may fire depending on Windows version. When job executes: cmd.exe spawned by svchost.exe (Task Scheduler), Sysmon Event ID 11 for file creation in C:\Windows\Temp.
- Test 4Linux at Command for Deferred Execution
Expected signal: Syslog/auditd: execve syscall for 'at' binary with arguments 'now + 1 minute'. atd daemon log entries in /var/log/syslog or /var/log/cron. When the job fires: execve for 'sh' or 'bash' spawned by atd, then execve for 'id'. Auditd records with key 'at_usage' if rule is configured: -a always,exit -F path=/usr/bin/at -F perm=x -k at_usage.
- Test 5Linux at Privilege Escalation via sudo (GTFObins)
Expected signal: Auditd: syscall execve for sudo with arguments 'at', preceded by sudo authentication event. Syslog: sudo log entry 'USER=root ; COMMAND=/usr/bin/at'. When job fires: sh or bash process spawned by atd running as root. Auditd EUID=0 for the spawned shell process.
References (11)
- https://attack.mitre.org/techniques/T1053/002/
- https://man7.org/linux/man-pages/man1/at.1p.html
- https://gtfobins.github.io/gtfobins/at/
- https://technet.microsoft.com/library/dd315590.aspx
- https://www.cybereason.com/blog/wmi-lateral-movement-win32#blog-subscribe
- https://www.secureworks.com/research/bronze-butler-targets-japanese-businesses
- https://www.fireeye.com/blog/threat-research/2018/03/suspected-chinese-espionage-group-targeting-maritime-and-engineering-industries.html
- https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/audit-other-object-access-events
- https://social.technet.microsoft.com/Forums/en-US/e5bca729-52e7-4fcb-ba12-3225c564674c/scheduled-tasks-history-retention-settings
- https://www.linkedin.com/pulse/getting-attacker-ip-address-from-malicious-linux-job-craig-rowland/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1053.002/T1053.002.md
Unlock Pro Content
Get the full detection package for T1053.002 including response playbook, investigation guide, and atomic red team tests.