Osquery检测入侵痕迹——这玩意适合在agent端侧使用啊

Osquery检测入侵痕迹

转载请声明!!!

简介

osquery是一个由FaceBook开源用于对系统进行查询、监控以及分析的一款软件。
支持MacOSCentOSUbuntuWindows等操作系统;
将操作系统当作是一个关系型数据库,使用SQL语句的方式去查询操作系统中的信息,比如:运行的进程信息、加载内核模块、网络连接等等信息。

官网地址:https://osquery.io/

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

或者直接在官网上对应版本。
https://osquery.io/downloads/official/3.3.2

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

osquery存在两种运行模式,分别是osqueryi(交互式模式)、osqueryd(后台进程模式)。

启动
systemctl start osqueryd

执行
osqueryi

.table展示当前操作系统中能够支持的表名
而这些表中的含义无需去记住,只需要查看官网的手册
https://osquery.io/schema/3.3.2

查看系统信息
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;

日志默认保存在/var/log/osquery

Osqueryd.conf简单说明

Options
设置osquery daemon的一些配置,日志产生路径、线程数等

Schedule
设置定时任务

  • query:查询的SQL语句
  • interval:查询间隔,单位时间为秒
  • removed: 是否生成减少的记录

Packs
packs可以看做是一系列schedule的集合。
可以理解为规则.

默认有很多规则是注释掉并没有启用。

内容非常的丰富

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"platform": "windows",
"queries": {
"CCleaner_Trojan.Floxif": {
"query" : "select * from registry where path like 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Piriform\\Agomo%';",
"interval" : "3600",
"version": "2.2.1",
"description" : "(https://sensorstechforum.com/ccleaner-trojan-floxif-malware-how-to-remove/)",
"value" : "Artifact used by this malware"
},
"CCleaner_Trojan_stage2.Floxif": {
"query": "select h.md5, h.sha1, h.sha256, s.name, s.service_type, s.display_name, s.module_path, s.user_account from services s, hash h where h.path = s.module_path and ((s.module_path like '%GeeSetup_x86%' and h.sha256 = 'dc9b5e8aa6ec86db8af0a7aa897ca61db3e5f3d2e0942e319074db1aaccfdc83') or (s.module_path like '%EFACli64%' and h.sha256 = '128aca58be325174f0220bd7ca6030e4e206b4378796e82da460055733bb6f4f') or (s.module_path like '%TSMSISrv%' and h.sha256 = '07fb252d2e853a9b1b32f30ede411f2efbb9f01e4a7782db5eacf3f55cf34902'));",
"interval" : "3600",
"version": "2.1.0",
"description" : "(https://sensorstechforum.com/ccleaner-trojan-floxif-malware-how-to-remove/)",
"value" : "Artifact used by this malware"
},
"Winsecurity_info_1": {
"query" : "select * from programs where name = 'Winsecurity.info';",
"interval" : "3600",
"version": "2.2.1",
"description" : "(https://sensorstechforum.com/windows-infected-2-viruses-scam-remove/)",
"value" : "Artifact used by this malware"
},

 

可以使用MITRE ATT&CK框架规则:
https://github.com/teoseller/osquery-attck
非常有意思

osquery+ELK+Kolide Fleet

安装ELK

  • ElasticSearch:是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

  • Logstash:是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括syslog、消息传递(例如:RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、WebSocket和ElasticSearch等。

  • Kibana:是一个基于Web的图形界面,用于搜索、分析和可视化存储在ElasticSearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

安装java 8
yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 -y

rpm安装

1
2
3
rpm -ivh elasticsearch-6.2.4.rpm
rpm -ivh kibana-6.2.4-x86_64.rpm
rpm -ivh logstash-6.6.0.rpm

 

修改es的java环境变量

1
2
3
vim /etc/sysconfig/elasticsearch
JAVA_HOME=/usr/share/jdk1.8.0_171
source /etc/sysconfig/elasticsearch

 

elk根据自己的一个需要选配。

配置elasticsearch.yml
1
2
3
4
5
6
7
8
9
10
11
12
cluster.name: my-application # 集群名称
node.name: node-1 # 节点名称
node.attr.rack: r1 # 节点属性
path.data: /var/lib/elasticsearch # 数据存储目录
path.logs: /var/log/elasticsearch # 日志存储目录
bootstrap.memory_lock: true # 内存锁定,禁用虚拟内存
network.host: 127.0.0.1 # 绑定主机
http.port: 9200 # 绑定端口
discovery.zen.ping.unicast.hosts: ["host1", "host2"] # 启动新节点时,传递初始主机列表用于发现主机
discovery.zen.minimum_master_nodes: # 配置节点数防止脑裂
gateway.recover_after_nodes: 3 # 在N个节点后阻塞恢复
action.destructive_requires_name: true # 删除索引需要显示名称
ogstash.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
node.name: test # 节点名称
path.data: /var/lib/logstash # 数据存储目录
path.logs: /var/log/logstash # 日志存储目录
pipeline.id: main # pipeline ID
pipeline.workers: 2 # 输出通道的worker数量,默认为CPU核数
pipeline.batch.size: 125 # 设定批处理数据的大小
pipeline.batch.delay: 50 # 设定批处理数据的延迟
pipeline.unsafe_shutdown: false #
path.config: # 过滤配置文件目录
path.plugins: # 自定义插件目录
config.string: #
config.test_and_exit: false #
config.reload.automatic: false # 自动重载被修改的配置文件
config.reload.interval: 3s # 配置文件检查时间
http.host # 绑定主机
http.port # 绑定端口
log.level: # 日志输出级别,如果confie.dubug开启,这里一定要匹配debug
config.debug: false #
log.format # 日志格式
config.support_escapes: false #
kibana.yml
1
2
3
4
5
server.port: 5601 # 绑定端口
server.host: "127.0.0.1" # 绑定主机
server.basePath: "" #
server.name: "your-hostname" # hostname名称
elasticsearch.url: "http://localhost:9200" # ElasticSearch地址
logstash配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
input {
file {
path => ["/var/log/httpd/access_log"]
type => "httpd"
}
}

filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}

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

安装Kolide Fleet

Kolide Fleet是为安全专家量身打造的最先进的主机监控平台。

fleet依赖于mysql以及redis,所以需要安装mysql和redis

安装mysql

1
2
3
4
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
yum update
yum install mysql-community-server.x86_64 mysql-community-client.x86_64 -y

启动Mysql服务:
systemctl start mysqld

安装的时候自动生成的数据库密码在/var/log/mysqld.log

修改密码:

1
2
3
mysql> ALTER USER "root"@"localhost" IDENTIFIED BY "Root123...";
mysql> flush privileges;
mysql> exit

 

创建数据库
create database kolide;

安装redis

1
2
3
4
5
6
7
wget http://download.redis.io/redis-stable.tar.gz
tar zxf redis-stable.tar.gz
cd redis-stable
make
make install
cp redis.conf /etc/redis.conf
redis-server /etc/redis.conf

 

或者yum安装redis也可以
启动服务
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

配置证书

1
2
3
4
5
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

启动服务

1
2
3
4
5
6
7
8
9
10
11
/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

1
2
3
4
5
6
7
8
9
10
11
12
/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+TKjgtGqCFX6XcF5SmDDxxxxxxx

成功运行,访问Web界面进行安装
https://192.168.4.108:8080/

利用osquery添加主机

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

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

执行osqueryd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/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的恶意软件分析第1部分
https://www.alienvault.com/blogs/labs-research/malware-analysis-using-osquery-part-1

使用Osquery的恶意软件分析第2部分
https://www.alienvault.com/blogs/labs-research/malware-analysis-using-osquery-part-2

国外资料:

posted @ 2022-01-18 11:48  bonelee  阅读(1117)  评论(0编辑  收藏  举报