背景

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

内存转储

建议使用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.Passphrase TrueCrypt缓存密码查找器
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

参考

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-07-31 17:56:51

results matching ""

    No results matching ""