探索 Windows 工件:$Security工件

TLDR;$SDS是 NTFS 文件系统的工件。此项目包含驱动器上所有文件和文件夹的安全描述符,这意味着它将包含文件所有者的信息和文件的权限。我还为这个工件编写了一个 Rust 🦀 解析器,你可以从我的 Github 下载。

原文连接:https://u0041.co/blog/post/5

嗨,你好!自从我写博客以来已经有一段时间了,但我一直在忙于其他项目 🙂

NTFS 有一个名为 $Secure 的文件,其中包含系统上所有文件的安全描述符。$Secure包含三个流,每个流包含不同的数据,以帮助检索特定文件的安全描述符。以下是带有描述的$Secure数据流:

  • $SDH:在流中包含安全描述符哈希和偏移量$SDS查找
  • $SII:包含流中的安全 ID 和偏移量查找$SDS。可以从每个 MFT 记录中存在的 $STANDARD_INFORMATION 属性中的安全 ID 字段中检索安全 ID
  • $SDS:包含卷上所有文件和目录的所有安全描述符

$SDS流

$SDS包含数字取证最重要的数据。此属性包含安全描述符的列表,每个安全描述符包含以下数据:

  • 对象所有者 SID
  • 对象组 SID
  • 对象自由访问控制列表 (DACL),标识分配或拒绝对对象的访问权限的用户和组
  • 对象系统访问控制列表 (SACL),SACL 可以监视对受保护对象的访问

$SDS结构

OffsetSizeType描述
04U32安全描述符哈希
44U32安全描述符标识符,可以从 $STANDARD_INFORMATION 属性中的 MFT 记录中检索
88U64安全描述符数据偏移量($SDS)
164U32安全描述符数据大小($SDS)
20Security Descriptor Struct安全描述符结构数据
16 位对齐填充

如何找到MFT记录的安全描述符?

从 MFT 记录中的 $STANDARD_INFO 属性检索安全 ID,然后分析$SDS并从$SDS记录的 ID 字段中的 MFT 记录中查找安全 ID。下面是一个示例 MFT 记录以及 $SDS 中的相应安全描述符:

MFT 记录(使用 https://github.com/omerbenamram/mft 进行分析):

$SDS记录:

从上面的记录中,我们可以看到名为 test.txt 的文件归 SID S-1-5-32-544 的用户(管理员)和 SID S-1-5-21-412210041-3083678082-150370041-513 的组(用户)拥有

这件神器的意义是什么?

以下是$SDS工件在数字取证分析过程中如何提供帮助的一些示例:

  • 您有一个恶意文件被对手删除,但该文件的$MFT记录仍然存在?您可以使用$SDS项目查找创建此恶意文件的用户,并将该用户标记为已泄露,以检测此用户生成的其他项目
  • 您在Web服务器上找到了一个Webshell,并想知道它是如何被删除的?您可以检查文件所有者的$SDS工件,以查看它是 Web 服务器进程还是其他用户。如果是 Web 服务器用户,这可能意味着攻击者利用了 Web 服务器中的漏洞并删除了 webshell。否则,webshell 可能已通过其他方式作为持久性丢弃在服务器上
  • 一些加密矿工操纵其文件的权限以防止其他进程访问它们。$SDS工件将帮助您在离线分析中检查文件权限

从上面的示例中,您可以看到$SDS工件在分析过程中如何提供帮助。

SDSParser

我在 Rust 🦀 中开发了一个解析器来解析$SDS流,您可以从 Github 下载sds_parser 

BUILD

要从源代码构建,请确保已安装 Rust,然后运行以下命令:

您将在目标/发布/sds_parser找到编译的二进制文件

使用预编译的二进制文件

您还可以在发布部分中使用预编译的二进制文件

引用

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部