OSSEC(三)
OSSEC(三)
0.前言
前面完成了ossec的两种版本的安装对比,对于3和2都进行了一定的解析,同时基于2.8版本进行了wui和analogi的可视化界面搭建,在结束工具的基本安装和搭建后,接下来需要掌握的是对于ossec入职的规范以及告警规则的配置学习,这里分为几点,首先是OSSEC的配置、ossec.conf的文件写法使用等相关内容。参考链接:
1 |
|
1.配置文件
在unix、linux等系统上安装OSSEC,其默认路径一般是/var/ossec,在启动过程中,配置文件和规则都是从该目录路径进行读取,接下来介绍下ossec的相关核心配置文件及其作用
1 |
|
在OSSEC中,日志文件起着记录和存储系统活动的作用
1 |
|
在OSSEC中,队列用于存储和管理来自代理的事件和日志数据。它是一个临时存储区域,用于处理和分析来自不同代理的数据。队列的作用是确保数据的有序处理和传输。当代理无法立即将数据发送到服务器时,数据会被放入队列中,以便稍后进行处理。这可以发生在网络连接不稳定、服务器负载过高或代理与服务器之间的通信中断等情况下。
1 |
|
规则文件定义了OSSEC如何检测和响应不同类型的安全事件。它们包含了一系列规则,这些规则描述了需要监控的特定事件、日志或行为,并指定了当这些事件发生时应该采取的操作
1 |
|
2.ossec.conf文件
前一小节介绍了ossec的相关配置文件,接下来就针对最核心的ossec.conf文件进行深入探究,ossec.conf文件位于OSSEC安装目录下的/etc目录中,是ossec最主要配置文件,其使用的是xml格式结构进行语言编写,该文件包含的段落标识主要为
1 |
|
这个模块包含全局设置,如日志文件路径、邮件设置等,前文图片所显示的内容中就包含了global模块内容,这里进行解析:
1 |
|
首先是
alerts模块是配置报警级别以及收集所有的日志,每个报警都有一个严重基本报警等级,ossec的分配等级是0-15,等级越高则代表报警更加严重,严重级别更高,例如:
1 |
|
这条规则是指只记录1以上的报警级别日志,并且报警级别高于7 以上的报警都会发送邮件
这个模块能够实现为特定的事件组创建一个单独的电子邮件通知,当该组的事件触发时能够直接发送邮件,例如:
1 |
|
在这个示例中,我们为特定事件组 “authentication_failures” 创建了一个单独的电子邮件通知。当该组的事件触发时,不会延迟发送邮件(do_not_delay),并将邮件发送到 security@example.com中
这个模块是远程配置选项模块,仅在服务器端配置,负责接收来自代理的信息,如连接方式和端口等,例如:
1 |
|
此示例配置了服务器端的远程连接选项。使用安全连接(connection 设置为 “secure”)并监听端口1514(port 设置为 “1514”)以接收代理发送的信息
这是数据库输出选项模块,负责将OSSEC事件存储到外部数据库中,如MySQL或PostgreSQL等,例如:
1 |
|
此示例配置了将OSSEC事件存储到MySQL数据库的设置。指定了数据库主机名(hostname 设置为 “localhost”)、用户名(username 设置为 “ossec”)、密码(password 设置为 “ossec”)、数据库名称(database 设置为 “ossec”)和数据库类型(type 设置为 “mysql”)
规则列表模块,定义用于检测事件的规则,包括内置规则和自定义规则,例如:
1 |
|
在这个示例中,我们包含了一个名为 “rules_config.xml” 的外部规则文件,该文件包含了一组自定义规则,而rules的文件位置一般是在/var/ossec/rules/
顾名思义,只有agent机器上的配置文件进行设置,代理相关配置文件选项模块,负责指定服务器地址和端口,以便代理与服务器建立连接。例如
1 |
|
此示例配置了代理端的连接设置。指定了服务器IP地址(server-ip 设置为 “192.168.1.1”)、服务器主机名(server-hostname 设置为 “ossec-server.example.com”)和端口号(port 设置为 “1514”)
该模块是日志文件监控配置选项模块,负责定义要监控的本地日志文件,以便实时分析和检测恶意活动,例如:
1 |
|
在这个示例中,我们定义了要监控的本地日志文件。设置日志格式为 “syslog”(log_format 设置为 “syslog”),并指定要监控的日志文件位置为 “/var/log/auth.log”(location 设置为 “/var/log/auth.log”)
这是系统检查配置文件选项模块,负责监控文件完整性和注册表更改,以便发现未经授权的修改,例如:
1 |
|
此示例配置了系统检查设置。指定了检查频率为每3600秒(frequency 设置为 “3600”),并监控 “/etc”、”/usr/bin” 和 “/usr/sbin” 目录下的所有文件(directories 设置为 “/etc,/usr/bin,/usr/sbin”,check_all 设置为 “yes”)
发现和规则监控选项模块,负责检测潜在的rootkits和其他恶意软件,以保护系统安全,例如:
1 |
|
在这个示例中,我们启用了rootcheck功能(enabled 设置为 “yes”),并设置为扫描所有可能的rootkit(scanall 设置为 “yes”),当然也启用系统文件进行调用运行
主机响应配置选项模块,负责定义执行特定操作的命令,如禁用用户账户、阻止IP地址等,例如:
1 |
|
此示例定义了一个名为 “disable_account” 的命令(name 设置为 “disable_account”),该命令将执行 “disable_account.sh” 脚本(executable 设置为 “disable_account.sh”),并期望接收一个 “user” 参数(expect 设置为 “user”)
恶意主机响应配置选项模块,根据触发的规则自动采取措施,如执行命令、发送通知等,例如:
1 |
|
此示例配置了一个主动响应规则。当规则ID为1002的事件触发时(rules_id 设置为 “1002”),将在本地执行名为 “disable_account” 的命令(command 设置为 “disable_account”,location 设置为 “local”)。此响应在600秒后超时(timeout 设置为 “600”),之后可以再次触发
3.日志泛化规则
在ossec中默认具有一个ossec-logtest工具用于测试ossec的泛化及警告规则规则,工具默认安装在/var/ossec/bin中
1 |
|
前两行表示作为一个信息级别的日志记录,正在读取本地解码器文件和表示ossec-testrule已启动,并显示其进程ID(pid)为66919,最后一行命令是提示命令,要求我们逐行输入日志内容进行检测
这里构造一个日志内容
1 |
|
Jun 10 21:29:33表示事件发生的日期和时间,192.168.70.122/192.168.70.32:这是远程主机的IP地址,其中192.168.70.122是源IP地址,192.168.70.32是目标IP地址,sshd[24668]表示是处理此事件的SSH守护进程(sshd)的进程ID(PID),为24668。Accepted publickey for root:这表示使用公钥身份验证方式成功接受了root用户的登录请求。from 192.168.70.121 port 38720 ssh2:这是远程客户端的IP地址和端口号,其中192.168.70.121是客户端IP地址,38720是客户端使用的SSH连接的端口号
该条日志经过三步处理,会生成了一条4级告警,规则ID为10100,内容为“First time user logged in.”,表示用户是首次登入,接下来我们输入我们假设的日志内容并回车进行检测:
前面讲述了,日志会经过三步处理,最后生成一个经过解码和过滤后生成警报的事件,这里我们可以使用-v的指令获取到更加详细的日志分析逻辑层次
前文所示,对于ossec在分析入职中有一个解码和过滤的过程比较专业的描述是pre-decoding和 decoding,而对于pre-decoding,其过程是ossec内置的,只要是标准的syslog日志,都可以解析出如下4个基本信息
而对于decoding过程,用户则可以通过修改/var/ossec/etc/decoder.xml,实现自定义的泛化:比如添加
1 |
|
发现,该条日志成功命中了名为auditServerd的规则,该条规则可以准确的将日志定位为是程序auditServerd所发出的。除此之外,基于auditServerd这条规则,我们还可以添加更多的子规则,来识别出更多的信息。用户可以通过正则表达式获取特定的字段,用于关联分析,而ossec一共内置了14个用户可解析的字段:
1 |
|
在弄明白ossec对于日志分析的泛化过程后,接下来就是尝试添加日志源,添加是通过修改/var/ossec/etc/ossec.conf进行实现,这也就是前一小节进行ossec.conf进行介绍的原因,在进行配置日志源需要进行区分,我们是本地文件还是远程的syslog。
本地文件:
1 |
|
如果是远程的syslog我们则需要写入连接方式,连接端口以及连接ip:
1 |
|
4.告警规则
首先在ossec中,其提供了一部分默认的告警规则,如果我们需要修改的依旧是ossec.conf文件,前面也展示过了:
而我们也能够添加新的文件内容,直接进行一个整合,通过下列配置,实现加载/var/ossec/rules 下的所有规则文件:
1 |
|
在这个配置项中,pattern=”.xml$”表示只加载以.xml结尾的规则文件。对于泛化规则,也可能通过配置decoder_dir域来实现,如:
1 |
|
上述配置可将/var/ossec/rules/plugins/plugins/decoders目录下所有的xml文件都添加为OSSEC的日志泛化规则