水獭
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

写在前面
wazuh分析内容感谢张浩、谢涛,我只能白活,他们才懂技术。看了看内容,还是分成上中下三次,这次来说wazuh的功能和规则。
功能分析
日志收集
Wazuh agent执行日志收集根据代理配置中设置的要收集的日志文件,监控此文件内容的变化,当发生变更时,会将变更的日志信息发送到服务器上,服务器通过解码器对日志内容进行解码,再匹配规则进行告警处理,其主要处理流程如下图:
在agent的配置文件/var/ossec/etc/ossec.conf文件中指定了要收集的日志文件:
代理从指定的文件中收集的日志信息内容会发送到服务器,在服务器上对日志内容进行解析,如下图中为服务器解析后可输出原有日志文件信息:
原有日志信息中记录了事件的发生时间、操作的用户、事件的结果、原有日志文件,服务器将结果解析后匹配规则后形成告警信息,显示出匹配的规则组,安全警告级别等内容。
代码实现方面由模块logcollector模块进行,其实现会根据日志文件的类型单独进行处理,如下图:
在判断后日志文件类型后,再进行日志的读取和发送。日志内容最终经过ossec-agentd 发送给manager的ossec-remoted进程,最终送到ossec-analysisd进程去分析。
日志文件收集支持指定文件、正则表达式匹配、按日志监控、从Windows事件日志文件、环境变量等配置方式。
文件完整性监控
Wazuh文件完整性监控主要监控Linux配置文件和Windows的注册表内容,在代理安装时,会收集端点上的文件信息,形成加密校验存储,通过设定配置项,由服务器中的syscheck组件定期对文件进行扫描,将扫描后的文件数据与存储的数据进行比较,确定是否被修改。文件完整性的校验非实时进行,只是定期扫描执行发现。其主要工作流程如下图:
在配置项中可设定扫描时间间隔、要监控的目录文件、不监控的目录等设置,如下图:
恶意软件检测
Wazuh代理实现恶意软件检测主要是检测操作系统中的命令执行与预期的行为不匹配模式的动作,恶意软件通过修改/模仿系统的原有命令执行特定的动作,在端点上进行信息收集的恶意行为达到隐藏效果。由模块rootcheck进行,因为系统文件被改变,也可以通过syscheck模块按照文件完整性监控进行检查,主要工作流程如下图:
通过文件完整性的监控,当判定到系统中特定命令的文件完整性发生变化时,对此命令的变化发出告警,由管理员来判断程序是否存在恶意行为。
部分恶意程序通过隐藏自己的进程ID,无法在系统列表中查看到进行,Wazuh通过替换系统ps命令(木马版本),查看系统中隐藏的进程。
恶意软件会隐藏使用的端口信息,使用netstat等常用命令检查时无法查询到端口占用信息,代理会通过使用socket()的对系统上的udp和tcp端口进行尝试连接,由此来判断是否存在隐藏的端口(这也是一些厂商的做法)。
Wazuh会对端点系统上的文件的文件进行检查,查看是否存在异常的文件权限、被隐藏的文件或者目录等内容,由此判断是否为恶意程序。
Wazuh还会通过检查dev、sys等程序检查恶意程序,从多方面来进行,主要的检查方法由以下:
安全策略标准检测
系统安全策略检测是验证系统是否符合安全配置和已规定的应用程序的一组预定义规则的过程,使用互联网安全中心(CIS)发布的安全策略,对系统中安全策略的配置给出评分。执行功能的模块有rootcheck、openscap、CIS-CAT。
rootcheck的检测主要检查配置文件是否存在,文件或Windows注册表中是或否包含特殊字符串等,部分策略如下表:
策略 | 描述 |
cis_debian_linux_rcl.txt | 基于CIS Benchmark for Debian Linux v1.0 |
cis_rhel5_linux_rcl.txt | |
cis_rhel6_linux_rcl.txt | |
cis_rhel7_linux_rcl.txt | 基于CIS Benchmark for Red Hat Enterprise Linux 7 v1.1.0 |
cis_rhel_linux_rcl.txt | |
cis_sles11_linux_rcl.txt | 基于CIS Benchmark for SUSE Linux Enterprise Server 11 v1.1.0 |
cis_sles12_linux_rcl.txt | |
system_audit_rcl.txt | Web漏洞和漏洞利用 |
win_audit_rcl.txt | 检查注册表值 |
system_audit_ssh.txt | SSH检查 |
win_applications_rcl.txt | 检查是否安装了恶意应用程序 |
策略和合规性数据库在由服务器管理,由服务器将它们下发到代理中。
Openscap提供执行配置的功能,主要用于验证安全合规性、对漏洞进行评估,以标准化的方式表述和操纵安全数据的规范,评估的主要过程包括:
scap扫描:读取scap策略并检查系统是否符合它的应用程序。
安全策略:系统如何设置及检查的内容。
配置文件:提供符合特定安全基准的准则和值集。
评估:扫描程序在代理上根据特定策略和配置文件执行的过程。
其主要实现方法由以下几种:
主要的处理流程如下图:
支持的评估安全标准有:PCI-DSS、GDPR、HIPAA、NIST 800-53、TSC
系统调用监控
此模块主要针对于Linux系统进行,结合audit审计规则执行。根据预先配置的规则,audit可以记录系统中发生时间的详细信息,wazuh会与审计的信息形成报告进行告警。
audit支持的以下三种规则:
控制规则:允许修改审计系统的行为及某些配置。
文件系统规则:允许审核对特定文件或目录的访问。
系统调用规则:允许记录指定程序所进行的系统调用。
使用audit在端点系统中添加相应的规则后,在wazuh 的配置中添加相应的监控内容,wazuh即可接收相应的审计日志内容,配置项有一下:
此部分规则执行命令执行的审计、文件的修改、读取、删除监控规则,需要在端点上单独添加审计规则,使用较麻烦,无法进行统一部署。
远程命令执行监控
在操作系统中,有些事件的处理结果不会显示在日志中,而是在命令执行的输出结果中显示,为解决这个问题,wazuh实现了监控远程特定命令输出的功能,将输出内容作为日志内容处理,主要处理流程如下图:
实现此功能需要在代理中开启可接收远程命令,在/var/ossec/etc/local_internal_options.conf中添加配置项:logcollector.remote_commands=1,在服务器的配置文件/vat/ossec/etc/ossec.conf中添加相应的执行命令:
配置完成后,代理会根据配置项在相应的时间间隔执行命令,收集命令的输出结果,作为日志内容进行分析处理,并在满足警报条件时出发警报。
主动响应
主动响应执行策略以解决收到的主动威胁,例如在满足某些规则后阻止威胁源访问端点机。主动响应执行脚本以应答基于警报级别或规则组触发的特定警报,但如果应答的执行力度不够会增加系统的危险性。其主要处理流程如下图:
主动响应是配置在特定警报,警报级别或规则组已被触发执行脚本,分为有状态响应和无状态响应,有状态响应为在指定的时间段后撤消操作,而无状态响应为一次性操作。每个主动响应将执行其关联命令的位置,包括:在触发警报的代理上,在管理器上,在另一个指定代理上或在还包括管理器的所有代理上。
Wazuh提供了一下主动响应脚本内容:
脚本名称 | 描述 |
Linux | |
disable-account.sh | 通过设置禁用帐户 passwd-l |
firewall-drop.sh | 将IP添加到iptables拒绝列表中 |
firewalld-drop.sh | 将IP添加到firewalld下拉列表中 |
host-deny.sh | 将IP添加到/etc/hosts.deny文件中 |
ip-customblock.sh | 自定义OSSEC,可轻松修改以进行自定义响应 |
ipfw_mac.sh | Mac OS创建的防火墙被删除的响应脚本 |
ipfw.sh | ipfw创建的防火墙被断开的响应脚本 |
npf.sh | npf创建的防火墙被删除的响应脚本 |
ossec-slack.sh | 在Slack上发布修改 |
ossec-tweeter.sh | 在Twitter上发布修改 |
pf.sh | pf创建的防火墙被删除的响应脚本 |
restart-ossec.sh | 更改ossec.conf时自动重启Wazuh |
route-null.sh | 将IP添加到空路由 |
Windows | |
netsh.cmd | 使用netsh阻止ip |
restart-ossec.cmd | 重新启动ossec代理 |
route-null.cmd | 将IP添加到空路由 |
wazuh规则
Wazuh告警、规则
WAZUH系统使用自定义的规则来检测攻击、入侵、软件滥用、配置问题、应用错误、恶意软件、rootkit、系统异常或安全策略违规等。基于OSSEC提供的一套“开箱即用”的规则,WAZUH对其进行了更新和扩展,以提高自身的威胁检测能力。
目前,WAZUH支持超过4000条规则,这些规则涉及:
Syslog | Docker | CISCO | SonicWall |
Sendmail | Postfix | Spamd | Imapd |
MailScanner | Microsoft Exchange | Courier | PIX |
NetScreen technologies | Mcfee | NextCloud | PaloAlto v9.0 |
VirusTotal | Suricata | MongoDB | Jenkins |
Pluggable Authentication Modules (PAM) | Telnet | SSH | Solaris Basic Security module |
Asterisk | Microsoft Windows DHCP | Arpwatch | Symantec |
Trend Micro OSCE (Office Scan) | Horde IMP | Roundcube | Wordpress |
Compaq Insight Manager (cimserver) | Dovecot | Vm-pop3d | FTP, Proftpd, PureFTP, Vsftpd, Microsoft FTP |
OwlH Zeek | Junos | Panda Advanced Protection Service (PAPS) | CheckPoint Smart-1 Firewalls |
MacOS SSH | Google Cloud Pub/Sub |
WAZUH规则说明和威胁检查示例
具有PCI DSS合规性映射的Netscaler的日志分析规则:
SSH服务器的跟检查规则,映射到CIS安全基准和PCI DSS合规性:
目录布局
规则集文件夹结构如下图所示:
在ruleset/文件夹中,可找到所有常用规则和解码器。此文件夹内的所有文件将在WAZUH更新过程中被覆盖或修改,因此不要再此文件夹中编辑文件或添加自定义文件。
如果需要执行一些自定义规则或更改既有规则,应使用etc/文件夹。可以在此处添加自己定义的解码器/规则文件或使用系统默认的local_decoder.xml和local_rules.xml文件。
JSON解码器
WAZUH现在为JSON日志集成了一个集成解码器,可以从任何格式来源的数据中提取数据。
该解码器能够提取以下数据类型:
数字 | 整数或十进制数。 |
字符串 | 一个字符序列。 |
布尔值 | true或false值。 |
空值 | 空值。 |
数组 | 具有零个或多个值的列表。这些值可以不同,但必须属于上述数据类型。不支持对象数组。 |
对象 | 对象是字符串的键/值对集合。 |
提取的字段存储为动态字段,并且可以被规则引用。
以下示例显示了WAZUH如何解码JSON日志,并将Suricata数据源相关事件生成警报。
Suricata事件日志:
JSON解码器从日志数据中提取每个字段,以便与规则进行比较,这样就不需要特定的Suricata解码器。这些规则将用于根据特定生成JSON事件的数据源的某些字段的存在来识别JSON事件的数据源。
以下示例显示了文件中包含的规则(0470-suricata_rules.xml)如何工作。最初,有一个父规则检查是否存在“时间戳”和“事件类型”字段以确定日志类型(Suricata),然后子规则使用提取的字段的值显示警报。
自定义规则和解码器
在WAZUH规则集中可以修改默认的规则和解码器,也可以添加新规则和解码器以增加WAZUH的检测能力。
添加新的解码器和规则
可以对local_decoder.xml和local_rules.xml文件进行适当的修改来添加新的解码器和规则。而对于既存解码器和规则的大规模更改/添加,建议创建新的解码器和规则文件。自定义规则的<id>范围在100000到120000之间。
下面将使用一个简单的示例来描述这些过程。这是来自名为example的程序日志:
首先,对所关注的信息进行解码,因此第一步会将新的解码器添加到/var/ossec/etc/decoders/local_decoder.xml:
然后,将以下内容添加到/var/ossec/etc/rules/local_rules.xml:
可以使用以下方法检查它是否有效/var/ossec/bin/wazuh-logtest:
更改系统现有既存规则
对文件夹内任何规则文件的更改(/var/ossec/ruleset/rules)将在版本更新过程中丢失。使用以下过程来保留自定义的更改。
如果想将SSH规则(ID:5710)中定义的警报级别值从5更改为10,需执行以下操作:
- 打开规则文件/var/ossec/ruleset/rules/0095-sshd_rules.xml。
- 从规则文件中查找并复制以下代码:
- 将代码粘贴到/var/ossec/etc/rules/local_rules.xml中,修改警报级别值,并添加overwrite="yes"以表明此规则正在覆盖已定义的规则:
此外,还可以修改标准解码器。
文件夹中任何解码器文件的更改(/var/ossec/ruleset/decoders)都将在版本更新过程中丢失。使用以下过程来保留自定义的更改。
不幸的是,没有上述规则描述的方式覆盖解码器的工具。但是,可以在任何解码器文件中执行更改,如下所示:
- 将解码器文件/var/ossec/ruleset/decoders/0310-ssh_decoders.xml从默认文件夹复制到用户文件夹/var/ossec/etc/decoders以保留更改。
- 从OSSEC加载列表中排除原始解码器文件——ruleset/decoders/0310-ssh_decoders.xml。为此,需要使用conf文件中的<decoder_exclude>标签。因此,指定的解码器不会从默认解码器文件夹中加载,而是会加载保存在用户文件夹中的解码器文件。
- 执行文件中的更改/var/ossec/etc/decoders/0310-ssh_decoders.xml。
告警级别
级别 | 描述 | 告警示例 |
Level 0 | 忽略,不会采取任何行动 | 用来避免误报,这里没有安全问题 |
Level 2 | 系统低优先级的通知 | 没有安全相关性的状态消息 |
Level 3 | 成功或授权的事件 | 成功登录,防火墙允许的事件 |
Level 5 | 用户生成的错误 | 密码错误,拒绝操作 |
Level 6 | 低威胁的攻击 | 对系统没有威胁的蠕虫或病毒(例如Linux机器上的Windows蠕虫) |
Level 9 | 来自无效源的错误信息 | 试图以未知用户或无效的来源登录 |
Level 10 | 用户产生重复性的错误 | 多个错误密码,多次登录失败 |
Level 11 | 完整性检查的警告 | 检测到二进制文件被修改或通过rootcheck检测到rootkit存在信息。它们可能表明袭击成功。 |
Level 12 | 重要事件 | 来自系统或内核的错误或告警 |
Level 13 | 异常错误(重要) | 常见的攻击模式,如缓冲区溢出尝试 |
Level 14 | 重要安全事件 | 多个检测规则形成关联结果 |
Level 15 | 严重的攻击成功 | 很少产生误报,发现这个级别的告警需要立即处理 |
使用MITRE ATT&CK安全知识框架提高威胁检测能力
WAZUH的此项功能允许用户自定义警报信息以包含与MITRE ATT&CK安全知识框架中相关的特定攻击信息。MITRE ATT&CK安全知识框架中存储了所有的网络攻击技术以及检测方法和防御措施。当用户希望了解更多的攻击详细信息时,ATT&CK安全知识框架中的知识会给出明确的说明。
配置示例
MITRE ATT&CK为每种攻击技术分配了一个ID。这些攻击技术按照所属攻击战术(防御规避、权限提升等)的不同进行分组,其中一些技术可能属于多个战术。
ATT&CK中的攻击技术T1110与暴力破解相关。该技术非常符合下述规则(ID:100002),该规则检测到暴力破解攻击并生成警报。下面是如何将ATT&CK安全知识框架中的攻击技术扩展到该规则的示例。
将以下代码添加到 /var/ossec/etc/rules/local_rules.xml
重新启动WAZUH,规则配置自动生效。
MITRE 信息出现在规则信息中。警报显示 MITRE ATT&CK安全知识框架中攻击技术的ID 及其相关的攻击战术和技术描述。
使用Kibana查看
我们可以检查警报是否在 Kibana 上正确显示。打开它并添加一个过滤器。
截止2022年4月24日,WAZUH系统默认规则集中,包含了4093项各类规则,涉及140个TTP攻击技术。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
