本文有石冀原创,转载请注明。
案例1
考点
· 从注册表中获取最后一次运行的进程
· 从注册表中获取某一进程的运行次数
· 从注册表中获取用户登陆失败的时间
· 获取JPEG 文件被打开时的时间
· 获取固定在任务栏中的Chrome最后运行的时间
题目附件
windows.vmem
题目描述
我们发现我们公司的一些系统已经被入侵。我们需要你的帮助来回答警方想知道的几个问题。
· Adam 最后一次使用 calc.exe 是什么时候?
答案的格式应该是DD-MM-YYY_HH:MM:SS。时区以UTC时间为准(北京时间向前 8h)。
· Adam使用了多少次Chrome浏览器?
答案应该是数字。
注:提交时请将答案用inctf{}包裹起来,你得到的flag应该为如下格式:
inctf{07-08-1544_21:07:37_700}
题目分析
这里利用 volatility 的 imageinfo 插件直接分析其所属系统为Win7SP1x64
$ volatility -f windows.vmem imageinfo
问题1:Adam 最后一次使用 calc.exe 是什么时候?
要找到 calc.exe 的最后运行时间,首先我们想到的是使用 pslist 插件,因为如果提取镜像时 calc.exe 仍然处于运行状态,我们就可以从 pslist 插件的输出中直接得到 calc.exe 的最后运行时间。
$ volatility -f windows.vmem --profile=Win7SP1x64 pslist
然而,我们没有发现任何 calc.exe 被执行的痕迹。这时我们考虑是否有一个不同的来源来获得我们需要的所有证据?有,那就是 Windows 注册表(Windows Registry)。
Windows 注册表是 Windows 系统的一个非常丰富的信息来源。取证人员可以通过提取注册表中的数据了解到当前系统的大部分细节。
在 Windows 进程方面的细节,如运行次数、最后运行时间、执行路径等......都可以在Windows注册表中找到。我们可以使用 hivelist 插件来获取内存中的注册表信息。
$ volatility -f windows.vmem --profile=Win7SP1x64 hivelist
对于这道题目来说,我们要获取的是 Adam 用户的信息,因此我们把来自 Adam 的 ntuser.dat 提取为注册表文件。
$ volatility -f windows.vmem --profile=Win7SP1x64 dumpregistry -o 0xfffff8a00256d010 -D .
这里我们使用 Eric Zimmerman 的 Registry Explorer 来加载和分析刚才提取的注册表。
路径:
SoftwareMicrosoftWindowsCurrentVersionExplorerUserAssist{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}Count
上图中选中的即为题目相关的记录,calc.exe 的最后运行时间为 2020-07-21 18:21:35。
问题2:Adam使用了多少次Chrome浏览器?在相同路径下,我们可以找到 Chrome 的运行次数为 19 次。
UserAssist 解密原理
这里如果我们使用 Windows Registry Recovery 打开 UserAssist,会发现这个值是加密过的,这里简单介绍下解密的原理。
首先是值做了 rot13 替换
其次是在data中找到次数1000 0000 小端 0x0010 = 16 ,即使用 calc 16次9d1A0600 是总共执行的时间这16位是最后执行的时间
同理 chrome打开次数 19次
Flag
inctf{21-07-2020_18:21:35_19}
案例2
题目描述
在探案过程中,又有一些问题需要你为他们提供答案。
· Adam 最后一次使用错误的密码登录的时间?
答案的格式应该是DD-MM-YYY_HH:MM:SS。时区以UTC时间为准(北京时间向前 8h)。
· 文件 1.jpg 在何时被打开?
答案的格式应该是DD-MM-YYY_HH:MM:SS。时区以UTC时间为准(北京时间向前 8h)。
· Adam最后一次通过任务栏启动chrome是什么时候?
答案的格式应该是DD-MM-YYY_HH:MM:SS。时区以UTC时间为准(北京时间向前 8h)。
初步分析
该题为上一题的延伸,其实步骤不再赘述。这里除了使用 volatility 进行分析,我还将讨论一种不使用 volatility 的替代方法来解决这个题目。
问题1:Adam 最后一次使用错误的密码登录的时间?
这里我们主要查看注册表中有关用户的细节。
$ volatility -f windows.vmem --profile=Win7SP1x64 hivelist
Windows 注册表中关于用户的细节位于 SAM 表,我们将其提取为文件。
$ volatility -f windows.vmem --profile=Win7SP1x64 dumpregistry -o 0xfffff8a0018f0410 -D .
路径:SAMDomainsAccountUsers
从上图中可以看出,最后一次输入密码错误的时间是 2020-07-22 09:05:11 。
问题2:文件 1.jpg 在何时被打开?
有2种方法来回答这个问题。我们先来看看如何从注册表中提取时间戳。
通过 NTUSER.DAT 获取
近期打开文件的记录存储在 NTUSER.DAT 的 RecentDocs 键中。
路径:SoftwareMicrosoftWindowsCurrentVersionExplorerRecentDocs.jpg
通过 MFT
另一种方法是使用 mftparser 插件提取时间戳。
$ volatility -f windows.vmem --profile=Win7SP1x64 mftparser | grep -C 5 "1.lnk"
我们搜索 .lnk 文件,因为它们是在访问文件时被创建的。
问题3:Adam最后一次通过任务栏启动chrome是什么时候?
这个问题不是问 chrome 最后一次运行的时间,而是问它最后一次从任务栏启动的时间。
Windows 的任务栏有着固定的路径:
C:Users{用户名}AppDataRoamingMicrosoftInternet ExplorerQuick LaunchUser Pinned,
所以我们需要找到对应路径下的 Chrome 的最后使用时间。
路径:SoftwareMicrosoftWindowsCurrentVersionExplorerUserAssist{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F}Count
Flag值
FLAG:inctf{22-07-2020_09:05:11_21-07-2020_18:38:33_21-07-2020_17:37:18}
参考链接
· Registry Explorer
https://ericzimmerman.github.io/
· Volatility command reference
https://github.com/volatilityfoundation/volatility/wiki/Command-Reference
作者简介:
石冀,中国人民警察大学学生,活跃于世界各大CTF赛事,爱好web安全,渗透及后渗透,电子数据取证。
本文始发于微信公众号(数据安全与取证):CTF中的取证技术之——注册表及时间属性分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论