skip to content

How do you build one UTC timeline from NTFS MACB times, a local-time app log and UTC proxy records?

level: seniorimportance: must knowfreq 56%

answer

  1. one reference, and it is UTC
  2. offset per source, not one delta
  3. a travelling laptop has no single offset
  4. a field saying UTC can still be wrong
  5. derive the offset from an event two sources saw

basics

~20 s

Convert every source to UTC, establishing each source's offset rather than assuming one. Keep every row's original value, source and applied offset, and derive those offsets from an anchor event two independent sources both captured.

solid answer

~50 s

Treat UTC as the single reference and normalise *into* it, per source and per row. NTFS MACB values are already stored in UTC, so the only risk is the zone your tool applied at display, and proxy records stating UTC are usually trustworthy. The trap is the other two. An application log written in the host's **local time with no offset recorded** is not a constant delta from UTC if the laptop roamed between zones or crossed a daylight-saving change, so the offset must be resolved per record. And a Windows event record whose field claims UTC is only as good as the clock and zone that produced it: a host whose zone was never configured writes a UTC value wrong by the zone error. So derive offsets empirically from an **anchor** both a local-time and a UTC source recorded, carry provenance on every row, and flag rows whose offset you could not establish.

go deeper

for a junior

Know that everything gets normalised to UTC and that a log line in local time with no offset written in it cannot be converted until you establish which offset applied.

for a middle

Explain why a single delta fails for a laptop that crossed zones and a daylight-saving change, and why record resolution limits how finely two sources can be ordered.

for a senior

Demonstrate the anchor method: pick an event two independent sources captured, match it unambiguously, measure the offset, then validate it against a second pair before trusting the whole account.

for a principal

Own the standard that makes timelines reviewable — provenance columns on every row, unresolved rows flagged rather than filled in, and results reported as an evidenced interval rather than a single tidy start date.

## The problem, concretely An eleven-week slow-drip of documents left an enterprise through a sanctioned file-sync client, run under the account of an employee who spent the period travelling across three time zones with a company laptop. Four sources describe it, and each expresses time differently: 1. **NTFS MACB values** on the synced folder — stored in UTC, *displayed* in whatever zone the examination tool was told to use. 2. **The sync client's application log** on the laptop — wall-clock local time, no offset written into the line. 3. **The cloud proxy's upload records** — UTC, with the tenant, object name and byte count. 4. **Windows event records** from the same laptop, whose zone was never set during imaging or provisioning. A naive normalisation — pick one offset, add it to everything — produced a timeline in which the exfiltration began the week of the first proxy alert. Resolving the offsets properly moved the start **eight weeks earlier**. ## Step 1: choose one reference and normalise into it UTC, always, and quote it in the report as UTC. Never build a timeline in "local time" — local time is not a single quantity for a roaming host, and it silently changes under you at a daylight-saving boundary. ## Step 2: for each source, answer three questions before you convert anything - **What does this field mean?** A birth time is the file appearing on a volume; a proxy record is the moment the request reached the proxy; an application log line is when the client chose to write the line, which may trail the operation it describes. Ordering fields that measure different things is a category error even when the arithmetic is perfect. - **What is it expressed in, and is that recorded or assumed?** UTC stated in the record, local time with a written offset, and local time with nothing at all are three very different situations. The third is the one that hurts. - **What resolution does it carry?** NTFS is 100-nanosecond; proxy and application logs are usually whole seconds. Two events inside the same second from different sources are not orderable, and pretending otherwise is how a report acquires a claim it cannot defend. ## Step 3: the roaming-laptop trap The sync client's log is the dangerous source. Because the machine's wall clock followed the traveller, its lines are **not** a fixed delta from UTC: three zone changes and a daylight-saving transition mean the correct offset differs by row. Applying a single delta compresses or stretches the whole eleven weeks and can invert the order of events that were hours apart. The offset has to be resolved **per record** from the host's zone history — which is itself an artefact you have to establish, not assume — or empirically, source by source and period by period. ## Step 4: a field that says UTC is not a guarantee of correct UTC Windows event records store their time as UTC computed from the system clock and the configured zone. If the zone was never set, the machine has been converting local wall-clock time to "UTC" with the wrong offset the whole time. The record looks authoritative and is wrong by a constant. The lesson generalises: a record's stated time reference tells you what the *writer believed*, and belief is not verification. ## Step 5: anchor, then verify The fix for both problems is the same. Find an **anchor event** that two independent sources captured — here, one upload that appears in the sync client's local-time log *and* in the proxy's UTC records, matched by object name and byte count so the pairing is not itself a guess. The difference between the two recorded times is the offset for that source in that period, measured rather than assumed. Repeat for each period on either side of a zone or daylight-saving change. Then take a *second*, unused anchor and check that the derived offset predicts it. An offset validated against one pair and confirmed against another is defensible; one derived from arithmetic on a zone name is not. ## Step 6: carry provenance on every row The timeline is not a list of times, it is a table where each row keeps: the source, the original value **exactly as recorded**, the original stated reference, the offset applied, how that offset was derived, the resulting UTC value, and a confidence marker. This is what makes the timeline reviewable — a second examiner can re-derive it — and it is what lets you correct one source later without rebuilding the whole account. Rows whose offset you could not establish stay in the table, flagged as unordered, rather than being quietly assigned a plausible time. ## Step 7: state the result as an interval With all four sources normalised, the earliest defensible upload sat eight weeks before the alert that started the case. Report it as the **earliest activity the evidence supports**, alongside the first independently corroborated event, and say which sources support each. That is a stronger and more honest sentence than a single start date, and it is the sentence that survives being read back to you months later.

  • The event records claim UTC. Why validate them at all?
    Because the UTC value is computed from the host's clock and configured zone. If the zone was never set, every record is offset by that error while still labelled UTC. The label reports what the writer believed, not what was verified. You confirm it by finding an event that host generated which another system also observed at a time you trust, and measuring the difference.
  • How do you pick an anchor event you can actually trust?
    Pick one that two independent sources recorded and that can be paired unambiguously — an upload matched on object name and byte count, not merely on being the only event that hour. Then derive the offset from that pair and test it against a second, unused pair. If the second pair does not agree, the offset is not constant across that period and you have found a zone or daylight-saving boundary.
  • Two events are 400 milliseconds apart, one from NTFS and one from the proxy. Can you order them?
    No. The proxy records whole seconds, so its true time lies anywhere in a one-second window, which is wider than the gap. Ordering them would be a claim the evidence cannot carry. Record both, mark the pair as unordered, and if the order matters find a third source with finer resolution or a causal dependency that fixes the sequence.
  • Why keep the original value on every row rather than just the UTC result?
    Because the conversion is an assertion you may have to revisit. If a zone history or an offset turns out to be wrong, rows carrying the original recorded value and the derived offset can be recomputed; rows carrying only a converted time have to be rebuilt from the source evidence. It is also what lets a second examiner reproduce the timeline rather than take it on trust.

saying these in an interview costs you the question

  • Applies one fixed offset to a roaming host's local-time log
  • Treats a field labelled UTC as verified UTC
  • Orders sub-second events against a whole-second source
  • Discards the original recorded value after converting
  • Builds the timeline in local time because the reader lives there
  • Assumes an offset from a zone name instead of measuring it

context