Automagically extract forensic timeline from volatile memory dumps.
AutoTimeliner runs multiple Volatility3 plugins against Windows, Linux, and macOS memory images, then merges their output into a single, sorted CSV timeline:
| Plugin | What it captures |
|---|---|
timeliner |
Cross-plugin timestamp events (all OS families when supported) |
| Plugin | What it captures |
|---|---|
timeliner |
Timestamps from processes, registry, handles, etc. |
mftscan |
MFT file entries found in memory |
shellbags |
User folder-access history from registry hives |
| Plugin | What it captures |
|---|---|
linux.pslist |
Process start/exit timeline context |
linux.bash |
Shell command history evidence |
linux.lsof |
Open file evidence from processes |
| Plugin | What it captures |
|---|---|
mac.pslist |
Process start/exit timeline context |
mac.bash |
Shell command history evidence |
mac.lsof |
Open file evidence from processes |
| Plugin | What it captures |
|---|---|
psscan |
Active, terminated, and hidden processes with timestamps |
cmdline |
Command-line arguments for each process |
userassist |
Program execution evidence from Windows registry |
| Plugin | What it captures |
|---|---|
netscan |
Network connections with creation timestamps |
| Plugin | What it captures |
|---|---|
malfind |
Code injection and suspicious memory regions |
svcscan |
Windows services (useful for persistence detection) |
| Plugin | What it captures |
|---|---|
dlllist |
DLLs loaded by each process |
filescan |
Files open in memory at acquisition time |
handles |
Open handles (files, registry keys, mutexes) |
envars |
Environment variables for processes |
| Dependency | Version | Notes |
|---|---|---|
| Python | ≥ 3.9 | |
| Volatility3 | ≥ 2.5 | installed automatically via Poetry/pip |
| jsonschema | ≥ 4.0 | enables Volatility3 schema validation and avoids Dependency for validation unavailable: jsonschema warning |
| mactime | any | optional — only needed for --use-mactime legacy mode |
AutoTimeliner identifies the memory image family automatically and enables the appropriate plugin set for Windows, Linux, or macOS. For faster startup you can pass
--os-hintto skip automatic detection.
git clone https://github.com/andreafortuna/autotimeliner.git
cd autotimeliner
poetry installpip install .autotimeliner -f IMAGEFILE [-t TIMEFRAME] [-o OUTPUT] [options]
| Flag | Description |
|---|---|
-f, --imagefile |
Memory dump file or glob (e.g. '*.raw') |
-t, --timeframe |
Filter to YYYY-MM-DD..YYYY-MM-DD range |
-o, --output |
Output CSV path (default: <imagefile>-timeline.csv) |
--os-hint |
Force image OS family (windows, linux, mac; aliases: win, macos, darwin) and skip auto-identification |
--skip-timeliner |
Skip the timeliner plugin |
--skip-mftscan |
Skip the mftscan plugin |
--skip-shellbags |
Skip the shellbags plugin |
--skip-psscan |
Skip process scanning |
--skip-cmdline |
Skip command-line extraction |
--skip-netscan |
Skip network connection scanning |
--skip-userassist |
Skip program execution evidence |
--skip-svcscan |
Skip Windows services scanning |
--skip-malfind |
Skip malware/injection detection |
--with-dlllist |
Enable DLL analysis (slow) |
--with-filescan |
Enable open files scanning (many records) |
--with-handles |
Enable handle scanning (many records) |
--with-envars |
Enable environment variables extraction |
--use-mactime |
Legacy mode: use external mactime binary |
-v, --verbose |
Enable debug logging |
--version |
Print version and exit |
Extract a full timeline from a single image:
autotimeliner -f TargetServer.rawFilter to a specific time window:
autotimeliner -f TargetServer.raw -t 2023-10-17..2023-10-21Process all .raw files in a directory, specifying output path:
autotimeliner -f './*.raw' -o /evidence/timeline.csvSpeed up startup when you already know the dump OS:
autotimeliner -f TargetServer.raw --os-hint windowsUse macOS alias values for convenience:
autotimeliner -f MacbookCapture.mem --os-hint darwinRun only timeliner and shellbags (skip MFT scan):
autotimeliner -f TargetServer.raw --skip-mftscanFull forensic scan (Windows plugin set + optional extended plugins):
autotimeliner -f TargetServer.raw --with-dlllist --with-filescan --with-handles --with-envarsQuick malware-focused scan:
autotimeliner -f TargetServer.raw --skip-timeliner --skip-mftscan --skip-shellbagsLinux-focused timeline collection (auto-enables linux plugins):
autotimeliner -f UbuntuWorkstation.memmacOS-focused timeline collection (auto-enables macOS plugins):
autotimeliner -f MacbookCapture.memThe output CSV has the following columns:
| Column | Description |
|---|---|
Timestamp (UTC) |
ISO 8601 UTC timestamp |
Source |
Plugin that produced the record |
Description |
File name, path, process, or registry key |
Detail |
Timestamp type, user, or extra context |
Inode |
MFT inode number (where applicable) |
UID / GID |
User/group identifiers |
Size |
File size in bytes |
Mode |
File mode string |
AutoTimeliner includes several optimizations to reduce identification time:
--os-hintbypasses automatic OS probing entirely.- Probe order is optimized using filename hints (for example
linux,ubuntu,macos). - Identification results are cached per image key (
path + size + mtime).
Cache file:
~/.cache/autotimeliner/volatility3/.autotimeliner_profile_cache.json
During detection, logs include probe progress and result messages such as:
OS probe attempt: family=windows plugin=windows.info.Info
OS probe returned no rows: windows.info.Info
Memory image identification succeeded: os=linux profile=linux:... probe=linux.banners.Banners
See docs/migration.md for a full comparison.
Key changes:
- Volatility3 profile identification — AutoTimeliner performs a best-effort OS/profile probe via Volatility3 plugins.
- Automatic symbol tables setup — Windows/macOS/Linux symbol packs are downloaded and installed automatically.
-p / --customprofileis deprecated — it is silently ignored.mftparser→mftscan— same data, new plugin name.- No body files written to disk — data flows through Python directly to CSV.
mactimeis now optional — use--use-mactimefor the old body-file workflow.
poetry install
poetry run pytestMIT — see LICENSE.
Andrea Fortuna — andrea@andreafortuna.org — andreafortuna.org