All investigations
Case 01 Host Forensics TDX Arena — IR Expert 08 / 13 / 2025

Imperial Memory

Memory forensics and credential recovery from a Windows 10 image where the standard ASCII string search returned noise. Pivoted to UTF-16LE on the hypothesis that Windows process memory preserves command-line arguments as wide characters. Recovered the plaintext 7-Zip password inline, validated non-destructively, and proved evidence integrity through an MD5 hash chain.

Executive Summary

Volatility 2.6 (standalone, no sudo) was used to profile a Windows 10 memory image and hunt for sensitive command-line artifacts. Broad ASCII string searches produced too much noise to be actionable. The hunt pivoted to UTF-16LE, the encoding Windows uses to hold process-argument strings in RAM, which surfaced the exact 7z.exe command line used to create gift.7z — with the archive password embedded inline.

The recovered credential was validated non-destructively with 7z t, then used to extract suspicious.docx into a controlled output directory. The DOCX is a ZIP container; secrets.txt was located inside, selectively extracted, verified in both plaintext and hex, and hashed. The case demonstrates how plaintext secrets passed as CLI arguments persist in RAM, and how they can be reliably recovered from a memory image when conventional detection tooling returns nothing.

Findings & Analysis

Password recovered
from memory
G6Vmc$Qd5cpM8ee#Ca=x&A3
Recovered from the UTF-16LE command line for 7z.exe. Windows stores process arguments as wide (two-byte) strings in RAM, so an ASCII-only strings sweep misses them entirely.
Target archive
~/Desktop/gift.7z
Password verified non-destructively with 7z t before any extraction was attempted. Archive returned Everything is Ok.
Extracted artifact
~/Desktop/gift_out/
suspicious.docx (~13 KB)
Selective extraction to a controlled output directory. Non-interactive, overwrite-safe flags used throughout to preserve evidence integrity.
Inner secret
~/Desktop/gift_out/
secrets.txt (~1.4 KB)
Located inside the DOCX (which is itself a ZIP). Extracted with unzip -j to flatten the archive path. Provenance verified via cat and hexdump -C.
Integrity
(required output)
MD5: 0f235385d25ade
312a2d151a2cc43865
Computed locally on the extracted secrets file. Establishes a cryptographic hash chain from memory artifact to final evidence for submission and future verification.
IOC quick reference
  • Recovered password: G6Vmc$Qd5cpM8ee#Ca=x&A3
  • Extracted file: /home/derrek/Desktop/gift_out/suspicious.docx (~13 KB)
  • Extracted secret: /home/derrek/Desktop/gift_out/secrets.txt (~1.4 KB)
  • MD5: 0f235385d25ade312a2d151a2cc43865

Tools & Technologies

Volatility 2.6 (standalone)
Portable binary used for memory profiling and artifact hunting without elevated privileges. Chosen because the environment blocked apt-get installation and the user was not in sudoers.
strings / grep
ASCII sweep and, critically, UTF-16LE wide-string sweep (strings -el) against high-signal keywords. The encoding pivot is the case's central technical move.
7z
Non-destructive password validation (7z t) before extraction. Targeted single-file extraction (x -y -o) to isolate evidence in a controlled output directory.
unzip
Listing and selective extraction from the DOCX container. DOCX is a ZIP under the surface; unzip -j flattens internal paths when pulling a single inner file.
hexdump -C / cat
Dual verification of the recovered secret — human-readable for relevance, byte-level for provenance and report admissibility.
md5sum
Cryptographic hash of the recovered evidence file, required for submission and for any downstream integrity verification.

Investigation Process

Nineteen discrete steps, each documented with command, intent, and outcome. The case's defining moment is the encoding pivot at step 9 — ASCII was not failing silently, it was failing by design because Windows stores process arguments as UTF-16LE.

Step 01 Establish context Worked
whoami pwd ls

Why: Confirm user identity, working directory, and that Desktop/ exists before any artifact handling. Situational awareness up front prevents accidental writes to the wrong path later.

Step 02 Try Volatility from PATH Not found
volatility -f ~/Desktop/Emperor.vmem imageinfo

Why: Check whether Volatility is pre-installed and callable. Would save setup time. The command not found response forced a deployment decision.

Step 03 Attempt package install No sudo
sudo apt-get update

Why: Default path for tooling. Response: derrek is not in the sudoers file. Confirms the environment denies privileged installs and forces a non-sudo workaround.

Step 04 Confirm sudo restriction Verified
sudo -l

Why: Explicit verification before wasting time on privileged commands downstream. Response confirmed: user may not run sudo. Decision recorded.

Step 05 Acquire portable Volatility Worked
wget https://downloads.volatilityfoundation.org/releases/2.6/volatility_2.6_lin64_standalone.zip unzip volatility_2.6_lin64_standalone.zip cd volatility_2.6_lin64_standalone

Why: Self-contained binary runs in a restricted environment with no install step. Bypasses the sudo block and gives full Volatility functionality at unprivileged user level.

Step 06 Profile the memory image Win10x64_14393
./volatility_2.6_lin64_standalone -f ~/Desktop/Emperor.vmem imageinfo

Why: Confirm the image is readable and identify the correct OS profile. Accurate profile selection is a prerequisite for valid plugin output — a wrong profile yields plausible-looking garbage.

Step 07 Broad ASCII keyword hunt Noisy
strings -n 6 ~/Desktop/Emperor.vmem | grep -iE "pass|key|secret|7z|gift" > ~/Desktop/found_strings.txt

Why: Initial broad search. Volume of results indicates refinement is needed — high signal-to-noise ratio would mean the interesting artifact is embedded in a form ASCII-only grep can't distinguish from natural strings.

Step 08 Volatility YARA scan (ASCII) No hits
./volatility_2.6_lin64_standalone --profile=Win10x64_14393 \ -f ~/Desktop/Emperor.vmem yarascan -Y "gift.7z"

Why: Search the image for the exact filename using YARA. No hits under ASCII. This is the tell — the filename is almost certainly in memory, just not in an encoding ASCII can match. That points at UTF-16LE.

Pivot

ASCII was not failing. It was returning correctly: the artifact is present, just encoded as UTF-16LE because Windows stores process-argument strings as wide characters in RAM. Switching strings to -el (little-endian 16-bit) surfaces what a byte-by-byte ASCII scan cannot see.

Step 09 UTF-16LE search Hit — full command line
strings -el ~/Desktop/Emperor.vmem | grep -i "gift\.7z" | head -n 20

Why: Find wide-encoded instances of the filename. Result: the full 7z.exe a C:\Users\Aaron\Desktop\gift.7z C:\Users\Aaron\Desktop\gift -p<PASSWORD> command line, with the password inline.

Step 10 Deduplicate results Unique confirmed
strings -el ~/Desktop/Emperor.vmem | grep -F "gift.7z" | sort -u

Why: Reduce noise and confirm the password string is consistent across all hits. Multiple identical matches raise confidence that the recovered credential is the real one, not a fragment.

Step 11 Store and validate password No hidden chars
PASS='G6Vmc$Qd5cpM8ee#Ca=x&A3' printf '%s' "$PASS" | hexdump -C

Why: Single-quote the password so the shell does not interpret its metacharacters. Hexdump verifies there are no trailing newlines or hidden characters that would silently break downstream extraction.

Step 12 Test archive password (non-destructive) Everything is Ok
7z t ~/Desktop/gift.7z -p"$PASS"

Why: Validate before extracting. A failed extraction can leave partial artifacts and contaminate the controlled evidence directory. 7z t tests the password without writing anything to disk.

Step 13 Extract target to controlled directory suspicious.docx (~13 KB)
mkdir -p ~/Desktop/gift_out 7z x -y -p"$PASS" -o"$HOME/Desktop/gift_out" "$HOME/Desktop/gift.7z" suspicious.docx ls -lh "$HOME/Desktop/gift_out"

Why: Dedicated output directory keeps extracted evidence isolated from the working filesystem. -y is non-interactive (no prompts), and naming suspicious.docx explicitly avoids pulling unrelated files if the archive held more than one member.

Step 14 Inspect DOCX structure secrets.txt present
unzip -l "$HOME/Desktop/gift_out/suspicious.docx"

Why: DOCX is a ZIP container under the file extension. Listing the archive shows the standard Word parts (word/document.xml, _rels/, etc.) plus a non-standard secrets.txt — the actual target.

Step 15 Extract only secrets.txt Worked
unzip -j "$HOME/Desktop/gift_out/suspicious.docx" secrets.txt -d "$HOME/Desktop/gift_out"

Why: Pull only the relevant inner file. -j flattens paths; -d writes to the controlled output directory. Minimizing handling of non-evidence files reduces the risk of accidentally modifying something that matters later.

Step 16 Confirm file presence ~1.4 KB
ls -lh "$HOME/Desktop/gift_out/secrets.txt"

Why: Sanity check before spending cycles on content analysis. Confirms extraction actually succeeded and the file is a plausible size.

Step 17 View plaintext contents Readable
cat "$HOME/Desktop/gift_out/secrets.txt"

Why: Human-readable confirmation the file holds legible content and is the intended target, not a decoy or a truncated fragment.

Step 18 Binary provenance view Byte-level verified
hexdump -C "$HOME/Desktop/gift_out/secrets.txt" | head -n 20

Why: Byte-level view confirms file structure and provides admissible provenance for the report. Plaintext view and hex view together establish both relevance and integrity.

Step 19 Compute required MD5 hash 0f235385d25ade312a2d151a2cc43865
md5sum "$HOME/Desktop/gift_out/secrets.txt"

Why: Cryptographic hash closes the evidence chain. The hash is recorded for submission and for any downstream verification — anyone holding the same file can compute the same MD5 and confirm identity at a byte level.

Recommendations

Credential handling
Do not pass secrets as command-line arguments — they persist in RAM and in process listings. For 7-Zip specifically, prefer the interactive prompt (-p with no value), or use a secured secrets file with restrictive permissions when automation is required. Avoid pasting sensitive strings into terminals that may be recorded or logged.
Endpoint and OS hardening
Restrict hibernation and pagefile artifacts where appropriate; both can preserve process memory to disk long after the process exits. Instrument EDR to capture and alert on processes invoking 7z.exe with -p arguments, and enforce credential hygiene in scripting standards.
IR playbooks
Include UTF-16LE string sweeps as a standard step in memory triage for Windows images — ASCII-only grep is a known blind spot for Windows process arguments. Standardize a non-destructive validation step (7z t, or equivalent for other archive formats) before any extraction, and require controlled output directories for evidence handling.

Technical Note

Recovered 7-Zip password from memory

A UTF-16LE memory search surfaced the plaintext password G6Vmc$Qd5cpM8ee#Ca=x&A3 inside the command-line arguments for 7z.exe. That credential allowed direct decryption of gift.7z with no brute-forcing — enabling access to the embedded suspicious.docx and its hidden secrets.txt.

Passing passwords on the command line is insecure precisely because the arguments persist in volatile memory, are visible in process listings to other users on the same host, and may be captured by system or security tooling that logs process creation events. This finding demonstrates the forensic value of volatile memory analysis for recovering encryption keys and credentials that would otherwise be inaccessible.

Additional Finding — Out of Scope

Credential contains shell metacharacters

Severity: High. Category: Insecure Credential Handling.

The plaintext credential recovered from memory — G6Vmc$Qd5cpM8ee#Ca=x&A3 — contains multiple shell metacharacters: $, #, =, and &. If this credential is entered into a command-line environment without proper quoting or escaping, those characters are interpreted by the shell rather than passed literally, which can cause command injection, environment-variable alteration, unintended background-process execution, or session termination.

During testing, pasting the unquoted credential into the lab environment triggered an unintended command sequence that terminated the session. In a production environment, the same failure mode could result in unauthorized code execution or service disruption.

Recommendation

Rotate the credential to remove shell metacharacters unless they are explicitly required. Enforce safe-handling practices in any place the credential is used: always single-quote or escape special characters, never pass credentials via command-line arguments, and prefer secure storage mechanisms like environment variables or a secrets vault. Review existing scripts and automation for instances where this credential (or any credential containing shell metacharacters) may be handled unsafely.

References

  1. Plaintext credentials in browser sessions. Forensic research showing plaintext passwords remain in RAM after login across Chrome, Edge, and Firefox — even after logout. research.tees.ac.uk
  2. Cold boot attacks. Techniques for extracting secrets, encryption keys, and active session data directly from RAM. securitum.com
  3. Ransomware decryption keys recovered from memory. Live-forensic analysis of NotPetya, Bad Rabbit, and Phobos recovered encryption keys from volatile memory, enabling decryption. arxiv.org/abs/2012.08487