hids之wazuh部署入门
QQ群:397745473
1 参考: http://www.vuleyes.com/2018/02/02/hids之wazuh部署入门/
Wazuh官网
Wazuh,一款以ossec作为引擎的主机入侵检测系统。通过与ELK的结合,便于管理员通过日志平台查看系统日志信息、告警信息、规则配置信息等。
部署wazuh 从Github下载wazuh
1 git clone https://github.com/wazuh/ossec-wazuh.git
1 2 3 # ./install.sh 选择server或者agent即可
安全完后,启动服务端
1 service wazuh-manager start
查看server端状态 service wazuh-manager status
1 2 3 4 5 6 7 8 ossec-monitord is running... ossec-logcollector is running... ossec-remoted is running... ossec-syscheckd is running... ossec-analysisd is running... ossec-maild is running... ossec-execd is running... wazuh-modulesd is running...
查看agent端状态
1 2 3 4 5 ossec-logcollector is running... ossec-syscheckd is running... ossec-agentd is running... ossec-execd is running... wazuh-modulesd not running...
wazuh-modulesd not running… 是正常现象,只有服务端是running
调server接口,添加agent(注意:这里必须先添加agent,再启动agent服务。
否则会出现Queue not accessible等问题):
1 2 3 curl -u foo:bar -k -X POST -d 'name=HOSTNAME&ip=xx.xx.xx.xx' http://Wazuh-api:55000/agents curl -u foo:bar -k -X GET https://API_IP:55000/agents/001/key ossec/bin/manage_agents -i AGENTKEY
启动客户端(代理端)
1 service wazuh-agent start
FAQ:
1 2 3 4 5 6 Q1: 报错 - ERROR: Queue '/var/ossec/queue/ossec/queue' not accessible A: 不用折腾,先把agent添加进server,再开启服务试试。 Q2: 如果一台机器先装server再装成agent,使用bin/manage_agents仍然为服务端的脚本 A: 不纠结,传一个agent的manage_agents脚本上去
Wazuh api部署 依赖nodejs环境
1 2 3 cd /etc/ossec curl -s -o install_api.sh https://raw.githubusercontent.com/wazuh/wazuh-api/v2.1.0/install_api.sh && bash ./install_api.sh download service wazuh-api start
判断是否成功启动api,可查看本地端口55000
安全配置接口账号密码,执行 api/configuration/auth
下
1 2 node htpasswd user USERNAME service wazuh-api restart
wazuh-api启动失败,Centos解决方法 参考
1 2 3 yum install centos-release-scl yum install python27 service wazuh-api restart
ELK Stack部署 ELK Stack是wazuh组件之一,主要收集ossec产生的告警信息。
ELK搭建参考
搭建elk完毕后,导入es模板
1 2 curl https://raw.githubusercontent.com/wazuh/wazuh-kibana-app/2.1/server/startup/integration_files/template_file.json | curl -XPUT -u kibana:kibana 'http://localhost:9200/_template/wazuh' -H 'Content-Type: application/json' -d @- curl https://raw.githubusercontent.com/wazuh/wazuh-kibana-app/2.1/server/startup/integration_files/alert_sample.json | curl -XPUT -u kibana:kibana "http://localhost:9200/wazuh-alerts-"`date +%Y.%m.%d`"/wazuh/sample" -H 'Content-Type: application/json' -d @-
下载logstash配置
1 2 curl -so /elkb/logstash-5.5.1/config/01-wazuh.conf https://raw.githubusercontent.com/wazuh/wazuh/2.1/extensions/logstash/01-wazuh.conf curl -so /elkb/logstash-5.5.1/wazuh-elastic5-template.json https://raw.githubusercontent.com/wazuh/wazuh/2.1/extensions/elasticsearch/wazuh-elastic5-template.json
安装kibana插件(版本对应不上,需要自己修改packages.js)
1 bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp.zip
openscap部署 openscap是ossec的其中一个组件,主要功能是提供基线扫描(openscap仅支持linux的机器)
1 yum install openscap-scanner scap-security-guide
默认配置中,openscap是不开放的。需要修改配置文件ossec.conf
中标签``启动openscap。
Wazuh相关配置 Wazuh Server端配置 Remote Service Wazuh Manager发布远程服务与agent通信
ossec.conf中配置参考: Remote Service
1 2 3 4 5 <ossec_config> <remote> <local_ip>10.0.0.10</local_ip> </remote> </ossec_config>
定义告警阈值 ossec.conf中配置参考: Alert
设置级别在6以上的告警会被记录在alert.json中
1 2 3 4 5 <ossec_config> <alerts> <log_alert_level>6</log_alert_level> </alerts> </ossec_config>
Wazuh提供额外的API接口,默认没开启Integration
1 2 $ /var/ossec/bin/ossec-control enable integrator $ /var/ossec/bin/ossec-control restart
在ossec.conf中配置相应hook_url
1 2 3 4 5 6 7 8 9 10 11 12 <integration> <name> </name> <hook_url> </hook_url> <api_key> </api_key> <!-- Optional filters --> <rule_id> </rule_id> <level> </level> <group> </group> <event_location> </event_location> </integration>
配置syslog output 配置syslog输出(全部级别alert发送到240,高于级别9的alert发送到241)
1 2 3 4 5 6 7 8 9 10 <ossec_config> <syslog_output> <level>9</level> <server>192.168.1.241</server> </syslog_output> <syslog_output> <server>192.168.1.240</server> </syslog_output> </ossec_config>
syslog output参考
配置完后必须要启用client-syslog
1 /ops/ossec/bin/ossec-control enable client-syslog
配置自动生成报告 报告参考
配置email
配置每日发送syscheck的告警情况
1 2 3 4 5 6 7 <ossec_config> <reports> <category>syscheck</category> <title>Daily report: File changes</title> <email_to>example@test.com</email_to> </reports> </ossec_config>
配置每日发送告警级别高于10的情况
1 2 3 4 5 6 7 <ossec_config> <reports> <level>10</level> <title>Daily report: Alerts with level higher than 10</title> <email_to>example@test.com</email_to> </reports> </ossec_config>
Wazuh Agent端配置 注册agent 使用Wazuh API
Step 1: 添加agent
1 2 $ curl -u foo:bar -k -X POST -d 'name=NewAgent&ip=10.0.0.8' https://API_IP:55000/agents {"error":0,"data":"001"}
Step 2: 获取agent key
1 2 $ curl -u foo:bar -k -X GET https://API_IP:55000/agents/001/key {"error":0,"data":"MDAxIE5ld0FnZW50IDEwLjAuMC44IDM0MGQ1NjNkODQyNjcxMWIyYzUzZTE1MGIzYjEyYWVlMTU1ODgxMzVhNDE3MWQ1Y2IzZDY4M2Y0YjA0ZWVjYzM="}
Step 3: agent导入key
1 /var/ossec/bin/manage_agents -i MDAxIE5ld0FnZW50IDEwLjAuMC44IDM0MGQ1NjNkODQyNjcxMWIyYzUzZTE1MGIzYjEyYWVlMTU1ODgxMzVhNDE3MWQ1Y2IzZDY4M2Y0YjA0ZWVjYzM=
Step 4: agent重启
1 $ /var/ossec/bin/ossec-control restart
删除agent 1 2 3 $ curl -u foo:bar -k -X DELETE http://127.0.0.1:55000/agents/002 {"error":0,"data":"Agent removed"}
查询agent连接情况 agent段ossec.conf配置10.0.0.10为服务端,client参考
1 2 3 4 5 6 <ossec_config> <client> <server-ip>10.0.0.10</server-ip> <protocol>udp</protocol> </client> </ossec_config>
server端查询活动agent情况
1 $ /ops/ossec/bin/agent_control -lc
Wazuh组件功能 Log data collection (Logcollector组件) 运行周期: 实时
本模块提供日志数据采集的功能
日志数据采集源有3种:
log文件
Windows event log
远程syslog
日志采集标签:
可使用正则匹配日志文件名,如:
1 2 3 4 <localfile> <location>/var/log/*.log</location> <log_format>syslog</log_format> </localfile>
File integrity monitoring (Syscheckd组件) 默认运行周期: 6h
本模块提供监控文件变换的功能
Syscheckd参考
基础用法,验证文件md5, sha1, owner, permissions
1 2 3 4 <syscheck> <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories> <directories check_all="yes">/root/users.txt,/bsd,/root/db.html</directories> </syscheck>
周期监控文件
1 2 3 <syscheck> <directories check_all="yes" realtime="yes">c:/tmp</directories> </syscheck>
实时监控文件
1 2 3 <syscheck> <directories check_all="yes" realtime="yes" report_changes="yes">/test</directories> </syscheck>
Anomaly and malware detection (Rootcheck组件) 默认运行周期:2h
本模块根据系统活动匹配设定的规则或指纹识别出异常
rootcheck参考
配置rootkit库
1 2 3 4 <rootcheck> <rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files> <rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans> </rootcheck>
Monitoring security policies (Rootcheck组件、OpenSCAP) 本模块根据提前定义好的策略周期扫描系统,判断系统是否符合安全策略
配置审计策略
1 2 3 4 5 <rootcheck> <system_audit>./db/system_audit_rcl.txt</system_audit> <system_audit>./db/cis_debian_linux_rcl.txt</system_audit> <system_audit>./db/cis_rhel_linux_rcl.txt</system_audit> </rootcheck>
周期扫描策略
1 2 3 4 5 6 7 <rootcheck> <frequency>36000</frequency> <system_audit>/var/ossec/etc/shared/system_audit_rcl.txt</system_audit> <system_audit>/var/ossec/etc/shared/cis_debian_linux_rcl.txt</system_audit> <system_audit>/var/ossec/etc/shared/cis_rhel_linux_rcl.txt</system_audit> <system_audit>/var/ossec/etc/shared/cis_rhel5_linux_rcl.txt</system_audit> </rootcheck>
自定义rootcheck策略
创建audit文件
1 2 3 4 5 6 7 # PermitRootLogin not allowed # PermitRootLogin indicates if the root user can log in by ssh. $sshd_file=/etc/ssh/sshd_config; [SSH Configuration - 1: Root can log in] [any] [1] f:$sshd_file -> !r:^# && r:PermitRootLogin\.+yes; f:$sshd_file -> r:^#\s*PermitRootLogin;
在rootcheck标签中添加audit文件
1 2 3 <rootcheck> <system_audit>/var/ossec/etc/shared/audit_test.txt</system_audit> </rootcheck>
OpenSCAP组件 rpm安装OpenSCAP yum install openscap-scanner
Wazuh默认配置文件在目录 /ops/ossec/wodles/oscap/
每个agent选择对应的系统版本将配置文件放在 /ops/ossec/wodles/oscap/policies
中
wazuh中openscap默认运行周期: 30m
1 2 3 4 5 6 7 8 9 10 11 <wodle name="open-scap"> <disabled>no</disabled> <timeout>1800</timeout> <interval>1d</interval> <scan-on-start>yes</scan-on-start> <content type="xccdf" path="ssg-centos-7-ds.xml"> <profile>xccdf_org.ssgproject.content_profile_pci-dss</profile> <profile>xccdf_org.ssgproject.content_profile_common</profile> </content> </wodle>
wodle标签参考
Monitoring system calls (此模块貌似很强,后续需加强学习) 跟踪 Linux Audit system 提供的安全相关的信息
audit参考
若需要使用系统的audit,需要安装
配置wazuh使用审计功能,在 ossec.conf
添加
1 2 3 4 <localfile> <log_format>audit</log_format> <location>/var/log/audit/audit.log</location> </localfile>
Command monitoring 此模块主要为了应对我们需要监控确没日志输出的任务
Step 1:开启agent远程命令接口, 在agent端local_internal_options.conf文件添加
1 logcollector.remote_commands=1
Step 2:在服务端ossec.conf中添加执行tasklist命令
1 2 3 4 5 <localfile> <log_format>full_command</log_format> <command>tasklist</command> <frequency>120</frequency> </localfile>
Step 3:配置相应触发告警的规则
1 2 3 4 5 6 7 8 9 10 11 12 <rule id="100010" level="6"> <if_sid>530</if_sid> <match>^ossec: output: 'tasklist'</match> <description>Important process not running.</description> <group>process_monitor,</group> </rule> <rule id="100011" level="0"> <if_sid>100010</if_sid> <match>notepad.exe</match> <description>Processes running as expected</description> <group>process_monitor,</group> </rule>
监控端口服务变换,产生告警姿势(默认配置有此规则)
Step 1:配置命令netstat
1 2 3 4 <localfile> <log_format>full_command</log_format> <command>netstat -tan |grep LISTEN|grep -v 127.0.0.1</command> </localfile>
Step 2:配置相应规则
1 2 3 4 5 6 7 <rule id="533" level="7"> <if_sid>530</if_sid> <match>ossec: output: 'netstat -tan</match> <check_diff /> <description>Listened ports status (netstat) changed (new port opened or closed).</description> <group>pci_dss_10.2.7,pci_dss_10.6.1,</group> </rule>
Active response 本组件可根据告警的级别,触发一系列的脚本应对威胁
Step 1:在agent的ossec.conf中配置响应动作脚本
command参考 :
1 2 3 4 5 6 <command> <name>host‐deny</name> <executable>host‐deny.sh</executable> <expect>srcip</expect> <timeout_allowed>yes</timeout_allowed> </command>
Step 2:在server中定义rules对告警动作的响应
1 2 3 4 5 6 <active‐response> <command>host‐deny</command> <location>local</location> <level>7</level> <timeout>600</timeout> </active‐response>
避免影响业务,建议初始化时关闭此标签,在ossec.conf中配置(agent、server)
1 2 3 <active-response> <disabled>yes</disabled> </active-response>
正常关闭后,查看ossec状态: ossec-execd not running...
Agentless monitoring 此模为了解决不可安装agent又需要加入wazuh体系的设备,如防火墙、路由器、交换机
默认server端是没有开启agentless监控的
开启agentless monitoring
1 /var/ossec/bin/ossec-control enable agentless
server端通过ssh与agentless的设备连接
执行 /ops/ossec/agentless/register_host.sh list
查看已连接设备
执行 /ops/ossec/agentless/register_host.sh add root@example_address.com example_password [enablepass]
添加设备(公钥认证直接添加相应的public key到对应的设备 sudo -u ossec ssh-keygen
)
当设备添加入agentless monitoring list后,需要配置server端去监控它
BSD 系统
1 2 3 4 5 6 7 <agentless> <type>ssh_integrity_check_bsd</type> <frequency>20000</frequency> <host>root@test.com</host> <state>periodic</state> <arguments>/bin /var/</arguments> </agentless>
Linux 系统
1 2 3 4 5 6 7 <agentless> <type>ssh_integrity_check_linux</type> <frequency>36000</frequency> <host>root@test.com</host> <state>periodic</state> <arguments>/bin /etc/ /sbin</arguments> </agentless>
差异比较
当命令输出结果与上一次不一样时,将产生告警
1 2 3 4 5 6 7 <agentless> <type>ssh_generic_diff</type> <frequency>20000</frequency> <host>root@test.com</host> <state>periodic_diff</state> <arguments>ls -la /etc; cat /etc/passwd</arguments> </agentless>
抗洪水机制(anti-flooding mechanism) 此组件旨在防止代理上的大量突发事件对网络或server端产生不利影响
agent突发事件,导致大量日志产生情况;
Systemcheck监控目录、文件变化
应用报错日志无限触发,导致产生大量日志,如磁盘已满
Leaky bucket Leaky bucket是一个控制模型,主要提供4种告警状态,便于分析当前日志缓存的状态
默认buffer长度为5000个事件(每秒发500个事件到server端),在agent中ossec.conf中标签client_buffer定义
1 2 3 4 5 6 <client_buffer> <!-- Agent buffer options --> <disable>no</disable> <length>5000</length> <events_per_second>500</events_per_second> </client_buffer>
告警级别:
Full alert 事件数量达到100%,产生full alert告警
Warning alert 事件数量达到90%,产生warning alert告警
Normal alert 事件数量达到70%,产生normal alert告警
Flood alert 事件超过100%开始,到回归到90%,产生flood alert告警
agent labels 此模块主要提供一个自定义agent告警的方式
修改agent中的ossec.conf
1 2 3 4 5 6 7 <labels> <label key="aws.instance-id">i-052a1838c</label> <label key="aws.sec-group">sg-1103</label> <label key="network.ip">172.17.0.0</label> <label key="network.mac">02:42:ac:11:00:02</label> <label key="installation" hidden="yes">January 1st, 2017</label> </labels>
总结
整套Wazuh在启动前,建议关闭联动功能,避免出现未知情况阻断。
规则配置灵活,建议多参考ossec规则自定义适应业务的规则。
QQ群:397745473