Module 14: Introduction to Digital Forensics

Digital forensics cover

Module 14 was fine except for a few parts where the information was not exact for specific artifacts, for example Shimcache and Amcache being strongly described as execution artifacts. The practical scenario section was also too crowded and easy to get overwhelmed by. If they had split that section up and tried to cover less but more effectively it would have been great, but anyways it was fine.

I revamped these notes with AI and kept the distinction wherever I was not convinced. Shimcache and Amcache can support file presence, for example, but they should not be promoted to definitive execution evidence. Prefetch is much stronger for execution, while LNK files, Jump Lists, ShellBags, the USN Journal, Registry data, memory, and event logs each answer a different part of the investigation. Most of the images are exactly the ones I followed, and I used the ones I felt were clearer and easier for me to reference later.

Lab scope: Every path, host, memory image, disk image, credential, IP address, and answer on these pages comes from the isolated HTB Academy module environment.

Back to Module 13: Module 13: JavaScript Deobfuscation

Module 14 Navigation

On this page

Digital forensics is a specialized branch of cybersecurity focused on the collection, preservation, analysis, and presentation of digital evidence. Its primary goal is to reconstruct timelines and uncover the truth behind cyber incidents, providing evidence that is legally admissible for court or regulatory proceedings. To ensure this admissibility, evidence like logs and files are meticulously hashed, timestamped, and managed through a strict chain of custody to prevent any alterations.

The investigation follows a structured workflow to ensure all data is handled correctly:

Within a Security Operations Center (SOC), digital forensics shifts from a reactive to a proactive tool. It provides a detailed post-mortem of incidents, allowing analysts to understand an attacker’s motives and methods to better fix vulnerabilities. Beyond just identifying what happened, it enables rapid incident response by pinpointing the exact moment of a breach to contain threats faster. Finally, by leveraging Tactics, Techniques, and Procedures (TTPs) from past cases, SOC teams can proactively hunt for hidden threats and foster a culture of continuous learning and improvement.

Module 14 lab evidence screenshot

Windows Forensics Overview

I supplemented the course material where the execution guidance was outdated. The most important correction is that Shimcache and Amcache support file presence. On modern Windows, they do not by themselves prove execution.

1. NTFS Fundamentals

Master File Table

The $MFT stores metadata for every file and directory on an NTFS volume, including names, timestamps, permissions, size, and disk location.

When a file is deleted, its MFT entry and disk space are marked available for reuse. The data may remain recoverable until overwritten.

USN Journal

The $UsnJrnl records file-system changes such as file creation, deletion, modification, movement, and renaming.

It is useful for building timelines and identifying activity involving files that no longer exist. Tools such as MFTECmd can parse the MFT and USN Journal into CSV output.

MACB Timestamps

Timestamp Meaning
Modified File content changed
Accessed File was accessed
Changed MFT metadata changed
Birth File was created

The Changed timestamp is a metadata-change timestamp, not a creation timestamp.

Unallocated Space and File Slack

Unallocated space contains deleted files or fragments that are no longer assigned to active files.

File slack is unused space between the end of a file and the end of its final allocated cluster.

File Signatures

File signatures identify a file by its internal header instead of its extension. They help detect renamed or disguised files.

Alternate Data Streams

NTFS Alternate Data Streams allow additional data to be stored behind a normal file.

Example:

document.txt:hidden.exe

Attackers may use ADS to hide scripts, executables, or configuration data.

Volume Shadow Copies

Volume Shadow Copies are point-in-time snapshots that may contain older files, registry hives, event logs, and deleted evidence.


2. Windows Registry

System hives are stored under:

C:\Windows\System32\Config

Important hives include SYSTEM, SOFTWARE, SAM, SECURITY, and DEFAULT.

User activity is mainly stored in:

Registry transaction logs such as .LOG1, .LOG2, and .regtrans-ms may contain changes not yet written to the main hive.

Deleted registry keys and values may remain recoverable in unallocated registry cells until overwritten.

Only registry keys have Last Write timestamps. Individual values do not have timestamps.

Registry Explorer is useful for manual analysis, while RECmd can parse multiple artifacts into CSV or JSON.


3. File Presence Artifacts

Shimcache

Location:

HKLM\SYSTEM\<ControlSet>\Control\Session Manager\AppCompatCache

Shimcache may record an executable’s path, size, and last modification timestamp.

It proves that Windows encountered the file, but it does not reliably prove execution on Windows 10 or 11.

Entries may remain after the file is deleted. Files can also enter Shimcache when a folder is viewed.

Amcache

Location:

C:\Windows\appcompat\Programs\Amcache.hve

Amcache may contain:

Amcache records file inventory and presence, not definitive execution.

The File ID may contain four leading zeros that must be removed before comparing the SHA-1 value.

For large files, Amcache may hash only the first 30 MB.


4. Evidence of Execution

Prefetch

Location:

C:\Windows\Prefetch

Prefetch files may contain:

A valid Prefetch file is strong evidence that the executable ran.

Prefetch is normally enabled on Windows desktop systems but disabled by default on Windows Server.

Absence of Prefetch does not prove that execution did not occur.

UserAssist

Location:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist

UserAssist records GUI-based program and shortcut launches. It may include run count, focus count, focus duration, and last execution time.

Value names are encoded using ROT13.

It mainly records interactive GUI launches, not command-line tools, services, or scheduled tasks.

MUICache

Location:

UsrClass.dat\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache

MUICache stores application-friendly names and company metadata taken from the executable.

It can reveal the original metadata of malware renamed to look legitimate.

MUICache has no reliable execution timestamp and should not be treated as definitive execution evidence.

SRUM

Location:

C:\Windows\System32\sru\SRUDB.dat

SRUM stores approximately 30 to 60 days of system resource activity.

It may show:

SRUM is useful for connecting a process to a user and identifying network activity.


5. ShellBags

ShellBags are mainly stored in UsrClass.dat and NTUSER.DAT.

They record folders viewed through Windows Explorer, including local directories, network shares, and removable drives.

ShellBags can remain after the original folder is deleted.

They prove folder navigation, not file opening or execution.

ZIP files may appear because Windows Explorer treats them as folders.


6. User File Interaction

LNK Files

Location:

%APPDATA%\Microsoft\Windows\Recent

LNK files are commonly created when a user opens a file through the Windows shell.

They may contain:

LNK files may remain after the original target is deleted.

Jump Lists

Locations:

%APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations

%APPDATA%\Microsoft\Windows\Recent\CustomDestinations

Jump Lists connect recently used or pinned files with a specific application.

They may contain target paths, timestamps, access counts, volume details, and embedded LNK records.

RunMRU

Location:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

RunMRU records commands entered through the Win + R dialog.

Values are stored as letters such as a, b, and c. The MRUList value stores their relative order.

RunMRU proves the command was entered, not that it completed successfully.


7. Persistence

Run Keys

Per-user locations:

HKCU\Software\Microsoft\Windows\CurrentVersion\Run

HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce

System-wide locations:

HKLM\Software\Microsoft\Windows\CurrentVersion\Run

HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce

Run keys execute during logon. RunOnce entries are intended to execute once and then be removed.

Scheduled Tasks

Task files are stored under:

C:\Windows\System32\Tasks

Important information includes the task trigger, user account, executable path, arguments, and working directory.

Scheduled-task configuration proves persistence setup, not successful execution.

Services

Location:

HKLM\SYSTEM\CurrentControlSet\Services

Important fields include ImagePath, start type, service account, and service name.

Service creation or modification should be correlated with Service Control Manager events and process-creation evidence.


8. USB Forensics

Important locations:

Artifact Location
VID and PID SYSTEM\CurrentControlSet\Enum\USB
Storage device details SYSTEM\CurrentControlSet\Enum\USBSTOR
Drive-letter mapping SYSTEM\MountedDevices
Volume name SOFTWARE\Microsoft\Windows Portable Devices\Devices
Installation log C:\Windows\inf\setupapi.dev.log
User attribution NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2

USBSTOR provides manufacturer, product, revision, and serial-number information.

SetupAPI records when Windows first installed the device.

MountedDevices connects the device or volume to a drive letter and Volume GUID.

To identify the user who mounted the USB:

  1. Find the device serial number in USBSTOR.

  2. Match it in MountedDevices.

  3. Extract the Volume GUID.

  4. Search each user’s MountPoints2 for that GUID.


9. Network Artifacts

TCP/IP Interfaces

Location:

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<GUID>

May contain:

Network List Profiles

Location:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList

May contain:

These artifacts help identify networks previously used by the system.


10. Additional Artifacts

Browser Artifacts

Browser databases may contain history, downloads, cookies, cache, autofill data, saved passwords, and session information.

Thumbnail Cache

thumbcache.db files store previews of images and documents.

A thumbnail may prove that Windows generated a preview, but not necessarily that the user opened the file.

Recycle Bin

Location:

C:\$Recycle.Bin\<User SID>

$I files contain the original path, size, and deletion time.

$R files contain the deleted file data.


Artifact Correlation Reference

Question Useful artifacts
Did the file exist? MFT, USN Journal, Shimcache, Amcache
Was it deleted? MFT, USN Journal, Recycle Bin
Did it execute? Prefetch, UserAssist, SRUM, Event ID
Was a file opened? LNK files, Jump Lists
Was a folder viewed? ShellBags
Was persistence configured? Run keys, tasks, services
Was a USB connected? USBSTOR, SetupAPI, MountedDevices
Which user mounted it? MountedDevices and MountPoints2
Did an application use the network? SRUM and network logs

Always correlate multiple artifacts. Each artifact proves only a specific part of the activity.

Evidence Acquisition and Host-Based Evidence

Creating a Forensic Image with FTK Imager

  1. Select FileCreate Disk Image.
  2. Select the media source: Physical Drive or Logical Drive.
  3. Specify the image destination.
  4. Select the required image type.
  5. Enter the evidence details.
  6. Choose the destination folder and filename, then set compression if required.
  7. Start the acquisition. If verification was selected, FTK Imager validates the completed image and displays the result.

Creating a Forensic Image with FTK Imager screenshot

Example 2: Mounting a Disk Image with Arsenal Image Mounter

Mounting the image makes later artifact extraction much easier while retaining a controlled forensic workflow.

Creating a Forensic Image with FTK Imager screenshot

Volatile and Non-Volatile Host Evidence

Modern operating systems, with Microsoft Windows being a prime example, generate a plethora of evidence artifacts. These can arise from application execution, file modifications, or even the creation of user accounts. Each of these actions leaves behind a trail, providing invaluable insights for incident response analysts.

Evidence on a host system varies in its nature. The term volatility refers to the persistence of data on a host system, with volatile data being information that disappears after events such as logoffs or power shutdowns. One crucial type of volatile evidence is the system’s active memory. During investigations, especially those concerning malware infections, this live system memory becomes indispensable. Malware often leaves traces within system memory, and losing this evidence can hinder an analyst’s investigation. To capture memory, tools like FTK Imager are commonly employed.

Some other memory acquisition solutions are:

Example : WinPmem

Example 2 : Acquire the vm memory

Usage

C:\Users\X\Downloads> winpmem_mini_x64_rc2.exe memdump.raw

Open vm options suspend

Volatile and Non-Volatile Host Evidence screenshot

locate vmem file

Volatile and Non-Volatile Host Evidence screenshot

Non-volatile evidence remains on disk and includes:

Rapid Triage

Rapid triage collects high-value forensic artifacts from potentially compromised systems and centralizes them for faster analysis. This helps analysts quickly identify systems that require deeper investigation and reconstruct attacker activity.

KAPE (Kroll Artifact Parser and Extractor) is a widely used Windows forensic triage tool. It can quickly collect and parse artifacts from a live system or mounted forensic image, such as the D:\ drive mounted using Arsenal Image Mounter.

KAPE works in two stages:

This allows analysts to rapidly extract useful evidence without manually searching the entire disk.

The collection flow is shown below.

Rapid Triage screenshot

The key is selecting the correct target configuration for the artifacts the investigation actually needs.

Rapid Triage screenshot

KAPE’s target files have a .tkape extension

Example RegistryHivesSystem.tkape contains the masks associated with system-related registry hives and location

Rapid Triage screenshot

KAPE also offers Compound Targets, which are essentially amalgamations of multiple targets.

Rapid Triage screenshot

With only a Target selected, KAPE collects and copies the artifacts to the destination folder.

It does not parse them.

Target = collect/copy Module = parse/process

Rapid Triage screenshot For remote collection at scale, Velociraptor provides an endpoint visibility and collection workflow.

Velociraptor is a potent tool for gathering host-based information using Velociraptor Query Language (VQL) queries. Beyond this, Velociraptor can execute Hunts to amass various artifacts.

Kape target files can be also utilized by velociraptor one being Windows.KapeFiles.Targets Kape is not open source but its file collection logic, encoded in YAML, is accessible via the KapeFiles project. This approach is a staple in Rapid Triage.

The following screenshots show the flow after creating a new hunt.

Rapid Triage screenshot

Rapid Triage screenshot

Rapid Triage screenshot

Rapid Triage screenshot This provides a repeatable way to triage artifacts across endpoints.

Velociraptor can also collect memory remotely:

Rapid Triage screenshot

Extracting Network Evidence

Network evidence helps connect host activity to suspicious communication and attacker infrastructure.

Packet captures provide packet-level evidence and can be analyzed with Wireshark or tcpdump, as covered in earlier modules.

IDS/IPS logs record detections. An IPS may also block traffic that matches configured rules.

NetFlow and sFlow provide high-level traffic metadata such as source, destination, ports, protocols, and volume, but not full packet contents.

Firewall logs show allowed and blocked connections and can reveal scanning, unauthorized access, exploitation attempts, and suspicious outbound traffic.

Velociraptor Collection Question

Question: Recover a Scheduled Task with Velociraptor

Prompt: Visit https://127.0.0.1:8889/app/index.html#/search/all, log in with the lab credentials, select the client, and collect Windows.KapeFiles.Targets using _SANS_Triage. Identify the scheduled task whose name begins with A and ends with g.

I selected the client, ran the relevant artifact collection, and downloaded the results. Question: Recover a Scheduled Task with Velociraptor screenshot

After extraction, the scheduled-task files were under uploads\auto\C%3A\Windows\System32\Tasks.

Question: Recover a Scheduled Task with Velociraptor screenshot

Question: Recover a Scheduled Task with Velociraptor screenshot

Memory Forensics

Memory forensics is the analysis of data stored in RAM. It shows what was happening on a system at the time the memory was captured. Since RAM is volatile, this evidence may disappear after shutdown or restart.

RAM can contain running processes, network connections, open files, registry keys, loaded DLLs and drivers, command history, credentials, malware, encryption keys, and process memory.

Investigation Process

1. Identify Processes

List running processes and check their names, paths, parent processes, and start times. Look for misspelled process names, unusual locations, hidden processes, or strange parent-child relationships.

2. Review DLLs and Handles

Check the DLLs, files, registry keys, and other resources used by suspicious processes. DLLs loaded from temporary folders or user directories may indicate injection or hijacking.

3. Analyze Network Activity

Review active and recent connections. Map external IP addresses and ports back to the responsible process. Confirm whether the process normally requires network access and check its parent process.

4. Detect Code Injection

Look for process hollowing, DLL injection, executable private memory, unmapped memory, or memory regions with unusual permissions such as RWX.

5. Check for Rootkits

Search for hidden processes, drivers, hooks, or kernel changes. Compare different process and driver listings to identify objects that may be hiding from normal tools.

6. Extract Suspicious Files

Dump suspicious processes, DLLs, drivers, or memory regions. Save them securely and analyze them using tools such as YARA, antivirus scanners, debuggers, or malware sandboxes.

Memory forensics helps investigators find malware, detect hidden activity, recover important data, and understand what an attacker did on the system.

Volatility Framework

Volatility is an open-source framework used to analyze memory dumps. It is Python-based, works across multiple platforms, and supports memory images from Windows, Linux, and macOS.

Volatility uses plugins to extract specific information from memory.

Common Plugins

Volatility 2 and Volatility 3 use different commands and plugin formats, so always confirm which version is being used.

A useful Volatility (v2 & v3) cheatsheet can be found here: https://blog.onfvp.com/post/volatility-cheatsheet/

I started with a small set of plugins and expanded only when a result justified the next pivot.

Identify the Profile

Volatility 2 needs the correct profile to understand the operating system and memory structures. Use imageinfo and select one of the suggested profiles.

vol.py -f memory.vmem imageinfo

Example

htb-student@remnux:~$  vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem imageinfo
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_24000, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_24000, Win7SP1x64_23418
                     AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
                     AS Layer2 : FileAddressSpace (/home/htb-student/MemoryDumps/Win7-2515534d.vmem)
                      PAE type : No PAE
                           DTB : 0x187000L
                          KDBG : 0xf80002be9120L
          Number of Processors : 1
     Image Type (Service Pack) : 1
                KPCR for CPU 0 : 0xfffff80002beb000L
             KUSER_SHARED_DATA : 0xfffff78000000000L
           Image date and time : 2023-06-22 12:34:03 UTC+0000
     Image local date and time : 2023-06-22 18:04:03 +0530

Identify Running Processes

Use pslist to view active processes, PIDs, parent PIDs, start times and exit times.

vol.py -f memory.vmem --profile=Win7SP1x64 pslist

Example

htb-student@remnux:~$ vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 pslist
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
Offset(V)          Name                    PID   PPID   Thds     Hnds   Sess  Wow64 Start                          Exit     
------------------ -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0xfffffa8000ca8860 System                    4      0     97      446 ------      0 2023-06-22 12:04:39 UTC+0000            
0xfffffa8001a64920 smss.exe                264      4      2       29 ------      0 2023-06-22 12:04:39 UTC+0000            
0xfffffa80028a39a0 csrss.exe               352    344      8      626      0      0 2023-06-22 12:04:40 UTC+0000            
0xfffffa8002a51730 wininit.exe             404    344      3       76      0      0 2023-06-22 12:04:41 UTC+0000            
0xfffffa800291eb00 csrss.exe               416    396      9      307      1      0 2023-06-22 12:04:41 UTC+0000            
0xfffffa8002a86340 winlogon.exe            464    396      3      113      1      0 2023-06-22 12:04:41 UTC+0000            
0xfffffa8002ad8b00 services.exe            508    404      8      226      0      0 2023-06-22 12:04:41 UTC+0000            
0xfffffa8002adbb00 lsass.exe               516    404      6      585      0      0 2023-06-22 12:04:41 UTC+0000            
0xfffffa8002ae6b00 lsm.exe                 524    404      9      149      0      0 2023-06-22 12:04:41 UTC+0000            
0xfffffa8002b4f720 svchost.exe             628    508     10      366      0      0 2023-06-22 12:04:42 UTC+0000            
0xfffffa8002b7bb00 svchost.exe             696    508      7      288      0      0 2023-06-22 12:04:42 UTC+0000            
0xfffffa8002ba0b00 svchost.exe             744    508     18      455      0      0 2023-06-22 12:04:42 UTC+0000            
0xfffffa8002c00280 svchost.exe             868    508     19      443      0      0 2023-06-22 12:04:43 UTC+0000            
0xfffffa8002c52710 svchost.exe             920    508     17      599      0      0 2023-06-22 12:04:43 UTC+0000            
0xfffffa8002c5c680 svchost.exe             964    508     28      838      0      0 2023-06-22 12:04:43 UTC+0000            
0xfffffa80022679b0 svchost.exe            1000    508     13      365      0      0 2023-06-22 12:04:44 UTC+0000            
0xfffffa8002d15b00 spoolsv.exe            1120    508     13      273      0      0 2023-06-22 12:04:45 UTC+0000            
0xfffffa8002d4f9b0 svchost.exe            1156    508     18      308      0      0 2023-06-22 12:04:45 UTC+0000            
0xfffffa8002d2f060 svchost.exe            1268    508     11      165      0      0 2023-06-22 12:04:45 UTC+0000            
0xfffffa8002d2d060 svchost.exe            1348    508     15      258      0      0 2023-06-22 12:04:45 UTC+0000            
0xfffffa8000d78b00 VGAuthService.         1412    508      4       96      0      0 2023-06-22 12:04:45 UTC+0000            
0xfffffa8002db6b00 vm3dservice.ex         1440    508      4       61      0      0 2023-06-22 12:04:46 UTC+0000            
0xfffffa8002e2e9b0 vmtoolsd.exe           1468    508     13      299      0      0 2023-06-22 12:04:46 UTC+0000            
0xfffffa8002e45a70 vm3dservice.ex         1488   1440      2       45      1      0 2023-06-22 12:04:46 UTC+0000            
0xfffffa8002f58b00 svchost.exe            1724    508      6       92      0      0 2023-06-22 12:04:47 UTC+0000            
0xfffffa8002fa2b00 WmiPrvSE.exe           1908    628      9      197      0      0 2023-06-22 12:04:47 UTC+0000            
0xfffffa8002f8fb00 dllhost.exe            1968    508     13      190      0      0 2023-06-22 12:04:47 UTC+0000            
0xfffffa8003007b00 msdtc.exe              1960    508     12      145      0      0 2023-06-22 12:04:51 UTC+0000            
0xfffffa8001bfbb00 taskhost.exe           2432    508      9      241      1      0 2023-06-22 12:05:13 UTC+0000            
0xfffffa80027ca970 dwm.exe                2484    868      5      152      1      0 2023-06-22 12:05:13 UTC+0000            
0xfffffa8001d27b00 explorer.exe           2508   2472     24      843      1      0 2023-06-22 12:05:13 UTC+0000            
0xfffffa80123fc590 vmtoolsd.exe           2600   2508      8      182      1      0 2023-06-22 12:05:14 UTC+0000            
0xfffffa80027edb00 SearchIndexer.         2756    508     17      800      0      0 2023-06-22 12:05:22 UTC+0000            
0xfffffa80023e7750 cmd.exe                3040   2508      1       21      1      0 2023-06-22 12:05:39 UTC+0000            
0xfffffa8001d19060 conhost.exe            3048    416      2       53      1      0 2023-06-22 12:05:39 UTC+0000            
0xfffffa8002d95870 taskmgr.exe            2648    464      6      113      1      0 2023-06-22 12:05:59 UTC+0000            
0xfffffa8000e0fb00 ProcessHacker.          716   2508      9      476      1      0 2023-06-22 12:06:29 UTC+0000            
0xfffffa8000eee060 sppsvc.exe             1080    508      4      146      0      0 2023-06-22 12:06:47 UTC+0000            
0xfffffa8000ea6a00 svchost.exe             608    508     15      431      0      0 2023-06-22 12:06:47 UTC+0000            
0xfffffa8000e2e620 wmpnetwk.exe           2968    508     18      442      0      0 2023-06-22 12:06:48 UTC+0000            
0xfffffa80022af430 ida64.exe              2248   2508      7      340      1      0 2023-06-22 12:16:18 UTC+0000            
0xfffffa8001420300 x32dbg.exe             2820   2508     20      480      1      1 2023-06-22 12:23:34 UTC+0000            
0xfffffa8000ee96d0 Ransomware.wan         1512   2820     11      167      1      1 2023-06-22 12:23:41 UTC+0000            
0xfffffa8002ca4240 Ransomware.wan         2320    508    117      497      0      1 2023-06-22 12:30:19 UTC+0000            
0xfffffa8002ad9560 dllhost.exe            1876    628      4       79      1      0 2023-06-22 12:30:20 UTC+0000            
0xfffffa8001d0f8b0 tasksche.exe           2972   1512      0 --------      1      0 2023-06-22 12:31:13 UTC+0000   2023-06-22 12:31:43 UTC+0000
0xfffffa8001d22b00 tasksche.exe           1792   1044      8       82      0      1 2023-06-22 12:31:13 UTC+0000            
0xfffffa8002fa3060 SearchProtocol          852   2756      8      289      0      0 2023-06-22 12:31:15 UTC+0000            
0xfffffa8002572060 @WanaDecryptor         1060   1792      2       71      0      1 2023-06-22 12:31:27 UTC+0000            
0xfffffa8001568060 taskhsvc.exe           3012   1060      4      101      0      1 2023-06-22 12:31:29 UTC+0000            
0xfffffa8001ddb060 conhost.exe            2348    352      1       32      0      0 2023-06-22 12:31:29 UTC+0000            
0xfffffa8000df81b0 VSSVC.exe               288    508      6      116      0      0 2023-06-22 12:31:43 UTC+0000            
0xfffffa800141e9a0 @WanaDecryptor         3252   3212      1       75      1      1 2023-06-22 12:31:45 UTC+0000            
0xfffffa80014e4a70 MpCmdRun.exe           3436   3412      5      116      0      0 2023-06-22 12:32:12 UTC+0000            
0xfffffa80014c12c0 SearchFilterHo         3904   2756      6      109      0      0 2023-06-22 12:33:18 UTC+0000            
0xfffffa8000f2f1c0 audiodg.exe            4048    744      6      128      0      0 2023-06-22 12:33:33 UTC+0000            
0xfffffa8000dbc5a0 cmd.exe                2080   1468      0 --------      0      0 2023-06-22 12:34:03 UTC+0000   2023-06-22 12:34:03 UTC+0000
0xfffffa8000f90b00 conhost.exe            3292    352      0 --------      0      0 2023-06-22 12:34:03 UTC+0000   2023-06-22 12:34:03 UTC+0000
0xfffffa8000f7b790 ipconfig.exe           2360   2080      0 --------      0      0 2023-06-22 12:34:03 UTC+0000   2023-06-22 12:34:03 UTC+0000

Check for unusual names, suspicious parent-child relationships and processes running from unexpected locations.

Analyze Network Activity

netscan shows active connections, listening ports, IP addresses and the process responsible.

vol.py -f memory.vmem --profile=Win7SP1x64 netscan

``

htb-student@remnux:~$ vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 netscan
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
Offset(P)          Proto    Local Address                  Foreign Address      State            Pid      Owner          Created
0x1a15caa0         UDPv4    0.0.0.0:3702                   *:*                                   1348     svchost.exe    2023-06-22 12:05:10 UTC+0000
0x1a15caa0         UDPv6    :::3702                        *:*                                   1348     svchost.exe    2023-06-22 12:05:10 UTC+0000
0x1fd7cac0         TCPv4    0.0.0.0:49155                  0.0.0.0:0            LISTENING        508      services.exe
0x1fd7cac0         TCPv6    :::49155                       :::0                 LISTENING        508      services.exe
0x3da01a70         UDPv4    0.0.0.0:3702                   *:*                                   1348     svchost.exe    2023-06-22 12:05:10 UTC+0000
0x3da0b130         UDPv4    0.0.0.0:0                      *:*                                   1000     svchost.exe    2023-06-22 12:05:02 UTC+0000
0x3da0b130         UDPv6    :::0                           *:*                                   1000     svchost.exe    2023-06-22 12:05:02 UTC+0000
0x3dcf1010         UDPv4    0.0.0.0:62718                  *:*                                   1348     svchost.exe    2023-06-22 12:04:46 UTC+0000
0x3dcf15b0         UDPv4    0.0.0.0:62719                  *:*                                   1348     svchost.exe    2023-06-22 12:04:46 UTC+0000
0x3dcf15b0         UDPv6    :::62719                       *:*                                   1348     svchost.exe    2023-06-22 12:04:46 UTC+0000
0x3da15010         TCPv4    0.0.0.0:49156                  0.0.0.0:0            LISTENING        516      lsass.exe
0x3da15010         TCPv6    :::49156                       :::0                 LISTENING        516      lsass.exe
0x3dc69860         TCPv4    0.0.0.0:5357                   0.0.0.0:0            LISTENING        4        System
0x3dc69860         TCPv6    :::5357                        :::0                 LISTENING        4        System
0x3dca3ee0         TCPv4    0.0.0.0:49154                  0.0.0.0:0            LISTENING        964      svchost.exe
0x3dca3ee0         TCPv6    :::49154                       :::0                 LISTENING        964      svchost.exe
0x3dcf7280         TCPv4    0.0.0.0:49155                  0.0.0.0:0            LISTENING        508      services.exe
0x3dd07540         TCPv4    0.0.0.0:445                    0.0.0.0:0            LISTENING        4        System
0x3dd07540         TCPv6    :::445                         :::0                 LISTENING        4        System
0x3e5f7cd0         UDPv4    0.0.0.0:3702                   *:*                                   1348     svchost.exe    2023-06-22 12:05:10 UTC+0000
0x3e5f7cd0         UDPv6    :::3702                        *:*                                   1348     svchost.exe    2023-06-22 12:05:10 UTC+0000
0x3deff8d0         TCPv4    0.0.0.0:10243                  0.0.0.0:0            LISTENING        4        System
0x3deff8d0         TCPv6    :::10243                       :::0                 LISTENING        4        System
0x3df01ba0         TCPv4    0.0.0.0:49154                  0.0.0.0:0            LISTENING        964      svchost.exe
0x3e194410         TCPv4    0.0.0.0:135                    0.0.0.0:0            LISTENING        696      svchost.exe
0x3e195840         TCPv4    0.0.0.0:135                    0.0.0.0:0            LISTENING        696      svchost.exe
0x3e195840         TCPv6    :::135                         :::0                 LISTENING        696      svchost.exe
0x3e1ab8f0         TCPv4    0.0.0.0:49152                  0.0.0.0:0            LISTENING        404      wininit.exe
0x3e1fe300         TCPv4    0.0.0.0:49153                  0.0.0.0:0            LISTENING        744      svchost.exe
0x3e1fe300         TCPv6    :::49153                       :::0                 LISTENING        744      svchost.exe
0x3e1fecd0         TCPv4    0.0.0.0:49153                  0.0.0.0:0            LISTENING        744      svchost.exe
0x3e963ad0         TCPv4    127.0.0.1:9050                 0.0.0.0:0            LISTENING        3012     taskhsvc.exe
0x3ec4f620         TCPv4    0.0.0.0:49152                  0.0.0.0:0            LISTENING        404      wininit.exe
0x3ec4f620         TCPv6    :::49152                       :::0                 LISTENING        404      wininit.exe
0x3f1fd6f0         TCPv4    0.0.0.0:554                    0.0.0.0:0            LISTENING        2968     wmpnetwk.exe
0x3f1fd6f0         TCPv6    :::554                         :::0                 LISTENING        2968     wmpnetwk.exe
0x3ec2d010         TCPv4    127.0.0.1:50313                127.0.0.1:50314      ESTABLISHED      -1
0x3ecb1220         TCPv4    127.0.0.1:50314                127.0.0.1:50313      ESTABLISHED      -1
0x3f3ced90         UDPv4    0.0.0.0:3702                   *:*                                   1348     svchost.exe    2023-06-22 12:05:10 UTC+0000
0x3f2284c0         TCPv4    0.0.0.0:49156                  0.0.0.0:0            LISTENING        516      lsass.exe
0x3fcfd930         UDPv4    127.0.0.1:1900                 *:*                                   1348     svchost.exe    2023-06-22 12:06:48 UTC+0000
0x3fd1bbf0         UDPv6    ::1:61543                      *:*                                   1348     svchost.exe    2023-06-22 12:06:48 UTC+0000
0x3fd28310         UDPv4    127.0.0.1:61544                *:*                                   1348     svchost.exe    2023-06-22 12:06:48 UTC+0000
0x3fd2b420         UDPv6    ::1:1900                       *:*                                   1348     svchost.exe    2023-06-22 12:06:48 UTC+0000
0x3fd4a4a0         UDPv4    0.0.0.0:5004                   *:*                                   2968     wmpnetwk.exe   2023-06-22 12:06:48 UTC+0000
0x3fd4a4a0         UDPv6    :::5004                        *:*                                   2968     wmpnetwk.exe   2023-06-22 12:06:48 UTC+0000
0x3fd4aa90         UDPv4    0.0.0.0:5005                   *:*                                   2968     wmpnetwk.exe   2023-06-22 12:06:48 UTC+0000
0x3fd4adb0         UDPv4    0.0.0.0:5004                   *:*                                   2968     wmpnetwk.exe   2023-06-22 12:06:48 UTC+0000
0x3fd5fec0         UDPv4    0.0.0.0:5005                   *:*                                   2968     wmpnetwk.exe   2023-06-22 12:06:48 UTC+0000
0x3fd5fec0         UDPv6    :::5005                        *:*                                   2968     wmpnetwk.exe   2023-06-22 12:06:48 UTC+0000
0x3fc02ca0         TCPv4    0.0.0.0:554                    0.0.0.0:0            LISTENING        2968     wmpnetwk.exe
0x3fca6010         TCPv4    0.0.0.0:2869                   0.0.0.0:0            LISTENING        4        System
0x3fca6010         TCPv6    :::2869                        :::0                 LISTENING        4        System
0x3fc4f600         TCPv4    127.0.0.1:55206                127.0.0.1:9050       ESTABLISHED      -1
0x3fe604f0         TCPv4    127.0.0.1:9050                 127.0.0.1:55206      ESTABLISHED      -1

connscan can also recover older TCP connection artifacts that are no longer active. connscan searches raw RAM for Windows TCP connection records, called _TCPT_OBJECT structures.

Detect Injected Code

malfind searches for suspicious executable memory, including injected code and memory regions with permissions such as PAGE_EXECUTE_READWRITE.

vol.py -f memory.vmem --profile=Win7SP1x64 malfind --pid=608

A malfind result is suspicious, but it should still be validated before calling it malicious.

htb-student@remnux:~$  vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 malfind --pid=608
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
Process: svchost.exe Pid: 608 Address: 0x12350000
Vad Tag: VadS Protection: PAGE_EXECUTE_READWRITE
Flags: CommitCharge: 128, MemCommit: 1, PrivateMemory: 1, Protection: 6

0x0000000012350000  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0x0000000012350010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0x0000000012350020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0x0000000012350030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0x0000000012350000 0000             ADD [EAX], AL
0x0000000012350002 0000             ADD [EAX], AL
0x0000000012350004 0000             ADD [EAX], AL
0x0000000012350006 0000             ADD [EAX], AL
0x0000000012350008 0000             ADD [EAX], AL
0x000000001235000a 0000             ADD [EAX], AL
0x000000001235000c 0000             ADD [EAX], AL
0x000000001235000e 0000             ADD [EAX], AL
0x0000000012350010 0000             ADD [EAX], AL
0x0000000012350012 0000             ADD [EAX], AL
0x0000000012350014 0000             ADD [EAX], AL
0x0000000012350016 0000             ADD [EAX], AL
0x0000000012350018 0000             ADD [EAX], AL
0x000000001235001a 0000             ADD [EAX], AL
0x000000001235001c 0000             ADD [EAX], AL
0x000000001235001e 0000             ADD [EAX], AL
0x0000000012350020 0000             ADD [EAX], AL
0x0000000012350022 0000             ADD [EAX], AL
0x0000000012350024 0000             ADD [EAX], AL
0x0000000012350026 0000             ADD [EAX], AL
0x0000000012350028 0000             ADD [EAX], AL
0x000000001235002a 0000             ADD [EAX], AL
0x000000001235002c 0000             ADD [EAX], AL
0x000000001235002e 0000             ADD [EAX], AL
0x0000000012350030 0000             ADD [EAX], AL
0x0000000012350032 0000             ADD [EAX], AL
0x0000000012350034 0000             ADD [EAX], AL
0x0000000012350036 0000             ADD [EAX], AL
0x0000000012350038 0000             ADD [EAX], AL
0x000000001235003a 0000             ADD [EAX], AL
0x000000001235003c 0000             ADD [EAX], AL
0x000000001235003e 0000             ADD [EAX], AL

Examine Process Handles

handles shows files, registry keys, processes and other objects being accessed by a process.

vol.py -f memory.vmem --profile=Win7SP1x64 handles -p 1512

Filtering handles by object type-such as File, Key, or Process-helps explain what the process was interacting with at capture time.

htb-student@remnux:~$ vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 handles -p 1512 --object-type=Key
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
Offset(V)             Pid             Handle             Access Type             Details
------------------ ------ ------------------ ------------------ ---------------- -------
0xfffff8a001628ee0   1512                0x4                0x9 Key              MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\IMAGE FILE EXECUTION OPTIONS
0xfffff8a00221e7e0   1512               0x14                0x9 Key              MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\IMAGE FILE EXECUTION OPTIONS
0xfffff8a0023b3490   1512               0x20            0x20019 Key              MACHINE\SYSTEM\CONTROLSET001\CONTROL\NLS\SORTING\VERSIONS
0xfffff8a001f1e300   1512               0x38            0xf003f Key              MACHINE
0xfffff8a001f3b410   1512               0x40                0x1 Key              MACHINE\SYSTEM\CONTROLSET001\CONTROL\SESSION MANAGER
0xfffff8a001f35280   1512               0x58                0x1 Key              MACHINE\SYSTEM\CONTROLSET001\CONTROL\NLS\CUSTOMLOCALE
0xfffff8a001f18440   1512               0x9c            0xf003f Key              USER\S-1-5-21-3232251811-3497904625-37069028-1001
0xfffff8a001d4e1f0   1512               0xa0            0x2001f Key              USER\S-1-5-21-3232251811-3497904625-37069028-1001\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS
0xfffff8a00080e8a0   1512               0xc0            0xf003f Key              USER
0xfffff8a00237dc10   1512               0xe0                0x1 Key              USER\S-1-5-21-3232251811-3497904625-37069028-1001\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\EXPLORER
0xfffff8a001f63a80   1512              0x120                0x1 Key              MACHINE\SOFTWARE\WOW6432NODE\MICROSOFT\INTERNET EXPLORER\MAIN\FEATURECONTROL
0xfffff8a00208b750   1512              0x124            0x20019 Key              MACHINE\SOFTWARE\POLICIES\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS
0xfffff8a0022b6850   1512              0x128            0x20019 Key              USER\S-1-5-21-3232251811-3497904625-37069028-1001\SOFTWARE\POLICIES\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS
0xfffff8a000d807b0   1512              0x12c            0x20019 Key              USER\S-1-5-21-3232251811-3497904625-37069028-1001\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS
0xfffff8a0013b2920   1512              0x130            0x20019 Key              MACHINE\SOFTWARE\POLICIES
0xfffff8a001f7b610   1512              0x134            0x20019 Key              USER\S-1-5-21-3232251811-3497904625-37069028-1001\SOFTWARE\POLICIES
0xfffff8a0022f8ad0   1512              0x138            0x20019 Key              USER\S-1-5-21-3232251811-3497904625-37069028-1001\SOFTWARE
0xfffff8a0026778a0   1512              0x13c            0x20019 Key              MACHINE\SOFTWARE\WOW6432NODE
0xfffff8a000f4fb00   1512              0x140            0x20019 Key              MACHINE\SOFTWARE\WOW6432NODE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS
0xfffff8a001efb870   1512              0x154            0xf003f Key              MACHINE\SYSTEM\CONTROLSET001\SERVICES\WINSOCK2\PARAMETERS\PROTOCOL_CATALOG9
0xfffff8a001f683c0   1512              0x15c            0xf003f Key              MACHINE\SYSTEM\CONTROLSET001\SERVICES\WINSOCK2\PARAMETERS\NAMESPACE_CATALOG5
0xfffff8a001f17660   1512              0x164            0x20019 Key              USER\S-1-5-21-3232251811-3497904625-37069028-1001\SOFTWARE\MICROSOFT\INTERNET EXPLORER\MAIN
0xfffff8a0012cbe90   1512              0x168            0x20019 Key              MACHINE\SOFTWARE\WOW6432NODE\MICROSOFT\INTERNET EXPLORER\MAIN
0xfffff8a00000c610   1512              0x1b8            0x2001f Key              USER\S-1-5-21-3232251811-3497904625-37069028-1001\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS\ZONEMAP
0xfffff8a0025cf4c0   1512              0x1bc            0x20019 Key              MACHINE\SOFTWARE\WOW6432NODE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS\ZONEMAP
0xfffff8a00125d610   1512              0x1d0                0xf Key              USER\S-1-5-21-3232251811-3497904625-37069028-1001\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS\5.0\CACHE
0xfffff8a0023dcdd0   1512              0x22c            0xf003f Key              MACHINE\SOFTWARE\CLASSES
htb-student@remnux:~$  vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 handles -p 1512 --object-type=File
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
Offset(V)             Pid             Handle             Access Type             Details
------------------ ------ ------------------ ------------------ ---------------- -------
0xfffffa8001d162e0   1512               0x10           0x100020 File             \Device\HarddiskVolume2\Windows
0xfffffa800228adc0   1512               0x1c           0x100020 File             \Device\HarddiskVolume2\Users\Analyst\Desktop\Samples
0xfffffa8000df8070   1512              0x110           0x12019f File             \Device\HarddiskVolume2\Users\Analyst\AppData\Local\Microsoft\Windows\Temporary Internet Files\counters.dat
0xfffffa8002210cd0   1512              0x170           0x100080 File             \Device\Nsi
0xfffffa8000dedf20   1512              0x1e4           0x100001 File             \Device\KsecDD
0xfffffa8002f70700   1512              0x23c           0x120089 File             \Device\HarddiskVolume2\Windows\Registration\R000000000006.clb
htb-student@remnux:~$ vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 handles -p 1512 --object-type=Process
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
Offset(V)             Pid             Handle             Access Type             Details
------------------ ------ ------------------ ------------------ ---------------- -------
0xfffffa8001d0f8b0   1512              0x29c           0x1fffff Process          tasksche.exe(2972)

Identify Windows Services

svcscan lists Windows services, their state, startup type, PID and binary path.

vol.py -f memory.vmem --profile=Win7SP1x64 svcscan
htb-student@remnux:~$ vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 svcscan | more
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
Offset: 0xb755a0
Order: 71
Start: SERVICE_AUTO_START
Process ID: 628
Service Name: DcomLaunch
Display Name: DCOM Server Process Launcher
Service Type: SERVICE_WIN32_SHARE_PROCESS
Service State: SERVICE_RUNNING
Binary Path: C:\Windows\system32\svchost.exe -k DcomLaunch

Offset: 0xb754b0
Order: 70
Start: SERVICE_DEMAND_START
Process ID: -
Service Name: dc21x4vm
Display Name: dc21x4vm
Service Type: SERVICE_KERNEL_DRIVER
Service State: SERVICE_STOPPED
Binary Path: -

Offset: 0xb753c0
Order: 69
Start: SERVICE_AUTO_START
Process ID: 868
Service Name: CscService
Display Name: Offline Files
Service Type: SERVICE_WIN32_SHARE_PROCESS
Service State: SERVICE_RUNNING
Binary Path: C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted
--More--

DLLs loaded from temporary or user-writable directories may be suspicious.

Identify Registry Hives

hivelist lists registry hives available in memory, including SYSTEM, SOFTWARE, SAM, SECURITY and user NTUSER.DAT files.

vol.py -f memory.vmem --profile=Win7SP1x64 hivelist

The hive memory offset can later be used to extract registry keys or values.

htb-student@remnux:~$ vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 hivelist
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
Virtual            Physical           Name
------------------ ------------------ ----
0xfffff8a001710010 0x000000002c2e4010 \??\C:\Users\Analyst\AppData\Local\Microsoft\Windows\UsrClass.dat
0xfffff8a001d4b410 0x000000001651f410 \??\C:\System Volume Information\Syscache.hve
0xfffff8a00000f010 0x0000000026de8010 [no name]
0xfffff8a000024010 0x00000000273f3010 \REGISTRY\MACHINE\SYSTEM
0xfffff8a000058010 0x0000000026727010 \REGISTRY\MACHINE\HARDWARE
0xfffff8a0000f7410 0x0000000019824410 \SystemRoot\System32\Config\DEFAULT
0xfffff8a000844010 0x000000001a979010 \Device\HarddiskVolume1\Boot\BCD
0xfffff8a0009d6010 0x000000001998d010 \SystemRoot\System32\Config\SOFTWARE
0xfffff8a000e0a010 0x000000000724e010 \SystemRoot\System32\Config\SAM
0xfffff8a000e36010 0x0000000012f0e010 \SystemRoot\System32\Config\SECURITY
0xfffff8a000f7e010 0x0000000012f7b010 \??\C:\Windows\ServiceProfiles\NetworkService\NTUSER.DAT
0xfffff8a00100c410 0x0000000006de7410 \??\C:\Windows\ServiceProfiles\LocalService\NTUSER.DAT
0xfffff8a0016a8010 0x000000002aecd010 \??\C:\Users\Analyst\ntuser.dat

Rootkit Analysis with Volatility 2

Windows keeps information about every running process inside a kernel structure called EPROCESS.

Each EPROCESS structure contains ActiveProcessLinks, which connects all running processes in a doubly linked list:

Rootkit Analysis with Volatility 2 screenshot

Windows and normal monitoring tools follow this list to identify running processes.

How a Rootkit Hides a Process

A rootkit can use Direct Kernel Object Manipulation (DKOM) to remove its process from the ActiveProcessLinks list.

How a Rootkit Hides a Process screenshot

The malicious process is still running and its EPROCESS structure may still exist in memory, but normal tools cannot see it because it has been unlinked from the process list.

Think of it like removing a person’s name from an attendance sheet while the person is still inside the room.

Detecting the Hidden Process

The psscan plugin scans raw memory for EPROCESS structures instead of relying only on the linked process list.

vol.py -f rootkit.vmem --profile=<PROFILE> psscan

Because of this, psscan may find a process that a rootkit tried to hide using DKOM.

htb-student@remnux:~$  vol.py -f /home/htb-student/MemoryDumps/rootkit.vmem psscan
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
Offset(P)          Name                PID   PPID PDB        Time created                   Time exited
------------------ ---------------- ------ ------ ---------- ------------------------------ ------------------------------
0x0000000001a404b8 ipconfig.exe       2988   2980 0x091403c0 2023-06-24 07:31:16 UTC+0000   2023-06-24 07:31:17 UTC+0000
0x0000000001a63138 cmd.exe            2980   2004 0x091401c0 2023-06-24 07:31:16 UTC+0000   2023-06-24 07:31:17 UTC+0000
0x0000000001b24888 explorer.exe       1444    624 0x09140320 2023-06-23 16:34:38 UTC+0000
0x0000000001bc62a8 tasksche.exe       1084   1684 0x091403e0 2023-06-24 07:28:16 UTC+0000
0x0000000001c3d2d8 @WanaDecryptor@    2248   1084 0x091403a0 2023-06-24 07:29:20 UTC+0000
0x0000000001c4e020 cmd.exe            1932   1444 0x09140380 2023-06-24 07:27:16 UTC+0000
0x0000000001c54da0 cmd.exe            2396   2264 0x091401c0 2023-06-24 07:29:30 UTC+0000   2023-06-24 07:29:37 UTC+0000
0x0000000001c8a020 @WanaDecryptor@    2324   2284 0x09140440 2023-06-24 07:29:20 UTC+0000
0x0000000001cb7628 test.exe           1344    668 0x09140360 2023-06-24 07:28:15 UTC+0000
0x0000000002063ab8 svchost.exe        1220    668 0x09140160 2023-06-23 16:14:54 UTC+0000
0x0000000002093020 services.exe        668    624 0x09140080 2023-06-23 16:14:53 UTC+0000
0x0000000002094da0 ctfmon.exe          564    232 0x09140240 2023-06-23 16:15:09 UTC+0000
0x0000000002095020 csrss.exe           600    368 0x09140040 2023-06-23 16:14:51 UTC+0000
0x000000000209fa78 vmtoolsd.exe       2004    668 0x091402a0 2023-06-23 16:15:24 UTC+0000
0x00000000020a2a90 spoolsv.exe        1556    668 0x091401a0 2023-06-23 16:14:59 UTC+0000
0x00000000020ceb40 alg.exe            1520    668 0x091402c0 2023-06-23 16:15:26 UTC+0000
0x00000000020ff870 wmiprvse.exe        560    880 0x09140300 2023-06-23 16:15:26 UTC+0000
0x000000000216a650 taskhsvc.exe       2340   2248 0x09140340 2023-06-24 07:29:22 UTC+0000
0x0000000002172da0 winlogon.exe        624    368 0x09140060 2023-06-23 16:14:52 UTC+0000
0x00000000021adda0 msmsgs.exe          548    232 0x09140220 2023-06-23 16:15:09 UTC+0000
0x000000000224b128 svchost.exe         992    668 0x09140100 2023-06-23 16:14:53 UTC+0000
0x000000000225cda0 VGAuthService.e    1832    668 0x09140280 2023-06-23 16:15:16 UTC+0000
0x0000000002269490 vmacthlp.exe        848    668 0x091400c0 2023-06-23 16:14:53 UTC+0000
0x0000000002288770 wmic.exe           2416   2396 0x09140400 2023-06-24 07:29:30 UTC+0000   2023-06-24 07:29:37 UTC+0000
0x00000000022ee020 cmd.exe            1628   1444 0x091402e0 2023-06-24 07:25:01 UTC+0000
0x0000000002346990 svchost.exe         880    668 0x091400e0 2023-06-23 16:14:53 UTC+0000
0x00000000023c7618 taskmgr.exe         260   1444 0x091401e0 2023-06-24 07:27:55 UTC+0000
0x0000000002419850 svchost.exe        1136    668 0x09140120 2023-06-23 16:14:53 UTC+0000
0x000000000248c020 smss.exe            368      4 0x09140020 2023-06-23 16:14:49 UTC+0000
0x000000000248f020 svchost.exe        1176    668 0x09140140 2023-06-23 16:14:53 UTC+0000
0x000000000249fda0 vmtoolsd.exe        540    232 0x09140180 2023-06-23 16:15:09 UTC+0000
0x00000000024a57a8 lsass.exe           680    624 0x091400a0 2023-06-23 16:14:53 UTC+0000
0x00000000024cb928 svchost.exe        1708    668 0x09140260 2023-06-23 16:15:16 UTC+0000
0x000000000250e020 rundll32.exe        532    232 0x09140200 2023-06-23 16:15:09 UTC+0000
0x00000000025c8830 System                4      0 0x0031c000

Detecting the Hidden Process screenshot

In the output below, pslist could not find the rootkit-hidden test.exe, while psscan recovered its EPROCESS structure from memory.

htb-student@remnux:~$ vol.py -f /home/htb-student/MemoryDumps/rootkit.vmem pslist
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
Offset(V)  Name                    PID   PPID   Thds     Hnds   Sess  Wow64 Start                          Exit                
---------- -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0x823c8830 System                    4      0     58      476 ------      0                                                    
0x8228c020 smss.exe                368      4      3       19 ------      0 2023-06-23 16:14:49 UTC+0000                       
0x81e95020 csrss.exe               600    368     14      544      0      0 2023-06-23 16:14:51 UTC+0000                       
0x81f72da0 winlogon.exe            624    368     19      514      0      0 2023-06-23 16:14:52 UTC+0000                       
0x81e93020 services.exe            668    624     16      277      0      0 2023-06-23 16:14:53 UTC+0000                       
0x822a57a8 lsass.exe               680    624     23      358      0      0 2023-06-23 16:14:53 UTC+0000                       
0x82069490 vmacthlp.exe            848    668      1       25      0      0 2023-06-23 16:14:53 UTC+0000                       
0x82146990 svchost.exe             880    668     18      202      0      0 2023-06-23 16:14:53 UTC+0000                       
0x8204b128 svchost.exe             992    668     11      272      0      0 2023-06-23 16:14:53 UTC+0000                       
0x82219850 svchost.exe            1136    668     84     1614      0      0 2023-06-23 16:14:53 UTC+0000                       
0x8228f020 svchost.exe            1176    668      5       77      0      0 2023-06-23 16:14:53 UTC+0000                       
0x81e63ab8 svchost.exe            1220    668     15      218      0      0 2023-06-23 16:14:54 UTC+0000                       
0x81ea2a90 spoolsv.exe            1556    668     11      129      0      0 2023-06-23 16:14:59 UTC+0000                       
0x8230e020 rundll32.exe            532    232      4       78      0      0 2023-06-23 16:15:09 UTC+0000                       
0x8229fda0 vmtoolsd.exe            540    232      6      247      0      0 2023-06-23 16:15:09 UTC+0000                       
0x81fadda0 msmsgs.exe              548    232      2      190      0      0 2023-06-23 16:15:09 UTC+0000                       
0x81e94da0 ctfmon.exe              564    232      1       75      0      0 2023-06-23 16:15:09 UTC+0000                       
0x822cb928 svchost.exe            1708    668      5       87      0      0 2023-06-23 16:15:16 UTC+0000                       
0x8205cda0 VGAuthService.e        1832    668      2       60      0      0 2023-06-23 16:15:16 UTC+0000                       
0x81e9fa78 vmtoolsd.exe           2004    668      7      278      0      0 2023-06-23 16:15:24 UTC+0000                       
0x81eff870 wmiprvse.exe            560    880     12      236      0      0 2023-06-23 16:15:26 UTC+0000                       
0x81eceb40 alg.exe                1520    668      6      107      0      0 2023-06-23 16:15:26 UTC+0000                       
0x81924888 explorer.exe           1444    624     17      524      0      0 2023-06-23 16:34:38 UTC+0000                       
0x821c7618 taskmgr.exe             260   1444      3       75      0      0 2023-06-24 07:27:55 UTC+0000                       
0x81a3d2d8 @WanaDecryptor@        2248   1084      3       57      0      0 2023-06-24 07:29:20 UTC+0000                       
0x81a8a020 @WanaDecryptor@        2324   2284      2       56      0      0 2023-06-24 07:29:20 UTC+0000                       
0x81f6a650 taskhsvc.exe           2340   2248      2       60      0      0 2023-06-24 07:29:22 UTC+0000                       
0x81863138 cmd.exe                2980   2004      0 --------      0      0 2023-06-24 07:31:16 UTC+0000   2023-06-24 07:31:17 UTC+0000
0x818404b8 ipconfig.exe           2988   2980      0 --------      0      0 2023-06-24 07:31:16 UTC+0000   2023-06-24 07:31:17 UTC+0000
htb-student@remnux:~$

The main idea is:

A rootkit unlinks the process from the normal list, but psscan searches memory directly and may still find its EPROCESS structure.

Memory Analysis Using Strings

The strings command extracts readable text from a memory dump. It can reveal IP addresses, email addresses, file paths, commands, passwords, and malware-related text.

Find IP Addresses

strings memory.vmem | grep -E "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"

This searches the dump for text that looks like an IPv4 address. The results may include real connections, configuration data, or harmless system values.

Find Email Addresses

strings memory.vmem | grep -oE "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b"

This searches for email-like patterns. Some results may be genuine, while others may be random text that only looks like an email address.

Find Command-Line Artifacts

strings memory.vmem | grep -E "(cmd|powershell|bash)[^\s]+"

This can reveal commands executed through Command Prompt, PowerShell, or Bash.

strings is useful for quickly finding clues in memory, but the results are not automatically proof of malicious activity. Suspicious findings should be confirmed using Volatility plugins and other forensic evidence.

Memory-Forensics Lab Questions

Question 1: Parent of @WanaDecryptor (PID 1060)

Prompt: Examine /home/htb-student/MemoryDumps/Win7-2515534d.vmem with Volatility and identify the parent process of @WanaDecryptor PID 1060.

I used an AI-assisted one-liner to search the process relationship while keeping the evidence visible in the output.

htb-student@remnux:~$ vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 pslist | awk '$3~/^[0-9]+$/{name[$3]=$2} $2=="@WanaDecryptor"&&$3==1060{ppid=$4} END{print name[ppid]}'
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
tasksche.exe

tasksche.exe ``

Question 2: Suspicious .WNCRYT Handle

Prompt: In the same memory image, inspect the open handles for tasksche.exe PID 1792 and identify the suspicious filename ending in .WNCRYT.

htb-student@remnux:~$ vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 handles -p 1792 --object-type=File | grep -i '\.WNCRYT'
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
0xfffffa8001e1e070   1792              0x148           0x120196 File             \Device\HarddiskVolume2\Windows\Temp\hibsys.WNCRYT

hibsys.WNCRYT

Question 3: Process That Loaded zlib1.dll

Prompt: Examine the same memory image and identify the PID of the process that loaded zlib1.dll.

htb-student@remnux:~$ vol.py -f /home/htb-student/MemoryDumps/Win7-2515534d.vmem --profile=Win7SP1x64 dlllist | awk '/ pid:/{pid=$NF} tolower($0)~/zlib1\.dll/{print pid}'
Volatility Foundation Volatility Framework 2.6.1
/usr/local/lib/python2.7/dist-packages/volatility/plugins/community/YingLi/ssh_agent_key.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends.openssl import backend
WARNING : volatility.debug    : NoneObject as string: Invalid Address 0x0182E048, instantiating LoadTime
WARNING : volatility.debug    : NoneObject as string: Invalid Address 0x00487018, instantiating LoadTime
WARNING : volatility.debug    : NoneObject as string: Invalid Address 0x019AF018, instantiating LoadTime
3012

its 3012

Disk Forensics

Disk forensics examines a forensic image to recover and analyze files, metadata, deleted data, and user activity after volatile evidence has been captured.

Important tool capabilities include:

Autopsy is an open-source forensic platform built on The Sleuth Kit. It supports timeline analysis, keyword searches, web and email artifact extraction, deleted-file recovery, and known hash matching.

The following Autopsy screenshots come from the HTB Academy lab and are retained here as investigation references.

Disk Forensics screenshot

Click data sources for files and directories

Disk Forensics screenshot

Web Artifacts

Disk Forensics screenshot

Check Attached Devices

Disk Forensics screenshot

Recover Deleted Files.

Disk Forensics screenshot

Conduct Keyword Searches

Disk Forensics screenshot

Timeline analysis

Disk Forensics screenshot

Rapid Triage Examination Tools

Eric Zimmerman’s toolset provides many of the parsers used throughout this triage workflow.

https://ericzimmerman.github.io/#!index.md

After installing the required .NET runtime, run the downloaded PowerShell installer script.

PS C:\Users\johndoe\Desktop\Get-ZimmermanTools> .\Get-ZimmermanTools.ps1

Tools Used

Every path below is from the HTB Academy lab.

NTFS Timeline Analysis

MACB Times in NTFS

MACB stands for Modified, Accessed, Changed, and Birth. The terminology and availability vary across file systems and APIs.

NTFS Timestamp Notes

What Each Timestamp Means

General Rules

Operation Modified (M) Accessed (A) Created (B)
File Create Updated Updated Updated
File Modify Updated Usually unchanged Unchanged
File Copy Inherited from source May update Set to copy time
File Access Unchanged May update Unchanged

Examples

File Create

report.txt is created at 10:00 AM.

File Modify

report.txt is edited at 11:00 AM.

File Copy

report.txt is copied to another folder at 12:00 PM.

File Access

report.txt is opened at 1:00 PM without editing.

Quick Memory Rule

Timestamp Storage

NTFS timestamps are stored in the Master File Table ($MFT) under:

Windows File Explorer normally displays timestamps from $STANDARD_INFORMATION.

Timestomping Investigation

Timestomping manipulates the timestamps shown by normal tools such as File Explorer to make a file look older or otherwise blend into the system.

https://attack.mitre.org/techniques/T1070/006/

Loading MFT from MFT explorer

Timestomping Investigation screenshot

Timestomping Investigation screenshot

Note entry sequence on the bottom right 0x16169

The timestamps shown by File Explorer normally come from $STANDARD_INFORMATION.

I cross-checked them against $FILE_NAME using the MFT entry sequence noted above.

PS C:\Users\johndoe\Desktop\Get-ZimmermanTools\net6> .\MFTECmd.exe -f 'C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT' --de 0x16169
MFTECmd version 1.2.2.1

Author: Eric Zimmerman ([email protected])
https://github.com/EricZimmerman/MFTECmd

Command line: -f C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT --de 0x16169

Warning: Administrator privileges not found!

File type: Mft

Processed C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT in 6.8454 seconds

C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT: FILE records found: 93,615 (Free records: 287) File size: 91.8MB


Dumping details for file record with key 00016169-00000004

Entry-seq #: 0x16169-0x4, Offset: 0x585A400, Flags: InUse, Log seq #: 0xCC5FB25, Base Record entry-seq: 0x0-0x0
Reference count: 0x2, FixUp Data Expected: 04-00, FixUp Data Actual: 00-00 | 00-00 (FixUp OK: True)

**** STANDARD INFO ****
  Attribute #: 0x0, Size: 0x60, Content size: 0x48, Name size: 0x0, ContentOffset 0x18. Resident: True
  Flags: Archive, Max Version: 0x0, Flags 2: None, Class Id: 0x0, Owner Id: 0x0, Security Id: 0x557, Quota charged: 0x0, Update sequence #: 0x8B71F8

  Created On:         2022-01-03 16:54:25.2726453
  Modified On:        2023-09-07 08:30:12.4258743
  Record Modified On: 2023-09-07 08:30:12.4565632
  Last Accessed On:   2023-09-07 08:30:12.4258743

**** FILE NAME ****
  Attribute #: 0x3, Size: 0x78, Content size: 0x5A, Name size: 0x0, ContentOffset 0x18. Resident: True

  File name: CHANGE~1.TXT
  Flags: Archive, Name Type: Dos, Reparse Value: 0x0, Physical Size: 0x0, Logical Size: 0x0
  Parent Entry-seq #: 0x16947-0x2

  Created On:         2023-09-07 08:30:12.4258743
  Modified On:        2023-09-07 08:30:12.4258743
  Record Modified On: 2023-09-07 08:30:12.4258743
  Last Accessed On:   2023-09-07 08:30:12.4258743

**** FILE NAME ****
  Attribute #: 0x2, Size: 0x80, Content size: 0x68, Name size: 0x0, ContentOffset 0x18. Resident: True

  File name: ChangedFileTime.txt
  Flags: Archive, Name Type: Windows, Reparse Value: 0x0, Physical Size: 0x0, Logical Size: 0x0
  Parent Entry-seq #: 0x16947-0x2

  Created On:         2023-09-07 08:30:12.4258743
  Modified On:        2023-09-07 08:30:12.4258743
  Record Modified On: 2023-09-07 08:30:12.4258743
  Last Accessed On:   2023-09-07 08:30:12.4258743

**** DATA ****
  Attribute #: 0x1, Size: 0x18, Content size: 0x0, Name size: 0x0, ContentOffset 0x18. Resident: True

  Resident Data

  Data:

    ASCII:
    UNICODE:

User-mode timestomping commonly changes $STANDARD_INFORMATION. $FILE_NAME timestamps often retain the more reliable creation context. The mismatch is evidence consistent with timestomping and should be correlated with other artifacts.


**** STANDARD INFO ****
  Attribute #: 0x0, Size: 0x60, Content size: 0x48, Name size: 0x0, ContentOffset 0x18. Resident: True
  Flags: Archive, Max Version: 0x0, Flags 2: None, Class Id: 0x0, Owner Id: 0x0, Security Id: 0x557, Quota charged: 0x0, Update sequence #: 0x8B71F8

  Created On:         2022-01-03 16:54:25.2726453
  Modified On:        2023-09-07 08:30:12.4258743
  Record Modified On: 2023-09-07 08:30:12.4565632
  Last Accessed On:   2023-09-07 08:30:12.4258743

SI Created On: 2022-01-03 16:54:25.2726453 =! FN Created On: 2023-09-07 08:30:12.4258743

**** FILE NAME ****
  Attribute #: 0x2, Size: 0x80, Content size: 0x68, Name size: 0x0, ContentOffset 0x18. Resident: True

  File name: ChangedFileTime.txt
  Flags: Archive, Name Type: Windows, Reparse Value: 0x0, Physical Size: 0x0, Logical Size: 0x0
  Parent Entry-seq #: 0x16947-0x2

  Created On:         2023-09-07 08:30:12.4258743
  Modified On:        2023-09-07 08:30:12.4258743
  Record Modified On: 2023-09-07 08:30:12.4258743
  Last Accessed On:   2023-09-07 08:30:12.4258743

MFT Analysis

I treated the MFT as the file system’s metadata database: every file and directory receives a record describing its structure and attributes.

The $MFT helps reconstruct file and directory activity, including creation, modification, deletion, and-in the right context-access.

MFT Explorer exposes filenames, timestamps, sizes, permissions, and attributes in a navigable view.

Its GUI makes the records easy to navigate without hiding the underlying artifact fields.

MFT Analysis screenshot

(Source image form HTB)

Note: It’s worth noting that MFT records, once created, aren’t discarded. Instead, as new files and directories emerge, new records are added to the MFT. Records corresponding to deleted files are flagged as “free” and stand ready for reuse.

Structure of MFT File Record

MFT File Record Structure

The image below shows the relationship between those record components.

MFT File Record Structure screenshot

File Record Header

Contains metadata about the file record itself. Includes fields like signature, sequence number, and other administrative data.

File Record Header screenshot

MFT File Record Header

The structure can be summarized as:

$MFT └── MFT File Record ├── File Record Header │ ├── Signature │ ├── Log sequence number │ ├── Sequence number │ ├── Hard link count │ ├── First attribute offset │ ├── Record flags │ └── Record size │ └── NTFS Attributes ├── $STANDARD_INFORMATION ├── $FILE_NAME ├── $DATA └── Other optional attributes

An MFT record can contain many typed attributes:

Each attribute signifies some entry information, identified by type.

| Type | Attribute | Description | | ———– | ———————- | ——————————————————————————– | | 0x10 (16) | $STANDARD_INFORMATION | General information - flags, MAC times, owner, and security id. | | 0x20 (32) | $ATTRIBUTE_LIST | Pointers to other attributes and a list of nonresident attributes. | | 0x30 (48) | $FILE_NAME | File name - (Unicode) and outdated MAC times | | 0x40 (64) | $VOLUME_VERSION | Volume information - NTFS v1.2 only and Windows NT, no longer used | | 0x40 (64) | $OBJECT_ID | 16B unique identifier - for file or directory (NTFS 3.0+, Windows 2000+) | | 0x50 (80) | $SECURITY_DESCRIPTOR | File’s access control list and security properties | | 0x60 (96) | $VOLUME_NAME | Volume name | | 0x70 (112) | $VOLUME_INFORMATION | File system version and other information | | 0x80 (128) | $DATA | File contents | | 0x90 (144) | $INDEX_ROOT | Root node of an index tree | | 0xA0 (160) | $INDEX_ALLOCATION | Nodes of an index tree - with a root in $INDEX_ROOT | | 0xB0 (176) | $BITMAP | Bitmap - for the $MFT file and for indexes (directories) | | 0xC0 (192) | $SYMBOLIC_LINK | Soft link information - (NTFS v1.2 only and Windows NT) | | 0xC0 (192) | $REPARSE_POINT | Data about a reparse point - used for a soft link (NTFS 3.0+, Windows 2000+) | | 0xD0 (208) | $EA_INFORMATION | Used for backward compatibility with OS/2 applications (HPFS) | | 0xE0 (224) | $EA | Used for backward compatibility with OS/2 applications (HPFS) | | 0x100 (256) | $LOGGED_UTILITY_STREAM | Keys and other information about encrypted attributes (NTFS 3.0+, Windows 2000+) | I opened a file record in the disk editor to connect the parsed fields back to their raw representation.

MFT File Record Header screenshot

This includes a hexadecimal representation of the MFT record, complete with its header and attributes.

MFT File Record Header screenshot

When parsing the entry in MFTECmd, this is how the non-resident data header appears.

MFT File Record Header screenshot MFT File Record Header screenshot

When parsing the entry in MFTECmd, this is how the resident data header appears.

MFT File Record Header screenshot

Zone.Identifier data in MFT File Record

Zone.Identifier is an NTFS Alternate Data Stream used by Windows attachment-security features to record the security zone and, sometimes, the source of a downloaded file.

When a file is fetched from the internet, Windows assigns it a Zone Identifier (ZoneId).

For instance, internet-sourced files typically bear a ZoneId of 3, denoting the Internet Zone.

Below, Autoruns.zip has a hidden Zone.Identifier stream. It shows that Windows marked the archive as downloaded and may preserve the source URL.

PS C:\Users\johndoe\Downloads> Get-Item * -Stream Zone.Identifier -ErrorAction SilentlyContinue


PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Users\johndoe\Downloads\Autoruns.zip:Zone.Identifier
PSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\Users\johndoe\Downloads
PSChildName   : Autoruns.zip:Zone.Identifier
PSDrive       : C
PSProvider    : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName      : C:\Users\johndoe\Downloads\Autoruns.zip
Stream        : Zone.Identifier
Length        : 130

PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Users\johndoe\Downloads\chainsaw_all_platforms+rules+examples.zip:Zone.Ident
                ifier
PSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\Users\johndoe\Downloads
PSChildName   : chainsaw_all_platforms+rules+examples.zip:Zone.Identifier
PSDrive       : C
PSProvider    : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName      : C:\Users\johndoe\Downloads\chainsaw_all_platforms+rules+examples.zip
Stream        : Zone.Identifier
Length        : 679

To inspect the Zone.Identifier for one file:

PS C:\Users\johndoe\Downloads> Get-Content .\Autoruns.zip -Stream Zone.Identifier
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://learn.microsoft.com/
HostUrl=https://download.sysinternals.com/files/Autoruns.zip
PS C:\Users\johndoe\Downloads>

To enumerate the streams for every file in a folder:


PS C:\Users\johndoe\Downloads> Get-Content .\Autoruns.zip -Stream Zone.Identifier
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://learn.microsoft.com/
HostUrl=https://download.sysinternals.com/files/Autoruns.zip
PS C:\Users\johndoe\Downloads> Get-Content * -Stream Zone.Identifier -ErrorAction SilentlyContinue
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://learn.microsoft.com/
HostUrl=https://download.sysinternals.com/files/Autoruns.zip
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://github.com/WithSecureLabs/chainsaw/releases
HostUrl=https://objects.githubusercontent.com/github-production-release-asset-2e65be/395658506/222c726c-0fe8-4a13-82c4-a4c9a45875c6?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230813%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230813T181953Z&X-Amz-Expires=300&X-Amz-Signature=0968cc87b63f171b60eb525362c11cb6463ac5681db50dbb7807cc5384fcb771&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=395658506&response-content-disposition=attachment%3B%20filename%3Dchainsaw_all_platforms%2Brules%2Bexamples.zip&response-content-type=application%2Foctet-stream
[ZoneTransfer]
ZoneId=3
HostUrl=https://github.com/
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://github.com/PoorBillionaire/USN-Journal-Parser
HostUrl=https://codeload.github.com/PoorBillionaire/USN-Journal-Parser/zip/refs/heads/master
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://github.com/volatilityfoundation/volatility3
HostUrl=https://codeload.github.com/volatilityfoundation/volatility3/zip/refs/heads/develop

Mark of the Web (MotW) is the Windows security label applied to files obtained from the internet or another untrusted zone.

It is usually stored in the hidden Zone.Identifier stream.

Example:

report.docx
└── Zone.Identifier
    ├── ZoneId=3
    └── HostUrl=https://example.com/report.docx

Because the file has MotW, Microsoft Word may open it in Protected View.

Forensics use it to identify:

Note: MotW is security metadata, not part of the file’s primary content. A recovered stream may begin with: ZoneId=3 ReferrerUrl=http://10.10.10.10:443/ HostUrl=http://10.10.10.10:443/pass.exe below

PS C:\Users\johndoe\Desktop\Get-ZimmermanTools\net6> .\MFTECmd.exe -f 'C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT' --de 0x0x69f1
MFTECmd version 1.2.2.1

Author: Eric Zimmerman ([email protected])
https://github.com/EricZimmerman/MFTECmd

Command line: -f C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT --de 0x0x69f1

Warning: Administrator privileges not found!

File type: Mft

Processed C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT in 1.6430 seconds

C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT: FILE records found: 93,615 (Free records: 287) File size: 91.8MB


Dumping details for file record with key 000069F1-0000000C

Entry-seq #: 0x69F1-0xC, Offset: 0x1A7C400, Flags: InUse, Log seq #: 0xCC9EB3E, Base Record entry-seq: 0x0-0x0
Reference count: 0x1, FixUp Data Expected: 04-00, FixUp Data Actual: 0D-0A | 00-00 (FixUp OK: True)

**** STANDARD INFO ****
  Attribute #: 0x0, Size: 0x60, Content size: 0x48, Name size: 0x0, ContentOffset 0x18. Resident: True
  Flags: Archive, Max Version: 0x0, Flags 2: None, Class Id: 0x0, Owner Id: 0x0, Security Id: 0x555, Quota charged: 0x0, Update sequence #: 0x8A2518

  Created On:         2023-09-07 08:28:52.8586497
  Modified On:        2023-09-07 08:28:57.4169173
  Record Modified On: 2023-09-07 08:29:33.8137195
  Last Accessed On:   2023-09-07 08:29:34.4386419

**** FILE NAME ****
  Attribute #: 0x9, Size: 0x70, Content size: 0x52, Name size: 0x0, ContentOffset 0x18. Resident: True

  File name: pass.exe
  Flags: Archive, Name Type: DosWindows, Reparse Value: 0x0, Physical Size: 0x14B000, Logical Size: 0x14AE00
  Parent Entry-seq #: 0x16947-0x2

  Created On:         2023-09-07 08:28:52.8586497
  Modified On:        2023-09-07 08:28:57.4169173
  Record Modified On: 2023-09-07 08:28:57.4169173
  Last Accessed On:   2023-09-07 08:28:57.4169173

**** DATA ****
  Attribute #: 0x4, Size: 0x58, Content size: 0x0, Name size: 0x0, ContentOffset 0x0. Resident: False

  Non-Resident Data
  Starting Virtual Cluster #: 0x0, Ending Virtual Cluster #: 0x14A, Allocated Size: 0x14B000, Actual Size: 0x14AE00, Initialized Size: 0x14AE00

  DataRuns Entries (Cluster offset -> # of clusters)
  0x3F4F0                          ->      0x70
  0xFFFFFFFFFFFFEABE               ->      0x1B
  0xFFFFFFFFFFFD8ACB               ->      0xAA
  0x1FB909                         ->      0x16

**** DATA ****
  Attribute #: 0x8, Size: 0xA0, Content size: 0x68, Name size: 0xF, ContentOffset 0x38. Resident: True
  Name: Zone.Identifier

  Resident Data

  Data: 5B-5A-6F-6E-65-54-72-61-6E-73-66-65-72-5D-0D-0A-5A-6F-6E-65-49-64-3D-33-0D-0A-52-65-66-65-72-72-65-72-55-72-6C-3D-68-74-74-70-3A-2F-2F-31-30-2E-31-30-2E-31-30-2E-31-30-3A-34-34-33-2F-0D-0A-48-6F-73-74-55-72-6C-3D-68-74-74-70-3A-2F-2F-31-30-2E-31-30-2E-31-30-2E-31-30-3A-34-34-33-2F-70-61-73-73-2E-65-78-65-0D-0A

    ASCII:   [ZoneTransfer]
ZoneId=3
ReferrerUrl=http://10.10.10.10:443/
HostUrl=http://10.10.10.10:443/pass.exe

    UNICODE: ????????????????????????????????????????????????????

PS C:\Users\johndoe\Desktop\Get-ZimmermanTools\net6>

Analyzing with Timeline Explorer

Analyzing with Timeline Explorer screenshot

USN Journal

The USN Journal can be correlated with the MFT to recognize file-operation patterns.

A copied file commonly produces the following timestamp pattern:

| Timestamp | Result | | ——————— | —————————————— | | M – Modified | Usually inherited from the original file | | A – Accessed | May update to the copy/access time | | C – MFT Changed | Updated when the new MFT record is created | | B – Birth/Created | Set to the time the copy was created |

Analyzing the USN Journal Using MFTECmd

PS C:\Users\johndoe\Desktop\Get-ZimmermanTools\net6> .\MFTECmd.exe -f 'C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$Extend\$J' --csv C:\Users\johndoe\Desktop\forensic_data\mft_analysis\ --csvf MFT-J.csv
MFTECmd version 1.2.2.1

Author: Eric Zimmerman ([email protected])
https://github.com/EricZimmerman/MFTECmd

Command line: -f C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$Extend\$J --csv C:\Users\johndoe\Desktop\forensic_data\mft_analysis\ --csvf MFT-J.csv

Warning: Administrator privileges not found!

File type: UsnJournal


Processed C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$Extend\$J in 0.1016 seconds

Usn entries found in C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$Extend\$J: 89,704
        CSV output will be saved to C:\Users\johndoe\Desktop\forensic_data\mft_analysis\MFT-J.csv

I used Timeline Explorer to isolate the file-operation sequence.

Analyzing the USN Journal Using MFTECmd screenshot

By applying a filter on the Entry Number 93866, which corresponds to the Entry ID for uninstall.exe, we can glean the nature of modifications executed on this specific file.

Analyzing the USN Journal Using MFTECmd screenshot

The .crdownload extension indicates a partial Chromium-family browser download.

That makes Zone.Identifier a useful pivot for the original source IP or domain.

I pivoted back to the MFT using that entry number.

PS C:\Users\johndoe\Desktop\Get-ZimmermanTools\net6> .\MFTECmd.exe -f 'C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT' --csv C:\Users\johndoe\Desktop\forensic_data\mft_analysis\ --csvf MFT.csv
MFTECmd version 1.2.2.1

Author: Eric Zimmerman ([email protected])
https://github.com/EricZimmerman/MFTECmd

Command line: -f C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT --csv C:\Users\johndoe\Desktop\forensic_data\mft_analysis\ --csvf MFT.csv

Warning: Administrator privileges not found!

File type: Mft

Processed C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT in 1.4854 seconds

C:\Users\johndoe\Desktop\forensic_data\kape_output\D\$MFT: FILE records found: 93,615 (Free records: 287) File size: 91.8MB
        CSV output will be saved to C:\Users\johndoe\Desktop\forensic_data\mft_analysis\MFT.csv

I then loaded the parsed output into Timeline Explorer.

Analyzing the USN Journal Using MFTECmd screenshot

Windows Event Logs

EvtxECmd

The collected event logs are under <KAPE_output_folder>\Windows\System32\winevt\logs.

Run by

.\EvtxECmd.exe -f "C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\System32\winevt\logs\Microsoft-Windows-Sysmon%4Operational.evtx" --csv "C:\Users\johndoe\Desktop\forensic_data\event_logs\csv_timeline" --csvf kape_event_log.csv

EvtxECmd screenshot

CSV is easier to filter than raw EVTX data, but manual review still needs event context. I retained the course screenshot here because it shows that context clearly.

EvtxECmd screenshot

more information

EvtxECmd screenshot

Investigating Windows Event Logs with EQL

EQL provides a structured language for filtering and correlating suspicious events across Windows log sources.


PS C:\Users\johndoe\Desktop\Get-ZimmermanTools\net6\EvtxeCmd> eql --version
eql 0.9.18
PS C:\Users\johndoe\Desktop\Get-ZimmermanTools\net6\EvtxeCmd>

Within EQL’s repository (available at C:\Users\johndoe\Desktop\eqllib-master), there’s a PowerShell module brimming with essential functions tailored for parsing Sysmon events from Windows Event Logs. This module resides in the utils directory of eqllib, and is named scrape-events.ps1.

PS C:\Users\johndoe\Desktop\eqllib-master\utils> import-module .\scrape-events.ps1

By doing so, we activate the Get-EventProps function, which is instrumental in parsing event properties from Sysmon logs

I converted Microsoft-Windows-Sysmon%4Operational.evtx into JSON for EQL:

Get-WinEvent -Path C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\System32\winevt\logs\Microsoft-Windows-Sysmon%4Operational.evtx -Oldest | Get-EventProps | ConvertTo-Json | Out-File -Encoding ASCII -FilePath C:\Users\johndoe\Desktop\forensic_data\event_logs\eql_format_json\eql-sysmon-data-kape.json

I then ran targeted EQL queries against the converted events.


PS C:\Users\johndoe\Desktop\eqllib-master\utils> eql query -f C:\Users\johndoe\Desktop\forensic_data\event_logs\eql_format_json\eql-sysmon-data-kape.json "EventId=1 and (Image='*net.exe' and wildcard(CommandLine, '* user*', '*localgroup *', '*group *'))"

Investigating Windows Event Logs with EQL screenshot

Windows Registry Analysis

The Registry provides a broad set of host and user evidence. invaluable insights, such as the computer’s name, Windows version, owner’s name, and network configuration.

Registry-related files harvested from KAPE are typically housed in <KAPE_output_folder>\Windows\System32\config

Additionally, there are user-specific registry hives located within individual user directories, as exemplified in the following screenshot.

Windows Registry Analysis screenshot

I opened the collected hives in Registry Explorer from C:\Users\johndoe\Desktop\Get-ZimmermanTools\net6\RegistryExplorer.

The first pivot was the SYSTEM hive from the KAPE output.

Windows Registry Analysis screenshot

Registry Explorer bookmarks make high-value keys easier to revisit during an investigation.

Windows Registry Analysis screenshot

RegRipper

RegRipper uses artifact-specific plugins, so I started by enumerating the available names.

So we can list the plugins name with and use whats needed

.\rip.exe -l -c > rip_plugins.csv

RegRipper screenshot

PS C:\Users\johndoe\Desktop\RegRipper3.0-master> .\rip.exe -r "C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\System32\config\SYSTEM" -p compname
Launching compname v.20090727
compname v.20090727
(System) Gets ComputerName and Hostname values from System hive

ComputerName    = HTBVM01
TCP/IP Hostname = HTBVM01
PS C:\Users\johndoe\Desktop\RegRipper3.0-master>

Timezone

PS C:\Users\johndoe\Desktop\RegRipper3.0-master> .\rip.exe -r "C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\System32\config\SYSTEM" -p timezone
Launching timezone v.20200518
timezone v.20200518
(System) Get TimeZoneInformation key contents

TimeZoneInformation key
ControlSet001\Control\TimeZoneInformation
LastWrite Time 2023-08-28 23:03:03Z
  DaylightName   -> @tzres.dll,-211
  StandardName   -> @tzres.dll,-212
  Bias           -> 480 (8 hours)
  ActiveTimeBias -> 420 (7 hours)
  TimeZoneKeyName-> Pacific Standard Time
PS C:\Users\johndoe\Desktop\RegRipper3.0-master>

Network Information

PS C:\Users\johndoe\Desktop\RegRipper3.0-master> .\rip.exe -r "C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\System32\config\SYSTEM" -p nic2
Launching nic2 v.20200525
nic2 v.20200525
(System) Gets NIC info from System hive

Adapter: {50c7b4ab-b059-43f4-8b0f-919502abc934}
LastWrite Time: 2023-09-07 08:01:06Z
  EnableDHCP                   0
  Domain
  NameServer                   10.10.10.100
  DhcpServer                   255.255.255.255
  Lease                        1800
  LeaseObtainedTime            2023-09-07 07:58:03Z
  T1                           2023-09-07 08:13:03Z
  T2                           2023-09-07 08:24:18Z
  LeaseTerminatesTime          2023-09-07 08:28:03Z
  AddressType                  0
  IsServerNapAware             0
  DhcpConnForceBroadcastFlag   0
  DhcpInterfaceOptions         ├╝               ├Ä☻  w               ├Ä☻  /               ├Ä☻  .               ├Ä☻  ,               ├Ä☻  +               ├Ä☻  !               ├Ä☻  ▼               ├Ä☻  ♥               ├Ä☻  ☼               ├Ä☻  ♠               ├Ä☻  ☺               ├Ä☻  3               ├Ä☻  6               ├Ä☻  5               ├Ä☻
  DhcpGatewayHardware          ├Ç┬¿┬╢☻♠    PV├Ñ┬ó┬¥
  DhcpGatewayHardwareCount     1
  RegistrationEnabled          1
  RegisterAdapterName          0
  IPAddress                    10.10.10.11
  SubnetMask                   255.0.0.0
  DefaultGateway               10.10.10.100
  DefaultGatewayMetric         0

ControlSet001\Services\Tcpip\Parameters\Interfaces has no subkeys.

Installer Execution


ControlSet001\Services\Tcpip\Parameters\Interfaces has no subkeys.
PS C:\Users\johndoe\Desktop\RegRipper3.0-master> .\rip.exe -r "C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\System32\config\SOFTWARE" -p installer
Launching installer v.20200517
Launching installer v.20200517
(Software) Determines product install information

Installer
Microsoft\Windows\CurrentVersion\Installer\UserData

User SID: S-1-5-18
Key      : 01DCD275E2FC1D341815B89DCA09680D
LastWrite: 2023-08-28 09:39:56Z
20230828 - Microsoft Visual C++ 2019 X86 Additional Runtime - 14.28.29913 14.28.29913 (Microsoft Corporation)

Key      : 3367A02690A78A24580870A644384C0B
LastWrite: 2023-08-28 09:39:59Z
20230828 - Microsoft Visual C++ 2019 X64 Additional Runtime - 14.28.29913 14.28.29913 (Microsoft Corporation)

Key      : 426D5FF15155343438A75EC40151376E
LastWrite: 2023-08-28 09:40:29Z
20230828 - VMware Tools 11.3.5.18557794 (VMware, Inc.)

Key      : 731DDCEEAD31DE64DA0ADB7F8FEB568B
LastWrite: 2023-08-28 09:39:58Z
20230828 - Microsoft Visual C++ 2019 X64 Minimum Runtime - 14.28.29913 14.28.29913 (Microsoft Corporation)

Key      : DBBE6326F05F3B048B91D80B6C8003C8
LastWrite: 2023-08-28 09:39:55Z
20230828 - Microsoft Visual C++ 2019 X86 Minimum Runtime - 14.28.29913 14.28.29913 (Microsoft Corporation)

Recently Accessed Folders/Docs

PS C:\Users\johndoe\Desktop\RegRipper3.0-master> .\rip.exe -r "C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Users\John Doe\NTUSER.DAT" -p recentdocs
Launching recentdocs v.20200427
recentdocs v.20200427
(NTUSER.DAT) Gets contents of user's RecentDocs key

RecentDocs
**All values printed in MRUList\MRUListEx order.
Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs
LastWrite Time: 2023-09-07 08:28:20Z
  2 = The Internet
  7 = threat/
  0 = system32
  6 = This PC
  5 = C:\
  4 = Local Disk (C:)
  3 = Temp
  1 = redirect

Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\Folder
LastWrite Time 2023-09-07 08:28:20Z
MRUListEx = 1,0,3,2
  1 = The Internet
  0 = system32
  3 = This PC
  2 = Local Disk (C:)

Run key entries

PS C:\Users\johndoe\Desktop\RegRipper3.0-master> .\rip.exe -r "C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Users\John Doe\NTUSER.DAT" -p run
Launching run v.20200511
run v.20200511
(Software, NTUSER.DAT) [Autostart] Get autostart key contents from Software hive

Software\Microsoft\Windows\CurrentVersion\Run
LastWrite Time 2023-09-07 08:30:07Z
  MicrosoftEdgeAutoLaunch_0562217A6A32A7E92C68940F512715D9 - "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --no-startup-window --win-session-start /prefetch:5
  DiscordUpdate - C:\Windows\Tasks\update.exe

Software\Microsoft\Windows\CurrentVersion\Run has no subkeys.

Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run not found.

Software\Microsoft\Windows\CurrentVersion\RunOnce not found.

Software\Microsoft\Windows\CurrentVersion\RunServices not found.

Software\Microsoft\Windows\CurrentVersion\RunServicesOnce not found.

Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\Software\Microsoft\Windows\CurrentVersion\Run not found.

Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\Software\Microsoft\Windows\CurrentVersion\RunOnce not found.

Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run not found.

Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run not found.

Software\Microsoft\Windows\CurrentVersion\StartupApproved\Run not found.

Software\Microsoft\Windows\CurrentVersion\StartupApproved\Run32 not found.

Software\Microsoft\Windows\CurrentVersion\StartupApproved\StartupFolder not found.

Execution Artifacts

Execution artifacts are traces left when a program runs. Their evidentiary strength varies, so I kept Prefetch and BAM in their proper context.

Prefetch

C:\Windows\Prefetch\
<KAPE_output_folder>\Windows\Prefetch

PECmd will analyze the prefetch file (.pf) and display various information about the application execution. This generally includes details such as:

Usage

PS C:\Users\johndoe\Desktop\Get-ZimmermanTools\net6>  .\PECmd.exe -f C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\prefetch\DISCORD.EXE-7191FAD6.pf
PECmd version 1.5.0.0

Author: Eric Zimmerman ([email protected])
https://github.com/EricZimmerman/PECmd

Command line: -f C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\prefetch\DISCORD.EXE-7191FAD6.pf

Warning: Administrator privileges not found!

Keywords: temp, tmp

Processing C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\prefetch\DISCORD.EXE-7191FAD6.pf

Created on: 2023-09-07 08:30:16
Modified on: 2023-09-07 08:30:16
Last accessed on: 2026-07-22 15:24:31

Executable name: DISCORD.EXE
Hash: 7191FAD6
File size (bytes): 51,104
Version: Windows 10 or Windows 11

Run count: 1
Last run: 2023-09-07 08:30:06

Volume information:

#0: Name: \VOLUME{01d9da035d4d8f00-285d5e74} Serial: 285D5E74 Created: 2023-08-28 22:59:56 Directories: 23 File references: 106

Directories referenced: 23

00: \VOLUME{01d9da035d4d8f00-285d5e74}\$EXTEND
01: \VOLUME{01d9da035d4d8f00-285d5e74}\TEMP (Keyword True)
02: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS
03: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE
04: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA
05: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL
06: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\MICROSOFT
07: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\MICROSOFT\WINDOWS
08: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\MICROSOFT\WINDOWS\CACHES
09: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\MICROSOFT\WINDOWS\INETCACHE
10: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\MICROSOFT\WINDOWS\INETCACHE\IE
11: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\MICROSOFT\WINDOWS\INETCACHE\IE\8O7R2XTQ
12: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\TEMP (Keyword True)
13: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\DOWNLOADS
14: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS
15: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\APPPATCH
16: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\GLOBALIZATION
17: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\GLOBALIZATION\SORTING
18: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\REGISTRATION
19: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32
20: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\DRIVERS
21: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\EN-US
22: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\TASKS

Files referenced: 76

00: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\NTDLL.DLL
01: \VOLUME{01d9da035d4d8f00-285d5e74}\TEMP\DISCORD.EXE (Executable: True)
02: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\KERNEL32.DLL
03: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\KERNELBASE.DLL
04: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\LOCALE.NLS
05: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\APPHELP.DLL
06: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\APPPATCH\SYSMAIN.SDB
07: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\ADVAPI32.DLL
08: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\MSVCRT.DLL
09: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\SECHOST.DLL
10: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\RPCRT4.DLL
11: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\SHELL32.DLL
12: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\MSVCP_WIN.DLL
13: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\UCRTBASE.DLL
14: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\USER32.DLL
15: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\NETAPI32.DLL
16: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\WIN32U.DLL
17: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\GDI32.DLL
18: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\GDI32FULL.DLL
19: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\WS2_32.DLL
20: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\WININET.DLL
21: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\NETUTILS.DLL
22: \VOLUME{01d9da035d4d8f00-285d5e74}\$MFT
23: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\SAMCLI.DLL
24: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\IMM32.DLL
25: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\DRIVERS\CONDRV.SYS
26: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\NTMARTA.DLL
27: \VOLUME{01d9da035d4d8f00-285d5e74}\TEMP\UNINSTALL.EXE (Keyword: True)
28: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\TASKS\MICROSOFT.WINDOWSKITS.FEEDBACK.EXE
29: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\DOWNLOADS\UNINSTALL.EXE:ZONE.IDENTIFIER
30: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\TASKS\MICROSOFT.WINDOWSKITS.FEEDBACK.EXE:ZONE.IDENTIFIER
31: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\IERTUTIL.DLL
32: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\COMBASE.DLL
33: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\SHCORE.DLL
34: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\GLOBALIZATION\SORTING\SORTDEFAULT.NLS
35: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\SSPICLI.DLL
36: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\WINDOWS.STORAGE.DLL
37: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\WLDP.DLL
38: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\SHLWAPI.DLL
39: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\PROFAPI.DLL
40: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\ONDEMANDCONNROUTEHELPER.DLL
41: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\WINHTTP.DLL
42: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\KERNEL.APPCORE.DLL
43: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\MSWSOCK.DLL
44: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\IPHLPAPI.DLL
45: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\WINNSI.DLL
46: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\NSI.DLL
47: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\URLMON.DLL
48: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\SRVCLI.DLL
49: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\OLEAUT32.DLL
50: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\OLE32.DLL
51: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\DNSAPI.DLL
52: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\RASADHLP.DLL
53: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\FWPUCLNT.DLL
54: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\BCRYPT.DLL
55: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\EN-US\MSWSOCK.DLL.MUI
56: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\WSHQOS.DLL
57: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\EN-US\WSHQOS.DLL.MUI
58: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\C_20127.NLS
59: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\MICROSOFT\WINDOWS\INETCACHE\IE\8O7R2XTQ\DISCORDSETUP[1].EXE
60: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\TEMP\DISCORDSETUP.EXE (Keyword: True)
61: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\TASKS\UPDATE.EXE
62: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\BCRYPTPRIMITIVES.DLL
63: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\RPCSS.DLL
64: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\UXTHEME.DLL
65: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\PROPSYS.DLL
66: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\CFGMGR32.DLL
67: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\CLBCATQ.DLL
68: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\REGISTRATION\R000000000006.CLB
69: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\MICROSOFT\WINDOWS\CACHES\CVERSIONS.1.DB
70: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\JOHN DOE\APPDATA\LOCAL\MICROSOFT\WINDOWS\CACHES\{AFBF9F1A-8EE8-4C77-AF34-C647E37CA0D9}.1.VER0X0000000000000003.DB
71: \VOLUME{01d9da035d4d8f00-285d5e74}\USERS\DESKTOP.INI
72: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\SAMLIB.DLL
73: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\CRYPTBASE.DLL
74: \VOLUME{01d9da035d4d8f00-285d5e74}\TEMP\INSTALL.BAT (Keyword: True)
75: \VOLUME{01d9da035d4d8f00-285d5e74}\WINDOWS\SYSTEM32\CMD.EXE


---------- Processed C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\prefetch\DISCORD.EXE-7191FAD6.pf in 0.21376950 seconds ----------

PS C:\Users\johndoe\Desktop\Get-ZimmermanTools\net6>

The referenced-file list provides additional execution context.

Prefetch screenshot

I also converted the Prefetch collection to CSV for timeline filtering.

.\PECmd.exe -d C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\prefetch --csv C:\Users\johndoe\Desktop\forensic_data\prefetch_analysis

The resulting CSV is shown below.

Prefetch screenshot

Background Activity Moderator (BAM)

The Background Activity Moderator (BAM) is a component in the Windows operating system that tracks and logs the execution of certain types of background or scheduled tasks.

PS C:\Windows\System32> .\sc.exe qc bam
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: bam
        TYPE               : 1  KERNEL_DRIVER
        START_TYPE         : 1   SYSTEM_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : system32\drivers\bam.sys
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Background Activity Moderator Driver
        DEPENDENCIES       :
        SERVICE_START_NAME :
PS C:\Windows\System32>

The BAM Registry data can provide user and recency context for recorded applications.

hive location is HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\bam\State\UserSettings{USER-SID}

PS C:\Users\johndoe\Desktop\RegRipper3.0-master> .\rip.exe -r "C:\Users\johndoe\Desktop\forensic_data\kape_output\D\Windows\System32\config\SYSTEM" -p bam
Launching bam v.20200427
bam v.20200427
(System) Parse files from System hive BAM Services

S-1-5-18
  2023-08-28 09:38:33Z - \Device\HarddiskVolume3\Windows\System32\oobe\FirstLogonAnim.exe

S-1-5-21-3907945667-1160922781-1032853511-1000
  2023-08-28 09:37:20Z - \Device\HarddiskVolume3\Windows\explorer.exe
  2023-08-28 09:37:20Z - Microsoft.Windows.CloudExperienceHost_cw5n1h2txyewy

S-1-5-21-3907945667-1160922781-1032853511-1001
  2023-09-07 08:32:58Z - Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy
  2023-09-07 08:32:58Z - Microsoft.Windows.Search_cw5n1h2txyewy
  2023-09-07 08:32:58Z - \Device\HarddiskVolume3\Windows\explorer.exe
  2023-09-07 08:32:58Z - Microsoft.Windows.ShellExperienceHost_cw5n1h2txyewy
  2023-08-28 13:22:01Z - \Device\HarddiskVolume3\Windows\System32\SystemPropertiesComputerName.exe
  2023-09-07 08:32:58Z - \Device\HarddiskVolume3\Windows\System32\ApplicationFrameHost.exe
  2023-08-28 09:39:24Z - windows.immersivecontrolpanel_cw5n1h2txyewy
  2023-09-07 08:32:56Z - \Device\HarddiskVolume3\Program Files\VMware\VMware Tools\vmtoolsd.exe
  2023-09-07 08:32:56Z - \Device\HarddiskVolume3\Windows\System32\cmd.exe
  2023-08-28 12:59:14Z - \Device\HarddiskVolume3\Windows\System32\wscript.exe
  2023-09-07 08:30:26Z - \Device\HarddiskVolume3\Windows\System32\PING.EXE
  2023-09-07 08:32:56Z - \Device\HarddiskVolume3\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
  2023-09-07 08:32:56Z - \Device\HarddiskVolume3\Windows\System32\dllhost.exe
  2023-09-07 08:01:20Z - \Device\HarddiskVolume3\Windows\System32\OpenWith.exe
  2023-09-07 08:23:10Z - \Device\HarddiskVolume3\Windows\System32\mmc.exe
  2023-09-07 08:23:19Z - \Device\HarddiskVolume3\Windows\System32\Sysmon64.exe
  2023-09-07 08:28:47Z - Microsoft.Windows.SecHealthUI_cw5n1h2txyewy

S-1-5-90-0-1
  2023-08-28 13:22:34Z - \Device\HarddiskVolume3\Windows\System32\dwm.exe

S-1-5-90-0-2
  2023-08-28 09:37:30Z - \Device\HarddiskVolume3\Windows\System32\dwm.exe

API Monitor Files

Example file:

C:\Users\johndoe\Desktop\forensic_data\APMX64\discord.apmx64

The capture opens directly in API Monitor.

API Monitor Files screenshot A notable observation from the screenshot is the call to the getenv function. Here’s the syntax of this function.

char *getenv( const char *varname );

API Monitor Files screenshot

API Monitor Files screenshot

Next I inspected the RegSetValueExA call.

API Monitor Files screenshot

The RegSetValueExA invocation exposes the persistence write.

From microsoft function doc and parameters section supported from api call

LSTATUS RegSetValueExA( [in] HKEY hKey, [in, optional] LPCSTR lpValueName, DWORD Reserved, [in] DWORD dwType, [in] const BYTE *lpData, [in] DWORD cbData );

The parameters break down as follows:

I then followed the process-creation and injection-related calls.

API Monitor Files screenshot

Further down, discord.exe calls APIs associated with process injection.

API Monitor Files screenshot

PowerShell Activity

PowerShell transcripts preserve commands and their output, providing direct evidence of activity within the recorded session.

PowerShell Activity screenshot

When investigating PowerShell activity, look for unusual downloads, encoded commands, unsigned scripts, privilege escalation, suspicious file or network activity, registry changes, scheduled tasks, uncommon modules, user-account changes, and repeated command patterns that may indicate malicious automation.

Module 14 Lab Questions

Question 1: Track the Renamed uninstall.exe

Prompt: Use the USN Journal and Zone.Identifier evidence to determine the new name of uninstall.exe.

→ Search MFT Zone Id Contents for uninstall.exe → Find another file with the same HostUrl → That file’s current name is the answer

Question 1: Track the Renamed uninstall.exe screenshot

We know it was copied because:

Question 2: Identify the Scheduled Task

Prompt: Review Microsoft-Windows-Sysmon%4Operational.evtx in Timeline Explorer and identify the scheduled task whose name begins with M and ends with r.

Microsoft-Windows-DiagnosticDataCollector

I found it by filtering for schtasks in Timeline Explorer.

Question 2: Identify the Scheduled Task screenshot

Question 3: Identify the Second Injection Target

Prompt: Examine discord.apmx64 in API Monitor and identify the other process targeted by discord.exe.

The lpCommandLine parameter identifies cmdkey.exe.

Question 3: Identify the Second Injection Target screenshot

Where I Went Next

The artifact reference and tool walkthroughs above establish what each source can prove. I used those ideas together in a full intrusion reconstruction:

Key Takeaway

The central lesson was correlation. A single artifact rarely tells the whole story. File-system records establish presence and change, execution artifacts support program runs, memory exposes live behavior, and event logs connect processes to users and commands. Confidence comes from making those sources agree while stating clearly what each one does and does not prove.

References