天天看点

OSSEC-hids 主机入侵检测系统概述常用的主机入侵检测系统OSSEC

随着国家对网络安全的重视,国内各个企业也开始在安全方面增加投入,我们公司也不例外。作为防守方,实时了解主机状态(主机文件是否被修改?是否有被入侵?等等)以及实时获取告警信息,是很重要的。及时反制入侵行为、及时修复系统,将入侵扼杀在摇篮阶段。于是引入了HIDS(主机入侵检测系统),网上关于HIDS的文章比较少、内容也不尽完善,下面是我自己在搭建HIDS时的记录。

常用的主机入侵检测系统

AIDE(Advanced Intrusion Detection Environment):高级入侵检测环境,CIS

OSSEC:开源的、跨平台的主机入侵检测系统,官网:https://www.ossec.net/

等等

OSSEC

功能

1、文件完整性检查即文件篡改检查(syscheck)

2、日志监控

3、rootkit检测

4、主动响应:主动反制,匹配到规则后主动采取措施,如:检测到sshd日志存在多次失败登录后,将登录的源地址加入黑名单。

5、告警:通过配置实现邮件等方式的告警

安装

1、local:本地安装,只在一台设备安装,检测本台设备

2、server-agent:服务+代理模式安装

server安装在一台设备,agent安装在其他设备,agent收集各个设备的信息,然后发送给server,server统一进行分析、告警、主动响应、统一管理各个agent。

# 在server和agent上安装依赖 及 yum 远程库

yum install zlib-devel pcre2-devel make gcc zlib-devel pcre2-devel sqlite-devel openssl-devel libevent-devel
yum install mysql-devel
wget -q -O - https://updates.atomicorp.com/installers/atomic | sudo bash
# Server
sudo yum install ossec-hids-server
# Agent
sudo yum install ossec-hids-agent
           

3、agentless:无代理

和server-agent的方式类似,但是只有server没有agent即不需要在设备上安装agent,server通过ssh去进行监控和扫描各个设备。

本次实践,使用server-agent方式

组件

1、server

# 各个进程
ossec-maild         # 邮件告警
ossec-execd         # 应该是执行主动响应及各种自定义的命令(猜的)
ossec-analysisd     # 日志分析服务
ossec-logcollector  # 日志收集
ossec-remoted       # server和agent通信
ossec-syscheckd     # 完整性检测包括rootkit
ossec-monitord      # agent监控
           

2、agent

# 各个进程
ossec-logcollector    # 日志收集器
ossec-syscheckd       # 完整性检测包括rootkit
ossec-agentd          # agent客户端
ossec-execd           # 应该是执行主动响应及各种自定义的命令(猜的)
           

详解

配置

首先说一下配置,在使用过程中,可能发现配置文件好多,里面内容也很类似。

日志监控/分析

日志监控/分析由OSSEC中 logcollector和analysisd进程来完成的。首先,日志收集器手机日志,然后分析进程分析(解码、过滤、分离)事件。日志监控和分析时实时进行的。

重点:

1、实时监控

2、在server上进行日志分析

3、存储时间由用户配置

配置

在每个代理的ossec.conf或共享的agent.conf中配置。

如:

<localfile>
    <log_format>syslog</log_format>
    <location>/var/log/messages</location>
</localfile>

# 在<localfile>元素内部,可以使用下面的选项
<location>  #指定读取的日志位置,strftime格式可用于日志文件名。例如,file.log-2011-01-22可以使用引用名为的日志文件file.log-%Y-%m-%d。通配符可以在非Windows系统上使用。使用通配符时,日志文件在ossec-logcollector启动时必须存在。它不会自动开始监视新的日志文件。strftime和通配符不能用于同一条目。
<log_format>  #日志格式,默认是syslog。可选:snort-full、eventlog、mysql_log、apache、command等


           

日志监控之rules配置

rules 匹配顺序:先匹配0级的,如果0级 没有匹配到,将所有规则按照level 降序的顺序排列(level相同的,按照rules 加载顺序排列),开始从最高级往下匹配,知道匹配到。

如果我们需要在已匹配到的规则的基础上,继续匹配,则可以用:<if_sid><if_sid>

日志检测规则,测试程序:/var/ossec/bin/ossec-logtest  

先输入要进行测试的日志内容

phase 1 、2 是解码器解码(将日志进行解释、进行处理)阶段,3是匹配rules阶段

OSSEC-hids 主机入侵检测系统概述常用的主机入侵检测系统OSSEC

syscheck-完整性检测

syscheck是OSSEC中完整性检查过程的名字。属于OSSEC的一部分。syscheck定期运行,来检查是否有文件被修改。

syscheck通过关键文件的 MD5/SHA1 校验值是否改变来判断是否完整。

agent每几个小时(用户自己配置)扫描一次系统并且将校验值发送给server。server存储校验值并且对比校验值,如果校验值发生改变则发出告警。

数据存储位置:/var/ossec/queue/syscheck

ossec-syscheckd 提供了几乎实时地检查文件完整性。linux 上需要安装 inotify-tools

配置

所有的配置都可以在agent的etc/ossec.conf中进行配置,除了auto_ignore和alert_new_file,它们适用于管理器和本地安装。ignore如果在管理器上指定,则适用于所有的agent。

<directories></directories> 监控目录,目录中的文件和子目录也将监控

# 默认
<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
# 属性
realtime=yes   #这样启用在Linux(使用inotify系统调用)和windows上的实时/连续监控,实时监测只适用于目录
report_changes=yes # 报告文件更改的差异,仅限于文本文件,只适用于类unix系统
check_all=yes  #除了显式指明为no的属性,其他 check_* 的属性都是yes
check_sum=yes   #检查文件的md5 和 sha1 哈希值  等价于 check_sha1sum ="yes"和check_md5sum ="yes"
check_sha1sum=yes  #仅检查sha1哈希值
check_md5sum=yes #仅检查md5哈希值
check_size=yes  #检查文件的大小
check_owner=yes  #检查文件所有者
check_group=yes  #检查文件所属组
check_perm=yes  #检查文件或目录的权限
restrict=string  #限制检查文件或目录名包含该字符串的文件
no_recurse=no    #不要递归到定义的目录
           

server和agent通信

默认server和agent之间以安全模式在端口 1514/udp上进行。还可以使用系统自带的syslog服务(514/udp)进行通信。

通信由 ossec-remoted实现

通信配置:

vim etc/ossec.conf

<ossec_config>
    <remote>
        <conection>secure</connection>  # 指定连接类型:secure:1514端口通信,syslog:514端口通信
        <allowed-ips>10.251.1.0/24</allowed-ips>  # 设置允许连接server的ip。其他配置参考:https://www.ossec.net/docs/docs/syntax/head_ossec_config.remote.html
    </remote>
</ossec_config>
           

集中管理agent配置

在server创建agent配置

vim etc/shared/agent.conf

server缓存了共享的agent.conf每几个小时会重新读取。所以修改了共享文件后,如果要立即生效,则需要重启server

如果agent同步了server共享的agent.conf,则会在Client version 字段中 表明配置文件的md5值

OSSEC-hids 主机入侵检测系统概述常用的主机入侵检测系统OSSEC

给特定agent进行特殊配置

<agent_config name="agent1">
    <localfile>
        <location>/var/log/my.log</location>
        <log_format>syslog</log_format>
    </localfile>
</agent_config>
# 可以通过指明agent name的方法对agent1进行独特的配置,此配置只在agent1 生效,当然还有其他办法,可以查看官方文档
           

告警配置

邮箱告警

默认情况下,ossec的邮箱配置是关闭的。邮件告警由 ossec-maild 这个进程实现的,只有配置了邮件告警,启动ossec-server时才会启动这个进程

vim etc/ossec.conf

邮件告警只需要在server端进行设置即可。

由于ossec-server设置邮件告警的smtp服务器时,没有提供设置用户名和密码的地方,所以使用的smtp必须是不需要认证的smtp服务器,一般直接使用centos自带的postfix即可

<ossec_config>
   <global>
     <email_notification>yes</email_notification>   # 开启邮件告警
     <smtp_server>localhost</smtp_server>   # 设置smtp服务器,由于ossec未提供用户名和密码配置,所以只能使用没有认证的smtp,所以只能用自定义的smtp,一般使用主机自带的
     <email_to>[email protected]</email_to>  # 设置收件人
     <email_from>[email protected]</email_from>  #设置发件邮箱,没有实质用处,只是在收件人邮箱中展示发件人信息
  </global>
  <alerts>
     <log_alert_level>1</log_alert_level>   # 设置往alert.log 中记录的告警最低等级
    <email_alert_level>1</email_alert_level>   #设置邮件告警的最低告警级别
 </alerts>
           

 上面设置了将告警邮件发送到[email protected]  这个本机的邮箱,如果我们想发送到外网邮箱:

vim /etc/aliases

ossecm: [email protected]     # 设置smtp 将发送到ossecm的邮件,转发到 [email protected]  需要重启smtp即postfix
           

 当然还有其他很多告警方式,如:将告警数据存到数据库,为自定义的告警程序提供数据

将告警数据存到数据库

#安装依赖
yum install -y mysql-devel
#启用数据库
bin/ossec-control enable database
           

继续阅读