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表
在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+python
osquery+ELK+Kolide Fleet
Osquery:基于SQL的主机管理工具;
Kolide Fleet:用于控制Osquery列表的灵活服务器,允许我们按需查询多个主机,以及创建查询包,构建查询计划与管理我们的主机;
Elastic Stack:ELK允许收集、处理和可视化日志的工具;
基于Centos7搭建环境
- 默认Osquery与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
# 配置证书
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
# 启动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
# 这个时候会再次报错如下图
我们使用它推荐的--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
# 成功如下图
# 访问Web界面进行安装
# https://10.10.10.5:8080/
推送主机到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界面能看到新增的主机
参数解释:
--hostname:Fleet Server主机的地址
--enroll_secret:Fleet Server的密钥,密钥地址如图
--insecure:无效的CA证书需要使用此参数
总结:
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
ELK展示日志
- 创建一个查询
- 创建一个pack
- 利用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}"
}
}