Windows 网络安全现可通过 osquery 更轻松实现 - The Trail of Bits Blog
Artem Dinaburg
2016年9月27日
malware, osquery, press-release
今日,Facebook 宣布我们完成了重要工作:Windows 版 osquery。
“今天我们激动地宣布推出 Windows 版 osquery 开发者工具包,安全团队可借此为其 Windows 网络构建定制化解决方案…此次移植使您能够统一端点防御,并加入活跃的开源社区分享经验与案例。”
——引自《Introducing osquery for Windows》
Windows 版 osquery 可与现有 osquery 舰队管理工具(如 doorman)通信。与 Unix 版本相同,Windows 版全面支持 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 管理规范(WMI)的通用抽象,并利用现有 WMI 功能获取运行进程列表。我们希望此方法能支持创建更多表,以利用 WMI 提供的丰富系统检测数据。
交互式 osquery shell — osqueryi — 同样可在 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。请参阅官方的《Building osquery for Windows》指南。
目前 osquery 仅可在 Windows 10 上构建,这是唯一先决条件。所有其他依赖项和构建工具将在配置和构建过程中自动安装。
有一个开放问题旨在创建 osquery chocolatey 包,以实现简单的包管理式安装。
如果您需要我们就 osquery 代码库为您的组织进行修改提供帮助,请联系我们。
了解更多关于应用程序移植到 Windows 的信息
我们将很快撰写关于将 osquery 移植到 Windows 所应用技术的文章。在 Twitter 上关注我们并通过您喜爱的 RSS 阅读器订阅我们的博客以获取更多更新。
如果您喜欢这篇文章,请分享:
Twitter、LinkedIn、GitHub、Mastodon、Hacker News
页面内容
我们如何将 osquery 移植到 Windows
移植努力是值得的
端点安全市场的颠覆?
开始使用 osquery
了解更多关于应用程序移植到 Windows 的信息
近期文章
我们构建了 MCP 始终需要的安全层
利用废弃硬件中的零日漏洞
Inside EthCC[8]:成为智能合约审计员
使用 Vendetect 大规模检测代码复制
构建安全消息传递很难:关于 Bitchat 安全辩论的 nuanced 观点
© 2025 Trail of Bits.
使用 Hugo 和 Mainroad 主题生成。