osquery 是一个用 C++ 编写的开源主机探针框架,它把 Linux、macOS、Windows 的系统状态抽象成一张张关系型数据表,让安全与运维人员用熟悉的 SQL 完成进程排查、网络连接分析、资产清点与入侵检测。项目内置数百张虚拟表,支持定时查询、事件订阅与分布式采集,结果可直接汇入 SIEM 或数据仓库,是主机侧可观测性与安全分析的重要基础设施。
适用人群:1. 安全工程师与 SOC 分析师:需要对大批量主机做入侵排查、异常进程与持久化项检测;2. SRE 与运维工程师:希望用统一方式做资产清点、配置核查与运行时监控;3. 安全工具开发者:基于扩展 API 与表插件机制开发自定义采集能力或二次集成产品
适用场景:1. 主机入侵检测与应急响应:通过进程、监听端口、启动项等表快速定位可疑行为;2. 资产清点与合规审计:定时采集软件包、用户、内核模块、浏览器插件等状态并留存比对;3. 安全数据管道建设:将 osqueryd 的差分事件日志接入 ELK、Splunk、Kafka 等平台,构建统一的终端可观测性体系
推荐理由:如果你厌倦了为每类主机信息写一套专用采集脚本,osquery 提供了一种更优雅的答案:一个 SQL 接口覆盖跨平台系统数据。它成熟、社区活跃、表生态丰富,且能与现有日志与 SIEM 体系无缝衔接,非常适合作为终端安全与可观测性的数据底座。
项目定位与背景
osquery 最初由 Meta(原 Facebook)开源,如今由 osquery 基金会维护,是主机安全领域少数兼具工程深度与社区活力的项目。它的定位非常清晰:把操作系统当作一个高性能关系型数据库,用 SQL 代替碎片化的 shell 脚本和专有查询语言。项目用 C++ 编写,支持 Linux、macOS 和 Windows 三大平台,GitHub 上已积累约 2.4 万颗星和 2600 多个 fork,README 开篇即强调其目标是操作系统的 instrumentation、monitoring 与 analytics,同时它也是 hacktoberfest 等社区活动的常客,说明参与门槛被有意控制得较低。
核心功能与技术架构
osquery 的技术核心是虚拟表机制。每张表抽象一类系统概念,例如 users 表对应用户账户,processes 表对应运行中的进程,listening_ports 表对应监听端口,还有内核模块、浏览器插件、硬件事件、文件哈希等。查询由 SQLite 解析执行,表则通过插件与扩展 API 注册,因此新增数据源不需要改动查询引擎。它提供两个主要入口:交互式 shell osqueryi 用于探索式查询,守护进程 osqueryd 负责按计划执行查询并把结果差异作为事件写入日志。配置可以通过 flagfile 下发,也支持基于 TLS 的远程端点做分布式查询与查询包(pack)管理,采集结果通常是结构化 JSON,便于对接下游分析平台。
创新点与亮点
最关键的创新是把 SQL 作为通用抽象层。安全分析师不必记住每个系统的 procfs 布局或 WMI 接口,一条 join 语句就能把进程名、端口和 PID 关联起来,例如从 listening_ports 关联 processes 找出监听 0.0.0.0 的服务;再比如用 processes 表的 on_disk 字段筛选出可执行文件已被删除的进程,这类查询在应急响应中极为实用。其次是差分日志模型:osqueryd 不是简单地重复采集全量快照,而是记录两次查询之间的变化,大幅降低日志体积与传输成本。第三是跨平台语义一致性,同一套表结构在三大系统上尽量保持相同的字段含义,让规则可以复用。此外,项目还提供 Extensions SDK,支持用 Go、Python、Node 等语言编写外部表插件,并通过 CII Best Practices 认证,工程规范程度较高。
与同类项目对比
与 OSSEC、Wazuh 这类一体化 HIDS 相比,osquery 刻意不做规则引擎和告警闭环,只专注把数据准确、高效地取出来,因此它更像数据层而非完整解决方案,通常与 ELK、Splunk、Grafana 组合使用。与 Falco、Sysdig 相比,osquery 偏向状态清点与定时轮询,而不是系统调用级别的实时追踪,两者是互补关系而非替代。与 auditd 等原生审计工具相比,osquery 的优势在于跨平台统一、表结构文档化、查询表达力强。它的短板也很明显:需要自行搭建日志管道与服务端,表的选择和查询性能调优仍依赖经验,高频查询对终端资源有一定占用。
上手指南与快速开始
最快的方式是从官网下载对应平台的安装包,然后运行 osqueryi 进入交互式环境。可以先执行 SELECT * FROM users 查看账户,再用 SELECT * FROM processes WHERE on_disk = 0 检查异常进程,用 join 查询定位对外监听的服务,在 macOS 上还可以查询 launchd 表找出开机自启且常驻的守护进程。生产部署建议使用 osqueryd,配合 flagfile 设置采集周期、日志路径和 TLS 端点,把常用检测写成 pack 定时执行,日志输出为 JSON 后送入消息队列或 SIEM。落地前务必先在测试机验证查询开销,并对敏感表做权限与脱敏规划。
总结与展望
osquery 的价值在于用一个小小的抽象换来了巨大的表达自由:会写 SQL 就能探查主机。它的优点是跨平台、表生态丰富、日志模型节省成本、社区与文档完善;缺点是需要配套基础设施、缺乏开箱即用的告警能力、查询编写仍有学习曲线。随着终端安全与可观测性融合的趋势加强,这种以数据为中心、把检测逻辑交给上层平台的设计思路,反而让 osquery 的生命周期更长,值得长期投入。
项目信息
| 项目名称 | osquery/osquery |
| 编程语言 | C++ |
| Star 数 | 23752 |
| Fork 数 | 2641 |
| 主题标签 | hacktoberfest, intrusion-detection, monitoring, security, sql |