Skip to content

osquery 操作系统检测与分析

官网地址

安装与使用

官方安装文档

Centos7安装osquery

# 安装yum源
rpm -ivh https://osquery-packages.s3.amazonaws.com/centos7/noarch/osquery-s3-centos7-repo-1-0.0.noarch.rpm

# 安装
yum install osquery.x86_64 -y

# 配置
cp /usr/share/osquery/osquery.example.conf /etc/osquery/osquery.conf

# 启动
systemctl start osqueryd

# 执行
osqueryi

配置文件

配置文件官方文档

vim /etc/osquery/osquery.conf
  • options:包含osquery daemon的一些配置

  • schedule:定时执行的任务

  • decorators:记录result的时候,添加额外的信息到decorations中

  • packs:等价于一系列schedule的集合

osquery表

schema官方文档

在osqueryi命令行下输入.table查看所有表。

  • 返回占用内存最大的10个进程
select pid, name, uid, resident_size from processes order by resident_size desc limit 10;
  • 返回最活跃的10个进程
select count(pid) as total, name from processes group by name order by total desc limit 10;
  • 查看网络端口的进程
SELECT DISTINCT process.name, listening.port, listening.address, process.pid FROM processes AS process JOIN listening_ports AS listening ON process.pid = listening.pid;
  • 查看加载的内核模块
select name from kernel_modules;

基础案例

vim /etc/osquery/osquery.conf
{
    "options": {
        "config_plugin": "filesystem",
        "logger_plugin": "filesystem",
        "logger_path": "/var/log/osquery"
    },
    "schedule": {
        "cpu_time": {
            "query": "SELECT * FROM cpu_time;",
            "interval": 60
        }
    }
}

查看日志文件:

tail -f /var/log/osquery/osqueryd.results.log

osquery-1

osquery+python

官网地址

osquery+ELK+Kolide Fleet

原文地址

Osquery:基于SQL的主机管理工具;

Kolide Fleet:用于控制Osquery列表的灵活服务器,允许我们按需查询多个主机,以及创建查询包,构建查询计划与管理我们的主机;

Elastic Stack:ELK允许收集、处理和可视化日志的工具;

基于Centos7搭建环境

  • 默认Osquery与ELK已经安装完成,本篇中不赘述它们的安装过程

ELK安装

  • 安装Kolide Fleet

官方安装地址

# 安装mysql
# 下载yum源
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm

# 安装yum源
rpm -ivh mysql80-community-release-el7-1.noarch.rpm

# 安装数据库
yum install mysql-community-server.x86_64 mysql-community-client.x86_64 -y

# 创建数据库
create database kolide;

# 安装redis
# 安装源
yum install epel-release -y

# 安装redis
yum install redis.x86_64 -y

# 启动服务
systemctl start redis.service

# 安装Fleet
# 下载
wget https://dl.kolide.co/bin/fleet_latest.zip

# 解压
unzip fleet_latest.zip 'linux/*' -d fleet

# 拷贝执行命令到bin目录
cp fleet/linux/fleet /usr/bin/fleet
cp fleet/linux/fleetctl /usr/bin/fleetctl

# 连接数据库
/usr/bin/fleet prepare db --mysql_address=127.0.0.1:3306 --mysql_database=kolide --mysql_username=root --mysql_password=password

osquery-2

# 配置证书
openssl genrsa -out /etc/pki/tls/private/server.key 4096

openssl req -new -key /etc/pki/tls/private/server.key -out /etc/pki/tls/certs/server.csr

openssl x509 -req -days 366 -in /etc/pki/tls/certs/server.csr -signkey /etc/pki/tls/private/server.key -out /etc/pki/tls/certs/server.cert

osquery-3

# 启动Fleet Server
# 创建日志目录
mkdir /var/log/kolide

# 启动服务
/usr/bin/fleet serve \
    --mysql_address=127.0.0.1:3306 \
    --mysql_database=kolide \
    --mysql_username=root \
    --mysql_password=password \
    --redis_address=127.0.0.1:6379 \
    --server_cert=/etc/pki/tls/certs/server.cert \
    --server_key=/etc/pki/tls/private/server.key \
    --logging_json \
    --osquery_result_log_file=/var/log/kolide/osquery_result \
    --osquery_status_log_file=/var/log/kolide/osquery_status

# 这个时候会再次报错如下图

osquery-4

我们使用它推荐的--auth_jwt_key

/usr/bin/fleet serve \
    --mysql_address=127.0.0.1:3306 \
    --mysql_database=kolide \
    --mysql_username=root \
    --mysql_password==password \
    --redis_address=127.0.0.1:6379 \
    --server_cert=/etc/pki/tls/certs/server.cert \
    --server_key=/etc/pki/tls/private/server.key \
    --logging_json \
    --osquery_result_log_file=/var/log/kolide/osquery_result \
    --osquery_status_log_file=/var/log/kolide/osquery_status \
    --auth_jwt_key=zJ+TKjgtGqCFX6XcF5SmDDsy4BCSReLH

# 成功如下图

osquery-5

# 访问Web界面进行安装
# https://10.10.10.5:8080/

osquery-6

推送主机到Fleet Server

  • 利用Fleet Launcher推送主机

官方文档

以下操作在客户端机器上完成,我这里客户端与服务端是同一台机器

# 下载
wget https://github.com/kolide/launcher/releases/download/0.5.0/launcher_0.5.0.zip

# 解压
unzip launcher_0.5.0.zip

# 执行,最简单的模式
cd linux/
./launcher --hostname=localhost:8080 --enroll_secret=OB+ltcnAmEqykZXNthWNRv4qQMh9Rp0b --insecure

# 执行完成以后,在Web界面能看到新增的主机

osquery-7

参数解释:

--hostname:Fleet Server主机的地址
--enroll_secret:Fleet Server的密钥,密钥地址如图
--insecure:无效的CA证书需要使用此参数

osquery-8

总结:

Launcher推送进程不能终止,会导致Fleet接受不到客户端信息;
  • 利用osquery推送主机

这里另外开一台client,执行如下操作:

# 创建密钥
echo 'OB+ltcnAmEqykZXNthWNRv4qQMh9Rp0b' > /var/osquery/enroll_secret

# 配置证书,证书下载位置如图,下载完成后进行改名
mv 10.10.10.5_8080.pem /var/osquery/server.pem

# 执行osqueryd
/usr/bin/osqueryd \
    --enroll_secret_path=/var/osquery/enroll_secret \
    --tls_server_certs=/var/osquery/server.pem \
    --tls_hostname=10.10.10.5:8080 \
    --host_identifier=hostname \
    --enroll_tls_endpoint=/api/v1/osquery/enroll \
    --config_plugin=tls \
    --config_tls_endpoint=/api/v1/osquery/config \
    --config_tls_refresh=10 \
    --disable_distributed=false \
    --distributed_plugin=tls \
    --distributed_interval=3 \
    --distributed_tls_max_attempts=3 \
    --distributed_tls_read_endpoint=/api/v1/osquery/distributed/read \
    --distributed_tls_write_endpoint=/api/v1/osquery/distributed/write \
    --logger_plugin=tls \
    --logger_tls_endpoint=/api/v1/osquery/log \
    --logger_tls_period=10

osquery-9

osquery-10

ELK展示日志

  • 创建一个查询

osquery-11

  • 创建一个pack

osquery-12

osquery-13

  • 利用ELK解析并展示日志
vim /etc/logstash/conf.d/fleet.conf
input {
    file {
        path => ["/var/log/kolide/osquery_result"]
        codec => "json"
    }
}

output {
    elasticsearch {
        hosts => ["127.0.0.1:9200"]
        index => "logstash-fleet-%{+YYYY.MM.dd}"
    }
}

osquery-14

参考资料

企业安全建设之主机资产管理与分析

Facebook开源的基于SQL的操作系统检测和监控框架:osquery daemon详解

Windows 常见配置文件编写