初识osquery
osquery是一个由Facebook的开源用于对系统进行查询,监控以及分析的一款软件.
osquery对其的说明如下: osquery将操作系统公开为高性能关系数据库。这允许您编写基于SQL的查询来探索操作系统数据。使用osquery,SQL表表示抽象概念,例如运行进程,加载的内核模块,开放网络连接,浏览器插件,硬件事件或文件哈希。 目前网上已经有非常多的相关资料供参考,这里整理下:使用
搭建过程不再重来了,这里不是重点,如果搭建有问题找运维或网络帮忙解决即可
1、假设某木马执行后会在tmp目录释放指定的文件,这里可以快速对所有主机进行检查SELECT * from file where directory="/tmp" and filename="xxx"
查找有私钥证书的服务器
2、当有1day漏洞暴发时,可快速查找该软件的服务器进行确认
检查所有存在某软件的服务器SELECT * FROM processes where name like 'systemd';
上面是根据是在运行的进程进行判断,也可跟进安装的rpm包进行判断。
3、检测反弹shellSELECT DISTINCT(processes.pid), processes.parent, processes.name, processes.path, processes.cmdline, processes.cwd, processes.root, processes.uid, processes.gid, processes.start_time, process_open_sockets.remote_address, process_open_sockets.remote_port, (SELECT cmdline FROM processes AS parent_cmdline WHERE pid=processes.parent) AS parent_cmdline FROM processes JOIN process_open_sockets USING (pid) LEFT OUTER JOIN process_open_files ON
如果需要告警功能,可将result文件打到logstash进行解析,在elk中配置告警。
更多的功能如文件完整性检查,后门检测等请自行摸索,常见问题
1、如果使用docker部署,docker内的日志会很快打满,可以自行清理
2、服务端重启后,客户端会掉线,此时会恢复一部分,但大部分起不来,这是我这遇到的问题可以在客户端上加上定时探活的脚本:
#!/bin/bash#-*- coding:utf-8 -*-process_id=$(ps -ef | grep "osqueryd --flagfile" | grep -v "grep" | awk '{print $2}')result=`echo -e "\n" | telnet X.X.X.X 8080 2> /dev/null | grep Connected | wc -l`if [ $result ]; then kill -9 $process_id && nohup /usr/local/osq/launcher --hostname=X.X.X.X:8080 --enroll_secret=TznYHNYSD8ZoFUJOvH4s3pY7ZGuzz2x/ --insecure &else echo "无法连接服务器"fi
或使用运维工具进行手动启动
ansible XX -m shell -a " pgrep osquery | xargs kill -s 9 && service osqueryd start && nohup /usr/local/osq/launcher --hostname=X.X.X.X:8080 --enroll_secret=TznYHNYSD8ZoFUJOvH4s3pY7ZGuzz2x/ --insecure & "