译者:知道创宇404实验室翻译组
原文链接:CSDL của Windows Defender (Phần 2)
本节中,我们将进一步了解数据库中的一些其他签名类型,包括 SIGNATURE_TYPE_DELTA_BLOB、SIGNATURE_TYPE_FRIENDLYFILE_SHA256 和 SIGNATURE_TYPE_LUASTANDALONE。
在上一部分中,我们了解了 VDM 文件。在 VDM 文件中,有 mpasdlta.vdm 和 mpavdlta.vdm文件,其中包含基础VDM文件的相关信息。
Delta文件包含用于加快签名更新的数据,无需下载整个新文件,只需下载更改的文件,利用这些文件即可获得完整的数据库。Delta文件中的数据包括SIGNATURE_TYPE_DELTA_BLOB_RECINFO和SIGNATURE_TYPE_DELTA_BLOB。SIGNATURE_TYPE_DELTA_BLOB_RECINFO 包含更新信息(如构建版本等),其元素结构包括应用Delta文件更改后的CSDL的大小、CRC校验和以及Delta数据数组:
Windows Defender 通过读取前 2 个字节 (WORD sizeX) 来执行 data_blob 数据,然后根据以下两个方面获取完整文件数据:
当所有data_blob数据合并后,Windows Defender 将使用完整的 VDM 文件,而不是原始的 VDM 基础文件。近日,MS发布了CVE-2023-24934的补丁,修复了攻击者可以任意创建VDM delta文件并应用它来更新数据库的问题,从而改变Windows Defender的数据库执行一些攻击行为(如删除签名,向文件添加哈希值白名单等)。可以参考文章Windows Defender安全风险:Defender Pretender 了解更多信息。
在Windows Defender的VDM文件中,还包含了其他数据类型,如SIGNATURE_TYPE_FRIENDLYFILE_SHA256,这些数据类型的作用是构建排除列表,主要用于一些指定文件或应用程序信任文件,无需详细检查,以提高性能和减少分析时间。
这个近 500,000 个哈希值的集合可以被视为一个可靠的排除列表,用于在系统整体检查过程中,帮助节省分析时间。
在此分析中,作者指出Windows Defender在操作过程中使用了LUA脚本。LUA脚本的签名可以理解为以下结构:
其中,Type 是一个用途未知的字段,DescSize 是描述脚本所属类别的字符串的大小,如果脚本未被分类到任何Category,则此字段的值将为0。LUASize 是脚本所属类别的大小,根据 LUA 标头计算得出值为“1b 4c 75 61 51 00 01 04 08 04 08 01”,其中数据字段还包含其他数据块。这里使用的LUAScript是5.1版本,可以用luadec进行反编译https://github.com/viruscamp/luadec(需要构建64位luadec版本):
为了能够反编译lua脚本,我们需要提取LuaScript数据,使用这里 的脚本将该数据转换为luadec的格式进行反编译(因为MS改变了部分头部和数据字段的大小),然后保存程序输出的结果。
大多数脚本都可以被提取和反编译,但是并不是所有脚本都可以被luadec 100%反编译。
用于监控勒索软件常用程序(例如 wmic、vssadmin)命令行的脚本:
该脚本监视读取 lsass.exe 进程的进程,其中还包括一些排除项:
脚本检测异常文件扩展名或包含两个文件扩展名的脚本:
使用CVE-2023-38831的正则表达式捕获异常文件名的脚本,该漏洞影响Winrar。
检测powershell命令编码类型的脚本:
除此之外,还有许多其他脚本可供查看:
https://github.com/hongson11698/defender-database-extract/tree/master/as_db
研究 Windefender 的数据库具有许多好处,如查找攻击路径、附加数据的更新方法、筛选方法、新威胁的检测以及绕过已存在签名的方法。以下是两个脚本的更新(附加了delta文件补丁、Friendly_sha256和lua脚本),用于提取vdm版本1.397.0.0提取文件的内容,然后用WDExtract将其解压成csv数据,供大家参考参考。
本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/3046/