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 fileMACBMCBBoth sets initialized; $FN A not maintained
Modify content (write)MACBMCB$FN unchanged on content-only edits. Atime varies by policy.
Read/open (no write)MACBMCBLastAccess disabled by default since Vista
Rename / Move (same volume)MACBMCBKey forensic indicator: $FN updates but $SI doesn’t
Move (cross-volume)MACBMCBEffectively copy+delete. New MFT entry.
Copy (same or cross volume)MACBMCBNew file created. Explorer preserves M.
Change attributes/ACLMACBMCBMetadata-only change updates $SI C
Set times via API (SetFileTime)MACBMCBTimestomping 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 newMABA = date-only on FAT32; full time on exFAT
Modify contentMABB unchanged; A may update
Read/openMABSome tools suppress A updates
Rename/Move (same volume)MABDirectory entry updated only
Copy (same or cross volume)MABM preserved; B set to now
Move (cross volume)MABCopy+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 newMACNo birth time stored in XFS
Modify contentMACrelatime behavior same as ext4
Read/openMACA updates per mount options
Rename/Move (same fs)MACDirectory link change updates C
Copy (cp default)MACNew inode; M/A/C = now
Move (cross fs)MACmv preserves M; new inode
chmod/chown/xattrMACMetadata 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 newMCBAPFS does not maintain atime
Modify contentMCBData + metadata change
Read/openMCBNo timestamp updates on read
Rename/Move (same volume)MCBMetadata change updates C only
Copy (Finder/cp)MCBFinder preserves M; B = copy time
Move (cross volume)MCBCopy+delete; M preserved, new B
chmod/chown/xattrMCBMetadata-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 volMACBMCBM preserved; new B. ⚠️ Tunneling possible
Cross volumeMACBMCBM preserved; new B on dest
xcopySame volumeMACBMCBLike copy. Use /K to copy attributes.
Cross volumeMACBMCBM preserved; B = copy time
robocopySame volumeMACBMCBDefault: M preserved. /COPY:DAT for more.
Cross volumeMACBMCBEnterprise backup tool; M preserved.
moveSame volumeMACBMCBPointer update only; $SI unchanged.
Cross volumeMACBMCBCopy+delete; M preserved, new B.
Copy-ItemSame volumeMACBMCBPowerShell; behaves like copy.
Cross volumeMACBMCBM preserved; B = copy time.
Move-ItemSame volumeMACBMCBPowerShell; pointer update like move.
Cross volumeMACBMCBCopy+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 volumeMCBM preserved; new B; no atime on APFS
Cross volumeMCBM preserved; new B
cp -pSame volumeMCBM preserved; B = copy time
Cross volumeMCBM preserved; B = copy time
mvSame volumeMCBRename; inode unchanged
Cross volumeMCBCopy+delete; M preserved; new B
dittoSame volumeMCBM preserved; rsrc/xattr copied; new B
Cross volumeMCBM preserved; rsrc/xattr copied; new B
rsyncSame volumeMCBDefault: no preservation
Cross volumeMCBAll times = now
rsync -aSame volumeMCBM preserved; new B
Cross volumeMCBM 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)​