Reading width
Wide uses the full column for everything — text, diagrams, code, and exercises. Narrow keeps the standard reading width.
Text size
Scales the body text. Headings and code blocks keep their size.
In this section
Interactive Memory Forensics Triage
What this sub is
You have read how a memory investigation works. Now you do one. This sub drops you into the opening minutes of a real triage and asks you to make the decisions: whether to acquire at all, what to enumerate first, how to read what you find, what claim it supports, and what to do before you touch anything.
Each step draws on a specific earlier sub, so if a choice is unclear, the explanation points you back to where it was taught. There is no penalty for a wrong answer; the point is to practice the reasoning while the stakes are zero, so it is automatic when they are not.
The scenario
It is 03:14 on a Thursday. Defender for Endpoint fires on the Northgate finance workstation NE-FIN-014: anomalous PowerShell behavior with outbound connections to an unfamiliar address. You have remote access to the live host. A quick live-response look at the disk finds no suspicious files, no new registry persistence, no unusual scheduled tasks. The endpoint team wants the machine reimaged within the hour; the finance controller has a 09:00 board-pack deadline. You have not yet captured anything.
Work the triage in order. Each step is a decision a memory analyst makes in the first minutes, and the sequence follows the workflow from MF0.3: decide whether memory is in scope, identify and enumerate, interpret what you find, assign it a confidence tier, then act, all with the volatile evidence preserved.
Step 1: Acquire, or let them reimage?
Disk live-response found nothing, and there is pressure to reimage now. What do you do?
This is the disk-trained instinct MF0.1 warned against. "Clean disk" does not mean "nothing happened" when the alert is anomalous PowerShell reaching an unknown address, that fact pattern is the canonical signature of a memory-resident attack, where the disk is empty by design and the payload lives only in RAM. Reimaging destroys the one evidence source that can answer what the PowerShell did, and the answer cannot be recovered afterward.
Correct, and this is the canonical mandatory-acquisition trigger from MF0.1: an EDR alert without corresponding disk evidence. The only evidence that can answer "what did the PowerShell actually do, what did it touch, did it spread" is the RAM of the running machine, and it is gone the moment the system reboots. The business deadline is a communication problem to manage, not a reason to destroy evidence; acquisition takes twenty to thirty minutes and the reimage can follow.
Rebooting destroys exactly the volatile evidence you need, the running process, its injected code, its live connections, the most volatile category from MF0.2. A capture taken after reboot shows a clean system that no longer contains the attack. Severing the connection can wait until after acquisition; preserving the volatile evidence cannot.
As MF0.1 stressed, if this decision requires real-time escalation at 03:14, you have already lost the evidence to the clock. The acquire-on-this-trigger call should be pre-encoded in your SOC procedure precisely so it is not negotiated live against a deadline. The correct standing answer is to acquire first; the manager can be informed, not consulted, while the capture runs.
Step 2: The image is captured. What first?
You have a verified image of NE-FIN-014. What is the first thing you run?
Tempting, and you will run it soon, but jumping to the suspected answer skips the step that makes everything after it trustworthy. If the image was captured with a mismatched profile, malfind's output is meaningless, and you would not know. Identify comes before Enumerate for a reason.
Close, and this is the right neighborhood, but it is still phase 3 before phase 2. A process list read against unconfirmed symbols can report fields from the wrong offsets and look entirely plausible. Confirm the image first, then enumerate.
Correct. This is phase 2, Identify, from MF0.3, and it precedes all analysis. It confirms the OS build, that Volatility selected matching symbols, and via the kernel/user split from MF0.4 that the translation is sane, the kernel base sitting in the expected high range. Profile mismatch is the most common cause of analysis that looks right and is wrong, and one command rules it out before you trust anything downstream.
MemProcFS is excellent for triage, from MF0.5, and you may well browse next, but the very first action on any image is to confirm what it is. Whichever tool you reach for, an unverified image can mislead both; identification is the gate before exploration.
Step 3: Reading the finding
windows.malfind reports a PAGE_EXECUTE_READWRITE region in the PowerShell process, private, no file backing, beginning with bytes 4d 5a. How do you classify and treat it?
Correct. By the taxonomy from MF0.2 this is a transient artifact: attack-introduced, found by pattern not by list, with no legitimate analogue, an executable-writable private region holding an MZ header that matches no file on disk. And by the raw-first rule from MF0.3, a decisive finding is verified against raw memory, you read the bytes yourself rather than trust the plugin's parse, before it carries weight in the report.
This is the classify-by-tool error from MF0.2. The VAD tree is a volatile structure, but an entry within it describing a private, executable, file-less region with a PE header is a transient artifact. Classification follows what the evidence is, not which structure surfaced it, and the misclassification weakens the claim you can make about it.
Legitimate JIT does create RWX regions, which is exactly why you do not stop at the protection flags, from MF0.10's clean baseline. But a JIT region is not a PE image; the MZ header plus no file backing distinguishes this from benign JIT. Dismissing it as a false positive ignores the signals that separate it from one.
It is inside application memory, but ephemeral data is the application's own legitimate working state, credentials, history, decrypted buffers, from MF0.2. An injected PE the application never loaded is not the application's working state; it is attacker-introduced, which makes it transient, and the distinction governs how you report it.
Step 4: The claim you can make
The C2 address appears in both windows.netscan (tied to the PowerShell PID) and the firewall log. The decoded payload command appears only in the process memory. How do you state these in the report?
The C2 connection earns a flat assertion, but stating the memory-only decoded command with the same unqualified certainty overclaims its independence. From MF0.7, the report should distinguish a finding corroborated by two sources from one resting on memory alone, even when both are true.
Correct, and this is the confidence discipline from MF0.7. The C2 connection is High: a kernel-maintained structure, tied to a process, corroborated by the independent firewall log. The decoded command is decisive and verified in memory but exists nowhere else, so the report states it as memory-derived and notes the disk holds only the encoded form, which is honest calibration rather than weakness, and it is what survives an opposing expert.
Memory-only does not mean unusable, it is the decisive evidence of what the payload actually did, and dropping it discards the most important finding. From MF0.7, the right move is to report it at its honest tier with its limitation stated, not to omit it.
Understating is its own failure. From MF0.7, a finding corroborated by two independent sources is High, and labelling it Low to "be safe" misrepresents the evidence as much as overclaiming does. Confidence is a property of the evidence; you assign the tier the evidence earns, in either direction.
What you just did
That sequence, decide memory is in scope, identify before enumerating, classify the finding by what it is, verify it against raw memory, and state each claim at the confidence the evidence earns, is the spine of every memory triage, and you reasoned through it using the whole module: the acquisition trigger from MF0.1, the taxonomy from MF0.2, the workflow from MF0.3, the address model from MF0.4, the tools from MF0.5 and MF0.6, and the confidence discipline from MF0.7. The questions had clear answers because the scenario was small and guided; real incidents are messier, and the rest of the course builds the depth to handle that mess. The shape of the reasoning does not change, and you now have it.
This completes the orientation. You have learned why memory forensics is decisive rather than niche, what lives in memory and how to classify it, the workflow and documentation that make findings defensible, the physical and virtual memory model underneath every tool, the toolkit of Volatility 3, MemProcFS, and WinDbg, how to assign confidence, the legal context that keeps an investigation admissible, and how to build and orient in the lab. From here the course goes deep, and every module runs the attack-capture-analyze loop against the lab you built.