安全小黄鸭 10月24日 00:46
OSSEC安全监控系统介绍
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

OSSEC是一款开源的安全监控系统,采用Server-Agent模式或AgentLess模式进行工作。它支持日志收集与分析、完整性检查和rootkit检查三大模块,并提供实时阻断功能。日志处理模块分为日志收集和日志分析两部分,Agent负责收集日志并发送给Server,Server负责解析和分析日志并生成告警。OSSEC还支持通过Server远程管理Agent的配置,并可以通过Active Response功能进行实时阻断。OSSEC的设计模式具有参考价值,通过配置文件降低了添加新规则的门槛,并使整体结构更加清晰。

🔍 OSSEC是一款开源的安全监控系统,支持Server-Agent模式或AgentLess模式进行工作,适用于多种安全监控需求。

📈 它提供三大核心模块:日志收集与分析、完整性检查和rootkit检查,全面保障系统安全。

📊 日志处理模块分为日志收集和日志分析两部分,Agent负责收集日志并发送给Server,Server负责解析和分析日志并生成告警,实现高效的日志管理。

🔧 OSSEC支持通过Server远程管理Agent的配置,方便管理员进行集中管理,提高工作效率。

🛡️ OSSEC提供Active Response功能,可以在检测到安全威胁时进行实时阻断,有效防止安全事件的发生。

Fr1day 2018-05-12 12:54

陈年佳(tun)酿(huo),客官来尝尝

监控系列第一篇文章,内容大多是 OSSEC 官方文档的翻译,加上一些自己的理解总结 Orz

0x00 概览

OSSEC 有两种模式:

在 Server-Agent 模式下,Agents 和 Server 的通信,可以使用 rsyslog(514端口 TCP、UDP),也可以使用 1514 UDP端口(默认)。

Server 和 Agent 分别安装完成之后,需要先从 Server 添加一个新的 Agent,获取一串 key 添加到 Agent 机器上之后,才能完成 UDP 链接的建立,开始正儿八经的监控。

OSSEC 支持自动化添加 Agent:

agent-auth 进程会连接到 Server 的 ossec-authd 进程,获取并且安装 key。

OSSEC 支持通过 Server 远程管理 Agent 的各项配置,只需要设置 /var/ossec/etc/shared/agent.conf。一般需要几个小时来同步配置,但可以手动重启Agent来加快这个进程。

OSSEC 有三大模块:

0x01 日志处理模块

日志处理模块(Log Analysis,又称 LIDS)分为两部分:日志收集(运行在Agent)、日志分析(运行在Server)。

日志收集主要通过如下手段:

添加新的日志收集规则,只需要在 Agent 的 ossec.conf 中添加一条 <localfile> 规则即可

    # 文件监控

    <localfile>

       <log_format>apache</log_format>

       <location>/var/www/logs/access_log</location>

    </localfile>

    # 进程监控

    <localfile>

       <log_format>command</log_format>

       <command>df -h</command>

    </localfile>

Agent 不做任何日志分析/过滤,只是收集日志打包发送给 Server。

日志分析模块接收到日志后,首先会用 decoder 解析出日志的各个字段。然后调用 rules 里的规则对内容进行匹配,输出告警内容。

decoder 实际上也分为两个阶段:第一阶段 pre-decoding 为 ossec 内置,可以将标准的 syslog 日志,解析出基础的 hostname、programname、log 字段[2];第二阶段 decoding 根据解析出的 programname 去解析出详细的字段。官方[3]的栗子:

    # 日志原文:

    2013-11-01T10:01:04.600374-04:00 arrakis ossec-exampled[9123]: test connection from 192.168.1.1 via test-protocol1

    # pre-decoding后:

    full event: '2013-11-01T10:01:04.600374-04:00 arrakis ossec-exampled[9123]: test connection from 192.168.1.1 via test-protocol1'

    hostname: 'arrakis'

    program_name: 'ossec-exampled'

    log: 'test connection from 192.168.1.1 via test-protocol1'

    # decoding后:

    decoder: 'ossec-exampled'           # 对应上一步骤的program_name

    srcip: '192.168.1.1'

    proto: 'test-protocol1'

对应的 decoding 规则如下:

    <decoder name="ossec-exampled">

     <program_name>ossec-exampled</program_name>

    </decoder>

    <decoder name="ossec-exampled-test-connection">

     <parent>ossec-exampled</parent>                               # 继承自上一标签

     <prematch offset="after_parent">^test connection </prematch>   # 逻辑判断

     <regex offset="after_prematch">^from (\S+) via (\S+)$</regex>    

     <order>srcip, protocol</order>        # 变量名,对应的值为正则表达式里匹配的内容

    </decoder>

decoder 利用 parent、 prematch 等标签实现逻辑判断(类比于if), regex、 order实现参数匹配, parent 继承的方式,也可以实现多条件分支判断,用于识别不同类型的日志(比如ssh日志中的登录失败、登录成功等)。这样巧妙的设计值得学习。

rules 一共分为16个等级(0-15),设置为0时只会记录不会告警。同样是通过规则继承实现条件判断,但比decoder更复杂,具体可参考 https://ossec.github.io/docs/syntax/head_rules.html。

举个栗子,OSSEC 自带的 Apache 服务狗带的告警:

    <group name="apache,">

     <rule id="30100" level="0">

       <decoded_as>apache-errorlog</decoded_as>        # 对应decoder中的name

       <description>Apache messages grouped.</description>

     </rule>

     <rule id="30103" level="0">

       <if_sid>30100</if_sid>          # 继承

       <match>^[notice] </match>       # if判断

       <description>Apache notice messages grouped.</description>

     </rule>

     <rule id="30104" level="12">

       <if_sid>30103</if_sid>

       <match>exit signal Segmentation Fault</match>

       <description>Apache segmentation fault.</description>

       <info type="link">http://www.securityfocus.com/infocus/1633</info>

       <group>service_availability,</group>

     </rule>

    </group>

告警默认通过邮件发送,具体发送的漏洞等级范围可以在 ossec.conf 中调整。

0x02 完整性检查模块

Syscheck(完整性检查):

举个栗子,每隔两个小时检查一次 /etc 目录的文件变动:

    <syscheck>

       <frequency>7200</frequency>     # 检查频率

       <directories check_all="yes">/etc</directories>  # 检查的目录

       <ignore>/etc/hosts.deny</ignore>        # 忽略的目录,可以理解为白名单,减少重复误报的情况

    </syscheck>

0x03 Rootkit检查模块

RootCheck检查手段:

0x04 实时阻断功能

Active Response: 一些规则被匹配到后,会触发命令执行,来实现一些功能[1]。比如:ssh爆破次数大于10次,屏蔽ip

    <command>

       <name>host-deny</name>

       <executable>host-deny.sh</executable>

       <expect>srcip</expect>

       <timeout_allowed>yes</timeout_allowed>

    </command>  

    <active-response>

       <command>host-deny</command>

       <location>local</location>

       <rules_id>31171</rules_id>              # 满足某条规则,就触发屏蔽            

       <timeout>600</timeout>

    </active-response>

注:告警是 Server 端产生的,通过 Server 端运行的 agent_control 进程将相关指令下发给 Agent,最终在 Agent 端执行并生效[4]。

总结

说起来这篇文(fan)章(yi)写了也有段时间了。本来是雄赳赳气昂昂,准备看完文档就看源码的,结果文档写的很好,国内外也有很多人分享过各个方面的理解,也就丢了看源码的心思(😩其实是不想看C)。

整个的设计模式非常有参考价值,通过层层叠叠的配置文件,降低了添加新规则的门槛,也让整体看起来更有条理。

参考资料

[1]开源HIDS-OSSEC使用实例2:使用联动功能阻断cc攻击 http://www.freebuf.com/articles/system/69394.html[2]OSSEC日志泛化及告警规则配置 http://www.freebuf.com/articles/network/36484.html在[3]OSSEC官方文档 http://ossec-docs.readthedocs.io/en/latest/manual[4]About active responses in OSSEC http://sgros.blogspot.com/2012/08/about-active-responses-in-ossec.html


阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

OSSEC 安全监控系统 日志分析 完整性检查 rootkit检查 实时阻断
相关文章