Memory Investigations

Memory Investigations

  • Analyzing an image of RAM has become a staple of investigations

  • First, we need to collect memory (WinPmem)

  • Then we use the same strategies for examining memory images as on live systems

E:\> .\winpmem_mini.exe .\win10.0.22000.556.raw

Memory forensics, which involves analyzing RAM images, is essential in digital investigations due to the valuable data stored in memory but not on disk. Additionally, analyzing memory snapshots ensures the evidence remains unchanged during the investigation.

Volatility Overview

  • Volatility is a Python framework for analyzing memory

  • Runs on Windows, macOS, Linux

  • Analyzes Windows, macOS, and Linux memory captures

  • Specify a memory capture and a desired plugin for analysis

Listing Processes

sec504@slingshot:~$ vol -q -f win10.0.22000.556.raw windows.pslist.PsList
Volatility 3 Framework 2.0.2
PID     PPID     ImageFileName     CreateTime
4       0        System            2022-03-28 11:10:44.000000
344     4        smss.exe          2022-03-28 11:10:44.000000
640     564      lsass.exe         2022-03-28 11:10:52.000000
5248    640      nc.exe            2022-03-28 11:31:56.000000
2612    5248     conhost.exe       2022-03-28 11:31:56.000000
...

The windows.pslist.PsList plugin lists processes, similar to live analysis tools like Get-Process. The output shows details such as the process name, PID, PPID, start time, and occasionally the termination time. Process names are often truncated to 14 characters due to the structure of the Windows EPROCESS block.

Parent and Child Processes

sec504@slingshot:~$ vol -q -f win10.0.22000.556.raw windows.pstree.PsTree
Volatility 3 Framework 2.0.2
PID         PPID     ImageFileName     CreateTime
4           0        System            2022-03-28 11:10:44
* 344       4        smss.exe          2022-03-28 11:10:44
564         448      wininit.exe       2022-03-28 11:10:52
* 640       564      lsass.exe         2022-03-28 11:10:52
** 5248     640      nc.exe            2022-03-28 11:31:56
*** 2612    5248     conhost.exe       2022-03-28 11:31:56

The windows.pstree.PsTree plugin creates a visual representation (in text) of the parent-child relationships for running processes.

Scanning for Network Connections

sec504@slingshot:~$ vol -q -f win10.0.22000.556.raw windows.netscan.NetScan
Volatility 3 Framework 2.0.2

Proto     LocalAddr     Port     State         PID        Owner
TCPv4     0.0.0.0       49667    LISTENING     1844       svchost.exe
TCPv4     0.0.0.0       49667    LISTENING     1844       svchost.exe
TCPv4     10.10.0.4     139      LISTENING     4          System
TCPv4     0.0.0.0       135      LISTENING     948        svchost.exe
TCPv4     0.0.0.0       49665    LISTENING     564        wininit.exe
TCPv4     0.0.0.0       49664    LISTENING     640        lsass.exe
UDPv4     10.10.0.4     137      0             4          System
UDPv4     10.10.0.4     138      0             4          System
TCPv4     0.0.0.0       1508     LISTENING     5248       nc.exe
TCPv4     0.0.0.0       49670    LISTENING     3220       svchost.exe

The windows.netscan.NetScan plugin scans memory for network-related data, including active connections and listening sockets, similar to the netstat command or PowerShell's Get-NetTCPConnection and Get-NetUDPEndpoint cmdlets. The example shows its output.

Process Command Line

sec504@slingshot:~$ vol -q -f win10.0.22000.556.raw windows.cmdline.CmdLine
Volatility 3 Framework 2.0.2

PID     Process         Args
4       System          Required memory at 0x20 is not valid (process exited?)
948     svchost.exe     C:\Windows\system32\svchost.exe -k RPCSS -p
1012    svchost.exe     C:\Windows\system32\svchost.exe -k DcomLaunch -p -s LSM
1040    svchost.exe     C:\Windows\system32\svchost.exe -k LocalSystemNetworkRestricted -p -s HvHost
3532    MsMpEng.exe     "C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.2202.4-0\MsMpEng.exe"
5248    nc.exe          C:\Windows\System32\nc.exe -Ldp 1508 -e cmd.exe
3264    cmd.exe         Required memory at 0xc88aa08020 is not valid ...

The windows.cmdline.CmdLine plugin shows the process ID, and command line for processes that were running when the image was collected.

Volatility 3 Module Capability

windows.dlllist.DllList

List DLLs for processes

windows.driverscan.DriverScan

List kernel modules

windows.envars.Envars

List environment variables

windows.filescan.FileScan

Scan for files

windows.dumpfiles.DumpFiles

Carve out files

windows.info.Info

Examine Windows version information

windows.hashdump.Hashdump

Retrieve password hashes

windows.privileges.Privs

List privileges by process

windows.registry.hivelist.HiveList

List registry hive offsets

windows.registry.printkey.PrintKey

Access keys with --offset

windows.registry.userassist.UserAssist

Enumerate programs run from the Start menu

windows.registry.certificates.Certificates

List trusted certificates in Windows cert. store

windows.svcscan.SvcScan

List service name, display name, and PID

Applying Memory Investigation

Memory investigation steps are similar to live investigation steps:

  • We use Volatility to analyze memory instead of PowerShell cmdlets

The analysis process starts with the EOI:

  • Suspicious process? Start with PsList and PsTree

  • Suspicious network listener? Start with NetScan, then move to processes

  • Suspicious program? Start with CmdLine, then processes

Memory analysis, like live investigations, starts with an event of interest (EOI). For suspicious processes, use Volatility's PsList and PsTree plugins to examine process details (name, ID, parent ID, start time). For suspicious network listeners, the NetScan plugin identifies IPs, ports, process names, connection status, and process IDs, which can then be further analyzed using PsList and PsTree. For suspicious programs, start with the CmdLine plugin and proceed with detailed process analysis using PsList and PsTree.

Lab 1.3: Memory Investigation

In this lab we will analyze memory evidence from the Falsimentis compromise.

Preprocessing with Volatility

Let's run Volatility's vol command several times for each of the following plugins and saving the output a file.

  • windows.netscan.NetScan

  • windows.pstree.PsTree

  • windows.pslist.PsList

  • windows.cmdline.CmdLine

  • windows.filescan.FileScan

  • windows.dlllist.DllList

vol -q -f FM-TETRIS.mem windows.netscan.NetScan > fm-tetris.netscan.txt
vol -q -f FM-TETRIS.mem windows.pstree.PsTree > fm-tetris.pstree.txt
vol -q -f FM-TETRIS.mem windows.pslist.PsList > fm-tetris.pslist.txt
vol -q -f FM-TETRIS.mem windows.cmdline.CmdLine > fm-tetris.cmdline.txt
vol -q -f FM-TETRIS.mem windows.filescan.FileScan > fm-tetris.filescan.txt
vol -q -f FM-TETRIS.mem windows.dlllist.DllList > fm-tetris.dlllist.txt

Instead of running all of these commands individually, we could opt to run them all at once using a shell loop with the following command:

for plugin in windows.netscan.NetScan windows.pstree.PsTree windows.pslist.PsList windows.cmdline.CmdLine 
windows.filescan.FileScan windows.dlllist.DllList; do vol -q -f FM-TETRIS.mem $plugin > fm-tetris.$plugin.txt; done

Preprocessing with Strings

Let's use the Linux strings utility to extract ASCII, 16-bit little endian, and 16-bit big endian strings from the memory image for preprocessing analysis.

strings FM-TETRIS.mem > fm-tetris.strings-asc.txt           # ASCII
strings -e l FM-TETRIS.mem > fm-tetris.strings-unile.txt    # 16-bit little endian
strings -e b FM-TETRIS.mem > fm-tetris.strings-unibe.txt    # 16-bit big endian

By default, the strings command extracts ASCII text. The -e l option extracts 16-bit little-endian, while -e b extracts 16-bit big-endian strings. All three formats (ASCII, little-endian, big-endian) can reveal valuable system information.

Examining Network Connections

From Lab 1.2, we identified beacon traffic from Falsimentis systems to the site www1-google-analytics.com (IP: 167.172.201.123). Now, let's search for processes communicating with this IP.

grep 167.172.201.123 fm-tetris.netscan.txt

Notice the name of the process that connected to the suspicious IP address, analytics.exe with process ID 5736.

Next, let's see if analytics.exe is communicating with any other sites using grep again.

grep analytics.exe fm-tetris.netscan.txt

From examining the output, it appears the only remote systems analytics.exe connected to was 167.172.201.123 , at least at the time of capture.

Examining Processes

Let's examine the running processes using the windows.pslist.PsList and windows.pstree.PsTree plugins. These show details like process name, ID, and parent-child relationships, with PsTree providing a visual representation for easier analysis.

grep -C 3 analytics.exe fm-tetris.pstree.txt

In this grep command, the -C 3 argument displays three lines of context before and after each string match.

This is an odd-looking process tree. ONENOTE.EXE (process ID 8016) spawned cmd.exe (process ID 4452). This cmd.exe spawned analytics.exe (process ID 2532). This copy of analytics spawned another copy of analytics.exe (process ID 5736). The second analytics.exe spawned another cmd.exe (process ID 5804). ONENOTE.EXE also spawned a random-looking process named bJKRJiSAnPkf.e (process ID 5568).

Examining File Objects

Next let's examine file objects to see if there is anything else useful for our analysis.

grep analytics.exe fm-tetris.filescan.txt
grep bJKRJiSAnPkf.e fm-tetris.filescan.txt

The output shows analytics.exe is in the \Windows\System32 directory, which helps in creating indicators for detecting the malware on a system.

Examining Loaded DLLs

Next, let's take a look at loaded DLLs and command lines for the processes of interest ( analytics.exe and bJKRJiSAnPkf.e ).

grep -C 5 analytics.exe fm-tetris.dlllist.txt

Volatility can't list DLLs for the analytics.exe process due to potential issues like swapped-out memory pages or changes occurring during capture.

Examining Command Lines

Next, let's check for any command line details associated with the analytics.exe process.

grep analytics.exe fm-tetris.cmdline.txt

The memory capture does not indicate any command line information for other process, though the child process reports inaccessible memory.

Examining Strings

Searching for analytics.exe

grep -i analytics.exe fm-tetris.strings-*.txt

Instead of manually sifting through all the data, let's search for something more specific to reduce the output. For example, the filescan output indicated that the analytics.exe process had the file analytics.exe open in \Windows\System32.

grep -i -h 'windows\\system32\\analytics' fm-tetris.strings-*.txt | sort -u

Let's break down the command:

  • The command grep -i -h 'windows\\system32\\analytics' fm-tetris.strings- *.txt performs a case-insensitive search (-i) for lines containing windows\system32\analytics in text files, excluding filename information (-h). It uses double backslashes (\\) to escape the backslash character in the search string, enclosed in single quotes.

  • sort -u - sort the lines of output, returning unique lines ( -u )

Examining the output, it appears there are two more files that might be of interest:

  • C:\Windows\System32\analyticsbackup.bat

  • C:\Windows\system32\AnalyticsInstaller.exe

Searching for bJKRJiSAnPkF.e

grep -i -h bJKRJiSAnPkf fm-tetris.strings-*.txt | sort -u

It appears bJKRJiSAnPkf.exe is located in the \Users\jchadwick\appdata\local\temp directory.

Summary

Key findings about the Falsimentis incident include:

  • The program analytics.exe (process ID 5736) communicates with www1-google- analytics.com .

  • A suspicious program named bJKRJiSAnPkf.exe is located in \Users\jchadwick\appdata\local\temp .

  • At 17:33:03 AM UTC, ONENOTE.EXE spawned a copy of bJKRJiSAnPkf.exe (process ID 5568).

  • At 17:34:06 AM UTC, ONENOTE.EXE spawned a copy of cmd.exe (process ID 4452)

  • At 17:34:09 AM UTC, cmd.exe (process ID 4452) spawned analytics.exe (process ID 2532).

  • At 17:34:10 AM UTC, analytics.exe (process ID 2532) spawned analytics.exe (process ID 5736).

  • At 18:08:06 AM UTC, analytics.exe (process ID 5736) spawned cmd.exe (process ID 5804).

Bonus Lab

Investigating Other Strings

Let's search for the string "midnitemeerkats" in all text files generated by Volatility and the strings utility.

grep midnitemeerkats fm-tetris.*txt

There's a reference to the "midnitemeerkats" string, which suggests a command to open the URL http://www.midnitemeerkats.com/note in full-screen mode using the default browser and Windows start utility. We should investigate this website for further analysis.

Open https://midnitemeerkats.com/note/ in Firefox using a separate system with a privacy-focused VPN. Avoid connecting from your investigation host or company network to prevent the attacker from tracking your investigation through their website logs.

In this page we see the ransom note, but the attackers also included a link to a YouTube video. Let's click on the YouTube video Share link to get the short URL string, as shown here.

The share link for this YouTube video is https://youtu.be/GSMCRD35ch4 . Let's compare the shortened identifier GSMCRD35ch4 with the memory investigation files' output.

grep GSMCRD35ch4 fm-tetris.*txt | sort -u

The origin=http://lolcats.org parameter at the end of the YouTube embed URL indicates that the video was originally embedded on http://lolcats.org.

Identifying the lolcats.org domain in this incident is crucial as it exposes another site used by the Midnite Meerkats attacker, offering key insights into the attacks on Falsimentis.

Revisit Network Investigation Data

grep lolcats.org access.log

Searching the access.log file confirms that there is activity directed to the lolcats.org domain.

TZ=America/Los_Angeles awk '/lolcats.org/ {print strftime("%T", $1), $3, $7, $9}' access.log

The output shows that 172.16.42.103 (FM-TETRIS) and 172.16.42.105 (FM-ELECTRONICA) contacted lolcats.org.

Last updated