Skip to content

一、设计定位

1.1主机监控

OSSEC通过文件完整性监控,日志监控,rootcheck和流程监控,全面监控企业资产系统活动的各个方面,对于安全管理提供了依据。

1.2安全告警

OSSEC通过发送告警日志和邮件警报让系统管理员及时感知威胁,最大程度避免企业遭受损失。OSSEC还可以通过syslog将告警信息导出到任何SIEM系统,譬如OSSIM进行关联安全分析。

1.3全平台支持

OSSEC提供了全平台系统的支持,包括Linux,Solaris,AIX,HP-UX,BSD,Windows,Mac和VMware ESX,突破性的实现了主机入侵态势感知的全覆盖。

1.4功能扩展

OSSEC得到了第三方安全团队的支持,其中Wazuh就是基于OSSEC开发的一个高级版本,在OSSEC的自身功能的基础上进行扩展和优化。

二、主要功能

2.1日志监控异常行为检测

日志的监控可分为两种,一种是被动的采集,通过采集需要的日志,读取日志信息,标准化输出适应安全规则使用的内容,当匹配到内置或者自定义的规则,随后输出实时告警,从而发现异常;另一种是主动的查询,通过周期下发命令查询系统状态信息,然后进行新旧信息比对,从而发现异常。
日志监控实例 - Web日志识别恶意访问 从这批日志里我们可以看到在一分钟之内,同一个来源IP地址(207.44.184.96),频繁的访问不存在的页面,出现了大量404的状态码,这意味着Web站点正在遭受扫描攻击

[root@localhost ~]# tail -n 10 /var/log/httpd/access_log
 207.44.185.96 - - [23/Mar/2018:19:57:37 -0300] "GET /b2/xmlsrv/xmlrpc.php HTTP/1.0" 404 297 "-" "-"
 207.44.185.96 - - [23/Mar/2018:19:57:37 -0300] "GET /blogtest/xmlsrv/xmlrpc.php HTTP/1.0" 404 303 "-" "-"
 207.44.185.96 - - [23/Mar/2018:19:57:37 -0300] "GET /blog/xmlsrv/xmlrpc.php HTTP/1.0" 404 299 "-" "-"
 207.44.185.96 - - [23/Mar/2018:19:57:37 -0300] "GET /blogs/xmlsrv/xmlrpc.php HTTP/1.0" 404 300 "-" "-"
 207.44.185.96 - - [23/Mar/2018:19:57:37 -0300] "GET /blogs/xmlrpc.php HTTP/1.0" 404 293 "-" "-"
 207.44.185.96 - - [23/Mar/2018:19:57:36 -0300] "GET /community/xmlrpc.php HTTP/1.0" 404 297 "-" "-"
 207.44.185.96 - - [23/Mar/2018:19:57:33 -0300] "GET /drupal/xmlrpc.php HTTP/1.0" 404 294 "-" "-"
 207.44.185.96 - - [23/Mar/2018:19:57:30 -0300] "GET /blog/xmlrpc.php HTTP/1.0" 404 292 "-" "-"
 207.44.185.96 - - [23/Mar/2018:19:57:30 -0300] "GET /xmlsrv/xmlrpc.php HTTP/1.0" 404 294 "-" "-"
 207.44.185.96 - - [23/Mar/2018:19:57:30 -0300] "GET /xmlrpc/xmlrpc.php HTTP/1.0" 404 294 "-" "-"
  • 日志监控告警
Rule: 31151 fired (level 10) -> "Mutiple web server 400 error codes from same source ip."
  • 用户日志识别登录异常 从这批日志里我们可以看到,同一个来源IP不断的使用通过同一个账户admin尝试SSH登录,结果都失败了,不断的失败达到一定数量,那就意味着是暴力破解行为
[root@localhost ~]# tail -n 10 /var/log/secure
Jun 26 17:40:27 xx sshd[7629]: Failed password for invalid user admin from 61.146.178.13 port 42107 ssh2
Jun 26 17:40:25 xx sshd[7629]: Invalid user admin from 61.146.178.13
Jun 26 17:40:23 xx sshd[7625]: Failed password for invalid user admin from 61.146.178.13 port 41983 ssh2
Jun 26 17:40:20 xx sshd[7625]: Invalid user admin from 61.146.178.13
Jun 26 17:40:18 xx sshd[7621]: Failed password for invalid user guest from 61.146.178.13 port 41889 ssh2
Jun 26 17:40:15 xx sshd[7621]: Invalid user guest from 61.146.178.13
Jun 26 17:40:14 xx sshd[7617]: Failed password for invalid user test from 61.146.178.13 port 41797 ssh2
  • 日志监控告警
Rule: 5712 fired (level 10) -> "SSHD brute force trying to get access to the system."
  • 系统状态变更异常 操作系统有很多系统信息,比如账号密码变更,启动项变更,服务监听变更,都是通过命令查询获知,而通过OSSEC的Command方法,可以周期下发查询命令,并对输出结果进行比对,及时感知状态变化 测试方法 使用nc工具,临时监听TCP端口
[root@localhost ~]# nc -l 8443

日志监控告警

** Alert 1499397975.7591: mail  - ossec,

2018 Jul 21 12:23:15 (192.168.1.137) any->netstat -tan |grep LISTEN |egrep -v '(127.0.0.1| \\1)' | sort

Rule: 531 (level 7) -> 'Listened ports status (netstat) changed (new port opened or closed).'

ossec: output: 'netstat -tan |grep LISTEN |egrep -v '(127.0.0.1| \\1)' | sort':

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN     

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN     

tcp        0      0 0.0.0.0:8443                0.0.0.0:*                   LISTEN     

tcp        0      0 0.0.0.0:37498               0.0.0.0:*                   LISTEN     

tcp        0      0 ==:111                      :==*                        LISTEN     

tcp        0      0 ==:22                       :==*                        LISTEN     

tcp        0      0 ==:62229                    :==*                        LISTEN     

Previous output:

ossec: output: 'netstat -tan |grep LISTEN |egrep -v '(127.0.0.1| \\1)' | sort':

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN     

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN     

tcp        0      0 0.0.0.0:37498               0.0.0.0:*                   LISTEN     

tcp        0      0 ==:111                      :==*                        LISTEN     

tcp        0      0 ==:22                       :==*                        LISTEN     

tcp        0      0 ==:62229                    :==*                        LISTEN

更多检测功能 - FTP账户密码暴力破解检测 - SQL注入尝试检测 - E-mail账户密码暴力破解检测 - 文件系统状态检测 - 应用安装卸载检测 - 虚拟主机开关状态检测 - ...

2.2 Syscheck文件完整性检测篡改行为检测

无论攻击手段有多么高明,最终的目的是以某种方式改变系统,从修改文件的病毒到改变内核的后门程序,系统的完整性总会有一些变化,Syscheck完整性检查是终端检测的重要组成部分,通过查找系统和Windows注册表中密钥文件的MD5/SHA1校验和的更改来检测系统完整性的变化,该功能的设计目的是监控操作系统中关键文件的修改情况,及时发现篡改行为。

文件完整性检测实例
命令文件替换监控

了解Linux的都知道Linux的一切皆文件,Linux 中的各种事物比如像文档、目录、键盘、监视器、硬盘、可移动媒体设备、打印机、调制解调器、虚拟终端,等等一切都可看作是文件,这就给了攻击者一个很好的攻击思路,那就是替换文件,保留原来文件的基本功能,同时嵌入后门程序,比较常见被替换的命令文件有ps、netstat、ss、lsof 等等 - 测试方法 通过vim编辑器做个删除部分内容的操作,修改之前一定记得备份

[root@localhost ~]# vim /bin/netstat
  • Syscheck告警 对于netstat命令,做了/bin/netstat文件变化的监控,收到了下面的告警信息,文件大小正常大小为155000,告警显示文件大小从155000改变为129238,这样就能有效的监控命令文件是否被替换,第一时间感知到这个危险操作
** Alert 1544237296.12315: mail  - ossec,syscheck,
2018 Dec 07 21:48:16 bogon->syscheck
Rule: 550 (level 7) -> 'Integrity checksum changed.'
Integrity checksum changed for: '/bin/netstat'
Size changed from '155000' to '129238'
Old md5sum was: '60523518c81d85c7d761bd6e6e9a1007'
New md5sum is : '8d07cb216d0f6cab7a9de4881f25244b'
Old sha1sum was: '428980466a122420885d6885b74b8054500367e2'
New sha1sum is : 'e9ee23fc6888b2adb7b052670c17fc9dc9281a2c'

2.3 Rootcheck后门检测 后门行为检测

Rootkit是一种特殊的恶意软件,它通过加载特殊的驱动,修改系统内核,进而达到隐藏信息的目的。Rootkit的基本功能包括提供root后门,控制内核模块的加载、隐藏文件、隐藏进程、隐藏网络端口,隐藏内核模块等,主要目的在于隐藏自己并且不被安全软件发现,Rootkit几乎可以隐藏任何软件,包括文件服务器、键盘记录器、Botnet 和 Remailer,而Rootcheck就是OSSEC提供的专门用于检测操作系统rootkit的引擎

Rootcheck For Linux
- 使用rootkit_files文件中包含的已知后门程序文件或目录特征进行扫描识别异常 - 使用rootkit_trojans文件中包含的已知被感染木马文件的签名进行扫描识别异常 - 对设备文件目录(/dev)、文件系统、隐藏进程、隐藏端口,混杂模式接口的异常检测 Rootcheck For Windows
- 通过使用win_applications_rcl文件中包含的应用特征进行扫描识别软件应用 - 通过win_audit_rcl文件中包含注册表进行扫描识别特殊注册表项的变动 - 通过win_malware_rcl文件中包含的恶意软件特征进行扫描识别恶意软件 - 通过system_audit_rcl文件中包含的服务配置项目进行配置核查以及Web类威胁静态特征进行扫描识别异常 - 通过system_audit_ssh文件中包含的SSH增强检测功能特征进行扫描识别异常

后门行为检测实例 设备目录(/dev)创建隐藏文件 - 测试方法

在/dev下创建隐藏文件

[root@localhost dev]# touch .ssh
[root@localhost dev]# chmod 777 .ssh
[root@localhost dev]# ls -a /dev | grep '^\.'
.
..
.ssh
  • Rootcheck告警 rootcheck功能检测到/dev目录下存在隐藏文件,随后进行了提权操作
[root@localhost ossec]# tailf /var/ossec/logs/alerts/alerts.log
** Alert 1544791226.3893: mail  - ossec,rootcheck,
2018 Dec 14 07:40:26 localhost->rootcheck
Rule: 510 (level 7) -> 'Host-based anomaly detection event (rootcheck).'
File '/dev/.ssh' present on /dev. Possible hidden file.

** Alert 1544791227.4116: mail  - ossec,rootcheck,
2018 Dec 14 07:40:27 localhost->rootcheck
Rule: 510 (level 7) -> 'Host-based anomaly detection event (rootcheck).'
File '/dev/.ssh' is owned by root and has write permissions to anyone.

2.4实时告警

通过ossec.conf文件配置指定规则组、指定规则ID、指定服务器(agent)触发的实时告警发给专门负责的管理员邮箱,实现职责归属明确,故障类的告警发给运维管理员、安全类的告警发给安全管理员,特别关注的告警事件发给问题处理专员等 实时告警输出实例 告警事件通过E-mail实时告警 根据规则功能分组来确定告警发送给谁处理

<email_alerts>
  <email_to>249994395@qq.com</email_to>
  <email_to>75016025@qq.com</email_to>
  <level>12</level>
  <group>sshd,</group>
  <do_not_delay/>
</email_alerts>

根据规则ID来确定告警发送给谁处理

<email_alerts>
    <email_to>249994395@qq.com</email_to>
    <rule_id>123, 124</rule_id>
    <do_not_delay />
    <do_not_group />
</email_alerts>

根据服务器(agent-id)来确定告警发送给谁处理

<email_alerts>
    <email_to>249994395@qq.com</email_to>
    <level>12</level>
    <event_location>agent01|agent02</event_location>
    <do_not_delay />
</email_alerts>

邮件告警内容
邮件主题:OSSEC Alert - localhost - Level 7 - Listened ports status (netstat) changed (new port opened or closed).

OSSEC HIDS Notification.
2018 Oct 09 11:21:37

Received From: localhost->netstat -tan |grep LISTEN |egrep -v '(127.0.0.1| \\1)' | sort
Rule: 533 fired (level 7) -> "Listened ports status (netstat) changed (new port opened or closed)."
Portion of the log(s):

ossec: output: 'netstat -tan |grep LISTEN |egrep -v '(127.0.0.1| \\1)' | sort':
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 172.16.100.213:25       0.0.0.0:*               LISTEN     
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN     
tcp6       0      0 ==:22                   :==*                    LISTEN     
tcp6       0      0 ==:80                   :==*                    LISTEN     
Previous output:
ossec: output: 'netstat -tan |grep LISTEN |egrep -v '(127.0.0.1| \\1)' | sort':
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 172.16.100.213:25       0.0.0.0:*               LISTEN     
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN     
tcp6       0      0 ==:22                   :==*                    LISTEN   

2.5主动响应

OSSEC是一款准EDR产品,其中体现的‘R’技术,就是指的的这个主动响应,我们可以根据特定的服务器或服务器组(agent)、特定的规则ID等多个条件关联触发响应动作,响应的动作可以通过脚本程序去实现个性化的需求,这些需求可以是邮件提醒,也是可以是指令下发边界安全设备或者安全组件进行访问封堵或者恢复,或者更多的本地化需求(脚本实现),当然OSSEC内置也包含一些常用的响应脚本,只需在此基础上稍加改变,就可以投入使用 Active Responses分为commandactive-response两个部分, 且一个能够被执行的Active Responses规则必须同时包含commandactive-response两个部分
主动响应处理实例
主机访问控制列表(TCP Wrappers)脚本联动实现告警响应处
创建调用响应脚本命令

  • name:定义命令名称
  • executable:调用的响应脚本
  • expect:输出脚本需要的参数(srcip或username)
<command>
    <name>host-deny</name>
    <executable>host-deny.sh</executable>
    <expect>srcip</expect>
    <timeout_allowed>yes</timeout_allowed>
</command>

配置主动响应规则

  • command:调用响应脚本命令(上面定义)
  • location:规则生效的主机范围(本地主机、服务控制端或指定的Agent等)
  • rules_id:触发响应动作的规则ID条件
  • timeout:响应动作的持续时间,此处动作为禁止,10s后超时允许放行
<active-response>
    <command>host-deny</command>
    <location>local</location>
    <rules_id>5551, 5712, 5720</rules_id>
    <timeout>10</timeout>
</active-response>

响应脚本 显示host.deny脚本的前10行,第七行说明脚本需要输入srcip参数,才能正常运行

[root@localhost ~]# head -n 10 /var/ossec/active-response/bin/host-deny.sh
#!/bin/sh
# Adds an IP to the /etc/hosts.deny file
# Requirements: sshd and other binaries with tcp wrappers support
# Expect: srcip
# Author: Daniel B. Cid
# Last modified: Nov 09, 2005

ACTION=$1
USER=$2
IP=$3

测试方法 重启OSSEC进程, 手动尝试多次SSH登录并且输入错误密码 主动响应日志输出

[root@localhost ~][[tail]] -f /var/ossec/logs/active-responses.log
Wed Dec 12 17:57:58 CST 2018 /var/ossec/active-response/bin/host-deny.sh add - A.B.C.D 1544608678.285043 5720
Wed Dec 12 17:59:28 CST 2018 /var/ossec/active-response/bin/host-deny.sh delete - A.B.C.D 1544608678.285043 5720

三、部署环境

3.1拓扑图

3.2部署清单

主机角色 操作系统 作用
OSSEC-Server CentOS 7.4 集中收集与分析数据
OSSEC-LinuxAgent CentOS 7.4 客户端数据采集
OSSEC-WinAgent Windows 2020 客户端数据采集
OSSEC-ELK CentOS 7.4 储存并分析展示数据

3.3工作流

  • OSSEC-Server 部署Server端程序
  • OSSEC-LinuxAgent和OSSEC-WinAgent分别部署Agent端程序
  • OSSEC-Server 防火墙开启开启UDP(1514),接收Agent上报数据
  • OSSEC-Server 编译支持MySQL日志存储
  • OSSEC-Server 开启日志输出JSON,安装ELK组件filebeat
  • OSSEC-ELK 配置logstash服务接收filebeat来源日志,并存入ElasticSearch

备注
OSSEC-ELK 默认已经安装有logstash、elasticsearch、Kibana
文档使用的ELK stack组件版本:
- Elasticserarch elasticsearch-6.0.0.tar.gz
- Logstash logstash-6.0.0.tar.gz
- Kibana kibana-6.0.0-linux-x86_64.tar.gz
- Filebeat filebeat-6.5.4-linux-x86_64.tar.gz


3.4 OSSEC-Server安装

Step1 初始化环境安装,分别安装编译库,以及数据库支持库

# yum -y install make gcc
# yum -y install mysql-devel postgresql-devel
# yum -y install sqlite-devel

Step2 运行配置安装选项脚本

root@instance-8hwjg2ar:~/ossec-hids-3.1.0# ./install.sh

...此处省略...

 您将开始 OSSEC HIDS 的安装.
 请确认在您的机器上已经正确安装了 C 编译器.

  - 系统类型: Linux instance-8hwjg2ar 4.4.0-139-generic
  - 用户: root
  - 主机: instance-8hwjg2ar


  -- 按 ENTER 继续或 Ctrl-C 退出. --


1- 您希望哪一种安装 (server, agent, local or help)? server 

  - 选择了 Server 类型的安装.

2- 正在初始化安装环境.

 - 请选择 OSSEC HIDS 的安装路径 [/var/ossec]: 

    - OSSEC HIDS 将安装在  /var/ossec .

3- 正在配置 OSSEC HIDS.

  3.1- 您希望收到e-mail告警吗? (y/n) [y]: 
   - 请输入您的 e-mail 地址? 249994395@qq.com

   - 我们找到您的 SMTP 服务器为: mx2.qq.com.
   - 您希望使用它吗? (y/n) [y]: y

   --- 使用 SMTP 服务器:  mx2.qq.com.

  3.2- 您希望运行系统完整性检测模块吗? (y/n) [y]: y 

   - 系统完整性检测模块将被部署.

  3.3- 您希望运行 rootkit检测吗? (y/n) [y]: y 

   - rootkit检测将被部署.

  3.4- 关联响应允许您在分析已接收事件的基础上执行一个
       已定义的命令.
       例如,你可以阻止某个IP地址的访问或禁止某个用户的访问权限.
       更多的信息,您可以访问:
       http://www.ossec.net/en/manual.html#active-response
   - 您希望开启联动(active response)功能吗? (y/n) [y]: y 


     - 关联响应已开启

   - 默认情况下, 我们开启了主机拒绝和防火墙拒绝两种响应.
     第一种情况将添加一个主机到 /etc/hosts.deny.
     第二种情况将在iptables(linux)或ipfilter(Solaris,
     FreeBSD 或 NetBSD)中拒绝该主机的访问.
   - 该功能可以用以阻止 SSHD 暴力攻击, 端口扫描和其他
     一些形式的攻击. 同样你也可以将他们添加到其他地方,
     例如将他们添加为 snort 的事件.

   - 您希望开启防火墙联动(firewall-drop)功能吗? (y/n) [y]: n 

     - 防火墙联动(firewall-drop)当事件级别 >= 6 时被启动

   - 联动功能默认的白名单是:
      - 192.168.0.3
      - 192.168.0.2

   - 您希望添加更多的IP到白名单吗? (y/n)? [n]: 

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

   - 远程机器syslog将被接收.

  3.6- 设置配置文件以分析一下日志:
    -- /var/log/auth.log
    -- /var/log/syslog
    -- /var/log/dpkg.log


 -如果你希望监控其他文件, 只需要在配置文件ossec.conf中
  添加新的一项.
  任何关于配置的疑问您都可以在 http://www.ossec.net 找到答案.


  --- 按 ENTER 以继续 ---
  ```
***
`选项说明`
server - 安装服务器端

/var/ossec - 选择安装目录,默认选项

y - 是否启用邮件告警,默认启用

y - 是否启用系统完整性检测模块Syscheck功能,默认启用

y - 是否启用后门检测模块Rootcheck功能,默认启用

y - 是否启用主动响应模块active-response功能,默认启用

n - 是否启用防火墙联动功能,默认启用,此处为关闭

n - 是否添加联动功能白名单,默认启用,此处为关闭

y - 是否接受远程主机发送的syslog日志,默认启用
**备注**
配置完安装脚本之后,按回车键就开始进行编译安装,如果需要改变OSSEC的配置,可以等安装完成后,编辑ossec.conf配置文件进行修改,并重启ossec进程使其生效     
**安装演示**
![](https://pic2.zhimg.com/v2-1e7f8663e4d137709b58ba4411f731bd_b.webp)
## 3.5 OSSEC-LinuxAgent安装
**Step1**
初始化环境安装,安装编译库
```shell
# yum -y install make gcc

Step2 下载OSSEC安装包,并进行解压,进入安装目录

root@instance-8hwjg2ar:~/ossec-hids-3.1.0# ./install.sh

...此处省略...

 OSSEC HIDS v3.1.0 安装脚本 - http://www.ossec.net

 您将开始 OSSEC HIDS 的安装.
 请确认在您的机器上已经正确安装了 C 编译器.

  - 系统类型: Linux instance-8hwjg2ar 4.4.0-139-generic
  - 用户: root
  - 主机: instance-8hwjg2ar


  -- 按 ENTER 继续或 Ctrl-C 退出. --


1- 您希望哪一种安装 (server, agent, local or help)? agent 

  - 选择了 Agent(client) 类型的安装.

2- 正在初始化安装环境.

 - 请选择 OSSEC HIDS 的安装路径 [/var/ossec]:  

    - OSSEC HIDS 将安装在  /var/ossec .

3- 正在配置 OSSEC HIDS.

  3.1- 请输入 OSSEC HIDS 服务器的IP地址或主机名: 192.168.31.178  

   - 添加服务器IP  192.168.31.178

  3.2- 您希望运行系统完整性检测模块吗? (y/n) [y]:  

   - 系统完整性检测模块将被部署.

  3.3- 您希望运行 rootkit检测吗? (y/n) [y]:  

   - rootkit检测将被部署.

  3.4 - 您希望开启联动(active response)功能吗? (y/n) [y]:  


  3.5- 设置配置文件以分析一下日志:
    -- /var/log/auth.log
    -- /var/log/syslog
    -- /var/log/dpkg.log


 -如果你希望监控其他文件, 只需要在配置文件ossec.conf中
  添加新的一项.
  任何关于配置的疑问您都可以在 http://www.ossec.net 找到答案.

选项说明 agent - 安装客户端

/var/ossec - 选择安装目录,默认选项

192.168.31.178 - 输入服务器端IP地址

y - 是否启用系统完整性检测模块Syscheck功能,默认启用

y - 是否启用后门检测模块Rootcheck功能,默认启用

y - 是否启用主动响应模块active-response功能,默认启用 安装演示

3.6 OSSEC-WinAgent 安装

Step1 下载并运行Agent安装程序 Step2 输入OSSEC-Server IP地址和通信密钥 安装演示

3.7 OSSEC Server与Agent通信

OSSEC Server和Agent之间建立通信需要通过认证,在Server端为Agent生成通讯密钥并导入Agent后才能完成信任关系,以及Server端需要开放UDP 1514通讯端口,接收Agent上报的信息 Step1 Agent配置指向Server IP

[root@agent ~]# cat /var/ossec/etc/ossec.conf
<ossec_config>
  <client>
    <server-ip>10.40.27.159</server-ip>
    <config-profile></config-profile>
  </client>

Step2 Server为Agent生成通信密钥

[root@server ~]# /var/ossec/bin/manage_agents


****************************************
* OSSEC HIDS v3.1.0 Agent manager.     *
* The following options are available: *
****************************************
   (A)dd an agent (A).
   (E)xtract key for an agent (E).
   (L)ist already added agents (L).
   (R)emove an agent (R).
   (Q)uit.
Choose your action: A,E,L,R or Q: A 

- Adding a new agent (use '\q' to return to the main menu).
  Please provide the following:
   * A name for the new agent: agent01 
   * The IP Address of the new agent: 10.40.27.121  
   * An ID for the new agent[001]:
Agent information:
   ID:001
   Name:agent01
   IP Address:10.40.27.121

Confirm adding it?(y/n): y 
Agent added.


****************************************
* OSSEC HIDS v3.1.0 Agent manager.     *
* The following options are available: *
****************************************
   (A)dd an agent (A).
   (E)xtract key for an agent (E).
   (L)ist already added agents (L).
   (R)emove an agent (R).
   (Q)uit.
Choose your action: A,E,L,R or Q: E  

Available agents:
   ID: 001, Name: agent01, IP: 10.40.27.121
Provide the ID of the agent to extract the key (or '\q' to quit): 001  

Agent key information for '001' is:
MDAxIGFnZW50MDEgMTAuNDAuMjcuMTIxIDMyMTk4MDAwOGI4ZWJkYmZlMTIyNDA3ZGYzZTA4MGI5MDAzMmUzNTVmNGVhODQ5NjE4ZDU0NWFjNzNhMmM4MTE=

** Press ENTER to return to the main menu.

选项说明 A - 新增Agent

agent01 - 设置Agent名称

10.40.27.121 - 输入Agent IP地址

y - 是否确认新增Agent

E - 为Agent生成通讯Key

001 - 输入新增Agent的ID,显示Key值 Step3 拷贝Server生成的通信密钥,并导入Agent

[root@agent ~]# /var/ossec/bin/manage_agents


****************************************
* OSSEC HIDS v3.1.0 Agent manager.     *
* The following options are available: *
****************************************
   (I)mport key from the server (I).
   (Q)uit.
Choose your action: I or Q: I 

* Provide the Key generated by the server.
* The best approach is to cut and paste it.
*** OBS: Do not include spaces or new lines.

Paste it here (or '\q' to quit): MDAxIGFnZW50MDEgMTAuNDAuMjcuMTIxIDMyMTk4MDAwOGI4ZWJkYmZlMTIyNDA3ZGYzZTA4MGI5MDAzMmUzNTVmNGVhODQ5NjE4ZDU0NWFjNzNhMmM4MTE= 

Agent information:
   ID:001
   Name:agent01
   IP Address:10.40.27.121

Confirm adding it?(y/n): y 
Added.
** Press ENTER to return to the main menu.

选项说明 I - 新增Agent

MDAxIGFnZW50MDEgM=... - 输入通信key

y - 输入Agent IP地址 Step4 Server主机防火墙开放UDP(1514)服务端口

[root@server ~]# firewall-cmd --add-port=1514/udp --permanent
success
[root@server ~]# firewall-cmd --reload
success

Server上检查Agent是否可以通信

[root@server ~]# /var/ossec/bin/list_agents -c
agent01-10.40.27.121 is active.

备注: 可以通过 /var/ossec/bin/list_agents -h 查询更多Agent的状态信息

3.8 OSSEC-Server MySQL存储事件

OSSEC-Server编译支持的数据库有三种,它们分别是MySQL、Postgresql、SQLite,可以选择把日志告警等信息存储到这些数据库中,使用标准SQL语法进行便捷的查询和调用 Step1 安装MySQL、启动MySQL并设置开机自启动

[root@server ~]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
[root@server ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm
[root@server ~]# yum -y install mysql-server
[root@server ~]# systemctl start mysqld
[root@server ~]# systemctl enable mysqld

Step2 MySQL初始化安全设置、更改root密码

[root@server ~]# /usr/bin/mysql_secure_installation

Step3 建立 ossec 数据库、配置权限用户为 ossec ,密码为 password

[root@server ~]# mysql -u root -p

mysql> create database ossec;
mysql> grant INSERT,SELECT,UPDATE,CREATE,DELETE,EXECUTE on ossec.* to ossec@localhost;
mysql> set password for ossec@localhost=PASSWORD('password');
mysql> flush privileges;

Step4 导入OSSEC数据库表结构 schema 文件保存在源码目录 ossec-hids-3.1.0/src/os_dbd/mysql.schema

[root@server ~]# cd /root/ossec-hids-3.1.0/src/os_dbd
[root@server os_dbd]# ll
总用量 124
... 此处省略..
-rw-rw-r-- 1 root root  3040 10月 12 06:25 mysql.schema
-rw-rw-r-- 1 root root  3005 10月 12 06:25 postgresql.schema

[root@server os_dbd]# mysql -u root -p ossec < mysql.schema

Step5 编译支持MySQL存储,并激活

[root@server ~]# cd /root/ossec-hids-3.1.0/src
[root@server src]# make TARGET=server DATABASE=mysql install
[root@server src]# make clean
[root@server src]# cd ..
[root@server ossec-hids-3.1.0]# DATABASE=mysql ./install.sh
[root@server ossec-hids-3.1.0]# /var/ossec/bin/ossec-control enable database

Step6 最后主配置文件 ossec.conf 增加MySQL数据库配置,直接复制整段到配置文件最后

<ossec_config>
    <database_output>
        <hostname>127.0.0.1</hostname>
        <username>ossec</username>
        <password>password</password>
        <database>ossec</database>
        <type>mysql</type>
    </database_output>
</ossec_config>

Step7 保存配置,并重启OSSEC进程

[root@server ~]# service ossec restart

数据常用查询 case1 查询最近发生的10条告警

mysql> SELECT id,server_id,rule_id,level,timestamp,location_id,src_ip,dst_ip,src_port,dst_port,alertid,user FROM alert limit 10;
+----+-----------+---------+-------+------------+-------------+----------------+--------+----------+----------+-------------------+--------+
| id | server_id | rule_id | level | timestamp  | location_id | src_ip         | dst_ip | src_port | dst_port | alertid           | user   |
+----+-----------+---------+-------+------------+-------------+----------------+--------+----------+----------+-------------------+--------+
|  1 |         1 |    5716 |     5 | 1545571731 |           1 | 182.100.67.15  | (null) |        0 |        0 | 1545571730.513468 | root   |
|  2 |         1 |    5716 |     5 | 1545571736 |           1 | 182.100.67.15  | (null) |        0 |        0 | 1545571732.513773 | root   |
|  3 |         1 |     502 |     3 | 1545571736 |           2 | (null)         | (null) |        0 |        0 | 1545571733.514078 | (null) |
|  4 |         1 |    5716 |     5 | 1545571736 |           1 | 182.100.67.15  | (null) |        0 |        0 | 1545571734.514235 | root   |
|  5 |         1 |    5716 |     5 | 1545571741 |           1 | 182.100.67.15  | (null) |        0 |        0 | 1545571736.514540 | root   |
|  6 |         1 |    5716 |     5 | 1545571741 |           1 | 182.100.67.15  | (null) |        0 |        0 | 1545571738.514845 | root   |
|  7 |         1 |    2502 |    10 | 1545571741 |           1 | 182.100.67.15  | (null) |        0 |        0 | 1545571738.515150 | root   |
|  8 |         1 |    5503 |     5 | 1545571741 |           1 | 182.100.67.15  | (null) |        0 |        0 | 1545571738.515533 | root   |
|  9 |         1 |    5716 |     5 | 1545571741 |           1 | 182.100.67.15  | (null) |        0 |        0 | 1545571740.515882 | root   |
| 10 |         1 |    5710 |     5 | 1545572031 |           1 | 24.192.159.138 | (null) |        0 |        0 | 1545572031.516188 | (null) |
+----+-----------+---------+-------+------------+-------------+----------------+--------+----------+----------+-------------------+--------+
10 rows in set (0.00 sec)

Case2查询规则ID 1002 关联的事件分类

mysql> SELECT rule_id, cat_name from category, signature_category_mapping WHERE rule_id = 1002 AND signature_category_mapping.cat_id = category.cat_id;
+---------+----------+
| rule_id | cat_name |
+---------+----------+
|    1002 | syslog   |
|    1002 | errors   |
+---------+----------+
2 rows in set (0.00 sec)

3.9 OSSEC-Server ELK日志存储

OSSEC产生的告警日志,虽然可以保存到MySQL等数据库中,但日志数量一旦线性增长,结构化数据库就不满足大量日志存储的需求了,这时就需要ELK技术栈出场了,主流的方式是使用filebeat实时读取OSSEC输出的json数据,通过logstash输入到ElasticSearch,并通过Kibana查询、聚合等数据处理操作
Step1 OSSEC-Server上JSON数据配置输出

<global>
  <jsonout_output>yes</jsonout_output>
</global>

重启OSSEC进程,生成 alerts.json

[root@server ~]# cd /var/ossec/logs/alerts
[root@server alerts][[ll]]
总用量 128
drwxr-x--- 3 ossec ossec   4096 12月 21 21:17 2018
-rw-r----- 2 ossec ossec    236 12月 25 16:10 alerts.json
-rw-r----- 2 ossec ossec 116628 12月 25 16:10 alerts.log

Step2 OSSEC-Server上安装filebeat

[root@server ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.4-linux-x86_64.tar.gz
[root@server ~]# cp filebeat-6.5.4-linux-x86_64.tar.gz /opt
[root@server ~]# cd /opt
[root@server opt]# tar xf filebeat-6.5.4-linux-x86_64.tar.gz
[root@server opt][[mv]] filebeat-6.5.4-linux-x86_64 filebeat
[root@server opt][[cd]] filebeat
[root@server filebeat]# ls
data  fields.yml  filebeat  filebeat.reference.yml  filebeat.yml  kibana  LICENSE.txt  module  modules.d  NOTICE.txt  README.md

ilebeat读取alerts.json ,发送到logstash

[root@server filebeat]# vim filebeat.yml

filebeat.inputs:

- type: log

paths:
    - /var/ossec/logs/alerts/alerts.json # 读取告警json文件
  json.keys_under_root: true
  json.overwrite_keys: true

fields:
  log_type: osseclogs

output.logstash:
  hosts: ["103.40.26.189:5044"] # 指定logstash服务器
  ```
**Step3 OSSEC-ELK上配置logstash接收,并存入ES**
```shell
  [root@ELK logstash]# cat logstash_ossec.conf
input {
  beats {
    id => "ossec_test"
    port => 5044
    type => "ossec"
  }
}

filter {
  if([fields][log_type] == "osseclogs") {
    mutate {
      replace => {
        "[type]" => "osseclogs"
      }
    }
  }
}

output {

  if([type] == "osseclogs") {
    elasticsearch {
      index => "ossec-%{+YYYY.MM.dd}"
    }
  }
}

Step 4通过Kibana查询OSSEC日志

3.10 OSSEC 源码安装卸载

OSSEC版本的升级或与OSSEC增强套件(Wazuh)之间的切换,需要进行手工卸载OSSEC操作
Step 1 停止OSSEC进程

# service ossec stop

Step 2 删除初始化配置文件

# rm -rf /etc/ossec-init.conf

Step 3 删除安装根目录以及自启动脚本

# rm -rf /var/ossec && rm /etc/init.d/*ossec*

四、目录结构与实用工具

文件剖析

4.1 根目录

程序目录默认安装在 /var/ossec ,对核心子目录重点展示

4.2 子目录 /bin

此目录主要存放OSSEC的可执行程序文件 - 核心执行文件 核心执行文件主要负责整个OSSEC入侵检测响应系统的运作,如下图所示 ossec-logcollector

收集日志 ossec-analysisd

范式化日志并进行分析,匹配规则并触发告警信息 ossec-syscheckd

检测定义监控的文件完整性变化(校验和、权限、属组) ossec-maild

触发邮件或短信告警 ossec-execd

触发执行响应处理脚本 ossec-remoted

服务端与客户端通信服务守护进程(UDP 1514) - 客户端管理工具 OSSEC入侵检测响应框架服务器端需要集中管理Agent,所以需要熟悉客户端管理工具的使用,方便系统运维
manage_agent - 客户端密钥管理
1.导出已生成的agent通信密钥 - /var/ossec/manage_agent -e
2.移除已存在的agent - /var/ossec/manage_agent -r
3.导入agent通信密钥 - /var/ossec/manage_agent -i
4.批量生成agent密钥 - /var/ossec/manage_agent -f
agent_control - 客户端控制
1.获取agent状态 - /var/ossec/agent_control -l
2.获取agent信息 - /var/ossec/agent_control -i
3.重启agent进程 - /var/ossec/agent_control -R
4.触发完整性和后门检测 - /var/ossec/agent_control -r -u
list_agents - 客户端状态 1.显示所有客户端 - /var/ossec/list_agents -a
2.显示已连接的客户端 - /var/ossec/list_agents -c
3.显示未连接的客户端 - /var/ossec/list_agents -n
clear_stats - 统计信息清零
1.每日平均统计清零 - /var/ossec/clear_stats -d
2.每周平均统计清零 - /var/ossec/clear_stats -w
- 规则测试工具 OSSEC在分析日志之前,通常需要对日志使用正则表达式提取内容字段,为保证正则解析的有效性,需要进行日志正则匹配测试,熟悉规则测试工具的使用,事半功倍.ossec-logtest- 规则测试、漏报/误报规则调优 加载指定定配置文件

/var/ossec/bin/ossec-logtest -c /var/ossec/etc/ossec.conf```
测试读取单行日志
```shell
echo "Dec 30 04:15:28 server sshd[80558]: Failed password for invalid user test from 119.28.50.163 port 33020 ssh2" | /var/ossec/bin/ossec-logtest

测试读取日志文件

cat /var/log/secure | /var/ossec/bin/ossec-logtest -a

ossec-regex- OSSEC内置正则表达式测试 - 报告生成工具 OSSEC系统本身没有完善的UI界面,需要借助第三方工具做效果展现,但内置支持安全报告输出,可以弥补没有UI界面的不足. ossec-reportd- 事件统计报告 告警数据生成安全报告 cat /var/ossec/logs/alerts/alerts.log | /var/ossec/bin/ossec-reportd 过滤条件输出安全报告

cat /var/ossec/logs/alerts/alerts.log | /var/ossec/bin/ossec-reportd -f group authentication_failure

过滤条件 ossec-reportd -f 支持属性 -group - 安全事件组 -rule - 安全事件名称 -level - 安全事件级别 -location - 安全事件归属主机 -user - 用户名称 -srcip - 源IP地址 -filename - 文件名称 - 主程序管理工具 OSSEC操作管理的基础内容,包含进程启动、停止、重启,以及进程状态和内置功能开关 ossec-control - OSSEC进程管理、功能开关管理 ossec进程启动 /var/ossec/bin/ossec-control start`` ossec进程停止/var/ossec/bin/ossec-control stopossec进程重启/var/ossec/bin/ossec-control restartossec进程状态/var/ossec/bin/ossec-control statusossec功能(ossec-dbd、ossec-csyslog,ossec-agentlessd)开关激活 ```/var/ossec/bin/ossec-control enable``` ossec功能(ossec-dbd、ossec-csyslog,ossec-agentlessd)开关关闭 ```/var/ossec/bin/ossec-control disable - 无代理联动工具 OSSEC不仅支持在各种操作系统上部署Agent,进行安全管理,也支持Agentless(无代理模式)的远程管理,譬如交换机、路由器这样的设备,这些设备一般无法安装Agent程序,但通常都支持SSH, ossec-agentlessd通过功能脚本实现无代理模式的集中管理 ossec-agentlessd- ossec无代理设备通信处理

[root@server agentless]# cd /var/ossec/agentless
[root@server agentless]# ll
总用量 60
-r-xr-x--- 1 root ossec 2412 12月 23 21:03 main.exp
-r-xr-x--- 1 root ossec 2086 12月 23 21:03 register_host.sh
-r-xr-x--- 1 root ossec 5240 12月 23 21:03 ssh_asa-fwsmconfig_diff
-r-xr-x--- 1 root ossec 1445 12月 23 21:03 ssh.exp
-r-xr-x--- 1 root ossec 5360 12月 23 21:03 ssh_foundry_diff
-r-xr-x--- 1 root ossec  867 12月 23 21:03 ssh_generic_diff
-r-xr-x--- 1 root ossec 1060 12月 23 21:03 ssh_integrity_check_bsd
-r-xr-x--- 1 root ossec 1067 12月 23 21:03 ssh_integrity_check_linux
-r-xr-x--- 1 root ossec  772 12月 23 21:03 sshlogin.exp
-r-xr-x--- 1 root ossec 1473 12月 23 21:03 ssh_nopass.exp
-r-xr-x--- 1 root ossec 5222 12月 23 21:03 ssh_pixconfig_diff
-r-xr-x--- 1 root ossec 1350 12月 23 21:03 su.exp
  • 日志处理工具 OSSEC系统对产生的日志需要做有序管理,实现日志压缩、日志发送以及日志写入数据库的功能 1.ossec-monitord - 监控客户端连接和压缩日志 2.ossec-csyslogd - 负责发送syslog日志 3.ossec-dbd - 负责把告警日志写入数据库
  • 代理密钥批量生成工具 当前客户网络主机、服务器数量庞大,单纯的手动导出导入代理通讯密钥基本无法满足需求,ossec-authd就是解决批量生成代理密钥的工具 ossec-authd- 自动加载通信密钥加入Agent主机
  • 特殊功能工具 CDB列表是个键值对列表文件(需要ossec-makelists编译后使用),基于CDB列表目前安全实现有基线异常发现和恶意域名通讯异常发现等 ossec-makelists- 负责编译CDB键值对数据库
    1.使用CDB数据库发现基线异常 Tracking Processes/Malwares Using OSSEC
    2.使用CBD数据库发现恶意域名Watching for Potentially Malicious Domains with OSSEC
    util.sh- 监控网站和域名解析状态变更脚本

4.3 子目录 /etc

/etc 目录主要存放OSSEC系统的配置文件

[root@server etc]# cd /var/ossec/etc
[root@server etc]# ll
总用量 180
-r--r----- 1 root ossec    188 12月 28 11:21 client.keys
-rw-r----- 1 root ossec 138049 12月 23 21:03 decoder.xml
-rw-r----- 1 root ossec   3156 12月 23 21:03 internal_options.conf
-rw-r----- 1 root ossec    320 12月 21 21:12 local_internal_options.conf
-r--r----- 1 root ossec    388 12月 23 21:03 localtime
-rw-r----- 1 root ossec   8090 12月 25 16:09 ossec.conf
-rw-r----- 1 root root     104 12月 23 21:03 ossec-init.conf
drwxrwx--- 2 root ossec   4096 12月 23 21:03 shared

重点
- decoder.xml: 默认的解码器文件,作用是实现日志正则预匹配,减轻日志解析压力
- client.keys: 记录管辖范围内Agent的密钥信息文件
- internal_options.conf: 内部功能参数调整开关、门限值调整
- ossec-init.conf: 记录安装初始化信息,包括版本、安装目录以及角色
- ossec.conf: 主配置文件,包括规则加载、完整性检测、后门检测等功能

4.4 子目录 /logs

目录 /logs 主要存放ossec程序的运行日志、主动响应日志以及事件告警日志

[root@server etc]# cd /var/ossec/logs
[root@server logs]# ll
总用量 1280
-rw-rw---- 1 ossec ossec 625512 1月  15 15:59 active-responses.log
drwxr-x--- 4 ossec ossec   4096 1月  15 00:00 alerts
drwxr-x--- 4 ossec ossec   4096 1月  15 00:00 archives
drwxr-x--- 4 ossec ossec   4096 1月  15 00:00 firewall
-rw-rw---- 1 ossec ossec 661514 1月  15 16:51 ossec.l

重点 - ossec.log: 记录ossec所有相关程序的执行状态信息,包括读取配置文件、启停进程、加载规则等 - active-responses.log: 记录主动响应操作记录 - alerts: 存放各种格式记录事件的告警文件

4.5 子目录 /queue

目录 /queue 存放一些需要缓存处理的队列数据,比如完整性检测和后门检测的缓存数据等

[root@server etc]# cd /var/ossec/queue
[root@server queue]# ll
总用量 36
drwxr-x--- 2 ossecr ossec 4096 12月 29 10:42 agent-info
drwxr-x--- 2 ossec  ossec 4096 12月 21 21:12 agentless
drwxrwx--- 2 ossec  ossec 4096 12月 29 14:26 alerts
drwxr-x--- 5 ossec  ossec 4096 12月 21 23:32 diff
drwxr-x--- 2 ossec  ossec 4096 12月 21 21:17 fts
drwxr-x--- 2 ossec  ossec 4096 12月 29 14:26 ossec
drwxr-x--- 2 ossecr ossec 4096 12月 28 11:23 rids
drwxr-x--- 2 ossec  ossec 4096 12月 28 11:24 rootcheck
drwxr-x--- 2 ossec  ossec 4096 12月 29 07:42 syscheck

4.6 子目录 /active-response

目录 /active-response 存放主动响应的脚本文件

root@server bin]# pwd
/var/ossec/active-response/bin
[root@server bin]# ll
总用量 60
-r-xr-x--- 1 root ossec 1711 12月 23 21:03 disable-account.sh
-r-xr-x--- 1 root ossec 3952 12月 23 21:03 firewalld-drop.sh
-r-xr-x--- 1 root ossec 7277 12月 23 21:03 firewall-drop.sh
-r-xr-x--- 1 root ossec 3539 12月 23 21:03 host-deny.sh
-r-xr-x--- 1 root ossec  800 12月 23 21:03 ip-customblock.sh
-r-xr-x--- 1 root ossec 1617 12月 23 21:03 ipfw_mac.sh
-r-xr-x--- 1 root ossec 1385 12月 23 21:03 ipfw.sh
-r-xr-x--- 1 root ossec 1290 12月 23 21:03 npf.sh
-r-xr-x--- 1 root ossec 1157 12月 23 21:03 ossec-pagerduty.sh
-r-xr-x--- 1 root ossec 1739 12月 23 21:03 ossec-slack.sh
-r-xr-x--- 1 root ossec 1636 12月 23 21:03 ossec-tweeter.sh
-r-xr-x--- 1 root ossec 1949 12月 23 21:03 pf.sh
-r-xr-x--- 1 root ossec  542 12月 23 21:03 restart-ossec.sh
-r-xr-x--- 1 root ossec 1353 12月 23 21:03 route-null.sh

4.7 子目录 /rules

目录 /rules 存放OSSEC内置支持的设备、应用,系统安全检测规则文件

root@server rules]# ls
apache_rules.xml      hordeimp_rules.xml           named_rules.xml           proxmox-ve_rules.xml    sysmon_rules.xml
apparmor_rules.xml    ids_rules.xml                netscreenfw_rules.xml     psad_rules.xml          systemd_rules.xml
arpwatch_rules.xml    imapd_rules.xml              nginx_rules.xml           pure-ftpd_rules.xml     telnetd_rules.xml
asterisk_rules.xml    linux_usbdetect_rules.xml    nsd_rules.xml             racoon_rules.xml        trend-osce_rules.xml
attack_rules.xml      local_rules.xml              openbsd-dhcpd_rules.xml   roundcube_rules.xml     unbound_rules.xml
cimserver_rules.xml   mailscanner_rules.xml        openbsd_rules.xml         rules_config.xml        vmpop3d_rules.xml
cisco-ios_rules.xml   mcafee_av_rules.xml          opensmtpd_rules.xml       sendmail_rules.xml      vmware_rules.xml
clam_av_rules.xml     ms1016_usbdetect_rules.xml   ossec_rules.xml           smbd_rules.xml          vpn_concentrator_rules.xml
courier_rules.xml     msauth_rules.xml             owncloud_rules.xml        solaris_bsm_rules.xml   vpopmail_rules.xml
dnsmasq_rules.xml     ms_dhcp_rules.xml            pam_rules.xml             sonicwall_rules.xml     vsftpd_rules.xml
dovecot_rules.xml     ms-exchange_rules.xml        php_rules.xml             spamd_rules.xml         web_appsec_rules.xml
dropbear_rules.xml    ms_firewall_rules.xml        pix_rules.xml             squid_rules.xml         web_rules.xml
exim_rules.xml        ms_ftpd_rules.xml            policy_rules.xml          sshd_rules.xml          wordpress_rules.xml
firewalld_rules.xml   ms_ipsec_rules.xml           postfix_rules.xml         symantec-av_rules.xml   zeus_rules.xml
firewall_rules.xml    ms-se_rules.xml              postgresql_rules.xml      symantec-ws_rules.xml
ftpd_rules.xml        mysql_rules.xml              proftpd_rules.xml         syslog_rules.xml