MACB Forensic Timestamp Reference

I put together a nice little post here detailing the behavior of MACB timestamps (Modified, Accessed, Changed, Birth) across various filesystems and common file operations. This is a great reference for digital forensics practitioners conducting timeline analysis. I focused on Windows NTFS, FAT32/exFAT, Linux ext4/XFS, and macOS APFS since these are the most common filesystems encountered in investigations for 2025.

Hopefully I got everything correct, but if you spot any mistakes or have additional info, please reach out! Especially if you have a good Table design. I am always unsure if I like the table designs for some reason.

Legend

MACB Attributes

AttrNameDesc
MModifiedContent last changed
AAccessedLast opened/read
CChangedMetadata/inode changed (POSIX) or MFT record changed (NTFS)
BBirthFile creation time

Color Key

IndicatorMeaningForensic Significance
M GreenUpdatedOperation timestamp marker
M YellowInherited/preserved from sourceIndicates copy with preservation
M GrayUnchangedSame-volume moves; original times retained
M PurpleVaries by policy/toolDepends on registry, mount options, or flags
– HyphenNot supported/Not applicableFilesystem limitation (e.g., no atime on APFS, no btime on XFS)

Windows NTFS

⚠️ Forensic Alert
NTFS stores two sets of timestamps. $SI is user-modifiable; $FN requires kernel access. Compare both to detect timestomping!

Timestamp Behavior (Separate $SI and $FN)

Operation$SI M$SI A$SI C$SI B$FN M$FN A$FN C$FN BNotes
Create new fileMACBM–CBBoth sets initialized; $FN A not maintained
Modify content (write)MACBM–CB$FN unchanged on content-only edits. Atime varies by policy.
Read/open (no write)MACBM–CBLastAccess disabled by default since Vista
Rename / Move (same volume)MACBM–CBKey forensic indicator: $FN updates but $SI doesn’t
Move (cross-volume)MACBM–CBEffectively copy+delete. New MFT entry.
Copy (same or cross volume)MACBM–CBNew file created. Explorer preserves M.
Change attributes/ACLMACBM–CBMetadata-only change updates $SI C
Set times via API (SetFileTime)MACBM–CBTimestomping indicator: $SI set to arbitrary values; $FN unchanged

Legend: G = Updated | Y = Inherited/preserved | P = Varies | Gray = Unchanged | – = Not supported


  1. One method to set time via API is using PowerShell:
powershell 7 lines
$path = "C:\path\to\file.txt"
$creationTime = Get-Date "2023-01-01 12:00:00"
$lastAccessTime = Get-Date "2023-01-02 12:00:00"
$lastWriteTime = Get-Date "2023-01-03 12:00:00"
[System.IO.File]::SetCreationTime($path, $creationTime)
[System.IO.File]::SetLastAccessTime($path, $lastAccessTime)
[System.IO.File]::SetLastWriteTime($path, $lastWriteTime)
  1. A second method is using the SetFileTime function in C/C++:
c 13 lines
#include <windows.h>
#include <stdio.h>
void SetFileTimes(const char* filePath, FILETIME* creationTime, FILETIME* lastAccessTime, FILETIME* lastWriteTime) {
    HANDLE hFile = CreateFileA(filePath, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VALUE) {
        printf("Error opening file: %d\n", GetLastError());
        return;
    }
    if (!SetFileTime(hFile, creationTime, lastAccessTime, lastWriteTime)) {
        printf("Error setting file times: %d\n", GetLastError());
    }
    CloseHandle(hFile);
}

💡 Detection Tip: If $SI B > $FN B, suspect timestomping–attackers can modify $SI but rarely touch $FN.


Windows FAT32 / exFAT

Resolution: FAT32: M ~2s, B ~10ms, A = date only | exFAT: All ~10ms

OperationMACBNotes
Create newMA–BA = date-only on FAT32; full time on exFAT
Modify contentMA–BB unchanged; A may update
Read/openMA–BSome tools suppress A updates
Rename/Move (same volume)MA–BDirectory entry updated only
Copy (same or cross volume)MA–BM preserved; B set to now
Move (cross volume)MA–BCopy+delete semantics

Legend: G = Updated | Y = Inherited/preserved | P = Varies | Gray = Unchanged | – = Not supported

💡 USB Forensics: FAT32/exFAT timestamps are local time, not UTC–account for timezone when correlating!


Linux ext4

OperationMACBNotes
Create newMACBAll four timestamps initialized
Modify contentMACBrelatime: A updates if M newer or 24h passed
Read/openMACBrelatime throttles; noatime disables
Rename/Move (same fs)MACBInode metadata change updates C
Copy (cp default)MACBNew inode; all timestamps = now
Move (cross fs)MACBmv preserves M from source
chmod/chown/xattrMACBMetadata-only operations update C

Legend: G = Updated | Y = Inherited/preserved | P = Varies | Gray = Unchanged

💡 Note: C (ctime) cannot be set by user-space tools. This is useful for detecting evidence tampering.


Linux XFS

OperationMACBNotes
Create newMAC–No birth time stored in XFS
Modify contentMAC–relatime behavior same as ext4
Read/openMAC–A updates per mount options
Rename/Move (same fs)MAC–Directory link change updates C
Copy (cp default)MAC–New inode; M/A/C = now
Move (cross fs)MAC–mv preserves M; new inode
chmod/chown/xattrMAC–Metadata changes always update C

Legend: G = Updated | Y = Inherited/preserved | P = Varies | Gray = Unchanged | – = Not supported

⚠️ Limitation: XFS does not support birth time–B column always N/A.


macOS APFS

OperationMACBNotes
Create newM–CBAPFS does not maintain atime
Modify contentM–CBData + metadata change
Read/openM–CBNo timestamp updates on read
Rename/Move (same volume)M–CBMetadata change updates C only
Copy (Finder/cp)M–CBFinder preserves M; B = copy time
Move (cross volume)M–CBCopy+delete; M preserved, new B
chmod/chown/xattrM–CBMetadata-only updates C

Legend: G = Updated | Y = Inherited/preserved | P = Varies | Gray = Unchanged | – = Not supported

💡 Forensic Note: APFS lack of atime means file access patterns cannot be tracked via timestamps.


Windows NTFS: File Tunneling

⚠️ Forensic Alert: Tunneling can cause misleading timestamps in investigations!

NTFS maintains a “tunnel cache” that preserves metadata from deleted/renamed files. When a new file is created with the same name in the same directory within the tunnel window, it inherits the previous file’s Created (B) timestamp and short 8.3 filename.

The 8.3 filename for some who may not know is a legacy DOS-compatible short filename format (e.g., FILE~1.TXT). The character limit is 8 characters for the name and 3 for the extension. This was used in older Windows versions and applications that required short filenames.

How It Works

  • Trigger: Delete or rename a file, then create a new file with the original name in the same directory.
  • Window: Default ~15 seconds (configurable). The cache is keyed by directory + long filename.
  • Effect: New file’s $SI B (Created) timestamp is set to the deleted file’s B, not the actual creation time.
  • Short name: The 8.3 short filename is also inherited from the tunnel cache.

Registry Controls

Location: HKLM\SYSTEM\CurrentControlSet\Control\FileSystem

Value NameTypeDefaultDescription
MaximumTunnelEntriesDWORD1024Max entries in tunnel cache. Set to 0 to disable.
MaximumTunnelEntryAgeInSecondsDWORD15Seconds before tunnel entry expires.

Forensic Implications

  • False timeline: A malicious file created today may show a B timestamp from weeks ago if it replaced a legitimate file quickly.
  • Detection: Compare $SI B vs $FN B. If $FN B is recent but $SI B is old, tunneling may have occurred.
  • MFT analysis: The MFT entry sequence number and $LogFile can reveal the true creation time.
  • Common scenario: “Save As” operations that overwrite, or malware replacing system files.

💡 Tip: When $SI B predates $FN B by more than 15 seconds, tunneling is unlikely–investigate for timestomping instead.


CLI Tool Timestamp Behavior

Default behavior (no flags). See tunneling section for NTFS cross-references.

Windows CLI Tools (NTFS)

ToolType$SI M$SI A$SI C$SI B$FN M$FN A$FN C$FN BNotes
copySame volMACBM–CBM preserved; new B. ⚠️ Tunneling possible
Cross volumeMACBM–CBM preserved; new B on dest
xcopySame volumeMACBM–CBLike copy. Use /K to copy attributes.
Cross volumeMACBM–CBM preserved; B = copy time
robocopySame volumeMACBM–CBDefault: M preserved. /COPY:DAT for more.
Cross volumeMACBM–CBEnterprise backup tool; M preserved.
moveSame volumeMACBM–CBPointer update only; $SI unchanged.
Cross volumeMACBM–CBCopy+delete; M preserved, new B.
Copy-ItemSame volumeMACBM–CBPowerShell; behaves like copy.
Cross volumeMACBM–CBM preserved; B = copy time.
Move-ItemSame volumeMACBM–CBPowerShell; pointer update like move.
Cross volumeMACBM–CBCopy+delete; M preserved, new B.

Legend: G = Updated | Y = Inherited/preserved | P = Varies | Gray = Unchanged | – = Not supported

Linux CLI Tools (ext4/XFS)

ToolOperationMACBNotes
cpSame fsMACBNew inode; all timestamps = now
Cross fsMACBNew inode on dest
cp -pSame fsMACBM/A preserved from source
Cross fsMACBPreserves M/A; C always updates
mvSame fsMACBInode unchanged; C updates
Cross fsMACBCopy+unlink; M preserved
rsyncSame fsMACBDefault: no preservation
Cross fsMACBAll timestamps = now
rsync -aSame fsMACBArchive mode: M preserved
Cross fsMACBM preserved via utimensat

Legend: G = Updated | Y = Inherited/preserved | P = Varies | Gray = Unchanged

Note:
XFS shows – for B column (no birth time). C (ctime) cannot be preserved by user-space tools.

macOS CLI Tools (APFS)

ToolOperationMACBNotes
cpSame volumeM–CBM preserved; new B; no atime on APFS
Cross volumeM–CBM preserved; new B
cp -pSame volumeM–CBM preserved; B = copy time
Cross volumeM–CBM preserved; B = copy time
mvSame volumeM–CBRename; inode unchanged
Cross volumeM–CBCopy+delete; M preserved; new B
dittoSame volumeM–CBM preserved; rsrc/xattr copied; new B
Cross volumeM–CBM preserved; rsrc/xattr copied; new B
rsyncSame volumeM–CBDefault: no preservation
Cross volumeM–CBAll times = now
rsync -aSame volumeM–CBM preserved; new B
Cross volumeM–CBM preserved; new B

Legend: G = Updated | Y = Inherited/preserved | P = Varies | Gray = Unchanged | – = Not supported

⚠️ Critical Forensic Limitation
No standard macOS command-line tool (cp, ditto, rsync, mv) preserves birth time (B) during copy operations. All copy operations create new B timestamps. Only M (modified time) can be preserved. Investigators must distinguish between M and B when analyzing macOS timelines—matching M times indicate file content preservation, while B always reflects copy/creation time on the destination system.


Timestamp Resolution

FilesystemResolutionTime ZoneNotes
NTFS~100 nsUTCHigh precision; stored as FILETIME
exFAT~10 msLocal + offsetUTC offset field available
FAT32M ~2s, B ~10ms, A = dateLocalNo timezone info
ext41 nsUTCEffective resolution may vary
XFS1 nsUTCNo birth time
APFS1 nsUTCNo atime

Cross-Filesystem Behaviors

ScenarioTypical Behavior
CopyNew file; M often preserved by tools; B becomes copy time (macOS: B never preserved by standard tools)
Move within volumeSame inode/record; metadata-only changes (C on POSIX; $FN on NTFS)
Move across volumeCopy + delete semantics; treated as new file on destination
Archive extractSimilar to copy; many archivers preserve M; some preserve B (not on macOS)
Network copyDepends on protocol and tool; SMB often preserves M; NFS may not

SANS Forensic Poster

SANS Windows Forensic Analysis Poster

2023 Edition

SANS-Windows-Forensic-Poster-2023

2018 Edition

SANS-Windows-Forensic-Poster-2018

2012 Edition

SANS-Windows-Forensic-Poster-2012

Reference

  1. Magnet Axiom blog - NTFS timestomping detection (2025)​
  2. Mosse Institute - Windows File System Tunneling (2022)​
  3. Eclectic Light - APFS timestamp interpretation (2025)​
  4. University of Vienna - Time for Truth: NTFS Timestamps (2021)​
  5. Josh Lemon - APFS timestamps blog (2023)​
  6. ACM - Reconstructing Timelines from NTFS (2023)​
  7. MacScripter - ditto and creation dates discussion​
  8. Heiko Sieger - Accurate timestamps for image files (2023)​
  9. Stack Overflow - macOS creation time preservation (2024)​
  10. Velociraptor - NTFS $FILENAME modification via rename​
  11. 13Cubed YouTube - Windows 11 timestamp changes (2023)​
  12. Ponder the Bits - MACB timestamps from CLI (2020)​
  13. Forensic Focus - MACB timestamps on Unix systems (2022)​