simeon的文章 小兵搞安全 2023-11-10 16:33 发表于北京
1.简介 Volatility是一个功能强大且广泛使用的开源内存取证工具,它支持多种操作系统和文件格式,并提供了各种内存分析和漏洞利用功能。本文将介绍Volatility的安装和使用方法,并分享一些技巧和关键命令,以帮助您更好地利用这个工具进行内存取证和分析。
2.安装VolatilityVolatility是一个基于Python的工具,可以通过以下步骤进行安装: 步骤1:下载Volatility 步骤2:安装依赖项 在安装Volatility之前,确保您的系统已经安装了Python和一些必要的依赖项。可以使用以下命令安装: pip install -r requirements.txt 步骤3:验证安装 安装完成后,通过运行以下命令来验证Volatility是否安装成功: volatility -h 3.基本命令Volatility提供了许多基本命令,用于不同类型的内存分析和取证任务。以下是一些常用的基本命令: imageinfo:识别内存镜像的操作系统和版本信息。 pslist:显示进程列表。 psscan:对内存中的进程进行快速扫描。 dlllist:显示特定进程中加载的DLL列表。 filescan:扫描内存中的文件对象。 cmdscan:检测命令行历史记录。 hivelist:显示注册表的内存映像列表。 hashdump:提取系统中的密码哈希。 malfind:查找内存中的恶意软件迹象。 timeliner:创建时间线,显示系统活动的时间和顺序。 screenshot:保存内存中的屏幕截图。 netscan:扫描网络连接和套接字。 yarascan:使用YARA规则对内存进行扫描,用于查找已知的恶意软件特征。 mboxparser:解析邮箱文件和邮件数据。 mftparser:解析NTFS文件系统中的主文件表。 4.50条使用命令1.查看内存映像文件信息: volatility -f <memory_image> imageinfo 2.查看进程列表: volatility -f <memory_image> pslist 3.查看网络连接列表: volatility -f <memory_image> netscan 4.查看文件系统信息: volatility -f <memory_image> filescan 5.查看注册表信息: volatility -f <memory_image> hivelist 6.导出注册表子键到文件: volatility -f <memory_image> printkey -K "<registry_key>" --output=</output/directory> 7.查看打开的文件列表: volatility -f <memory_image> handles 8.查看驱动模块列表: volatility -f <memory_image> ldrmodules 9.查看命令行历史记录: volatility -f <memory_image> cmdline 10.查找可疑的进程: volatility -f <memory_image> malfind 11.导出可疑进程的内存到文件: volatility -f <memory_image> memdump -p <pid> --output=</output/directory> 12.导出某个进程的所有线程内存到文件: volatility -f <memory_image> thrdscan -p <pid> --output=</output/directory> 13.导出某个进程的某个线程内存到文件: volatility -f <memory_image> memdump -p <pid> -t <tid> --output=</output/directory> 14.查看网络协议栈信息: volatility -f <memory_image> sockets 15.查看网络流量: volatility -f <memory_image> pcap -o </output/directory> 16.分析网络流量中的HTTP请求: volatility -f <memory_image> chromehistory --output=</output/directory> 17.导出内存中的图片文件: volatility -f <memory_image> apihooks -p <pid> --output=</output/directory> 18.查看进程的API钩子信息: volatility -f <memory_image> modscan 19.查看系统服务信息: volatility -f <memory_image> servicestat 20.查看系统驱动信息: volatility -f <memory_image> driverirp 21.查看与Internet Explorer相关的活动: volatility -f <memory_image> iehistory --output=</output/directory> 22.查看最近活动的USB设备信息: volatility -f <memory_image> usbstat -o </output/directory> 23.查看系统中的导入函数: volatility -f <memory_image> iat 24.分析Windows日志文件: volatility -f <memory_image> evtlogs -o </output/directory> 25.分析Windows事件订阅信息: volatility -f <memory_image> subscriptions -o </output/directory> 26.查看系统中已安装的设备: volatility -f <memory_image> devicetree 27.查看系统中已加载的DLL模块: volatility -f <memory_image> dlllist 28.查看系统中的网络连接历史记录: volatility -f <memory_image> connscan 29.查看系统中使用的打开的文件句柄: volatility -f <memory_image> handles 30.查看打开的文件句柄的详细信息: volatility -f <memory_image> handles --pid=<pid> 31.查看系统中的全局ATOM表: volatility -f <memory_image> atomscan 32.查看系统中的钩子: volatility -f <memory_image> hookscan 33.查看系统中的隐藏进程: volatility -f <memory_image> psxview 34.查看系统中的已加载驱动信息: volatility -f <memory_image> devicetree 35.分析系统中的GDT表: volatility -f <memory_image> gdt 36.分析系统中的IDT表: volatility -f <memory_image> idt 37.分析系统中的内核模块: volatility -f <memory_image> modules 38.查看系统中的窗口信息: volatility -f <memory_image> windows 39.查看系统中的服务DLL信息: volatility -f <memory_image> symservicetable 40.查看系统中的系统调用表(SSDT): volatility -f <memory_image> ssdt 41.搜索关键字在内存中的位置: volatility -f <memory_image> search -s "<keyword>" 42.导出内存中的某个进程的某个线程的堆栈到文件: volatility -f <memory_image> stackstrings -p <pid> -t <tid> --output=</output/directory> 43.分析某个进程的DLL加载历史记录: volatility -f <memory_image> dlldump -p <pid> --output=</output/directory> 44.查看系统中的全局缓解字符集(GLOB): volatility -f <memory_image> glob 45.查看系统中的用户名、SID和令牌: volatility -f <memory_image> getsids 46.分析系统中的内存分页文件: volatility -f <memory_image> pagefilescan 47.查看系统中的事件钩子: volatility -f <memory_image> eventhooks 48.分析内存中的SMB会话信息: volatility -f <memory_image> smbtree --output=</output/directory> 49.导出某个进程的导入函数列表到文件: volatility -f <memory_image> impscan -p <pid> --output=</output/directory> 50.查看系统中的命名管道对象: volatility -f <memory_image> pipes 5.技巧和建议以下是一些使用Volatility的技巧和建议,以帮助您在内存取证和分析过程中更高效地工作: 了解目标系统和操作系统的版本:在开始内存分析之前,确保您对目标系统的操作系统和版本有一定了解,这将帮助您选择正确的插件和命令。 使用插件:Volatility的真正力量在于其插件系统。掌握不同的插件,可以更好地发现和分析系统中的各种活动和数字痕迹。 结合其他工具和数据来源:与其他取证工具和数据来源结合使用,可以提供更全面的视图。例如,可以将Volatility的结果与磁盘映像和网络流量分析工具的结果进行比对。
5.参考案例5.1分析Windows系统中的恶意软件活动步骤1:准备工作 收集目标系统的内存镜像。这可以通过多种方式完成,例如使用专业取证工具、制作物理内存副本或通过虚拟化平台导出内存。 步骤2:识别系统信息 使用Volatility的imageinfo命令识别内存镜像的操作系统和版本信息。 volatility -f memory_image.raw imageinfo 这将输出操作系统的名称、版本和体系结构,以及推荐的profile信息。 步骤3:分析恶意软件活动 使用不同的Volatility命令和插件执行恶意软件活动的分析。以下是一些常用命令的例子: 查看所有进程列表: volatility -f memory_image.raw --profile=Win7SP1x64 pstree 查找恶意软件进程: volatility -f memory_image.raw --profile=Win7SP1x64 psscan | grep malware_process 查看指定进程的DLL列表: volatility -f memory_image.raw --profile=Win7SP1x64 dlllist -p PID 查找恶意软件的网络连接: volatility -f memory_image.raw --profile=Win7SP1x64 netscan | grep malware_process 导出恶意软件的文件: volatility -f memory_image.raw --profile=Win7SP1x64 procdump -p PID -D output_directory 解析恶意软件的注册表活动: volatility -f memory_image.raw --profile=Win7SP1x64 hivelist | grep System | cut -d' ' -f1 | xargs -I{} volatility -f memory_image.raw --profile=Win7SP1x64 printkey -o {} -K 'ControlSet001\Control\Run' 这只是一小部分Volatility命令和插件的例子,您可以根据需要选择其他命令和插件进行分析。 步骤4:整理结果和报告 根据分析结果整理并生成报告,包括发现的恶意进程、网络活动、文件和注册表的异常项等。确保在报告中包括取证过程中使用的命令和参数。 请注意,这只是一个简单的案例示例,实际的取证过程可能更为复杂,取证人员应根据具体情况深入分析。 5.2外部参考实际命令volatility -f 1.vmem –profile=Win7SP1x64 printkey -K “SAM\Domains\Account\Users\Names” volatility -f 1.vmem --profile=Win7SP1x64 hashdump 如果john爆破不出来,就使用 lasdmp 查看强密码 lsadmp volatility -f 1.vmem --profile=Win7SP1x64 lsadump volatility -f 1.vmem --profile=Win7SP1x64 pslist pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以 volatility -f 1.vmem --profile=Win7SP1x64 pslist -p 2588 volatility -f 1.vmem --profile=Win7SP1x64 psscan psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程 volatility -f 1.vmem --profile=Win7SP1x64 svcscan svcscan:扫描 Windows 的服务 volatility -f 1.vmem --profile=Win7SP1x64 iehistory volatility -f 1.vmem --profile=Win7SP1x64 netscan 有一些版本 这个命令是使用不了 这里我们就要使用(connscan,connections) 查看网络连接connscan volatility -f 1.vmem --profile=Win7SP1x64 connscan connscan:查看网络连接 查看网络连接connections volatility -f 1.vmem --profile=Win7SP1x64 connections connections:查看网络连接 volatility -f 1.vmem --profile=Win7SP1x64 cmdscan cmdscan:可用于查看终端记录 volatility -f 1.vmem --profile=Win7SP1x64 cmdline volatility -f 1.vmem --profile=Win7SP1x64 filescan (linux配合 grep 命令进行相关字符定向扫描,如:grep flag、grep -E ‘png|jpg|gif|zip|rar|7z|pdf|txt|doc’)例 volatility -f 1.vmem --profile=Win7SP1x64 filescan grep "flag.txt" cat system.txt|grep -i computername volatility -f 1.vmem --profile=Win7SP1x64 dumpfiles -Q 0xxxxxxxx -D ./ dumpfiles:导出某一文件(指定虚拟地址) volatility -f 1.vmem --profile=Win7SP1x64 notepad volatility -f 1.vmem --profile=Win7SP1x64 editbox editbox:显示有关编辑控件(曾经编辑过的内容)的信息 查看内存中记事本的内容 volatility -f 1.vmem --profile=Win7SP1x64 memdump -p xxx --dump-dir=./ memdump:提取出指定进程,常用foremost 来分离里面的文件 memdump -p 332 -D XX/ dump出来的进程文件,可以使用 foremost 来分离里面的文件,用 binwak -e 不推荐 strings -e l 2040.dmp | grep flag 查找flag volatility -f 1.vmem --profile=Win7SP1x64 screenshot --dump-dir=./ screenshot:保存基于GDI窗口的伪截屏 volatility -f 1.vmem --profile=Win7SP1x64 hivelist hivelist: 列出所有的注册表项及其虚拟地址和物理地址 volatility -f 1.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a001032410 volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "ControlSet001\Control\ComputerName\ComputerName" volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "ControlSet001\Control\ComputerName\ComputerName" volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names" volatility -f 1.vmem --profile=Win7SP1x64 userassist volatility -f 1.vmem --profile=Win7SP1x64 timeliner timeliner: 将所有操作系统事件以时间线的方式展开 volatility -f 1.vmem --profile=Win7SP1x64 clipboard clipboard:查看剪贴板信息 volatility -f 1.vmem --profile=Win7SP1x64 systeminfo systeminfo:显示关于计算机及其操作系统的详细配置信息(插件) volatility -f 1.vmem --profile=Win7SP1x64 mftparser mftparser:恢复被删除的文件 volatility -f 1.vmem --profile=Win7SP1x64 envars envars:查看环境变量 volatility -f 1.vmem --profile=Win7SP1x64 dlllist -p 2588 dlllist: 列出某一进程加载的所有dll文件 需要指定进程-p [pid] 程序版本信息 verinfo volatility -f 1.vmem --profile=Win7SP1x64 verinfo 产看进程树,可以轻松了解各进程之间的关系:父进程与子进程 pstree volatility -f 2008.raw –profile=Win2008R2SP1x64 pstree 在进程中PPID比PID还大,那就可能这个进程有异常程序 volatility -f 2008.raw –profile=Win2008R2SP1x64 shimcache 5.3其他可参考取证场景思路以下是三个与恶意软件分析不同的常见Volatility取证案例: 1. 勒索软件调查: - 分析内存中的进程和文件,查找可疑的勒索软件活动。 - 追踪勒索软件的加密操作和文件扩展名修改。 - 研究勒索软件的恢复说明文件和入侵路径,以帮助恢复加密数据。 2. 网络钓鱼调查: - 分析内存中的连接,查找与网络钓鱼网站相关的URL和进程。 - 追踪网络钓鱼活动的时间线和恶意代码下载过程。 - 解析恶意代码,分析钓鱼攻击的目标和手法。 3. 网络入侵调查: - 分析内存中的进程和网络连接,查找异常的网络活动和横向移动行为。 - 追踪入侵活动的入口,如僵尸网络、漏洞利用或远程访问。 - 研究入侵者的特征、惯用工具和攻击方法。
6.总结Volatility是一个功能丰富且广泛使用的开源内存取证工具。本文介绍了Volatility的安装和使用方法,以及一些技巧和关键命令,帮助您更好地利用这个工具进行内存取证和分析。请记住,在使用任何取证工具时,遵循合法和合规的准则,并在授权范围内使用。 参考及引用文章: https://blog.csdn.net/m0_68012373/article/details/127419463 https://blog.51cto.com/secself/5919842
|