实时查询腾讯云主机状态之利器——Osquery (运维篇)

2022-04-12 10:59:53 浏览数 (1)

在上一篇博文:实时查询腾讯云主机状态之利器——Osquery (安全篇)中,我们介绍了Osquery在安全分析、合规检测、威胁捕获中的应用场景。

而另一篇博文使用腾讯云自动化助手批量安装beats,则简单介绍了一下如何通过自动化助手批量安装Elastic Agent。

在本篇中,我们再来看一下,从运维的角度看,我们如何通过Osquery洞察一些运维调优,故障排查时所需要的信息。全文将展示数个简单的案例,帮助大家了解我们可以通过Osquery做哪些事情。而如果要想详细了解,则需要查看Osquery的官方文档。查看我们都支持哪些文档。

Elastic与Osquery的完美配合

当我们在生产环境中大量使用Osquery时,我们会遇到两个主要的问题:

  1. Osquery 的设置与管理
  2. Osqeury 生成大量数据后的数据管理
  3. Osquery与其他工具的集成(Alert、SIEM、ITSM)

幸运的是,通过Elastic Stack与Osquery的集成,我们可以轻松解决这些问题。关于上面的第三点,我们在安全篇中已经做过介绍。本文,我们将介绍Osquery 的设置与管理,以及数据管理的内容

设置和管理

您将需要一个部署基础架构来将 osquery 交付到您的环境中,并需要一个配置计划来管理该工具。可选的项包括腾讯云自动化助手,以及各种DevOps工具,比如Ansible,Puppet,Chef; 但如果我们已经使用Elastic Stack的可观测性解决方案,Osquery就已经是这个方案中一部分,可以使用Ingeration功能,自然集成。比如,我们已经使用腾讯云自动化助手批量安装了Elastic Agent,

就可以非常简单的将Osquery安装到所有已经安装了Elastic Agent的主机上(filebeat, metricbeat, packbeat等功能,以同样的方式可以推送

可以在安装的时候,添加更多的配置项:

可以在Fleet界面上查看运行状态:

数据存储

一旦收集到数据,就必须存储数据,这就是构建自己的 osquery 支出可能变得昂贵的地方。osquery没有统一的后端存储解决方案。但是,Elasticsearch会是一个非常好的选择。

重要的是要记住 osquery 产生的数据所需要的成本与你选择的解决方案有关,比如一些按流量计费的产品,当大量未经优化的数据通道进入 SIEM 时,这可能会导致高昂的传输和存储成本。

在我们的方案中,数据被自动存储到Elasticsearch当中,你不需要做任何的配置,就可以回溯每次运行的查询结果:

可以使用各种搜索工具查看:

运维查询案例

我们已经有了一个使用Osquery的完美方案,安装,配置,数据存储,数据查看都不是问题。现在, 我们再来看看一些简单的例子。

案例:macOS 和 Linux 系统中的磁盘加密

让我们从 disk_encryption 表开始。首先要注意的是,它只捕获基于 Linux 和 macOS 的系统的信息。

这是查询:

代码语言:sql复制
SELECT * FROM disk_encryption;

结果:(not encrypted

请注意,输出并不是很有用。是的,该encryption_status字段告诉我们分区是否已加密,但哪个分区很重要?什么需要加密?name列是指分区的硬件设备,但调查人员通常不会记住这些。我们将需要另一个表中的信息:

代码语言:javascript复制
SELECT * FROM mounts;

结果:

path列显示设备在系统中的安装位置。请注意该device_alias列看起来很像name上表中的列?JOIN这意味着我们可以用!将这两个查询链接在一起。

代码语言:sql复制
SELECT m.device, m.device_alias, m.path, m.type, de.encryption_status
FROM mounts m
  LEFT JOIN disk_encryption de ON de.name = m.device_alias
WHERE m.device LIKE '/dev/%'
ORDER BY m.device;

结果:

主机上的一些基本配置和服务

一些简单的例子:

代码语言:sql复制
select * from etc_hosts
image.pngimage.png
代码语言:sql复制
select * from etc_services
image.pngimage.png
代码语言:sql复制
select * from interface_addresses
image.pngimage.png
代码语言:sql复制
//查看系统信息
select * from system_info;

//查看OS版本
select * from os_version;

//查看内核信息版本
SELECT * FROM kernel_info;

//内存信息
select * from memory_info;

//查询用户信息
select * from users;
select * from users where uid=0;

//检查计划任务
select * from crontab;
```sql

查看进程绑定端口的情况

代码语言:sql复制
SELECT DISTINCT p.pid, p.name, l.port FROM listening_ports AS l JOIN processes AS p ON l.pid = p.pid WHERE l.address = '0.0.0.0';

结果:

image.pngimage.png

查看Docker进程的信息

查看某个container运行的spring程序的版本

代码语言:sql复制
SELECT path FROM docker_container_fs_changes where id="198679bbef727c1a24d71d65a03480d7f7746dba08599f1202d1584cac6a1e60" and path like "%spring%.jar"

结果:

易受攻击的spring版本易受攻击的spring版本

一些外部资源

官方文档

https://osquery.readthedocs.io/en/stable/

Osquery在不同操作系统上支持的表

https://osquery.io/schema/

可以使用MITRE ATT&CK框架规则:

https://github.com/teoseller/osquery-attck

使用教程

https://www.uptycs.com/blog/tag/osquery-tutorial/

0 人点赞