如何确定恶意软件是否在自己的电脑中执行过?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

很不幸,你在自己的电脑里发现了一个恶意的可执行程序!那么问题来了:这个文件到底有没有执行过?

如何确定恶意软件是否在自己的电脑中执行过?

在这篇文章中,我们会将注意力放在Windows操作系统的静态取证分析之上,并跟大家讨论一些能够帮助你回答上面那个问题的方法以及证据源,其中涉及到的四大主要的证据源包括Windows Prefetch、注册表、日志文件以及文件信息。

Windows Prefetch

Windows Prefetch(Windows 预读取)是一个查找文件执行证据的好地方。根据微软的设计方案,Windows Prefetch的功能就是允许那些经常需要使用到的程序打开得更加快。默认设置下,它会在预读取文件(存储路径为”C:\WindowsPrefetch”)中存储最近执行的128个文件的信息。一个预读取文件的命名规则为”可执行文件名+文件路径的哈希+后缀名.pf”,预读取文件中会保存文件的第一次和最后一次运行日期、文件路径和执行次数等信息。所以说,如果你的恶意软件文件名或路径哈希出现在了一个预读取文件(例如” DABEARS.EXE-12F3B52A.pf”)之中,那就说明这个恶意文件曾在你的电脑中执行过了。

注:Windows Server默认禁用了预读取功能。

注册表

没错,Windows注册表可是一个巨大的“宝藏”,注册表可以算是Windows系统能够正常运行的基石了。虽然注册表非常“庞大”,但是我们接下来给出的表单却并没有那么复杂。因为如果要确定一个文件是否执行过,我们只需要检查几个重要的注册表键即可:

1. ShimCache

微软使用了ShimCache或“AppCompatCache”来识别应用程序的兼容性问题。缓存数据能够追踪文件路径、大小、最后修改时间和最后一次运行的时间。如果一个文件以Windows进程的形式执行过,那么它的信息将会被记录到ShimCache中,但是ShimCache中记录的文件信息并不能100%证明一个文件执行过,因为它只能证明Windows曾与该文件交互过。下面这个注册表键中包含了ShimCache数据:


 
 
  1. HKLMSYSTEMCurrentControlSetControlSessionManagerAppCompatibilityAppCompatCache(for XP)  
  2. HKLMSYSTEMCurrentControlSetControlSessionManagerAppCompatCacheAppCompatCache(for Non-XP) 

2. MUICache

当一个文件通过Windows Explorer(资源管理器)运行,程序Shell会在MUICache中创建一个入口。Windows使用MUICache来存储应用程序名以及其他相关信息,获取来的信息主要存储在下面的注册表键中:


 
 
  1. HKCUSoftwareMicrosoftWindowsShellNoRoamMUICache(for XP, 2000, 2003)  
  2. HKCUSoftwareClassesLocal SettingsSoftwareMicrosoftWindowsShellMuiCache(for Vista, 7, 2008) 

3. UserAssist

UserAssist可以追踪可执行程序以及资源管理器中打开的链接,UserAssist键能够追踪文件的最后一次执行时间以及执行次数,并将信息存储在下面这个注册表键中:


 
 
  1. HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerUserAssist 

UserAssist键的值对应了可执行程序的名称以及文件路径,并使用了ROT13加密。因此,如果你想直接通过搜索关键字来查找文件执行的证据的话,在不解码的情况下是无法做到的。目前也有很多工具可以解密这个注册表键,例如RegRipper userassist.pl插件。

日志文件

为了确定一个文件是否执行过,我们还可以根据日志文件的分析结果来判断。首先我们来看一看Windows System Event Log(系统事件日志),因为这个日志文件记录了服务的启动信息。下图显示的事件(Event ID=”7035″)信息表明,一个管理员(SID=”-500″)运行了PSEXECSVC远程执行服务:

如何确定恶意软件是否在自己的电脑中执行过?

当一个服务启动时,它通常会执行ImagePath中定义的文件或一个已加载的服务DLL。比如说,”Netman”服务在执行时使用了一个合法文件”netman.dll”。但是,如果注册表中的ServiceDll(例如”tabcteng.dll”)包含一条指向后门的路径,那么”Netman”服务将会执行”tabcteng.dll”。所以,你可以通过分析ImagePath和ServiceDll的有效性来判断是否有恶意服务启动过。

如果Windows Event Log(事件日志)的审计设置开启了Audit Process Tracking(审计进程追踪)功能,那么Windows Security Event Log(安全事件日志)中将会记录大量关于进程的信息,而这些信息绝对能够证明一个文件是否执行过。下面这两张图片显示了恶意文件、相关进程ID、父进程ID和用户名,这些信息可以帮助我们进行进一步分析:

XP EventID 592 – 进程创建:

如何确定恶意软件是否在自己的电脑中执行过?

Windows Vista+记录下了类似的进程创建事件,EventID为4688:

如何确定恶意软件是否在自己的电脑中执行过?

在更新版本的Windows中,审计功能所能记录的信息将更加精确化,并且微软从Windows Server 2008 R2以及Windows 7中将这个功能整合到了Group Policy(组策略)中。

除此之外,基于主机的IPS或反病毒产品日志同样可以表明一个文件是否执行过,或者曾经尝试执行过。下图给出的是McAfee Access Protection日志中记录下的一次访问事件样本:

如何确定恶意软件是否在自己的电脑中执行过?

Windows Scheduled Task Log(计划任务日志)可以帮助我们判断攻击者是否使用了Windows的计划任务功能来运行恶意软件。计划任务的信息会被记录在一个名叫”SchedLgU.txt”的日志文件中:

如何确定恶意软件是否在自己的电脑中执行过?

在Windows Vista+平台中,计划任务的执行信息还会记录在”Microsoft-Windows-TaskScheduler/Operational”日志中:

如何确定恶意软件是否在自己的电脑中执行过?

最后,如果一个程序崩溃了,那么Dr.Watson日志可以记录下恶意任务的运行信息:

如何确定恶意软件是否在自己的电脑中执行过?

文件功能

另一种判断文件是否运行过的方法就是寻找可疑的输出文件。当你在分析一个恶意文件时,它是否会创建任何的数据呢?比如说,如果你发现的这个恶意文件是一个键盘记录器,然后你又在系统中发现了键盘记录文件,则说明攻击者已经执行过这个keylogger了。如果恶意软件能够与特定的域名进行链接,那么浏览器的历史记录中肯定也会记录下相关域名。下表中显示的是我们在浏览器历史纪录中捕捉到的样本,这个后门样本使用了两种通讯机制:

如何确定恶意软件是否在自己的电脑中执行过?

想要判断恶意文件是否执行过,我们可以分析文件的功能并在磁盘中寻找相应功能的运行结果/证据。分析恶意软件的功能不仅可以帮助我们了解攻击者的动机和最终目标,而且还有可能帮我们找出其他相关的恶意文件。

如何确定恶意软件是否在自己的电脑中执行过?

注:如果你在自己的系统中发现了恶意的可执行文件,别忘了先将当前系统内存中的数据导出,你可以使用 MandiantRedline服务 捕捉并分析内存数据。


本文作者:佚名

来源:51CTO

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
Ubuntu 安全 Linux
什么是 LTS 长期支持
长期支持(LTS)版本通常与应用程序或操作系统有关,你会在较长的时间内获得安全、维护和(有时有)功能的更新。 LTS 版本被认为是最稳定的版本,它经历了广泛的测试,并且大多包含了多年积累的改进。 需要注意的是,LTS 版本的软件不一定涉及功能更新,除非有一个更新的 LTS 版本。但是,你会在 LTS 版本的更新中得到必要的错误修复和安全修复。
|
调度 C# Windows
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
|
9月前
|
XML 数据挖掘 API
1688商品详情API接口指南
1688商品详情API是阿里巴巴为开发者提供的一套接口,用于获取1688平台上商品的详细信息,如商品ID、标题、价格、销量、评价、SKU、库存、主图等。通过注册认证、创建应用、构造请求和处理响应,用户可轻松调用API。其应用场景广泛,包括电商网站同步商品信息、内容管理系统生成商品页面、数据分析工具监测市场动态,以及第三方开发者构建比价或库存管理工具等,助力电商从业者优化销售策略与运营效率。
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
316 5
|
11月前
|
机器学习/深度学习 并行计算 PyTorch
TorchOptimizer:基于贝叶斯优化的PyTorch Lightning超参数调优框架
TorchOptimizer 是一个基于贝叶斯优化方法的超参数优化框架,专为 PyTorch Lightning 模型设计。它通过高斯过程建模目标函数,实现智能化的超参数组合选择,并利用并行计算加速优化过程。该框架支持自定义约束条件、日志记录和检查点机制,显著提升模型性能,适用于各种规模的深度学习项目。相比传统方法,TorchOptimizer 能更高效地确定最优超参数配置。
572 7
|
网络安全 数据安全/隐私保护
使用静态IP时出现“代理检测失败”的原因是什么?
随着数字化时代的加速发展,网络安全与隐私保护成为核心需求,HTTP凭借其独特优势成为新时代热门选择。本文分析了“代理检测失败,请确认代理IP的有效性”这一问题,主要原因包括:代理IP失效、配置错误、网络不稳定、类型不匹配及请求频率过高。解决建议为检查IP有效性、确保正确配置、选择合适代理类型并控制请求频率。希望这能帮助您解决问题!
778 9
使用静态IP时出现“代理检测失败”的原因是什么?
|
存储 NoSQL 算法
5)深度解密 Redis 的哈希(Hash)
5)深度解密 Redis 的哈希(Hash)
236 1
|
Web App开发 移动开发 编解码
FFmpeg开发笔记(三十二)利用RTMP协议构建电脑与手机的直播Demo
本文讨论了实时数据传输在互联网中的重要性,如即时通讯和在线直播。一对一通信通常使用WebRTC技术,但一对多直播需要流媒体服务器和特定协议,如RTSP、RTMP、SRT或RIST。RTMP由于其稳定性和早期普及,成为国内直播的主流。文章通过实例演示了如何使用OBS Studio和RTMP Streamer进行RTMP推流,并对比了不同流媒体传输协议的优缺点。推荐了两本关于FFmpeg和Android开发的书籍以供深入学习。
399 0
FFmpeg开发笔记(三十二)利用RTMP协议构建电脑与手机的直播Demo
|
前端开发 JavaScript Java
美食分享|基于Springboot+Vue实现美食分享网站
美食分享|基于Springboot+Vue实现美食分享网站
1185 0
美食分享|基于Springboot+Vue实现美食分享网站
|
API Docker Python
更好用的 Python 任务自动化工具:nox 官方教程
更好用的 Python 任务自动化工具:nox 官方教程
331 1

热门文章

最新文章