OSSEC(三)

OSSEC(三)

0.前言

  前面完成了ossec的两种版本的安装对比,对于3和2都进行了一定的解析,同时基于2.8版本进行了wui和analogi的可视化界面搭建,在结束工具的基本安装和搭建后,接下来需要掌握的是对于ossec入职的规范以及告警规则的配置学习,这里分为几点,首先是OSSEC的配置、ossec.conf的文件写法使用等相关内容。参考链接:

1
2
3
https://m.starcto.com/safetool/235.html
https://github.com/xiyoulaoyuanjia/sAoccec/blob/master/ossec 基于主机的入侵检测指南 手册.md
https://www.51cto.com/article/442697.html

1.配置文件

  • 核心配置文件

  在unix、linux等系统上安装OSSEC,其默认路径一般是/var/ossec,在启动过程中,配置文件和规则都是从该目录路径进行读取,接下来介绍下ossec的相关核心配置文件及其作用

1
2
3
4
5
6
7
8
9
10
11
12
#目录包含所有ossec hids使用的配置文件
/var/ossec/etc
#ossec hids主要配置文件
ossec.conf
#额外配置选项文件
internal_options.conf
#文件解码器,各种规则都在这里写来调用
decoders.xml
#用于客户端与服务器认证通信
client.keys
#目录包含ossec hids使用的二进制文件
/var/ossec/bin
  • 日志配置文件

  在OSSEC中,日志文件起着记录和存储系统活动的作用

1
2
3
4
5
6
7
8
# 包含有关ossec所有的日志记录文件
/var/ossec/logs
# 包含osse 所有日志(error,warn,info和其他)
ossec.log
#ossec报警日志
alerts/alerts.log
#ossec响应日志
active-responses.log
  • 队列文件

  在OSSEC中,队列用于存储和管理来自代理的事件和日志数据。它是一个临时存储区域,用于处理和分析来自不同代理的数据。队列的作用是确保数据的有序处理和传输。当代理无法立即将数据发送到服务器时,数据会被放入队列中,以便稍后进行处理。这可以发生在网络连接不稳定、服务器负载过高或代理与服务器之间的通信中断等情况下。

1
2
3
4
5
6
7
8
9
10
#目录包含ossec hids队列文件
/var/ossec/queue
#目录包含操作系统版本、ossec hids版本等信息
agent-info
#目录包含每个agent的数据校验日志
syscheck
#目录包含每个agent,rootkit检查数据和监控规则
rootcheck
#目录包含agent ids信息
rids
  • 规则文件

  规则文件定义了OSSEC如何检测和响应不同类型的安全事件。它们包含了一系列规则,这些规则描述了需要监控的特定事件、日志或行为,并指定了当这些事件发生时应该采取的操作

1
2
3
4
#目录包含所有ossec规则
/var/log/rules
#目录包含每秒统计数据等文件
/var/log/stats

2.ossec.conf文件

  前一小节介绍了ossec的相关配置文件,接下来就针对最核心的ossec.conf文件进行深入探究,ossec.conf文件位于OSSEC安装目录下的/etc目录中,是ossec最主要配置文件,其使用的是xml格式结构进行语言编写,该文件包含的段落标识主要为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#全局配置配置
<global>
#邮件和日志报警选项
<alerts>
#细力度邮件配置文件
<email alerts>
#该选项只允许在server端配置
<remote>
#数据库输出选项
<database output>
#包含规则列表
<rules>
#agent有关配置文件选项
<client>
#日志文件监控配置选项
<localfle>
#系统检查配置文件选项
<syscheck>
#rootki发现和规则监控选项
<rootcheck>
#主机响应配置选项
<comnand>
#恶意主机响应配置选项
<active-response>
  • global模块

  这个模块包含全局设置,如日志文件路径、邮件设置等,前文图片所显示的内容中就包含了global模块内容,这里进行解析:

1
2
3
4
5
6
<global>
<email_notification>yes</email_notification>
<email_to>xxx@qq.com</email_to>
<smtp_server>mx3.qq.com.</smtp_server>
<email_from>ossecm@localhost.localdomain</email_from>
</global>

  首先是:该选项设置为yes表示启用电子邮件通知功能,其次在:指定接收通知的电子邮件地址,而:指定SMTP服务器的地址,最后就是:指定发送通知的电子邮件地址。在这个示例中,通知将从ossecm@localhost.localdomain发送

  • alerts模块

  alerts模块是配置报警级别以及收集所有的日志,每个报警都有一个严重基本报警等级,ossec的分配等级是0-15,等级越高则代表报警更加严重,严重级别更高,例如:

1
2
3
4
<alerts>
<log_alert_level>1</log_alert_level>
<email_alert_level>7</email_alert_level>
</alerts>

  这条规则是指只记录1以上的报警级别日志,并且报警级别高于7 以上的报警都会发送邮件

  • email_alerts模块

  这个模块能够实现为特定的事件组创建一个单独的电子邮件通知,当该组的事件触发时能够直接发送邮件,例如:

1
2
3
4
5
<email_alerts>
<group>authentication_failures</group>
<do_not_delay/>
<email_to>security@example.com</email_to>
</email_alerts>

  在这个示例中,我们为特定事件组 “authentication_failures” 创建了一个单独的电子邮件通知。当该组的事件触发时,不会延迟发送邮件(do_not_delay),并将邮件发送到 security@example.com

  • remote模块

  这个模块是远程配置选项模块,仅在服务器端配置,负责接收来自代理的信息,如连接方式和端口等,例如:

1
2
3
4
<remote>
<connection>secure</connection>
<port>1514</port>
</remote>

  此示例配置了服务器端的远程连接选项。使用安全连接(connection 设置为 “secure”)并监听端口1514(port 设置为 “1514”)以接收代理发送的信息

  • database_output模块

  这是数据库输出选项模块,负责将OSSEC事件存储到外部数据库中,如MySQL或PostgreSQL等,例如:

1
2
3
4
5
6
7
<database_output>
<hostname>localhost</hostname>
<username>ossec</username>
<password>ossec</password>
<database>ossec</database>
<type>mysql</type>
</database_output>

  此示例配置了将OSSEC事件存储到MySQL数据库的设置。指定了数据库主机名(hostname 设置为 “localhost”)、用户名(username 设置为 “ossec”)、密码(password 设置为 “ossec”)、数据库名称(database 设置为 “ossec”)和数据库类型(type 设置为 “mysql”)

  • rules模块

  规则列表模块,定义用于检测事件的规则,包括内置规则和自定义规则,例如:

1
2
3
<rules>
<include>rules_config.xml</include>
</rules>

  在这个示例中,我们包含了一个名为 “rules_config.xml” 的外部规则文件,该文件包含了一组自定义规则,而rules的文件位置一般是在/var/ossec/rules/

  • client模块

  顾名思义,只有agent机器上的配置文件进行设置,代理相关配置文件选项模块,负责指定服务器地址和端口,以便代理与服务器建立连接。例如

1
2
3
4
5
<client>
<server-ip>192.168.1.1</server-ip>
<server-hostname>ossec-server.example.com</server-hostname>
<port>1514</port>
</client>

  此示例配置了代理端的连接设置。指定了服务器IP地址(server-ip 设置为 “192.168.1.1”)、服务器主机名(server-hostname 设置为 “ossec-server.example.com”)和端口号(port 设置为 “1514”)

  • localfile模块

  该模块是日志文件监控配置选项模块,负责定义要监控的本地日志文件,以便实时分析和检测恶意活动,例如:

1
2
3
4
<localfile>
<log_format>syslog</log_format>
<location>/var/log/auth.log</location>
</localfile>

  在这个示例中,我们定义了要监控的本地日志文件。设置日志格式为 “syslog”(log_format 设置为 “syslog”),并指定要监控的日志文件位置为 “/var/log/auth.log”(location 设置为 “/var/log/auth.log”)

  • syscheck模块

  这是系统检查配置文件选项模块,负责监控文件完整性和注册表更改,以便发现未经授权的修改,例如:

1
2
3
4
<syscheck>
<frequency>3600</frequency>
<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
</syscheck>

  此示例配置了系统检查设置。指定了检查频率为每3600秒(frequency 设置为 “3600”),并监控 “/etc”、”/usr/bin” 和 “/usr/sbin” 目录下的所有文件(directories 设置为 “/etc,/usr/bin,/usr/sbin”,check_all 设置为 “yes”)

  • rootcheck模块

  发现和规则监控选项模块,负责检测潜在的rootkits和其他恶意软件,以保护系统安全,例如:

1
2
3
4
<rootcheck>
<enabled>yes</enabled>
<scanall>yes</scanall>
</rootcheck>

  在这个示例中,我们启用了rootcheck功能(enabled 设置为 “yes”),并设置为扫描所有可能的rootkit(scanall 设置为 “yes”),当然也启用系统文件进行调用运行

  • command模块

  主机响应配置选项模块,负责定义执行特定操作的命令,如禁用用户账户、阻止IP地址等,例如:

1
2
3
4
5
<command>
<name>disable_account</name>
<executable>disable_account.sh</executable>
<expect>user</expect>
</command>

  此示例定义了一个名为 “disable_account” 的命令(name 设置为 “disable_account”),该命令将执行 “disable_account.sh” 脚本(executable 设置为 “disable_account.sh”),并期望接收一个 “user” 参数(expect 设置为 “user”)

  • active-response模块

  恶意主机响应配置选项模块,根据触发的规则自动采取措施,如执行命令、发送通知等,例如:

1
2
3
4
5
6
<active-response>
<command>disable_account</command>
<location>local</location>
<rules_id>1002</rules_id>
<timeout>600</timeout>
</active-response>

  此示例配置了一个主动响应规则。当规则ID为1002的事件触发时(rules_id 设置为 “1002”),将在本地执行名为 “disable_account” 的命令(command 设置为 “disable_account”,location 设置为 “local”)。此响应在600秒后超时(timeout 设置为 “600”),之后可以再次触发

3.日志泛化规则

  在ossec中默认具有一个ossec-logtest工具用于测试ossec的泛化及警告规则规则,工具默认安装在/var/ossec/bin中

1
/var/ossec/bin/ossec-logtest

  前两行表示作为一个信息级别的日志记录,正在读取本地解码器文件和表示ossec-testrule已启动,并显示其进程ID(pid)为66919,最后一行命令是提示命令,要求我们逐行输入日志内容进行检测

  这里构造一个日志内容

1
Jun 10 21:29:33 192.168.70.122/192.168.70.32 sshd[24668]: Accepted publickey for root from 192.168.270.121 port 38720 ssh2  

  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
2
3
<decoder name="auditServerd"> 
<program_name>/usr/bin/auditServerd</program_name>
</decoder>

  发现,该条日志成功命中了名为auditServerd的规则,该条规则可以准确的将日志定位为是程序auditServerd所发出的。除此之外,基于auditServerd这条规则,我们还可以添加更多的子规则,来识别出更多的信息。用户可以通过正则表达式获取特定的字段,用于关联分析,而ossec一共内置了14个用户可解析的字段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- location – where the log came from (only on FTS)
- srcuser - extracts the source username
- dstuser - extracts the destination (target) username
- user – an alias to dstuser (only one of the two can be used)
- srcip - source ip
- dstip - dst ip
- srcport - source port
- dstport - destination port
- protocol – protocol
- id – event id
- url - url of the event
- action – event action (deny, drop, accept, etc)
- status – event status (success, failure, etc)
- extra_data – Any extra data

  在弄明白ossec对于日志分析的泛化过程后,接下来就是尝试添加日志源,添加是通过修改/var/ossec/etc/ossec.conf进行实现,这也就是前一小节进行ossec.conf进行介绍的原因,在进行配置日志源需要进行区分,我们是本地文件还是远程的syslog。

  本地文件:

1
2
3
4
<localfile>
<log_format>syslog</log_format>
<location>/var/log/messages</location>
</localfile>

  如果是远程的syslog我们则需要写入连接方式,连接端口以及连接ip:

1
2
3
4
5
6
<remote> 
<connection>syslog</connection>
<protocol>udp</protocol>
<port>2514</port>
<allowed-ips>192.168.70.0/24</allowed-ips>
</remote>

4.告警规则

  首先在ossec中,其提供了一部分默认的告警规则,如果我们需要修改的依旧是ossec.conf文件,前面也展示过了:

  而我们也能够添加新的文件内容,直接进行一个整合,通过下列配置,实现加载/var/ossec/rules 下的所有规则文件:

1
2
3
4
5
<ossec_config> 
<rules>
<rule_dir pattern=".xml$">rules</rule_dir>
</rules>
</ossec_config>

  在这个配置项中,pattern=”.xml$”表示只加载以.xml结尾的规则文件。对于泛化规则,也可能通过配置decoder_dir域来实现,如:

1
2
3
4
5
<ossec_config> 
<rules>
<decoder_dir pattern=".xml$">rules/plugins/decoders</decoder_dir>
</rules>
</ossec_config>

  上述配置可将/var/ossec/rules/plugins/plugins/decoders目录下所有的xml文件都添加为OSSEC的日志泛化规则


OSSEC(三)
https://one-null-pointer.github.io/2023/08/12/Linux运维——OSSEC(三)/
Author
liaoyue
Posted on
August 12, 2023
传送口