In this module
The Four NTFS Timestamps
Figure WF0.4 — The eight NTFS timestamps compared. $SI timestamps (left) are modifiable by user-mode applications and vulnerable to timestomping. $FN timestamps (right) are set by the NTFS driver and cannot be modified through standard Windows APIs. The $FN Created timestamp is the single most forensically reliable timestamp — set once at file creation, never updated by normal operations.
MACE: what the acronym actually means
MACE stands for Modified, Accessed, Created, Entry Modified. It is not a Windows concept — it is a forensic community shorthand for the four timestamps stored in the $STANDARD_INFORMATION attribute. The order reflects the timestamp fields' offset positions within the attribute, not their importance.
Modified records the last time the file's content was changed. A write operation that changes the file's data updates this timestamp. Opening a file for reading does not. Renaming a file does not. Changing the file's permissions does not. Only content modification — bytes written to the $DATA attribute — triggers an update. This precision matters: a Modified timestamp of March 15 proves that the file's content was written on March 15. It does not prove that the file was accessed, renamed, or had its permissions changed on March 15.
Accessed records the last time the file was read or executed. In theory. In practice, Windows has disabled automatic last access timestamp updates since Windows Vista (via the NtfsDisableLastAccessUpdate registry value, which is set to 1 by default). When disabled, the Accessed timestamp is only updated when it differs from the current date by more than one hour AND the file is opened. Even then, the update is deferred and batched. The practical result: the Accessed timestamp on most modern Windows systems is unreliable for forensic purposes. It may reflect the last access time, or it may reflect the access time from days or weeks ago, or it may reflect the creation time if the file has never been accessed since creation. Do not cite the Accessed timestamp as evidence of user activity without verifying the NtfsDisableLastAccessUpdate setting on the evidence system.
Created (sometimes called "Birth") records when the file was created on this volume. The behavior during copy and move operations is nuanced: when a file is copied within the same volume, the new file gets a new Created timestamp (the current time). When a file is moved within the same volume, no new MFT record is created (it is a directory index operation only), so the Created timestamp is unchanged. When a file is moved between volumes, a new file is created on the destination (new Created timestamp) and the original is deleted from the source.
Entry Modified records when the MFT record itself was last modified — distinct from when the file's content was modified. Any change to any attribute in the MFT record triggers this update: renaming the file, changing permissions, modifying the $DATA attribute (which also updates Modified), or changing security descriptors. This timestamp is often overlooked but has specific forensic value: if the Entry Modified timestamp is more recent than the Modified and Created timestamps, something changed in the MFT record after the last content write. This could be a permission change, a rename, or — if the gap is suspicious — a timestomping operation that modified $SI timestamps (which changes the record and triggers an Entry Modified update).
$FILE_NAME timestamps: the forensic baseline
The $FILE_NAME attribute contains its own set of four MACE timestamps. These timestamps behave differently from $SI timestamps in two critical ways.
First, $FN timestamps are set by the NTFS driver — the kernel-mode filesystem driver that processes all NTFS operations. User-mode applications cannot directly modify $FN timestamps because there is no public Windows API that accesses them. The SetFileTime() API, which timestomping tools use to modify $SI timestamps, does not touch $FN timestamps. To modify $FN timestamps, an attacker would need to write directly to the raw disk (bypassing the filesystem driver entirely) or use a kernel-mode driver that manipulates NTFS structures. Both are possible but significantly more complex than user-mode timestomping — and both leave additional forensic traces (raw disk write patterns, loaded driver artifacts).
Second, $FN timestamps update under narrower conditions than $SI timestamps. The $FN Created timestamp is set when the file is created and is never updated by normal file operations. This makes it the single most reliable timestamp for determining when a file first appeared on the volume. The $FN Modified timestamp updates when the file's size changes (not when content changes without a size change). The $FN Entry Modified timestamp rarely updates under normal conditions. The $FN Accessed timestamp follows the same deferred-update behavior as $SI Accessed and is similarly unreliable.
Timestamp precision and its forensic value
NTFS timestamps are stored as 64-bit Windows FILETIME values representing 100-nanosecond intervals since January 1, 1601 UTC. This gives NTFS timestamps a theoretical precision of 100 nanoseconds — 0.0000001 seconds. In practice, the actual precision depends on the system timer resolution and the operation type, but NTFS routinely records timestamps with sub-second precision.
This precision is forensically valuable in two ways. First, it provides ordering: two files created within the same second can often be ordered by their nanosecond components. A staging directory containing files copied at 14:22:18.4731284 and 14:22:18.6892103 can be placed in creation order even though both show "14:22:18" at second-level precision. This ordering can establish the sequence of attacker operations during rapid file staging.
Second, nanosecond precision is a timestomping detection indicator. Most timestomping tools set timestamps using the Windows API, which typically sets the fractional seconds to zero or to round values. A file with a $SI Created timestamp of 2026-01-15 09:00:00.0000000 (all zeros in the fractional component) surrounded by files with timestamps like 2026-01-15 08:47:23.4827193 (normal sub-second variation) is suspicious. The zero fractional component suggests the timestamp was set programmatically rather than generated by a genuine file operation. This indicator is not definitive — some legitimate operations produce round timestamps — but combined with $SI/$FN discrepancy, it strengthens the timestomping assessment.
You find a file where the $STANDARD_INFORMATION Created timestamp is 2025-08-15 09:00:00.0000000 (zero fractional seconds) but the $FILE_NAME Created timestamp is 2026-03-18 02:13:02.3456789 (full nanosecond precision). The $SI timestamp predates the $FN timestamp by 7 months.
Your options: (A) The $SI timestamp is the real creation date — the file was created in August 2025. The $FN timestamp was updated by a system process. (B) The $FN timestamp is the real creation date (March 18, during the intrusion). The $SI timestamp was manipulated (timestomped) to make the file appear older. The zero fractional seconds in $SI are a classic timestomping indicator — legitimate NTFS timestamps have nanosecond precision, but timestomping tools that use SetFileTime() API calls typically set timestamps with zero fractional seconds because the API accepts FILETIME values that most tools construct without fractional precision.
The correct approach is B. The combination of $SI predating $FN (which shouldn't happen in normal operations — $FN is set at creation and rarely changes) and the zero fractional seconds in $SI is a strong timestomping indicator. Document both timestamps and flag the discrepancy.
.\MFTECmd.exe -f "C:\Evidence\$MFT" --csv "C:\Evidence\Output" --csvf mft_output.csvTry It — Compare $SI and $FN Timestamps in MFTECmd Output
If you have a KAPE collection with an MFT extract (or extract one from your analysis VM as described in WF0.1), parse it with MFTECmd:
Open mft_output.csv in Timeline Explorer. The columns you need:
- Created0x10 — $SI Created timestamp - Created0x30 — $FN Created timestamp - LastModified0x10 — $SI Modified timestamp - LastModified0x30 — $FN Modified timestamp
Exercise 1: Find normal timestamp behavior. Sort by Created0x10 descending to see recently created files. For most files, Created0x10 and Created0x30 will be identical or nearly identical (within the same second). This is normal — both are set at file creation time.
Exercise 2: Find legitimate discrepancies. Filter for files where Created0x10 is significantly earlier than Created0x30. Files that were copied from another location may show this: the copy preserves the original's $SI Created timestamp (the source file's creation time) while the $FN Created timestamp reflects the time the copy was created on this volume. This is a legitimate discrepancy — it indicates a copy operation, not timestomping.
Exercise 3: Identify suspicious discrepancies. Look for files where Created0x10 is much earlier than Created0x30 AND the $SI timestamp has zero or round nanoseconds AND the file is an executable or script. This pattern — backdated $SI, accurate $FN, programmatic precision — is the classic timestomping indicator.
Timestamp behavior during file operations
Understanding how timestamps update during common operations prevents incorrect forensic conclusions. The table below summarizes the behavior for the five most common operations — each cell represents whether the timestamp updates (✓) or does not update (—).
File creation: $SI Created ✓ (current time), $SI Modified ✓ (same as created), $SI Entry Modified ✓ (same), $SI Accessed ✓ (same). $FN Created ✓ (same as $SI), $FN Modified ✓ (same). All timestamps set to the same value at creation.
Content write (no size change): $SI Modified ✓ (updates to write time), $SI Entry Modified ✓ (MFT record changed). $FN Modified — (no size change, no update). Other timestamps unchanged.
Content write (with size change): $SI Modified ✓, $SI Entry Modified ✓. $FN Modified ✓ (size changed, so $FN updates). Other timestamps unchanged.
Rename (same directory): $SI Entry Modified ✓ (MFT record changed — new $FN attribute). $FN attributes replaced (old removed, new added with current timestamps). $SI Modified —, $SI Created —.
Delete: No timestamp updates. The MFT record's in-use flag is cleared. All timestamps in the record remain at their last values. The USN Journal records the deletion with its own timestamp.
The myth: The "Date Accessed" field in Windows Explorer (and the corresponding Accessed timestamp in MFT tools) shows when a user last opened a file. If the timestamp shows March 15, the user opened the file on March 15.
The reality: Since Windows Vista (2006), Windows has disabled automatic last access timestamp updates by default (NtfsDisableLastAccessUpdate = 1 in the SYSTEM registry hive). When disabled, the Accessed timestamp is updated lazily — only when the current Accessed timestamp is more than one hour behind the real access time, and even then the update is batched and deferred. On many systems, the Accessed timestamp reflects the creation time because the file has never triggered an update condition since creation. On Windows Server, the behavior may differ (some server configurations enable last access updates). The examiner must check the NtfsDisableLastAccessUpdate value in the evidence system's SYSTEM registry hive before citing Accessed timestamps in any finding. If the value is 1 (default on client Windows), Accessed timestamps should not be used as evidence of user activity. If the value is 0, they are more reliable but still subject to batching delays.
Troubleshooting
"How do I check whether last access timestamps were enabled on the evidence system?" Extract the SYSTEM registry hive and open it in Registry Explorer. Navigate to SYSTEM\CurrentControlSet\Control\FileSystem. Look for the value NtfsDisableLastAccessUpdate. If the value is 1 (or absent — the default is disabled), last access timestamps are unreliable. If the value is 0, they were enabled. Note: on Windows 10 1809 and later, the value might be 0x80000003 (a combined value where the high bit indicates user-mode control). The forensic implication is the same — check the actual value and document it.
"If both $SI and $FN timestamps are set to the same value at creation, how do I detect timestomping?" After creation, the two sets diverge during normal operations. $SI timestamps update frequently (every content write, every attribute change). $FN timestamps update rarely (only on size changes and renames). A file that has existed for weeks will typically show $SI Modified ≠ $FN Modified (because content was written without size changes). A timestomped file often shows $SI Created much earlier than $FN Created — the attacker backdated $SI but couldn't modify $FN. The key comparison is $SI Created vs $FN Created for detecting backdating, and the nanosecond fractional component for detecting programmatic timestamp setting.
"What if the attacker uses a kernel driver to modify $FN timestamps?" A kernel-mode driver with raw disk access can modify any byte on the volume, including $FN timestamps. This is a sophisticated attack that eliminates the $SI/$FN comparison indicator. However, the kernel driver itself leaves forensic traces: Event Log records of driver loading (System log, Event ID 7045 for service-type drivers), Sysmon Event ID 6 (driver loaded), registry persistence for the driver, and the driver file itself in the MFT. Additionally, the USN Journal still records the original file creation time independently of both $SI and $FN timestamps. Multi-artifact correlation catches what single-artifact analysis misses.
You've built the foundations of artifact-level forensic analysis.
WF0 gave you the taxonomy, NTFS architecture, and the five-step methodology. WF1 took you inside the MFT at the binary level — every attribute, every timestamp, every edge case. From here, every artifact category gets the same raw-first treatment.
- WF2–WF10: every major Windows artifact decoded at binary level — USN Journal, Prefetch, Amcache, Shimcache, ShellBags, LNK, Jump Lists, SRUM, Event Logs, and the Registry hives
- INC-NE-2026-0915 (WF13) — Insider data exfiltration capstone. Work the complete investigation from USB history to OneDrive exfiltration evidence
- INC-NE-2026-1022 (WF14) — Ransomware capstone. Three-host triage (FIN01 → IT03 → FS01) across the 72-hour attack chain
- The lab pack — 25+ realistic evidence files in 10 formats, simulated KAPE triage pre-populated, both capstones deployable to your own VM
- Anti-forensic detection methodology — defeat timestomping, log clearing, and Prefetch deletion with cross-artifact correlation
Cancel anytime