跳到主要内容

Volatility内存取证

背景

自动化查杀中有提到过,如果恶意进程迁移到正常进程了,在没看到有网络连接的情况下,很难手动确认,这种情况下怎么去排查呢?当然是从内存中去分析了。

内存转储

建议使用DumpIt对内存进行转储,下载后双击运行即可,默认保存到桌面。也可以用 WinPmemFTK Imager 等。

DumpIt

内存分析

安装配置

分析建议使用开源的volatility,安装可以看GitHub官方文档,使用的文档见Document

安装好后用插件记得下载符号表

然后整个zip解压后放到 volatility3/symbols 目录下。

基础使用

帮助文档

# 查看整体帮助
python3 vol.py -h

# 查看单个插件的帮助
python3 vol.py windows.pslist.PsList --help

加载插件使用举例说明如下:

# python3 vol.py -f <内存文件> <插件> <插件参数>
python3 vol.py -f ../test/PDC-20240731-065952.raw windows.pslist.PsList

usage

插件列表

截止 2024/07/31 的所有官方插件。

插件名说明
banners.Banners尝试识别镜像中的潜在Linux横幅
configwriter.ConfigWriter运行自动魔术并打印和输出配置到输出目录中
frameworkinfo.FrameworkInfo列出Volatility的各种模块化组件的插件
isfinfo.IsfInfo确定当前可用ISF文件或特定文件的信息
layerwriter.LayerWriter运行自动魔术并写出由堆叠器生成的主层
linux.bash.Bash从内存中恢复Bash命令历史记录
linux.capabilities.Capabilities列出进程的能力
linux.check_afinfo.Check_afinfo验证网络协议的操作功能指针
linux.check_creds.Check_creds检查是否有进程共享凭据结构
linux.check_idt.Check_idt检查IDT是否已被修改
linux.check_modules.Check_modules将模块列表与sysfs信息进行比较(如果可用)
linux.check_syscall.Check_syscall检查系统调用表是否有挂钩
linux.elfs.Elfs列出所有进程的所有内存映射ELF文件
linux.envars.Envars列出进程及其环境变量
linux.iomem.IOMem生成类似于运行系统上/proc/iomem的输出
linux.keyboard_notifiers.Keyboard_notifiers解析键盘通知器调用链
linux.kmsg.Kmsg内核日志缓冲区读取器
linux.library_list.LibraryList枚举加载到进程中的库
linux.lsmod.Lsmod列出加载的内核模块
linux.lsof.Lsof列出所有进程的所有内存映射
linux.malfind.Malfind列出可能包含注入代码的进程内存范围
linux.mountinfo.MountInfo列出进程挂载命名空间中的挂载点
linux.netfilter.Netfilter列出Netfilter挂钩
linux.proc.Maps列出所有进程的所有内存映射
linux.psaux.PsAux列出带有命令行参数的进程
linux.pslist.PsList列出特定Linux内存映像中的进程
linux.psscan.PsScan扫描特定Linux映像中的进程
linux.pstree.PsTree以进程父ID为基础,以树形列出进程的插件
linux.sockstat.Sockstat列出所有进程的所有网络连接
linux.tty_check.tty_check检查TTY设备是否有挂钩
linux.vmayarascan.VmaYaraScan使用Yara扫描所有任务的虚拟内存区域
mac.bash.Bash从内存中恢复Bash命令历史记录
mac.check_syscall.Check_syscall检查系统调用表是否有挂钩
mac.check_sysctl.Check_sysctl检查sysctl处理程序是否有挂钩
mac.check_trap_table.Check_trap_table检查mach陷阱表是否有挂钩
mac.dmesg.Dmesg打印内核日志缓冲区
mac.ifconfig.Ifconfig列出所有设备的网络接口信息
mac.kauth_listeners.Kauth_listeners列出kauth监听器及其状态
mac.kauth_scopes.Kauth_scopes列出kauth作用域及其状态
mac.kevents.Kevents列出进程注册的事件处理程序
mac.list_files.List_Files列出所有进程的所有打开的文件描述符
mac.lsmod.Lsmod列出加载的内核模块
mac.lsof.Lsof列出所有进程的所有打开的文件描述符
mac.malfind.Malfind列出可能包含注入代码的进程内存范围
mac.mount.Mount包含生成Mac的mount命令中数据的插件集合的模块
mac.netstat.Netstat列出所有进程的所有网络连接
mac.proc_maps.Maps列出可能包含注入代码的进程内存范围
mac.psaux.Psaux恢复程序命令行参数
mac.pslist.PsList列出特定Mac内存映像中的进程
mac.pstree.PsTree以进程父ID为基础,以树形列出进程的插件
mac.socket_filters.Socket_filters枚举内核套接字过滤器
mac.timers.Timers检查恶意内核定时器
mac.trustedbsd.Trustedbsd检查恶意的trustedbsd模块
mac.vfsevents.VFSevents列出过滤文件系统事件的进程
timeliner.Timeliner运行所有提供时间相关信息的相关插件并按时间排序结果
vmscan.Vmscan扫描Intel VT-d结构并生成它们的虚拟机Volatility配置
windows.bigpools.BigPools列出大页面池
windows.cachedump.Cachedump从内存中转储lsa secrets
windows.callbacks.Callbacks列出内核回调和通知例程
windows.cmdline.CmdLine列出进程的命令行参数
windows.crashinfo.Crashinfo列出Windows崩溃转储中的信息
windows.devicetree.DeviceTree基于驱动程序和连接设备列出特定Windows内存映像中的树
windows.dlllist.DllList列出特定Windows内存映像中的已加载模块
windows.driverirp.DriverIrp列出特定Windows内存映像中的驱动程序的IRP
windows.drivermodule.DriverModule确定是否有加载的驱动程序被rootkit隐藏
windows.driverscan.DriverScan扫描特定Windows内存映像中的驱动程序
windows.dumpfiles.DumpFiles从Windows内存样本中转储缓存的文件内容
windows.envars.Envars显示进程环境变量
windows.filescan.FileScan扫描特定Windows内存映像中的文件对象
windows.getservicesids.GetServiceSIDs列出进程令牌SID
windows.getsids.GetSIDs打印每个进程的所有者SID
windows.handles.Handles列出进程的打开句柄
windows.hashdump.Hashdump从内存中转储用户哈希
windows.hollowprocesses.HollowProcesses列出被中空的进程
windows.iat.IAT提取导入地址表以列出程序使用的外部库中的API(函数)
windows.info.Info显示正在分析的内存样本的操作系统和内核详细信息
windows.joblinks.JobLinks打印进程的作业链接信息
windows.kpcrs.KPCRs打印每个处理器的KPCR结构
windows.ldrmodules.LdrModules列出特定Windows内存映像中的已加载模块
windows.lsadump.Lsadump从内存中转储lsa secrets
windows.malfind.Malfind列出可能包含注入代码的进程内存范围
windows.mbrscan.MBRScan扫描和解析潜在的主引导记录(MBR)
windows.memmap.Memmap打印内存映射
windows.mftscan.ADS扫描备用数据流
windows.mftscan.MFTScan扫描特定Windows内存映像中的MFT文件对象
windows.modscan.ModScan扫描特定Windows内存映像中的模块
windows.modules.Modules列出已加载的内核模块
windows.mutantscan.MutantScan扫描特定Windows内存映像中的互斥体
windows.netscan.NetScan扫描特定Windows内存映像中的网络对象
windows.netstat.NetStat遍历特定Windows内存映像中的网络跟踪结构
windows.pedump.PEDump允许从特定地址空间中的特定地址提取PE文件
windows.poolscanner.PoolScanner一个通用的池扫描插件
windows.privileges.Privs列出进程令牌的权限
windows.processghosting.ProcessGhosting列出DeletePending位被设置或FILE_OBJECT设置为0的进程
windows.pslist.PsList列出特定Windows内存镜像中存在的进程
windows.psscan.PsScan扫描特定Windows内存镜像中存在的进程
windows.pstree.PsTree列出基于父进程ID的树状结构进程
windows.registry.certificates.Certificates列出注册表中证书存储的证书
windows.registry.getcellroutine.GetCellRoutine报告拥有被挂钩的GetCellRoutine处理程序的注册表配置单元
windows.registry.hivelist.HiveList列出特定内存镜像中存在的注册表配置单元
windows.registry.hivescan.HiveScan扫描特定Windows内存镜像中存在的注册表配置单元
windows.registry.printkey.PrintKey列出注册表配置单元下的注册表键或特定键值
windows.registry.userassist.UserAssist打印userassist注册表键及信息
windows.sessions.Sessions列出从环境变量中提取的具有会话信息的进程
windows.shimcachemem.ShimcacheMem从ahcache.sys AVL树中读取Shimcache条目
windows.skeleton_key_check.Skeleton_Key_Check查找Skeleton Key恶意软件的迹象
windows.ssdt.SSDT列出系统调用表
windows.statistics.Statistics列出有关内存空间的统计信息
windows.strings.Strings读取strings命令的输出,并指示每个字符串所属的进程
windows.suspicious_threads.SupsiciousThreads列出可疑的用户态进程线程
windows.svcdiff.SvcDiff比较通过列表遍历发现的服务与扫描发现的服务,以找到rootkits
windows.svclist.SvcList列出services.exe双向链表中的服务
windows.svcscan.SvcScan扫描Windows服务
windows.symlinkscan.SymlinkScan扫描特定Windows内存镜像中存在的链接
windows.thrdscan.ThrdScan扫描Windows线程
windows.threads.Threads列出进程线程
windows.timers.Timers打印内核计时器和相关模块的DPC
windows.truecrypt.PassphraseTrueCrypt缓存密码查找器
windows.unloadedmodules.UnloadedModules列出卸载的内核模块
windows.vadinfo.VadInfo列出进程内存范围
windows.vadwalk.VadWalk遍历VAD树
windows.vadyarascan.VadYaraScan使用yara扫描所有虚拟地址描述符内存映射
windows.verinfo.VerInfo列出PE文件的版本信息
windows.virtmap.VirtMap列出虚拟映射的部分
yarascan.YaraScan使用yara规则(字符串或文件)扫描内核内存

解决疑问

现在基础使用已经OK了,回到我们背景中的疑问,怎么快速操作去发现。

# 查找注入的恶意代码
python3 vol.py -f ../test/PDC-20240731-090251.raw windows.malfind

image-20240731下午51816555

# 恶意注入代码转储
python3 vol.py -o output/ -f ../test/PDC-20240731-090251.raw windows.malfind --pid 2452 --dump

因为也看不懂,就借助于云沙箱看看能不能匹配到特定的规则。

尽量还是用一些杀软吧,正常的也好,edr、hids也好,肯定比人工靠谱。

image-20240731下午52741299

参考