OSSEC文档阅读学习实践

Getting started with OSSEC

对于OSSEC,印象就是HIDS,官方说是将 HIDS、日志监控和安全事件管理 (SIM)/安全信息和事件管理 (SIEM)融合在一起。

OSSEC主要功能

  • 文件完整性检查
  • 日志监控
  • Rootkit 检测
  • 主动响应

OSSEC 架构

manager/Server 是 OSSEC 的核心部分,它存储了文件完整性检查数据库、日志、事件和系统审计相关的内容。所有规则、解码器和主要配置选项都集中存储在管理器中;这样即使大量agent也容易管理。

agent通过1514/udp 连接到服务器

Agent

agent是安装在要监控的系统上的一个小程序或程序集合。它将收集信息并将其转发给管理器进行分析和关联。一些信息是实时收集的,其他的是周期性的。默认情况下,它占用很小的内存和CPU,不会影响系统的使用。

安全性: 它以低权限用户(通常在安装期间创建)运行,并在与系统隔离的chroot中运行。大多数代理配置可以从管理器推送。

Agentless

对于无法安装代理的系统,无代理支持可允许执行完整性检查。无代理扫描可用于监控防火墙、路由器,甚至Unix系统。

猜测: 这应该通过ssh协议或者其他远程协议执行的检查

Virtualization/VMware

可以装在guest操作系统中,甚至可以 VMWare ESX(不一定支持所有版本)

在 VMware ESX 中安装代理后,您可以收到有关何时安装、移除、启动 VM Guest 等的警报。它还监视 ESX 服务器内部的登录、注销和错误。

此外,OSSEC还会对VMware执行互联网安全中心(CIS)检查,在启用任何不安全的配置选项或任何其他问题时发出警报。

防火墙、交换机和路由器

OSSEC可以从各种防火墙、交换机和路由器接收和分析syslog事件。它支持所有思科路由器、思科PIX、思科FWSM、思科ASA、Juniper路由器、Netscreen防火墙、Checkpoint等等。

下面这个图显示了中央管理器从代理和远程设备的系统日志接收事件。当检测到某些内容时,可以执行主动响应并通知管理员。

支持的系统

支持的系统很多

操作系统

1
2
3
4
5
6
7
8
9
10
GNU/Linux (all distributions, including RHEL, Ubuntu, Slackware, Debian, etc)
Windows XP, 2003, Vista, 2008, 2012
VMWare ESX 3.0,3.5 (including CIS checks)
FreeBSD (all current versions)
OpenBSD (all current versions)
NetBSD (all current versions)
Solaris 2.7, 2.8, 2.9, 10 and 11.4
AIX 5.2 and 5.3
Mac OS X 10.x
HP-UX 11

支持Syslog的设备

下面可以通过remote syslog支持:

1
2
3
4
5
6
7
8
9
10
11
12
13
Cisco PIX, ASA and FWSM (all versions)
Cisco IOS routers (all versions)
Juniper Netscreen (all versions)
SonicWall firewall (all versions)
Checkpoint firewall (all versions)
Cisco IOS IDS/IPS module (all versions)
Sourcefire (Snort) IDS/IPS (all versions)
Dragon NIDS (all versions)
Checkpoint Smart Defense (all versions)
McAfee VirusScan Enterprise (v8 and v8.5)
Bluecoat proxy (all versions)
Cisco VPN concentrators (all versions)
VMWare ESXi 4.x

agentless

使用OSSEC的无代理选项,也支持以下系统(用于日志分析和文件完整性检查):

1
2
3
4
5
6
Cisco PIX, ASA and FWSM (all versions)
Cisco IOS routers (all versions)
Juniper Netscreen (all versions)
SonicWall firewall (all versions)
Checkpoint firewall (all versions)
All operating systems specified in the “operating systems” section

安装

以Ubuntu 20.04为例

先安装依赖项

1
apt-get update && apt-get install build-essential make zlib1g-dev libpcre2-dev libevent-dev libssl-dev libsystemd-dev

如果需要数据库支持,则应安装 mysql-dev 或 postgresql-dev

1
apt-get install mysql-dev postgresql-dev

要使用 SQLite 功能,libsqlite3-dev 包是必需的。

1
apt-get install libsqlite3-dev

安装的话是有deb包的源的

1
2
3
4
5
6
wget -q -O - https://updates.atomicorp.com/installers/atomic | sudo bash
apt-get update
# Install OSSEC HIDS server/manager
apt-get install ossec-hids-server
# install OSSEC HIDS agent
apt-get install ossec-hids-agent

下面尝试下载源码安装

1
2
3
wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz
tar -xvf 3.7.0.tar.gz
cd ossec-hids-3.7.0/

这有两种安装,一种是执行./install.sh,或者输入下面命令

1
2
make TARGET=<server|local|agent>
make install

当然./install.sh可以配置一些信息,比较好,选择./install.sh之后按需配置即可

最后显示这个就安装完了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- 系统类型是  Debian (Ubuntu or derivative).
- 修改启动脚本使 OSSEC HIDS 在系统启动时自动运行

- 已正确完成系统配置.

- 要启动 OSSEC HIDS:
/var/ossec/bin/ossec-control start

- 要停止 OSSEC HIDS:
/var/ossec/bin/ossec-control stop

- 要查看或修改系统配置,请编辑 /var/ossec/etc/ossec.conf



感谢使用 OSSEC HIDS.
如果您有任何疑问,建议或您找到任何bug,
请通过 contact@ossec.net 或邮件列表 ossec-list@ossec.net 联系我们.
( http://www.ossec.net/en/mailing_lists.html ).

您可以在 http://www.ossec.net 获得更多信息

--- 请按 ENTER 结束安装 (下面可能有更多信息). ---

启动服务/var/ossec/bin/ossec-control start

1
2
3
4
5
6
7
8
9
# /var/ossec/bin/ossec-control start
Starting OSSEC HIDS v3.7.0...
Started ossec-maild...
Started ossec-execd...
Started ossec-analysisd...
Started ossec-logcollector...
Started ossec-syscheckd...
Started ossec-monitord...
Completed.

可以看到有6个模块

其实/var/ossec/etc/ossec.conf 也可以事后再配置的

检测规则在/var/ossec/rules下面,基本都是正则匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@ubuntu2004:/var/ossec/rules# ls
apache_rules.xml ids_rules.xml ms_ipsec_rules.xml postfix_rules.xml symantec-ws_rules.xml
apparmor_rules.xml imapd_rules.xml ms_powershell_rules.xml postgresql_rules.xml syslog_rules.xml
arpwatch_rules.xml kesl_rules.xml ms-se_rules.xml proftpd_rules.xml sysmon_rules.xml
asterisk_rules.xml last_rootlogin_rules.xml mysql_rules.xml proxmox-ve_rules.xml systemd_rules.xml
attack_rules.xml lighttpd_rules.xml named_rules.xml psad_rules.xml telnetd_rules.xml
cimserver_rules.xml linux_usbdetect_rules.xml netscreenfw_rules.xml pure-ftpd_rules.xml topleveldomain_rules.xml
cisco-ios_rules.xml local_rules.xml nginx_rules.xml racoon_rules.xml trend-osce_rules.xml
clam_av_rules.xml mailscanner_rules.xml nsd_rules.xml roundcube_rules.xml unbound_rules.xml
courier_rules.xml mcafee_av_rules.xml openbsd-dhcpd_rules.xml rules_config.xml vmpop3d_rules.xml
dnsmasq_rules.xml mhn_cowrie_rules.xml openbsd_rules.xml sendmail_rules.xml vmware_rules.xml
dovecot_rules.xml mhn_dionaea_rules.xml opensmtpd_rules.xml smbd_rules.xml vpn_concentrator_rules.xml
dropbear_rules.xml ms1016_usbdetect_rules.xml ossec_rules.xml solaris_bsm_rules.xml vpopmail_rules.xml
exim_rules.xml msauth_rules.xml owncloud_rules.xml sonicwall_rules.xml vsftpd_rules.xml
firewalld_rules.xml ms_dhcp_rules.xml pam_rules.xml spamd_rules.xml web_appsec_rules.xml
firewall_rules.xml ms-exchange_rules.xml php_rules.xml squid_rules.xml web_rules.xml
ftpd_rules.xml ms_firewall_rules.xml pix_rules.xml sshd_rules.xml wordpress_rules.xml
hordeimp_rules.xml ms_ftpd_rules.xml policy_rules.xml symantec-av_rules.xml zeus_rules.xml

解码器在/var/ossec/etc/decoder.xml

以下面为例,

  • 第一个名为”sshd”的解码器,它匹配程序名称以”sshd”开头的日志行。这个解码器用于识别与SSH服务相关的日志。
  • 第二个名为”sshd-success”的解码器,它是”sshd”解码器的子解码器。它使用”Accepted”作为前置匹配条件,表示成功登录的日志行。然后,它使用一个pcre2表达式来提取用户名和源IP地址的信息。<order>元素定义了解码器中提取的字段的顺序。提取的是表达式中()中的内容;而<fts>元素用于定义全文搜索(Full Text Search)索引。它指定了要在日志事件中进行全文搜索的字段。在示例中,<fts>name, user, location</fts>指定了三个字段的全文搜索索引,即”name”、”user”和”location”。通过创建全文搜索索引,可以提高对这些字段的搜索效率,并支持更复杂的日志分析和报警规则。
  • 第三个名为”ssh-denied”的解码器,也是”sshd”解码器的子解码器。它使用”User”作为前置匹配条件,表示登录被拒绝的日志。这个也是提取user和 srcip,不过这个没有fts,应该登录成功的更加重要,更需要关注吧。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<decoder name="sshd">
<program_name_pcre2>^sshd</program_name_pcre2>
</decoder>

<decoder name="sshd-success">
<parent>sshd</parent>
<prematch_pcre2>^Accepted</prematch_pcre2>
<pcre2 offset="after_prematch">^ \S+ for (\S+) from (\S+) port </pcre2>
<order>user, srcip</order>
<fts>name, user, location</fts>
</decoder>

<decoder name="ssh-denied">
<parent>sshd</parent>
<prematch_pcre2>^User \S+ from </prematch_pcre2>
<pcre2 offset="after_parent">^User (\S+) from (\S+) </pcre2>
<order>user, srcip</order>
</decoder>

测试

新建用户测试

1
root@ubuntu2004:~# useradd ossec_test

这会在/var/log/auth.log中留下记录

1
2
3
root@ubuntu2004:~# tail /var/log/auth.log -n 2
Nov 19 07:43:48 ubuntu2004 useradd[61590]: new group: name=ossec_test, GID=1001
Nov 19 07:43:48 ubuntu2004 useradd[61590]: new user: name=ossec_test, UID=1001, GID=1001, home=/home/ossec_test, shell=/bin/sh, from=/dev/pts/3

可以看到配置文件默认已经有该文件的监控了

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

检测规则也有了,在syslog_rules.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
25
26
27
28
29
30
31
32
33
<!-- Adduser messages -->
<group name="syslog,adduser">
<rule id="5901" level="8">
<pcre2>^new group</pcre2>
<description>New group added to the system</description>
</rule>

<rule id="5902" level="8">
<description>New group added to the system</description>
</rule>

<rule id="5902" level="8">
<pcre2>^new user|^new account added</pcre2>
<description>New user added to the system</description>
</rule>

<rule id="5903" level="2">
<pcre2>^delete user|^account deleted|^remove group</pcre2>
<description>Group (or user) deleted from the system</description>
</rule>

<rule id="5904" level="8">
<pcre2>^changed user</pcre2>
<description>Information from the user was changed</description>
</rule>

<rule id="5905" level="0">
<program_name_pcre2>useradd</program_name_pcre2>
<pcre2>failed adding user </pcre2>
<description>useradd failed.</description>
</rule>

</group> <!-- SYSLOG,ADDUSER -->

配置文件也包含了这个规则文件syslog_rules.xml

1
2
3
4
5
6
<rules>
<include>rules_config.xml</include>
<include>pam_rules.xml</include>
<include>sshd_rules.xml</include>
<include>telnetd_rules.xml</include>
<include>syslog_rules.xml</include>

假如假装这是我们添加的规则,就用/var/ossec/bin/ossec-logtest来测试,输入log内容即可

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
35
36
37
38
39
40
41
root@ubuntu2004:/var/ossec/etc# /var/ossec/bin/ossec-logtest 
2023/11/19 15:52:20 ossec-testrule: INFO: Reading local decoder file.
2023/11/19 15:52:21 ossec-testrule: INFO: Started (pid: 62481).
ossec-testrule: Type one log per line.

Nov 19 07:43:48 ubuntu2004 useradd[61590]: new group: name=ossec_test, GID=1001


**Phase 1: Completed pre-decoding.
full event: 'Nov 19 07:43:48 ubuntu2004 useradd[61590]: new group: name=ossec_test, GID=1001'
hostname: 'ubuntu2004'
program_name: 'useradd'
log: 'new group: name=ossec_test, GID=1001'

**Phase 2: Completed decoding.
No decoder matched.

**Phase 3: Completed filtering (rules).
Rule id: '5901'
Level: '8'
Description: 'New group added to the system'
**Alert to be generated.


Nov 19 07:43:48 ubuntu2004 useradd[61590]: new user: name=ossec_test, UID=1001, GID=1001, home=/home/ossec_test, shell=/bin/sh, from=/dev/pts/3


**Phase 1: Completed pre-decoding.
full event: 'Nov 19 07:43:48 ubuntu2004 useradd[61590]: new user: name=ossec_test, UID=1001, GID=1001, home=/home/ossec_test, shell=/bin/sh, from=/dev/pts/3'
hostname: 'ubuntu2004'
program_name: 'useradd'
log: 'new user: name=ossec_test, UID=1001, GID=1001, home=/home/ossec_test, shell=/bin/sh, from=/dev/pts/3'

**Phase 2: Completed decoding.
No decoder matched.

**Phase 3: Completed filtering (rules).
Rule id: '5902'
Level: '8'
Description: 'New user added to the system'
**Alert to be generated.

第一阶段预解码,之后由于这个无需再对后面的信息再解码了,第二阶段没有解码器,第三阶段就通过规则过滤告警了

/var/ossec/logs/alerts/alerts.log中是出现了下面告警log

1
2
3
4
5
6
7
8
9
10

** Alert 1700379830.1283224: mail - syslog,adduser
2023 Nov 19 15:43:50 ubuntu2004->/var/log/auth.log
Rule: 5901 (level 8) -> 'New group added to the system'
Nov 19 07:43:48 ubuntu2004 useradd[61590]: new group: name=ossec_test, GID=1001

** Alert 1700379830.1283464: mail - syslog,adduser
2023 Nov 19 15:43:50 ubuntu2004->/var/log/auth.log
Rule: 5902 (level 8) -> 'New user added to the system'
Nov 19 07:43:48 ubuntu2004 useradd[61590]: new user: name=ossec_test, UID=1001, GID=1001, home=/home/ossec_test, shell=/bin/sh, from=/dev/pts/3

server、agent模式

server的主机,安装的时候选server,之后开启远程机器syslog

1
2
3
3.5- 您希望接收远程机器syslog吗 (port 514 udp)? (y/n) [y]: 

- 远程机器syslog将被接收.

之后server执行/var/ossec/bin/manage_agents

1
2
1. (A)dd an agent (A).
2. 之后选择(E)xtract key for an agent (E)

重启服务

1
/var/ossec/bin/ossec-control restart

agent端,安装的时候选agent,之后执行/var/ossec/bin/manage_agents

选择(I)mport key from the server (I).,之后复制上面得到的key即可

重启服务

1
/var/ossec/bin/ossec-control restart

搞个ossec-wui也能看到新的agent

参考

https://www.ossec.net/docs/
《企业安全建设入门》

打赏专区