Windows 网络安全现可通过 osquery 更轻松实现 - The Trail of Bits Blog
Artem Dinaburg
2016年9月27日
malware, osquery, press-release
今天,Facebook 宣布我们成功完成了工作:适用于 Windows 的 osquery。
“今天,我们兴奋地宣布推出 Windows 版 osquery 开发者工具包,安全团队可以为其 Windows 网络构建定制化解决方案……此次 osquery 移植到 Windows 使您能够统一端点防御,并参与一个活跃的开源社区,随时分享经验和故事。”
— Introducing osquery for Windows
Windows 版本的 osquery 可以与现有的 osquery 舰队管理工具(如 doorman)进行通信。与 Unix 版本一样,Windows 版 osquery 完全支持 TLS 远程端点和证书验证。在此屏幕截图中,我们使用现有的 doorman 实例查找 Windows 机器上所有正在运行的进程。
我们如何将 osquery 移植到 Windows
这次移植面临了几个技术挑战,我们一直乐在其中。其中一些问题是从 POSIX 到 Windows 移植的常见问题,而其他问题则是 osquery 特有的。
让我们从明显的 POSIX 到 Windows 差异开始:
- 路径不同 — 不再使用 ‘/’ 作为路径分隔符。
- 没有信号机制。
- Unix 域套接字变为命名管道。
- 没有 glob() — 我们必须近似实现该功能。
- Windows 没有 fork() — 进程模型根本不同。osquery 会 fork 工作进程。我们通过抽象工作进程功能来解决这个问题。
- 不再有简单的整数 uid 或 gid 值 — 取而代之的是 SID、ACL 和 DACL。
- 您可以忘记八进制文件权限模型 — 或者使用我们创建的近似实现。
然后,还有一些不太明显的问题:osquery 是一个守护进程。在 Windows 中,守护进程是服务,它们期望一个特殊的接口并由服务控制管理器启动。我们为 osquery 添加了服务功能,并提供了一个脚本来注册和删除服务。父子进程关系不同 — 没有等效的 getppid(),但 osquery 工作进程需要知道其父进程是否停止工作,或者是否在父进程中触发了关闭事件。
更深层次上,我们发现了一些意想不到的挑战:
- 一些基于 clang/gcc 构建的代码无法在 Visual Studio 上构建。
- 某些函数属性(如 constructor())在 Visual Studio 中没有受支持的等效项。必须重新创建该功能。
- 某些标准库函数具有实现定义的行为 — 例如,fopen 在基于 Unix 的系统上会打开目录进行读取,但在 Windows 上会失败。
在此过程中,我们还必须确保 osquery 依赖的每个库也能在 Windows 上工作。这需要修复一些错误并进行替换,例如使用 linenoise-ng 而不是 GNU readline。还有其他复杂性:构建系统必须适应新的操作系统,使用 Windows 库、路径、编译器选项、适当的 C 运行时等。
这仅仅是让 osquery 核心运行的努力。osquery 表 — 从本地机器检索信息的代码 — 带来了自己独特的挑战。例如,进程表需要在 Windows 上重新实现。该表检索系统上当前运行的进程信息,是 osquery 守护进程运行的必要条件。为了实现这个表,我们创建了一个对 Windows Management Instrumentation (WMI) 的通用抽象,并使用现有的 WMI 功能来检索运行进程列表。我们希望这种方法将支持创建更多表,以利用 WMI 提供的大量系统检测数据。
osqueryi,交互式 osquery shell,也可以在 Windows 上运行。在此屏幕截图中,我们使用 osquery 查询运行进程列表和文件的加密哈希。
移植的努力是值得的
Facebook 在 2014 年发布 osquery 时引发了大量兴奋。这款开源端点安全工具允许组织将其基础设施视为数据库,将操作系统信息转换为可以使用类似 SQL 的语句查询的格式。此功能对于执行事件响应、诊断系统操作问题、确保基线安全设置等非常宝贵。
它从根本上改变了运行 Ubuntu 或 CentOS 等 Linux 发行版的环境,或 Mac OS X 机器部署的安全性。但如果您运行的是 Windows 环境,那您就不走运了。
要收集类似信息,您必须拼凑一个手动解决方案,或购买商业产品,这将很昂贵,迫使依赖供应商,并将您的组织锁定在使用专有且可能存在错误的代理上。由于这些服务大多数是基于云的,您还可能面临暴露潜在敏感数据的风险。
今天,情况不再如此。
对端点安全市场的颠覆?
小心端点供应商,你们的后视镜里有竞争对手了 https://t.co/OoZDSJwmWq
— mimeframe (@mimeframe) 2016年3月29日
由于 osquery 可在所有三种主要桌面/服务器平台上运行,开源社区可以用免费、社区支持的替代方案取代专有、封闭的商业安全和监控系统。(这只是 Facebook 安全团队应对更广泛业务挑战的又一个例子。)
我们对潜力感到兴奋:
- 由于 osquery 是跨平台的,网络管理员将能够监控整个基础设施中复杂的操作系统状态。
- 对于那些已经运行 osquery 部署的用户,他们将能够无缝集成其 Windows 机器,从而大大提高工作效率。
- 我们设想初创公司无需首先开发收集这些丰富数据的代理即可启动,正如 Kolide.co 已经做的那样。我们期待看到从这里构建出什么。
- 更多脆弱的组织 — 那些负担不起“苹果溢价”或不使用 Linux 的团体 — 将能够以前所未有的程度保护其系统。
开始使用 osquery
Windows 版 osquery 仅通过源代码分发。您必须构建自己的 osquery。要做到这一点,请参阅官方的《构建 Windows 版 osquery》指南。
目前 osquery 只能在 Windows 10 上构建,这是唯一的先决条件。所有其他依赖项和构建工具将作为配置和构建过程的一部分自动安装。
有一个开放问题来创建 osquery chocolatey 包,以允许简单的包管理式安装 osquery。
如果您需要我们就 osquery 代码库为您的组织进行修改提供帮助,请联系我们。
了解更多关于将应用程序移植到 Windows 的信息
我们将很快撰写关于我们将 osquery 移植到 Windows 所应用的技术。在 Twitter 上关注我们,并使用您喜欢的 RSS 阅读器订阅我们的博客以获取更多更新。
如果您喜欢这篇文章,请分享:
Twitter、LinkedIn、GitHub、Mastodon、Hacker News