HIDS-Wazuh 功能分析

Wazuh,一款以ossec作为引擎的主机入侵检测系统。通过与ELK的结合,便于管理员通过日志平台查看系统日志信息、告警信息、规则配置信息等。
其采用C/S的模式,客户端通过agent收集数据发送给wazuh server,然后进行分析处理结果。

ossec类似,我们通过介绍他的主要功能更好的了解系统的原理。主要分了以下几个部分:

日志分析

获取系统日志或者设备远程系统日志进行实时分析,通过日志识别应用程序或系统错误、配置错误、入侵企图、违规操作等安全问题。

Log analysis

数据收集

日志配置如下,可以看到支持linux、windows、windows时间、windows关到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[linux]
<localfile>
<location>/var/log/example.log</location>
<log_format>syslog</log_format>
</localfile>
[windows event]
<localfile>
<location>Security</location>
<log_format>eventlog</log_format>
</localfile>
[windows eventchannel]
<localfile>
<location>Microsoft-Windows-PrintService/Operational</location>
<log_format>eventchannel</log_format>
</localfile>
[windows rsyslog]
<ossec_config>
<remote>
<connection>syslog</connection>
<allowed-ips>192.168.2.0/24</allowed-ips>
</remote>
<ossec_config>

数据分析

主要分两步,解码和规则匹配。以日志记录为例:

1
Feb 14 12:19:04 localhost sshd[25474]: Accepted password for rromero from 192.168.1.133 port49765 ssh2

这是一条最常见的ssh登陆成功日志,HIDS主要做两步,1是预解码,取出静态字段

1
2
localhost
sshd

2是根据日志消息,提取信息:

1
2
3
应用名称: sshd
目的用户: rromero
IP: 192.168.1.133

然后根据规则匹配:

1
2
3
4
5
<rule id="5715" level="3">
<if_sid>5700</if_sid>
<match>^Accepted|authenticated.$</match>
<description>sshd: authentication success.</description>
<group>authentication_success,pci_dss_10.2.5,</group></rule>

一旦匹配成功,将创建一个报警

1
2
3
4
5
6
** Alert 1487103546.21448: - syslog,sshd,authentication_success,pci_dss_10.2.5,
2017 Feb 14 12:19:06 localhost->/var/log/secure
Rule: 5715 (level 3) -> 'sshd: authentication success.'
Src IP: 192.168.1.133
User: rromero
Feb 14 12:19:04 localhost sshd[25474]: Accepted password for rromero from 192.168.1.133 port49765 ssh2

文件完整性检测

Wazuh 的文件完整性监控(FIM)监控指定的文件,如果这些文件被修改则触发报警。这个组件存储了常见的正常文件或 windows 注册表项的加密校验和其他属性,并定期将其与系统正在使用的当前文件进行比较,来确定文件是否被修改.

wazuh agent 定时(默认6小时)去扫描监控的文件并将hash值和文件属性发送给wazuh manager,如果需要实时监控,则需配置单个文件。

当检测到hash不一致时,生成报警,类似以下:

1
2
3
4
5
6
7
8
9
** Alert 1460948255.25442: mail - ossec,syscheck,pci_dss_11.5,
2016 Apr 17 19:57:35 (ubuntu) 10.0.0.144->syscheck
Rule: 550 (level 7) -> 'Integrity checksum changed.'
Integrity checksum changed for: '/test/hello'
Size changed from '12' to '17'
Old md5sum was: 'e59ff97941044f85df5297e1c302d260'
New md5sum is : '7947eba5d9cc58d440fb06912e302949'
Old sha1sum was: '648a6a6ffffdaa0badb23b8baf90b6168dd16b3a'
New sha1sum is : '379b74ac9b2d2b09ff6ad7fa876c79f914a755e1'

还可以配置忽略或者单独添加文件的监控

异常和恶意软件检测

异常检测是通过在系统中查找不正常的操作行为模式,一旦恶意软件(例如:rootkit)安装在操作系统上,它会通过修改系统来使自身隐藏起来。虽然恶意软件会使用各种技术来实现这个目的,但是 Wazuh 使用广泛普遍的方式来查找并指示入侵者的异常行为模式。负责这个任务的主要组件是 rootcheck.

其可以完成的内容如下:

#文件完整性监控

同上

#检查运行的进程

恶意进程可以隐藏自己使用户无法通过系统进程列表查看到自己(PS 命令的特洛伊版本),Rootcheck检查所有进程 ID(PID),以查找与不同系统调用的差异(getsid、getpgid)

1
2
3
4
** Alert 1460225922.841535: mail - ossec,rootcheck
2017 Feb 15 10:00:42 (localhost) 192.168.1.240->rootcheck
Rule: 510 (level 7) -> 'Host-based anomaly detection event (rootcheck).'
Process '495' hidden from /proc. Possible kernel level rootkit.

#检查隐藏的端口

恶意软件可以使用隐藏端口与攻击者进行通信,Rootcheck 使用 bind() 检查系统中的每个端口,如果它无法绑定到端口并且该端口不在 netstat 输出中,则可能存在而已软件。

#检查异常文件和权限

Wazuh 扫描整个文件系统寻找不寻常的文件和权限,所有拥有者是 root 的文件都会被检查对于其他用户是否有写权限,如:sudi 文件、隐藏目录和文件。

#使用系统函数检查隐藏文件

Wazuh 扫描整个文件系统,使用 fopen+read 函数统计文件大小并进行比较,对于目录节点使用 opendir+readdir 的输出结果进行比较,如果结果不匹配则可能存在恶意软件,报警日志如下:

1
2
3
4
** Alert 1460225922.51190: mail - ossec,rootcheck
2017 Feb 15 10:30:42 (localhost) 192.168.1.240->rootcheck
Rule: 510 (level 7) -> 'Host-based anomaly detection event (rootcheck).'
Files hidden inside directory '/etc'. Link count does not match number of files (128,129)

#扫描 /dev

/dev目录只包含特定于设备的文件,任何其他的文件都应该被检查,因为恶意软件可能使用这个分区来隐藏文件。例如:在/dev下创建一个隐藏文件

#扫描网络接口

#rootkit检查

监控安全策略

策略监控是验证所有系统正在使用的配置信息是否符合一组预定义规则的过程,Wazuh 使用的三个组件:Rootcheck、OpenSCAP 和 CIS-CAT

#Rootcheck

Wazuh 监视配置文件以确保他们符合你的安全策略、标砖和强化指南,通过 agent 定期扫描检测已知易受攻击、未打补丁和错误配置的应用程序

Rootcheck可用于:

  • 检测进程是否运行
  • 检查文件是否存在
  • 检查文件内容是否包含某个表达式或者 windows 注册表的键值里是否包含某个字符串或表达式

其根据配置周期扫描

#OpenSCAP

是用于表达和标准化的方式操纵证券数据的规范。SCAP 联合使用多种规范来实现自动化持续监控,漏洞管理和安全合规性扫描。

  1. 验证安全合规性:OpenSCAP 中定义了组织中所有系统必须符合的要求,以符合使用的安全策略和安全基准
  2. 执行漏洞评估:OpenSCAP 可识别和分类系统中的漏洞
  3. 执行专门的评估:OpenSCAP 可以执行特定的自定义系统检查(即检查可疑文件名和可以文件位置)

#CIS-CAT 集成

CIS(互联网安全中心)是一个致力于保护私人和公共组织免受网络威胁。CIS 基准指南是公认的全球标准和保护 IT系统和数据免受网络攻击的最佳实践

IP-CAT 是利用跨平台的 java 应用程序,用于扫描目标系统将系统设置与 CIS 基准进行比较然后生成一份报告。有超过 80 个 CIS 基准涵盖几乎所有操作系统,根据不同的需要进行不同的配置

系统调用

在 Linux 的审计系统提供了一种方法来跟踪你机器上安全相关的信息,根据预先配置的规则,Audit 可以对您系统上发生的事件进行详细的实时记录。这些信息对于一些关键系统检测他们执行的操作是否违反安全策略至关重要。

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- 监控一个 ID 大于 500 的系统用户在删除或者重命名文件是创建日志条目 -
# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -Fauid!=4294967295 -k delete
- 监控访问目录/home -
auditctl -w /home -p w -k audit-wazuh-w
auditctl -w /home -p a -k audit-wazuh-a
auditctl -w /home -p r -k audit-wazuh-r
auditctl -w /home -p x -k audit-wazuh-x
* 当发生新增文件 touch /home/malware.py
会产生报警:
** Alert 1487891161.28457: - audit,audit_watch_write,audit_watch_create,
2017 Feb 23 15:06:01 localhost->/var/log/audit/audit.log
Rule: 80790 (level 3) -> 'Audit: Created: /home/malware.py'
type=SYSCALL msg=audit(1487891161.190:2942): arch=c000003e syscall=2 success=yes exit=3a0=7ffce677b7b7
- 监控用户行为 -
# auditctl -a exit,always -F euid=0 -F arch=b64 -S execve -k audit-wazuh-c
# auditctl -a exit,always -F euid=0 -F arch=b32 -S execve -k audit-wazuh-c
* 使用 root 用户执行nano,警报如下:
** Alert 1487892032.56406: - audit,audit_command,
2017 Feb 23 15:20:32 localhost->/var/log/audit/audit.log
Rule: 80792 (level 3) -> 'Audit: Command: /usr/bin/nano'
type=SYSCALL msg=audit(1487892031.893:2963): arch=c000003e syscall=59 success=yes exit=0a0=14e4990a1=14e4a30 a2=14d4ef0 a3=7ffdd01083d0 items=2 ppid=60621 pid=60840 auid=1000 uid=0 gid=0 euid=0suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=346 comm="nano" exe="/usr/bin/nano"subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="audit-wazuh-c" type=EXECVEmsg=audit(1487892031.893:2963): argc=1 a0="nano" type=CWD msg=audit(1487892031.893:2963):

命令监控

命令监控用于监控日志之外的东西,比如执行的命令。wazuh集成了监视特定命令输出结果。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
- 监控进程运行 -
<localfile>
<log_format>full_command</log_format>
<command>tasklist</command>
<frequency>120</frequency>
</localfile>
- 磁盘利用率 -
<rule id="531" level="7" ignore="7200">
<if_sid>530</if_sid>
<match>ossec: output: 'df -P': /dev/</match>
<regex>100%</regex>
<description>Partition usage reached 100% (disk space monitor).</description>
<group>low_diskspace,pci_dss_10.6.1,</group>
</rule>
当磁盘利用率达到100%时报警
- 检查tcp端口是否有变化 -
<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>
- 检测USB存储 -
<rule id="140125" level="7">
<if_sid>530</if_sid>
<match>ossec: output: 'reg QUERY</match>
<check_diff />
<description>New USB device connected</description>
</rule>

主动响应

主动响应配置定义了命令将要执行的时间和位置,如果条件满足特定的规则 ID、严重级别或者特定的来源规则则触发命令。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 增加一个 IP 到 iptables 的拒绝访问列表 -
<command>
<name>firewall-drop</command>
<executable>firewall-drop.sh</executable>
<expect>srcip</expect>
</command>
命令要执行的脚本是firewall-drop.sh,触发规则之后将srcip中的 IP 增加到 iptables 的封禁列表
<active-response>
<command>firewall-block</command>
<location>all</location> <rules_group>authentication_failed,authentication_failures</rules_group>
<timeout>700</timeout>
<repeated_offenders>30,60,120</repeated_offenders>
</active-response>

无代理监控

无代理监控允许您通过SSH监控没有代理的设备或系统,例如路由器,防火墙,交换机和 linux/bsd 系统。可以满足一些用户设备不允许或者不能安装 agent 的情况.

例如:

1
2
3
BSD完整性检查
Linux完整性检查
pix config [监控Cisco PIX/router 的配置文件]

防洪机制

这个机制的作用是防止 agent 上的大型突发事件对网络或者 manager 造成负面的影响。它使用漏斗队列来收集所有生成的事件,并以低于指定事件每秒阈值的速率将它们发送给 manager,这有助于避免来自 Wazuh 组件的事件以外丢失。

当agent监控一个不断变化的目录,或者某些应用程序遇到错误,一直重试, 按照我们所配置的规则,会产生大量的事件,导致agent,网络或者manager运行受阻。

主要由2部分组成:

  1. Agent-to-Manager 防洪机制

    agent 端提供了一个漏斗队列以及事件阻塞控制来防止 agent 使网络或 manager 饱和

  2. 内部 agent 防洪控制

    该机制在 agent 的不同组件中使用内部限制,控制它们生成事件的速率

漏洞检测

agent 会收集本地已安装的应用程序列表,并定期将其发送给 manager(每个 agent 都会在本地存储一个 sqlite 数据库)。此外 Manager 使用公共 OVAL CVE 存储库构建全球漏洞数据库,然后将其用于此信息与 agent 的应用程序清单数据进行交叉关联。