程序执行:后续探讨
去年11月,我发表了一篇题为《程序执行:ShimCache/AmCache神话》的博客文章,旨在再次集中记录这些工件的含义。我这样做是因为我不断看到“…这些工件说明了程序执行…”的说法反复出现,而这根本是不正确的。
我最近在Medium上看到了Mat的帖子《Chronos vs Chaos:构建DFIR时间线的艺术(与痛苦)》。构建时间线是我长期从事的工作,至今仍在进行。与我合作的同事都知道,我在事件审查中广泛使用时间线记录。我首次在2009年出版的《Windows取证分析 第二版》中讨论了时间线,到三年后《Windows取证分析 第三版》出版时,时间线已经有了自己的章节。
在他的帖子中,Mat非常正确地指出,时间线构建的问题之一在于时间戳格式的繁多(这是我的说法,不是他的)。这一点非常正确…64位格式、32位格式、字符串格式等等。Mat还在关于“间隙”的部分中指出,“分析师必须从上下文中推断或证实,这很棘手”;这非常正确,但时间线的目的之一正是通过关联各种数据源并并排查看它们来提供这种上下文。
在帖子不到一半的地方,Mat提到了ShimCache和AmCache,关于ShimCache,他称其为:
一个记录操作系统所见可执行文件的注册表工件。具体来说,它记录了程序执行时的文件路径和文件最后修改时间…
所以,“操作系统所见可执行文件”是对的,但“程序执行时”是不对的。
我为什么这么说?如果你回头参考我上一篇关于这个主题的博客文章,然后再参考Mandiant关于ShimCache的文章,下面的陈述会让你印象深刻:
重要的是要理解,Shimcache中可能存在实际上并未执行的条目。[强调添加]
因此,程序实际上不必执行就会出现在ShimCache工件中。
关于AmCache工件,Mat说它“确实记录了执行时间”,但这可能对该工件的描述过于笼统、过于宽泛。在单独考虑AmCache工件时,请参考《AmCache v2分析》。
例如,所链接PDF的第27页,在“AmCache”部分下指出:
此外,对于不属于程序一部分的PE文件,这也是执行的证明。至于注册表文件键的最后修改日期,它通常与ProgramDataUpdater的运行时间相对应。
这表明,对于Windows 10版本1507,文件键的最后写入时间是最后执行时间,但并非针对已识别的可执行文件。
最后,作为额外资源,Cyber Triage的Chris Ray最近发布了《ShimCache和AmCache简介》,他在其中指出:
由于这些工件的复杂性,最好将这些数据视为存在证据而非执行证据。在某些情况下,你可以以高置信度表明文件已执行,但这绝不应是某物运行的确凿证据。
Mat还在他的帖子中指出,“AmCache通常与ShimCache结合使用…”,这可能是事实,但“结合”部分不应止步于此。例如,如果你试图证明程序执行,你应该使用Mat在帖子中提到的所有工件(MFT、Prefetch、UserAssist、ShimCache、AmCache等),如果可用的话,并结合其他工件,不仅证明程序执行,还要提供比仅从单一工件中获得的更深入的洞察和上下文。
当我在军队接受爆炸物训练时,他们对引爆器有个说法:一个等于没有,两个等于一个。意思是,一个引爆器本身可能会失效,而且确实失效过。但两个引爆器中有一个失效的可能性极小。这个想法也可以应用于数字取证中证明任何特定类别,包括程序执行…单独一个工件,本质上等于“没有”。它可能无法完成其工作,特别是如果我们谈论的是单独的ShimCache或AmCache。
你还应考虑其他工件,以提供关于执行的更细致上下文。如果启用了进程跟踪,安全事件日志可能很有价值,特别是如果系统还设置了启用完整命令行的注册表值。如果安装了Sysmon,Sysmon事件日志将证明极其宝贵。应用程序事件日志可能提供应用程序故障的指示,例如应用程序弹出或Windows事件报告故障。应用程序事件日志还可能包含引用执行netscan或Advanced IP Scanner的DCOM/10028消息。Windows Defender事件日志可能包含…/1116记录,指示检测到威胁,随后是…/1119记录,指示尝试隔离检测到的行为时出现严重故障。
那么,这有什么关系?谁在乎?
当我执行PCI取证调查时,Visa(当时事实上的“PCI委员会”)希望我们在报告中包含的一个内容是一个称为“泄露窗口”的值。这等同于从端点被入侵且信用卡收集恶意软件被放置其上,到检测到入侵并响应/修复的时间点。在一次调查中,我发现端点曾被入侵,恶意软件被投放并启动,然后不久,安装的防病毒软件检测并隔离了恶意软件。威胁行为者大约六周后,大约在1月6日返回,并将恶意软件重新放置在端点上;这个没有被防病毒软件检测到。
现在,如果我简单地声称“泄露窗口”从恶意软件首次放置在系统上时开始,没有限定条件或上下文,那么Visa可能会根据那六周期间处理的信用卡数量处以罚款。那个时期跨越了感恩节到圣诞节的历史时间段,当时购物量更大,处理量的评估将对零售商产生重大影响。
当时,许多威胁行为者使用的恶意软件有一个“编译”Perl代码的组件,每次启动时,“编译”的Perl运行时会解压到一个唯一的文件夹路径。使用这些文件夹的创建和最后修改时间,我们可以确定这些组件运行的时间和频率。由于恶意软件已被防病毒软件隔离,正如预期的那样,我们在那六周期间没有发现这些文件夹的任何迹象。
调查的结果…你的发现…可能对某个人或某个组织产生深远影响。因此,拥有超越仅将ShimCache或AmCache(错误地提出为“执行证据”)单独使用的上下文是极其重要的。