Osquery这个工具对不少同学来说,应该还是比较陌生的。至少从搜索引擎的结果上看,这个工具似乎并没有得到足够的重视。但实际上这是由FaceBook开源用于对系统进行查询、监控以及分析的一款非常好用的软件,Osquery将操作系统当作是一个高性能的关系型数据库。使用osquery运行我们能够使用类似于SQL语句的方式去查询数据库中的信息,比如正在运行的进程信息,加载的内核模块,网络连接,浏览器插件等等信息。在最近的版本上,Osquery甚至已经能够读取每个容器上进程打开的文件,进程的状态等,对于安全审计,运维调试都有非常大的帮助。
因此,这篇博文主要针对 Elastic Agent 的 Osquery Manager 集成以及如何将其与 Elastic Security 结合使用进行介绍。包括一些示例,展示了如何使用用例来操作 Osquery 数据,例如构建关键安全警报、在调查期间查询隔离主机以及使用 ML 检测监控异常主机活动。
Osquery 管理器如何工作?
Osquery是一个开源工具,可让您像使用 SQL 的数据库一样查询操作系统。当您将Osquery Manager集成添加到Elastic Agent policy时,Osquery 将部署到使用该策略的所有agent上。添加后,您可以从 Kibana 运行实时查询并为这些代理安排重复查询,以从整个企业的数百个表中收集数据。这些功能有助于实时事件响应、威胁搜寻和定期监控以检测漏洞或合规性问题。
当您运行实时或计划查询时,结果会自动存储在 Elasticsearch 索引中,并且可以轻松映射到 Elastic Common Schema,将您的数据规范化为一组通用字段以与 SIEM 应用程序一起使用,并使您能够轻松搜索,跨多个来源分析和可视化数据。
为 Osquery 数据构建安全警报
Osquery 展示了大量有关操作系统的数据。与Elastic Security解决方案结合使用时,安全团队能够制作查询,帮助他们检测环境中的威胁,监控对其组织最重要的问题,然后在出现问题时采取行动。
例如,要监控的一个问题是,您的系统中是否有进程正在运行,而可执行文件不再位于磁盘上。这可能是恶意进程的一个指标,例如,当恶意软件在执行后自行删除以避免检测时。
您可以通过一个简单的查询在 Windows、Linux 和 Mac 系统上使用 Osquery 来监控这一点:
SELECT * FROM processes;
来自进程表的响应包括几个有用的字段,例如:
name
pid
path
(目标系统上所有正在运行的进程的路径)on_disk
(进程文件是否还在磁盘上)
如果on_disk = 0
对于一个进程,这意味着该文件不再在磁盘上,并且可能存在问题。这是一个完美的用例,用于:
1) 使用计划查询,以在整个环境中监视此情况 2) 创建警报以在发现磁盘上没有二进制文件的进程时通知您。
虽然可以安排一个查询来专门检查无文件的进程(例如,使用SELECT name,path,pid FROM processes WHERE on_disk = 0
),但安排一个更广泛的查询来检索进程表的所有字段可能是有益的,因为您可以使用它数据来驱动您可能想要监控的几个案例。
一旦此查询定期运行,您就可以编写检测规则,以在查询结果包含无文件进程时提醒您。如果在上述计划查询中,发现 on_disk
字段为 0 的任何结果,此示例规则将发出警报。(注意告警规则:osquery.on_disk:"0"
)
查询隔离主机
将 Osquery 与Endpoint Security集成相结合,可以将您的安全操作提升到一个新的水平。启用 Endpoint Security 后,当您处理安全事件并怀疑系统已受到威胁时,您可以将主机与网络隔离以阻止通信并防止横向移动到其他主机。在这种情况下隔离主机可以让您有时间调查问题并恢复到安全状态。
当主机被隔离时,它仍然可以与 Elastic Stack 通信,您可以使用 Osquery 对主机运行实时查询以帮助您进行调查。例如,您可以使用它来帮助评估入侵的影响和严重性,或者在释放主机之前确认问题已得到解决。
监控异常主机活动
使用计划query packs,您可以定期运行一组查询,以建立主机上的行为和活动基线。随着时间的推移收集的数据有助于您了解环境中的正常操作条件。例如,您可以编写查询来监控用户已安装的应用程序、谁登录到哪些系统、哪些程序在启动时运行,等等。
使用Elastic Machine Learning,您可以为正在收集的特定 Osquery 数据创建异常检测作业,以便识别该数据中的异常模式。
让我们通过一个示例来展示如何监视安装在 Windows 系统上的异常程序。
首先,要建立基线,安排查询以开始收集 Windows 系统上安装的所有程序。此查询设置为每天运行一次,并将一些 Osquery 值映射到 ECS 以标准化数据:
接下来,创建一个saved search,稍后您将使用它来创建异常检测作业。搜索基于计划查询的action_id
,其中包括pack name (windows-hardening
) 和query name (windows-programs
)。
使用saved search,您现在可以创建一个机器学习作业,以检测这些搜索结果中的应用程序异常。该作业有一个检测器,用于在 Osquery 结果中查找罕见的(rare by
)应用程序名称(package.name),并将其设置为连续运行。
运行此作业有助于识别整个环境中的潜在问题——例如,查找安装在 Windows 工作站上的不常见或意外的应用程序。
虽然异常值可能是良性的,但它们也可能是您环境中不需要的活动的指标。开始捕获异常后,您可以编写检测规则以提醒值得调查的实例。