渗透技巧——RecentFileCache.bcf 和 Amcache.hve 单条记录的清除

发布于 2024-10-27 12:16:11 字数 4730 浏览 2 评论 0

0x00 前言

在上篇文章 《渗透技巧——Windows 系统文件执行记录的获取与清除》 对 Windows 主机(Win7 及以上系统) 常见文件执行记录的位置进行整理,尝试获取并清除单条记录,分析利用思路,总结防御方法。

本文作为后续,详细介绍 RecentFileCache.bcf 和 Amcache.hve 单条记录的清除方法

0x01 简介

  • RecentFileCache.bcf 格式分析
  • 编写程序实现 RecentFileCache.bcf 的单条记录清除
  • Amcache.hve 格式分析
  • 编写程序实现 Amcache.hve 的单条记录清除

0x02 RecentFileCache.bcf 格式分析

简介

用来跟踪应用程序与不同可执行文件的兼容性问题,能够记录应用程序执行的历史记录

支持 Win7(Win8 及更高版本的系统不支持),位置:

C:\Windows\AppCompat\Programs\RecentFileCache.bcf

格式分析

没有找到介绍 RecentFileCache.bcf 文件格式的资料,但好在格式的规律比较简单

前 20 字节为文件头部(header)

前 16 字节为固定格式,如下图

Alt text

接下来是每条记录的内容,固定格式如下:

  • 前 4 字节表示 Unicode 记录的长度
  • 记录的内容(Unicode 格式)
  • 结束标志,0x0000

注:Unicode 每个字符占用 2 个字节

下面使用 c 程序实现 RecentFileCache.bcf 文件的解析

定义结构体

typedef struct _BCF_HEADER {
    ULONG64 Flag1;
    ULONG64 Flag2;
    ULONG Unknown;
} BCFHEADER, *PBCFHEADER;
typedef struct _BCF_RECORD {
    ULONG Size;
} BCFRECORD, *PBCFRECORD;

注:ULONG64 为 8 字节,ULONG 为 4 字节

逐个解析每条记录,通过固定变量 Size 确定记录长度,进而读取每条记录的内容

完整实现代码已开源,地址如下:https://github.com/3gstudent/Homework-of-C-Language/blob/master/ListRecentFileCache.cpp

代码实现了读取 RecentFileCache.bcf 文件并显示所有记录

0x03 RecentFileCache.bcf 文件的单条记录清除

最简单的方法是将待删除的记录用字符 0x00 覆盖,但是会打乱原有的文件格式

所以这里需要将待删除的记录内容删除,后续的记录补齐空位

在程序实现上,使用新的数组来存储修改后的内容

完整实现代码已开源,地址如下:https://github.com/3gstudent/Homework-of-C-Language/blob/master/DeleteRecentFileCache.cpp

代码实现了修改指定的 RecentFileCache.bcf 文件,删除指定的记录,新文件保存为 NewRecentFileCache.bcf

0x04 Amcache.hve 格式分析

简介

Windows 系统使用 Amcache.hve 替换 RecentFileCache.bcf,能够记录创建时间、上次修改时间、SHA1 和一些 PE 文件头信息

Win8 及更高版本的系统使用 Amcache.hve 替代 RecentFileCache.bcf

Win7 安装 KB2952664 后,也会支持 Amcache.hve,也就是说,此时 RecentFileCache.bcf 和 Amcache.hve 都包含文件执行记录

Amcache.hve 采用注册表格式存储信息

注册表文件的格式可参考:http://www.sentinelchicken.com/data/TheWindowsNTRegistryFileFormat.pdf

附录部分包括详细的文件格式介绍,可为程序实现提供参考

为了提高开发效率,对记录的解析我们可以借助 Windows 系统下的 regedit.exe

通过 regedit.exe 加载 Amcache.hve,即可查看和修改 Amcache.hve 的信息,方法如下:

选择 HKEY_LOCAL_MACHINE ,选择 File -> Load Hive... ,指定名称,即可加载 Amcache.hve

查看注册表后发现,文件执行记录以明文保存

修改 regedit.exe 中 Amcache.hve 的注册表信息,需要使用 System 权限,修改后再选择 Export,即可实现对 Amcache.hve 的保存

查看 Amcache.hve 文件记录的开源 powershell 脚本,地址如下:https://github.com/yoda66/GetAmCache/blob/master/Get-Amcache.ps1

脚本流程如下:

  • 通过 reg load 加载 Amcache.hve
  • 枚举注册表,显示记录信息
  • 通过 reg unload 卸载 Amcache.hve

0x05 Amcache.hve 文件的单条记录清除

删除思路

删除指定记录的信息,需要删除该记录对应的注册表父项

删除方法

1、通过 regedit.exe 的界面操作

以 System 权限打开 regedit.exe,加载 Amcache.hve,编辑注册表,最后选择 Export 导出新的 Amcache.hve

2、脚本实现

流程如下:

  • 以 system 权限通过 reg load 加载 Amcache.hve
  • 枚举注册表,匹配待删除的记录
  • 获得记录的注册表父项,删除整个注册表键值
  • 导出注册表,保存 Amcache.hve
  • 通过 reg unload 卸载 Amcache.hve

脚本实现的细节:

判断当前权限是不是 system:

$output = &"whoami"
if($output -notmatch "nt authority\\system")
{
    Write-Error "Script must be run as nt authority\system" -ErrorAction Stop
}

加载注册表:

reg load HKLM\amcache c:\Windows\AppCompat\Programs\Amcache.hve

导出注册表:

reg.exe save HKLM\amcache "new.hve" /y

卸载注册表:

reg.exe unload HKLM\amcache

完整实现代码已开源,地址如下:https://github.com/3gstudent/Homework-of-Powershell/blob/master/Delete-Amcache.ps1

代码实现了删除指定名称的记录,并且能够自动删除多条重复的记录,最终生成新文件 new.hve

0x06 小结

本文介绍了 RecentFileCache.bcf 和 Amcache.hve 单条记录的清除方法和程序实现细节。站在取证的角度,对于 RecentFileCache.bcf 和 Amcache.hve 的记录,不能盲目相信。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

[旋木]

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

七秒鱼°

文章 0 评论 0

爱已欠费

文章 0 评论 0

ㄟ。诗瑗

文章 0 评论 0

小河采露

文章 0 评论 0

巅峰

文章 0 评论 0

gitee_v1qxdSBNo

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文