运维指令不用记,会用SQL就可以

我们在运维过程中,需要记住不同操作系统之间的相关运维指令,有时同一系统不同版本也会存在指令语法不一致的问题,虽然很多企业通过SNMP等技术形成监控系统或形成一系列相关脚本文件对目标主机进行有效、细粒度、实时的监控,但有时针对个体问题或企业非正规化时,我们还是需要对指令有所了解才能有效解决。OSQuery对指令进行封装,解决不同操作系统命令、语法不一致问题,通过SQL查询方式,展现系统的CPU、内存、硬盘、进程等相关信息,打破指令间壁垒,加快整体运维效率。

一、现有模式

目前很多企业常见的运维监控是通过SNMP(简单网关协议)协议,实现对目标主机从CPU、内存、磁盘等方面进行监控,该技术主要实现系统层面监控;通过探针形式将中间件如Tomcat、Weblogic进行监控,获取堆栈信息、进程信息等,该技术主要实现应用层面监控;通过创建数据库账户,获取连接信息、锁信息等,该技术主要实现数据库层面监控,调用VMware相关接口,实现宿主机及存储层面的监控。通过汇集多个层面监控技术形成的运维管理系统是业界主流的运维监控方式。

本文并非实现所有相关层面技术,而是讨论另一种SNMP的替代方式,即使用OSQuery实现对系统层面监控,该方式比传统SNMP相对灵活,可将简单采集需求形成SQL,从而将处理能力前置,无需再从后端处理,减轻后端压力(传统方式是采集内容后,汇集到后端,后端进行统一业务处理)。

二、OSQuery

OSQuery支持MACOS、Linux(Ubuntu、Centos)、Windows、FreeBSD4种操作系统。具体详细介绍可从官网了解。

OSQuery官网

OSQuery支持的操作系统

  • OSQuery安装

本文以centos7操作系统为例对OSQuery进行介绍,首先是下载、安装介质。

下载地址: wget https://pkg.osquery.io/rpm/osquery-4.1.1-1.linux.x86_64.rpm

安装:yum install -y osquery-4.1.1-1.linux.x86_64.rpm

安装完毕

  • OSQuery使用

OSQuery包含osqueryd及osqueryi。

osqueryd:是主机监视守护程序,主要用于调度查询和记录操作系统状态变化。osqueryd会以时间为轴不断聚合查询结果并生成日志。守护程序还使用操作系统事件API来记录受监视的文件和目录更改,硬件事件,网络事件等。

osqueryi:是交互式查询控制台,提供SQL界面,以SQL语句形式查询操作系统的CPU、内存、进程等信息。通过osqueryi,可实现快速对事件响应,诊断系统操作异常,性能问题故障排除等多种应用场景。

OSQuery高级功能介绍操作指令

通过osqureyi指令进入后,使用“.help”查看具体操作。

.help

其中.mode为输出模式;.schema为表结构;.table为表;.show为显示当前配置;

当我们输入“.tables”时,会显示所有表信息,如下图:

.table内容

2.1系统信息(system_info)查询

当mode为默认pretty时,查询系统信息表(system_info)返回效果如下:

系统信息查询-pretty模式

当mode为line模式时(执行语句:.mode line),查询系统信息表(system_info)返回效果如下:

系统信息查询-line模式

上图包括:hostname、uuid、cpu_type、cpu_brand等,返回结果大家都非常了解,再次不逐一介绍。

2.2内存信息(memory_info)查询

内存信息查询

上图计算以字节为单位,环境所用服务器内存60G+。

2.3用户信息(user)查询

用户信息查询

包含uid、用户名、shell信息等。

2.4网卡信息(interface_addresses)查询

网卡信息查询

2.5进程信息(processes)查询

进程信息查询

OSQuery还可以使用WHERE、Desc、Limit等条件进行排序和限制,总之有非常多的信息可以查询,再次不逐一介绍。

  • OSQuery应用于安全监控

通过对OSQuery有基础了解后,我们可结合安全场景进行使用。

1.很多程序文件在开始执行后立刻删除自己。针对该场景SQL语句可以为,“select *from processes where on_disk=0;”,即线程存在,但磁盘不存在。

线程存在,但磁盘不存在

2.基线对比。我们可以设置OSQuery的配置文件,设置定时任务计划,存储数据,或通过自己开发程序封装OSQuery,将采集后的数据存入数据库中,随后我们可将最新查询内容与历史数据比对,发现异常问题。

3.反弹shell。可查询记录主机当前的网络行为的process_open_socket与进程processes表结合(join),通过process_open_socket表中的remote_address字段判断ip,通过processes表中的name判断是否bash,便可实现反弹shell的检测。

process_open_socket表结构

processes表结构

虽然目前OSQuery本身不支持远程结合,即建立一个统一的server端对各个终端(安装OSquery)进行日志汇集监控,不过我们可以对程序进行封装,通过api接口或者消息队列等多种形式实现日志的汇集监控。本文最后通过OSQuery与安全场景结合探索,主要是尝试更多安全防护手段的可能性(这也是OSQuery有趣的地方),对可能性的不断累计是我们走向安全前沿的必经之路。

发布了35 篇原创文章 · 获赞 3 · 访问量 2906

猜你喜欢

转载自blog.csdn.net/a59a59/article/details/103613596