OSSEC(一) 0.前言 这篇文章主要是进行OSSEC的了解以及相关安装和搭建,这里分为了一个主机win和一个centos7的agent安装,以及centos7的server安装,参考链接为
1 https:// zhuanlan.zhihu.com/p/ 53516534
虽然是参考,但是自己对整体步骤进行了更加详细的描述;也对过程进行了更加精致的阐述,也对会出现的问题进行了解决,希望能够给到一定的帮助
1.OSSEC兴起 在谈起Ossec前首先清楚EDR(端点威胁检测与响应)是一种安全技术,旨在监控和保护计算机终端设备免受恶意活动的影响。该技术被广泛应用于威胁检测、攻击溯源以及响应处理努力、终端控制等多种安全场景,帮助组织及时发现和应对恶意活动,并提供有关安全事件的详细信息和分析报告。
而Ossec是一款开源的跨平台的准EDR入侵检测响应系统,能够很好的实商业版本EDR的大部分功能
2.OSSEC产品定位
OSSEC 可以监控各种系统和应用程序生成的日志,并实时分析这些日志以检测潜在的安全事件。它可以帮助组织及时发现异常活动、潜在的入侵行为或其他安全威胁
OSSEC 可以监控关键系统文件和目录的完整性,通过比较文件的哈希值来检测是否有未经授权的更改。这有助于发现潜在的恶意软件、未经授权的访问或其他对系统完整性的威胁
OSSEC 提供了入侵检测系统的功能,可以识别和报告可能的入侵行为。它使用规则和模式匹配技术来检测已知的攻击模式或异常行为,并生成警报以通知安全团队
OSSEC 可以生成实时警报,通知安全团队有关潜在的安全事件。它还提供了响应机制,可以触发自动化响应或通知相关人员进行进一步的调查和处理
OSSEC 是一个开源项目,具有高度可扩展性和定制化能力。用户可以根据自己的需求添加自定义规则、插件和报警方式,以适应不同的环境和安全要求
3.Ossec_server安装
首先我们需要进行数据库的基本环境搭建,由于之前已经在该环境上搭建了mysql类型数据库,这里直接进行相关的初始化和有关库的安装即可
1 2 3 4 5 6 yum -y install make gcc yum -y install mysql-devel postgresql-devel yum -y install sqlite-devel
剩下那我们在github中抓取相应的压缩包,进行解压与重命名操作:
1 2 3 4 5 6 7 8 wget https://github.com/ossec/ossec-hids/archive/3 .1 .0 .tar.gzmv 3 .1 .0 .tar.gz ossec-hids-3 .1 .0 .tar.gztar xf ossec-hids-3 .1 .0 .tar.gzcd ossec-hids-3 .1 .0
执行启动安装脚本
启动脚本后,会进行相关问题的安装配置询问,安装是需求进行安装即可
选项说明:
1 2 3 4 5 6 7 8 9 1 )server - 安装服务器端2 ) /var /ossec - 选择安装目录,默认选项3 ) y - 是否启用邮件告警,默认启用4 ) y - 是否启用系统完整性检测模块Syscheck功能,默认启用5 )y - 是否启用后门检测模块Rootcheck功能,默认启用6 ) y - 是否启用主动响应模块active-response功能,默认启用7 ) n - 是否启用防火墙联动功能,默认启用,此处为关闭8 ) n - 是否添加联动功能白名单,默认启用,此处为关闭9 ) y - 是否接受远程主机发送的syslog日志,默认启用
配置完安装脚本之后,按回车键就开始进行编译安装,如果需要改变OSSEC的配置,可以等安装完成后,编辑ossec.conf配置文件进行修改,并重启ossec进程使其生效
这里遇到了一个问题,由于系统中安装了两个版本的openssl(老毛病了,之前就因为这个导致自己的zabbix一直存在问题,这里也是冲突导致了ossec安装一直不成功
1 2 which openssl rpm –qa |grep openssl
由于多个版本拿到openssl库,导致了编译过程中的冲突,猜测这里执行删除报的命令进行解决,使得ossec能够正确地链接到合适的OpenSSL库
1 yum remove openssl-devel
直接删除开发包,确实是行得通的,最后也是成功的进行了编译安装
4.Ossec_agent安装
初始化环境安装,安装编译库
1 # yum -y install make gcc
1 2 3 4 5 6 7 8 wget https://github.com/ossec/ossec-hids/archive/3 .1 .0 .tar.gzmv 3 .1 .0 .tar.gz ossec-hids-3 .1 .0 .tar.gztar xf ossec-hids-3 .1 .0 .tar.gzcd ossec-hids-3 .1 .0
执行启动安装脚本
启动脚本后,会进行相关问题的安装配置询问,安装是需求进行安装即可
选项说明:
1 2 3 4 5 6 1 )agent - 安装客户端2 ) /var/ ossec - 选择安装目录,默认选项3 ) 192.168 .70.233 - 输入服务器端IP地址4 ) y - 是否启用系统完整性检测模块Syscheck功能,默认启用5 ) y - 是否启用后门检测模块Rootcheck功能,默认启用6 ) y - 是否启用主动响应模块active-response功能,默认启用
首先下载win_agent版本安装程序
1 https://u pdates.atomicorp.com/channels/ atomic/windows/
输入OSSEC-Server IP地址和通信密钥
密钥的生成会在下一个小节进行阐述
5.Server与Agent通信 通过以上步骤,我们完成了对Ossec客户端和服务端的相关安装,接下来就是进行两者的通信连接,server与agent之间的建立通信需要通过认证,server需要为agent端生成腾讯密钥并导入agent后才能完成信任关系,并且server需要开放udp 1514腾讯端口,用以接收agent上报的信息
首先需要配置agent配置文件内容指向server IP,由于前面在安装的时候,我们就直接输入了server的ip地址,这里就不用修改
1 vim /var/ ossec/etc/ ossec.conf
1 2 3 4 5 <ossec_config> <client> <server-ip> 192 .168 .70 .237 </server-ip> <config-profile> </config-profile> </client>
1 /var/ ossec/bin/m anage_agents
选项说明:
1 2 3 4 5 6 1 )A - 新增Agent 2 ) agent01 - 设置Agent 名称3 ) 10.40 .27.121 - 输入Agent IP地址4 ) y - 是否确认新增Agent 5 ) E - 为Agent 生成通讯Key6 ) 001 - 输入新增Agent 的ID,显示Key值
1 /var/ ossec/bin/m anage_agents
选项说明:
1 2 3 1) I - 新增Agent 2) MDAxIGFnZW50MDEgM =... - 输入通信key 3) y - 输入Agent IP地址
1 2 3 4 firewall-cmd --add-port=1514/udp --permanent firewall-cmd --reload
检查Agent是否可以通信
1 /var/ ossec/bin/ list_agents -c
明显是出了问题,这里一开始我以为是我再配置的过程中有问题,所以重新配置了一个006给agent,取名为centos7_1
很明显,客户端这边是能收到信息的,因此排除是在设置通信的过程问题,所以进行排错处理,参考链接:
1 https:// blog.csdn.net/zhang35/ article/details/ 105503227
该链接包含了OSSEC Agent和Server无法连接的常用检查流程,有比较大的参考性,按照检查流程,首先确保网络联通
网络连接没问题,接下来重启server和agent
1 /var/ ossec/bin/ ossec-control restart
agent:
server:
最后再次执行list_agents –c的相关指令
成功导入,window则按照前面的流程再走一遍即可
首先点击save进行保存
保存成功后会显示我们在server上所注册的内容,这与刚才的实例centos7_1的反馈一致,接下来点击右上角的manage标题,点击start ossec按钮,进行开启操作
最后查看server执行list_agents –c进行查看
6.Server MySQL存储事件 在server的配置当中,其所支持的数据库目前有三种,Mysql、Postgresql以及Sqllite,我们可以选择吧日志告警等相关信息都存入到我们所选择的数据库中,这里进行数据库的安装内容
首先我们登录Mysql后首先创建数据库对应的ossec用户,密码设置为了ossec
1 2 CREATE USER 'ossec' @'localhost' IDENTIFIED BY 'ossec' ;select user from mysql.user ;
之后建立ossec数据库。配置权限用户为ossec,并且设置相应的权限
1 2 3 4 create database ossec;show databases;grant INSERT ,SELECT ,UPDATE ,CREATE ,DELETE ,EXECUTE on ossec.* to ossec@localhost; flush privileges ;
导入OSSEC数据库表结构 schema 文件保存在源码目录,首先查看是否有相关的mysql.schema文件
1 2 cd /home/ lfs/ossec-hids-3.1.0/ src/os_dbd ll
接下来进行导入并查看是否导入成功
1 2 3 4 mysql -u root -proot ossec < mysql.schema mysql -u root -proot use ossec show tables
1 2 3 4 5 6 cd /home/ lfs/ossec-hids-3.1.0/ src make TARGET=server DATABASE=mysql install make clean cd .. DATABASE=mysql ./install.sh/var/ ossec/bin/ ossec-control enable database
到这里就编译并激活了Mysql存储了,这里需要注意,由于mysql的一些版本问题,存在编译安装后,启动存在报错的情况,比如:
这就导致我们无法启动ossec服务,会告诉我们配置有问题,因此这里我是重新新建一个新的虚拟机环境进行了新的数据库mysql的安装,才最终达到成功的效果:
1 2 3 4 5 wget http://repo.mysql.com/mysql-community-release -el7-5. noarch.rpm rpm -ivh mysql-community-release -el7-5. noarch.rpm yum -y install mysql-server systemctl start mysqld systemctl enable mysqld
最后重新搭建mysql环境后达到成功的效果,果然是之前mysql编译安装的问题
在完成了需更换编译后,我们就需要在主配置文件ossec.conf的最后增加Mysql数据库的配置即可,也就是添加ip地址、数据库名称、数据用户名称以及密码等内容:
1 2 3 4 5 6 7 8 9 <ossec_config > <database_output > <hostname > 127.0.0.1</hostname > <username > ossec</username > <password > ossec</password > <database > ossec</database > <type > mysql</type > </database_output > </ossec_config >
1 2 /var/ ossec/bin/ ossec-control enable database service ossec restart
最后成功运行,但是这并不代表是完全成功,我们需要查看日志内容
1 cat /var/ ossec/logs/ ossec.log
查看到两个问题:
第一个问题是自己的问题,ossec的数据用户密码设置的时候打错了,重新修改了回来,这里也是立马就完善了
查看到ossec-dbd: Connected to database ‘ossec’ at ‘127.0.0.1’.则代表我们连接成功,接下来我们查看第二个问题:
这个显示是ossec-remoted组件遇到了一个关于syslog访问列表的问题。错误消息指出在syslog的访问列表中没有允许的IP地址或网络,为来解决这个问题,我们需要修改配置文件,找到syslog区域,添加allowed-ips标签即可
1 2 3 vim /var/ ossec/etc/ ossec.conf <allowed-ips>192.168 .0.0 /16</ allowed-ips>
最后修改效果:
排除所有错误,接下来就是进行启动:
1 2 /var/ ossec/bin/ ossec-control restart/var/ ossec/bin/ list_agents -c
最后查看数据库的报警信息:
1 2 3 4 5 6 7 8 # 进入数据库执行行 mysql -u ossec –possec # 使用指定数据库 use ossec # 查询最近发生的10 条告警SELECT id,server_id,rule_id,level ,timestamp ,location_id,src_ip,dst_ip,src_port,dst_port,alertid,user FROM alert limit 10 ; # 关联的事件分类SELECT rule_id, cat_name from category, signature_category_mapping WHERE rule_id = 1002 AND signature_category_mapping.cat_id = category.cat_id;