OSSEC主要功能及原理+详细配置+日志文件分析

作者:谭丙章 E-mail:feifengwind@163.com
OSSEC主要功能及原理
OSSEC属于基于主机和应用的入侵检测系统,通过监视企业重要服务器和各种应用以避免企业资源被攻击、滥用和误用。把基于主机和基于应用的入侵检测系统分成了两大类,不过在实际环境中,往往会将二者结合在一起使用。黑客对主机进行侵入时,往往会同时攻击操作系统和应用服务上的漏洞。OSSEC是一个非常典型的主机型入侵检 测系统,我们可以通过了解它的体系结构与工作原理来了解这一类型的入侵检测技术。 OSSEC是一款开源的多平台的入侵检测系统,可以运行于Windows, Linux, OpenBSD/FreeBSD, 以及 MacOS等操作系统中。包括了日志分析,全面检测,rook-kit检测。作为一款HIDS,OSSEC应该被安装在一台实施监控的系统中。另外有时候不需要安装完全版本得OSSEC,如果有多台电脑都安装了OSSEC,那么就可以采用客户端/服务器模式来运行。客户机通过客户端程序将数据发回到服务器端进行分析。在一台电脑上对多个系统进行监控对于企业或者家庭用户来说都是相当经济实用的。主要功能有日志分析、完整性检查、rootkit检测、基于时间的警报和主动响应。除了具有入侵检测系统功能外,它还一般被用在SEM/SIM(安全事件管理(SEM: Security Event Management)/安全信息管理(SIM:SecurityInformation Management))解决方案中。因其强大的日志分析引擎,ISP(Internet service provider)(网络服务提供商)、大学和数据中心用其监控和分析他们的防火墙、入侵检测系统、网页服务和验证等产生的日志。OSSEC的逻辑结构如下图。
OSSEC工作原理
Administrator。是一个Unix和linux平台下的命令行的用户接口(GUI),主 要起管理维护作用,对OSSEC的大部分管理、配置工作都在这里进行。它的主要作用为建立和断开和Manager的连接、组织和配置代理(Agent)、 创建和管理各种类型策略、管理OSSEC 用户和用户优先级、在需要的时候更新Manager的许可证优先级等等。 Event Viewer。这是一个单独的Unix、linux平台下的图形化用户界面,用于查看从 Agent中获取的各种事件数据,也就是报警的窗口。这是OSSEC比较独特的一点。一般来说入侵检测系统的管理配置与事件查看功能会结合在一起,用户在看到事件查看模块中的报警后,可以利用管理配置模块来进行策略的调配或者采取其他行动。OSSEC这种分开的做法是出于对管理员职责划分的考虑,在某些企业里可能会把安全管理员分为不同的级别,级别高的管理员可以做所有的事情,而级别低的管理员只允许进行日常的状态与安全情况的监护,但不能实际采取操作去处理问题,他必须向上汇报情况,由上级管理员来处理。这时一个只能显示报警而不能进行实际策略的更改的Event Viewer就比较合适了。
Manager。是一个运行在后台的应用软件,Manager没有图形化界面,其主要功能是维护与所有注册代理(Agent)的安全通讯维护域的主列表和把相应的策略分发到每一个代理(Agent);把有关域和策略的变化通知给相应的代理 (Agent);接收和存储来自于代理的事件数据;作为OSSEC Administrator、OSSEC Event Viewer和Agent之间通讯的桥梁,维护策略列表和所属域。
Agent(代理)。主要起如下作用:监视时间收集器;在发现攻击时,执行相应的动作如通知用户、发 送E-mail、通知管理员、终止会话、关闭机器等。从Manager中接受安全升级(Security Update)。建立与Manager的安全连接,同时加密数据以便数据可以在网络中安全传送。OSSEC代理被安装在服务器或工作站中,这些代理可以监视该系统中的所有行为,包括和操作系统的交互通信以及特定的应用,从而可以主动保护企业资源和业务免受非法使用和破坏。
其工作原理可以很形象地用如下流程描述:
OSSEC linux(server) windows(agent)详细配置
ossec官方网站:http://www.ossec.net/ ossec帮助文档:http://ossec-docs.readthedocs.org/en/latest/manual/index.html
介绍
SSEC是一款开源的多平台的入侵检测系统,可以运行于Windows, Linux, OpenBSD/FreeBSD, 以及 MacOS等操作系统中。包括了日志分析,全面检测,root-kit检测,政策监控,实时报警和积极响应。
现在已经有新版本Latest Stable Release (2.8.3) 下载地址:http://ossec.github.io/downloads.html
部署
Ossec部署方式为C/S,以下server:192.168.1.16 agent:192.168.1.19 linux系统为最新版centos7 windows系统为windows8.1
服务器安装及配置
服务器ip:192.168.1.16
由于centos7自带的SElinux会拦截,阻止太多的东西,避免麻烦,这里 我们把SElinux关闭! geidt /etc/selinux/config 编辑/etc/selinux/config,找到SELINUX 行修改成为:SELINUX=disabled 然后重新启动。
我们需要开启80端口,CentOS 7.0默认使用的是firewall作为防火墙,这里我们把centos7的防火墙换成iptables 关闭firewall: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 安装iptables防火墙 yum install iptables-services #安装 gedit /etc/sysconfig/iptables #编辑防火墙配置文件 原文件清空,复制粘贴保存: # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT -A INPUT -m state –state NEW -m udp -p udp –dport 514 -j ACCEPT -A INPUT -m state –state NEW -m udp -p udp –dport 1514 -j ACCEPT -A INPUT -j REJECT –reject-with icmp-host-prohibited -A FORWARD -j REJECT –reject-with icmp-host-prohibited COMMIT 因为ossec通信是用udp 514,1514端口(可以用命令:# netstat -unlp|grep ossec 查看)所以加了下面这两句 -A INPUT -m state –state NEW -m udp -p udp –dport 514 -j ACCEPT -A INPUT -m state –state NEW -m udp -p udp –dport 1514 -j ACCEPT
好了,iptables配置好了,现在,我们开启iptables: systemctl restart iptables.service #最后重启防火墙使配置生效 systemctl enable iptables.service #设置防火墙开机启动
防火墙开启成功,我们来接着安装一些必要的工具: yum install gcc gcc-c++ vim wget lrzsz ntpdate sysstat dstat wget unzip -y 安装mysql数据库,appach,php: yum install mysql mysql-server mysql-devel httpd php php-mysql –y 我们把从官网下载下来的ossec-hids-2.8.3.tar.gz解压: tar -xzf ossec-hids-2.8.3.tar.gz cd ossec-hids-2.8 cd src/ make setdb #使其支持mysql数据库 接下来提示: Error: PostgreSQL client libraries notinstalled. Info: Compiled with MySQL support. #ossec支持mysql数据库 cd ../ ./install.sh 下面是安装过程: cn #选择语言 Enter #继续 Server #安装为server /var/ossec #安装目录 - Do you want e-mail notification? (y/n)[y]: y - What’s your e-mail address? Your_mail@163.com - What’s your SMTP server ip/host? 127.0.0.1 Enter # Running syscheck (integrity check daemon) Enter # Running rootcheck (rootkit detection) Enter #Active response enabled Enter # firewall-drop enabled (local) for levels >= 6 Do you want to add more IPs to the whitelist? (y/n)? [n]: y #设置ip白名单 -IPs (space separated):#把客户端和服务端的ip都加上去 3.5- Do you want to enable remote syslog(port 514 udp)? (y/n) [y]:Enter Enter #开始安装
安装完毕,下面我们来配置 使oosec支持mysql,并建立mysql表: /var/ossec/bin/ossec-control enable database service mysqld start /usr/bin/mysql_secure_installation mysql -uroot -p mysql> create database ossec; mysql> grant INSERT,SELECT,UPDATE,CREATE,DELETE,EXECUTE on ossec.* to ossec@localhost identified by 'ossec'; mysql> flush privileges; mysql> \q
mysql -uossec -p ossec < src/os_dbd/mysql.schema
Enter password: gedit /usr/local/ossec/etc/ossec.conf #在最后添加
/var/ossec/bin/ossec-control restart
此时,邮箱已经收到邮件了。
添加agent客户端
/var/ossec/bin/manage_agents 下面依次: A #add Please provide the following: *A name for the new agent: agent1 *The IP Address of the new agent: 192.168.1.19 #agent端的ip地址 *An ID for the new agent[001]: 001 Agent information: ID:001 Name:agent1 IPAddress:192.168.1.19 Confirm adding it?(y/n): y Agent added.
然后Enter后 又继续: Choose your action: A,E,L,R or Q: E Available agents: ID: 001, Name: agent1, IP: 192.168.1.19 Provide the ID of the agent to extract thekey (or ‘\q’ to quit): 001 Agent key information for ‘001’ is: #复制这个秘钥,客户端需要
然后Enter后输入Q退出
客户端配置
这里我们配置的客户端是在windows上的: 下载客户端exe: https://bintray.com/artifact/download/ossec/ossec-hids/ossec-agent-win32-2.8.3.exe 然后默认安装 注意:运行时要以管理员权限运行,即以Administrator运行 首先到安装目录下运行manage_agents.exe 输入你的服务器IP,我这里是:192.168.1.16 然后粘贴你复制下来的秘钥
再运行win32ui.exe
点击View config 在
安装web界面
ossec-wui界面
cd /var/www unzip ossec-wui-master.zip mv ossec-wui-master html/ossec cd html/ossec/ ./setup.sh Setting up ossec ui…
Username: ossec New password: Re-type new password: Adding password for user ossec Enter your web server user name (e.g.apache, www, nobody, www-data, …) apache Enter your OSSEC install directory path(e.g. /var/ossec) /var/ossec You must restart your web server after thissetup is done.
Setup completed successfuly. gedit /etc/httpd/conf.d/ossec.conf
Alias /ossec/ "/var/www/html/ossec/"
Order deny,allow
Deny from all
Allow from 192.168.1.0/24
Options FollowSymLinks #外网访问配置,把上面注释或删除
AllowOverride None #外网访问配置
Order deny,allow #外网访问配置
allow from all #外网访问配置
Options -MultiViews
AuthName "OSSEC AUTH"
AuthType Basic
AuthUserFile /var/www/html/ossec/.htpasswd
Require valid-user
保存退出。 chown apache:apache * service httpd restart
analogi界面
cd /var/www/html wget https://github.com/ECSC/analogi/archive/master.zip unzip master.zip mv analogi-master ossec/analogi chown apache.apache -R ossec cd ossec/analogi cp db_ossec.php.new db_ossec.php
gedit db_ossec.php
define ('DB_USER_O', 'ossec');
define ('DB_PASSWORD_O', 'ossec');
define ('DB_HOST_O', 'localhost');
define ('DB_NAME_O', 'ossec');
gedit /etc/httpd/conf.d/analogi.conf
Alias /analogi/ "/var/www/html/ossec/analogi/"
Order deny,allow
Deny from all
Allow from 192.168.1.0/24
Options FollowSymLinks #外网访问配置,把上面注释或删除
AllowOverride None #外网访问配置
Order deny,allow #外网访问配置
allow from all #外网访问配置
service httpd restart
查看状态信息
/var/ossec/bin/agent_control -lc OSSEC HIDS agent_control. List of availableagents: ID: 000, Name: localhost.localdomain (server), IP: 127.0.0.1,Active/Local ID: 001, Name: agent1, IP: 192.168.22.241, Active /var/ossec/bin/list_agents -a agent1-192.168.1.19 is available. /var/ossec/bin/ossec-control status ossec-monitord is running… ossec-logcollector is running… ossec-remoted is running… ossec-syscheckd is running… ossec-analysisd is running… ossec-maild is running… ossec-execd is running… ossec-dbd is running…
OSSEC的图形界面
analogi图形界面
OSSEC收集的日志文件分析
这里以windows8.1为客户端为例。centos7为服务端 ossec日志文件目录:/var/ossec/logs/alerts/alerts.log windows安全日志文件:%systemroot%/system32/config/SecEvent.EVT windows系统日志文件:%systemroot%/system32/config/SysEvent.EVT windows应用程序日志文件:%systemroot%/system32/config/AppEvent.EVT
那么,分析OSSEC收集的日志文件前,先来分析Windows的日志文件
windows日志文件分析
先看一个例子:
- System
- Provider
[ Name] Microsoft-Windows-Security-Auditing
[ Guid] {54849625-5478-4994-A5BA-3E3B0328C30D}
EventID 4672
Version 0
Level 0
Task 12548
Opcode 0
Keywords 0x8020000000000000
- TimeCreated
[ SystemTime] 2016-07-29T13:13:37.042176800Z
EventRecordID 46680
Correlation
- Execution
[ ProcessID] 736
[ ThreadID] 20656
Channel Security
Computer lenovo-pc
Security
- EventData
SubjectUserSid S-1-5-18
SubjectUserName SYSTEM
SubjectDomainName NT AUTHORITY
SubjectLogonId 0x3e7
PrivilegeList SeAssignPrimaryTokenPrivilege
SeTcbPrivilege SeSecurityPrivilege
SeTakeOwnershipPrivilege SeLoadDriverPrivilege
SeBackupPrivilege SeRestorePrivilege SeDebugPrivilege
SeAuditPrivilege SeSystemEnvironmentPrivilege
SeImpersonatePrivilege
字段分析: System(日志名称) Provider:来源 EventID:事件ID Version:版本 Level:级别 Task:任务类别 Keywords:关键字 TimeCreated:创建时间 SystemTime:系统时间 EventRecordID: Correlation: Execution: Channel: Computer:电脑 Security:安全 UserID:用户ID EventData:事件描述。 SubjectUserSid:账户ID SubjectUserName:账户名 SubjectDomainName:账户域 SubjectLogonId:登录 ID PrivilegeList:特权
具体的可以通过windows的事件查看器查看,将详细信息复制为文本可得到中文版日志。
OSSEC的alerts.log日志文件分析
同样,先看一个例子:
** Alert 1469594165.3684: - windows,
2016 Jul 27 12:36:05 (agent2) 192.168.1.0->WinEvtLog
Rule: 18149 (level 3) -> 'Windows User Logoff.'
User: lenovo
2016 Jul 26 21:57:29 WinEvtLog: Security:
AUDIT_SUCCESS(4647): Microsoft-Windows-Security-
Auditing: lenovo: lenovo-pc: lenovo-pc: User initiated
logoff: Subject: Security ID:
S-1-5-21-253721302-2314373899-4153707874-1001 Account
Name: lenovo Account Domain: lenovo-pc Logon ID:
0xa0522ec This event is generated when a logoff is
initiated but the token reference count is not zero
and the logon session cannot be destroyed. No further
user-initiated activity can occur. This event can be
interpreted as a logoff event.
日志格式为:
**Alert xxxxxxxxxx.xxxx: - windows(来源)
事件产生的时间 事件产生的位置
Rule(规则):xxxxx(level x)[事件等级]->事件概述
User(用户):xxx
日志记录时间 安全事件(事件ID):
事件来源:用户:计算机:事件描述
使用者:
安全ID: 账户名:
账户域: 登陆ID:
事件描述:
对比上面可知,OSSEC收集了来自windows客户端日志的: TimeCreated(创建时间) Provider(来源) EventRecordID(事件ID) Channel EventData(事件描述) Computer(计算机) SubjectUserName(账户名) SubjectDomainName(账户域) SubjectLogonId(登录 ID)
如何辨别是客户端产生的日志还是服务器本地产生的日志?
例子:
** Alert 1469594242.9608: mail - syslog,errors
2016 Jul 27 12:37:22 localhost->/var/log/messages
上面是截取的前两段,通过分析前两段可知是服务器产生的日志还是客户端产生的日志。 一是看** Alert 1469594242.9608: mail - syslog,errors 数字:后面的这部分,如果客户端有windows,日志是客户端产生的,那么后面将会出现windows的字眼; 二是看第二排时间后面的那部分,localhost(或者127.0.0.1)代表是服务器本地产生的日志,如果是客户端产生的日志,那么这里是客户端的IP。