hids之wazuh部署入门

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>

Integration with external APIs (仅支持PagerDuty、slack)

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

日志采集标签:

  • localfile
  • remote
  • global

可使用正则匹配日志文件名,如:

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,需要安装

1
yum install 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

知识星球