Case Studies: Building Effective Timelines with Plaso (Log2Timeline)
- 3 minutes ago
- 3 min read

By now, if you’ve followed the previous articles in this series, you should be very comfortable with:
Creating timelines using Plaso / Log2Timeline
Running Plaso on Windows and Ubuntu
Creating timelines for Linux systems
Understanding how timelines help reconstruct attacker activity
If you haven’t read those yet, you can find them here:
Creating a Timeline for Linux with fls, mactime, and Plaso (Log2Timeline)
Running Plaso / Log2Timeline on Windows
https://www.cyberengage.org/post/running-plaso-log2timeline-on-windows
A Deep Dive into Plaso / Log2Timeline Forensic Tools on Linux
https://www.cyberengage.org/post/a-deep-dive-into-plaso-log2timeline-forensic-tools
At this point, you may already feel confident—maybe even like an expert—when it comes to building timelines.
👉 Case studies are where timelines truly start to make sense.
So yes… we’re doing case studies 😄Because learning again (and differently) is never a bad thing.
Let’s get started.
---------------------------------------------------------------------------------------------------------
Case Study 1: Web Server Intrusion (Triage-Based Timeline)
Scenario
You receive an alert about suspicious activity on a production web server. Time is critical, and you have limited context.
Instead of waiting for a full disk image, you collect a triage package from the system:
Windows Event Logs
IIS web server logs
Master File Table (MFT) parsed separately
Your goal:
Validate the alert
Understand what happened
Identify suspicious activity quickly
Step 1: Parse Triage Artifacts (Event Logs + IIS Logs)
We begin by creating a focused timeline using only the most relevant artifacts.
log2timeline.py --timezone 'EST' \
--parsers 'winevtx,winiis' \
--storage-file output.plaso \
/cases/IIS_Triage
Why this matters:
winevtx captures Windows event activity
winiis captures HTTP requests, errors, and access patterns
This keeps processing fast and noise low during early investigation
Step 2: Add Full MFT Metadata
Next, we append full filesystem metadata extracted using MFTEcmd. (If you want to learn how to create body file using mftecmd check out above articles)
log2timeline.py --parsers 'mactime' \
--storage-file output.plaso \
/cases/IIS_mftecmd.body
This step deserves special attention.
Step 3: Filter and Build the Super Timeline
Finally, we sort, filter, and export the timeline for analysis.
psort.py --output-time-zone 'UTC' \
-o l2tcsv \
-w supertimeline.csv \
out.plaso \
"date > datetime('2023-01-01T00:00:00') AND date < datetime('2023-01-27T00:00:00')"
This produces a filtered super timeline that:
Focuses only on the incident window
Is ready for tools like Timeline Explorer
Can be quickly reviewed for attacker activity
-------------------------------------------------------------------------------------------------------------
Case Study 2: Full Disk Super Timeline
Scenario
Now imagine a different situation.
Instead of triage data, you have:
A full disk image (E01, raw disk, or cloud snapshot)
More time
A need for deep historical analysis
Your goal:
Build a comprehensive super timeline
Preserve complete file system metadata
Still keep processing efficient
Step 1: Parse Disk Image Using a Filter File
log2timeline.py --timezone 'UTC' \
-f filter_windows.yaml \
--parsers 'win7,!filestat' \
--storage-file out.plaso \
/cases/cdrive/disk.E01
What’s happening here:
win7Â loads default Windows artifact parsers
!filestat disables filesystem parsing (we’ll handle it separately)
filter_windows.yaml limits parsing to high-value system artifacts (This is an Filter file)
Why not use Plaso’s filestat parser?
Plaso’s filesystem parser only records metadata for files it actively parses .In this case, we parsed only logs, not the entire disk.
By parsing the MFT separately with MFTEcmd and importing it using the mactime parser, we gain:
Full file system visibility
Creation, modification, access, and entry timestamps
Metadata for files not directly parsed by Plaso
This is a powerful technique when:
You’re working with triage images
Full disk images are unavailable or unnecessary
Speed matters
You’ll see this approach repeatedly in advanced investigations.
This avoids wasting time on hundreds of thousands of irrelevant files.
Step 2: Append Full MFT Metadata
log2timeline.py --parsers 'mactime' \
--storage-file out.plaso \
/cases/mftecmd.body
Even with a full disk image, we:
Do not parse every file (thanks to the filter file)
Still want complete filesystem visibility
Appending the MFT provides:
Full file coverage
Accurate timestamps
File size and metadata context
Many Like me prefer MFTEcmd output over Plaso’s native filestat format for filesystem analysis.
Step 3: Filter and Export the Timeline
psort.py --output-time-zone 'UTC' \
-o l2tcsv \
-w supertimeline.csv \
out.plaso \
"date > datetime('2026-01-01T00:00:00') AND date < datetime('2026-01-27T00:00:00')"
You now have a true super timeline combining:
Logs
Registry artifacts
File system activity
User actions
System events
All aligned chronologically.
-------------------------------------------------------------------------------------------------------------
Key Takeaways
Timelines are not one-size-fits-all
Triage timelines prioritize speed and signal
Full disk timelines prioritize depth and completeness
Appending MFT data via MFTEcmd + mactime is an extremely effective technique
Filter files help control noise without sacrificing context
If there’s one thing to remember:
A good timeline doesn’t show everything — it shows the right things, in the right order.
-------------------------------------------------------------------------------------------------------------
