OSSEC是一个开源的入侵检测系统,它可以执行LOG分析,完整性检测
,windows注册表监控,rootkit检测,实时报警及动态响影。
Syscheck是OSSEC内部完整性检测进程的名称。它周期性检查是否有任何配置文件(或者windows注册表)发生改变。
在网络中有许多类型的攻击和攻击载体,说起这些攻击,有一种攻击是很特别的,他们留下一个跟踪程序,并总是想尽方法改变这个系统。它们用病毒修改一些文件,并破坏系统的完整性。
完整性检查是入侵检测系统的一个重要组成部分。当系统的完整性被改变时它能够通过比较文件的MD5校验各发现。
它的工作方法是:“代理每几个小时扫描一次系统,并发送所有的校验和到
server端。Server端存储这些校验和文件并查找他们的不同。如果发现任何改变将会发送报警。
配置文件位于 /var/ossec/etc/ossec.conf。
使用这个选项增加或者移除被监控的目录(目录这间用逗号分开)所有的文件和子目录也会被监控。没有目录的驱动器字母是无效的。至少“。”应包括(D:.)。
默认:/etc,/sur/bin,/usr/sbin,/bin,/sbin
提供一个要被监控的目录和文件列表,check_all 选项会检查文件的md5, sha1,owner,和权限。例如:
<syscheck>
<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes">/root/users.txt,/bsd,/root/db.html</directories>
</syscheck>
如果不想监控某些文件和目录,可以用ignore选项(或者 registry_ignore 为windows注册表输入)
<syscheck>
<ignore>/etc/random-seed</ignore>
<ignore>/root/dir</ignore>
<ignore type="sregex">.log$|.tmp</ignore>
</syscheck>
在ignore选项,这个类型属性可以设置sregex指定一个正则表达式语法。
<syscheck>
<ignore type="sregex">^/opt/application/log</ignore>
</syscheck>
一个本地规则可以更严格的修改你想要更改的指定文件和目录。
<rule id="100345" level="12">
<if_matched_group>syscheck</if_matched_group>
<match>/var/www/htdocs</match>
<description>Changes to /var/www/htdocs - Critical file!</description>
</rule>
在上边的例子中,当htdocs directory目录中的文件有改变时将会产生一个高严重级别的报警。
实时监控:
在linux 和windows中OSSEC支持实时监控文件完整性检查(linux内核2.6.13以上板本支持)
配置很简单,在directories选项那里你可以指定要监控那些文件和目录,增加realtime=”yes”到启用。
<syscheck>
<directories realtime="yes" check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes">/bin,/sbin</directories>
</syscheck>
在这个例子中,目录/etc, /usr/bin and /usr/sbin会被实时监控,同样的方法也实用与windows。
提示:实时监控并不会立即开始。首先ossec-syscheckd需要扫描文件系统并添加每一个了目录到实时队列。要完成这些工作需要30分钟时间。
等待log文件出现如下信息:
“ossec-syscheckd: INFO: Starting real time file monitoring”
注解:实时监控仅对目录有效,所以你可以监控 /etc 或者c:\program files 目录,但不能是个别的文件,像/etc/file.txt。
比较不同并生成报告:
在linux 和unix系统比较所后的改变生成一个文本文件,OSSEC支持发送比较报告,
配置syscheck显示文件比较的不同很简单,添加report_changes=”yse”到directories选项。
<syscheck>
<directories report_changes="yes" check_all="yes">/etc</directories>
<directories check_all="yes">/bin,/sbin</directories>
</syscheck>
怎样使syscheck立即开始扫描系统?
运行代理控制工具使其立即开始完整性扫描(-a 选项使所有代理开始运行,-u选项可以指定某个代理ID。
# /var/ossec/bin/agent_control -r -a
# /var/ossec/bin/agent_control -r -u <agent_id>
代理控制参数选项:
-h 显示帮助消息
-l 列出所有可能的代理
-lc 列出活动的代理
-i <agent_id> 获取代理的相关信息 agent_id
-r 运行代理中的integrity/rootcheck检查,要和-u或-a 一起使用。
-a 对所有代理起做用
-u <agent_id> <agent_id>预先指定代理ID号
当启动ossec时,告诉syscheck不要对系统进行扫描:
在ossec.conf中指定 选项为“no”。
怎么从syscheck中排除一个频繁更改的文件?
在选项设定要排除的目录文件,或者创建一个简单的本地规则。
下面的这个例子将从mswin1和ubuntu-dns代理中排除etc/a , /etc/b 和一个目录 /etc/dir。
<rule id="100345" level="0" >
<if_group>syscheck</if_group>
<description>Changes ignored.</description>
<match>/etc/a|/etc/b|/etc/dir</match>
<hostname>mswin1|ubuntu-dns</hostname>
</rule>
在检测到数据据改变后怎么获取详细的报告?
Syscheck_control工具
Syscheck_control提供了一个管理和查看数据库的接口。
Syscheck_control参数选项
-h 显示帮助消息
-l 列出可用的代理
-lc 列出当前活动的代理
-u <agent_id> 更新(清除)指定代理的数据库,
-u all 更新(清除)所有代理的数据库,
-i <agent_id> 列出指定代理的数据库
-r –i 列出windows代理 中注册表改变的数据
-f <file> 用 –i 参数, 列印一个关与修改文件的信息。
-z
-d 用 –f 参数,忽略该文件
-s 输出到CVS
OSSEC HIDS会在每个安装了代理的系统运行rootkit检测。Rootkit发现引擎每过120分钟会去探测任何可能已经安装的rootkit.. 和log分析及安全性检测一起使用,OSSEC HIDS将是一个强有力的监控解决方案。
读这个rootkit_files.txt文件,其中包含了常被它们使的用文件和rootkits的基本数据。它将统计每一个指定的文件。我们使用所有这些系统调用中,有一些kernel_level级别的rootkits从系统调用隐藏了一些文件。我们偿试更多的系统调用到更好的发现。这种方法更像需要不断更新的返病毒规则。误报的机会是非常的小,但是可以通过修改rootkits生成假的否定。
读这个rootkit_trojans.tst文件,内含了一个用特洛伊文件签名的基本数据。这种用特洛伊板本
修改二进制的技术过去常常被流行的tootkits使用。
扫描/dev目录查找异常。这个目录应该只有设备文件和makedev 脚本。很多rootkits使用这个目录隐藏文件,这和技术能发现非公有的rootkits。
扫描整个系统文件查找不正常的文件和权限问题。Root用户拥有文件的写权限,给其它人是非常危险的。Rootkit发现会查找它们,隐藏的文件和目录出会被检查。
查找存在的隐藏进程,我们使用获取SID并杀死SID检查,是否有任何PID被使用。如果PID被使用,但PS不能看到它,说明它是kernel-level级别的rootkit或者是特洛伊板本的PS.我们也会验证获取的SID和kill输出的是否相同。
查找隐藏的端口。我们使用绑定端口的方式检查在系统中的每一个TCP、UDP端口。如果我们不能绑定这个端口,但是netstat不能显示它,很可能系统中装了roottkit。
扫描在系统中的所有接口,找出启用杂乱模式的接口,如果IFCONFIG输出不能显示它, 很可能系统中装了roottkit。
这些配置选项可以在每个代理的ossec.conf文件中指定。除去server端的选项
auto_ignore 和alert_new_file,如果ignore是在sever端设置,所有代理将会使用相同的设置。
Base_directory 这个基本目录将会增加下面的选项。
允许:默认目录路径:/var/ossec
Rootkit_files (这个选项可以更改tootkit数据库文件的位置。)
Allowed: 带有rootkit文件签名的一个文件
Default:/etc/shared/rootkit_files.txt
Rootkit_trojans (这个选项可以更改tootkit trojans数据库文件的位置。)
Allowed: 带有TROJANS签名的一个文件
Default:/etc/shared/rootkit_trojans.txt
scanall (告诉 rootcheck 扫描整个系统 (可能会误报)。)
Default: no
Allowed: yes/no
frequency (多长时间运行一次)
Defaults: 36000 (10 hours)
Allowed: Time (in seconds)
disabled (禁用rootcheck执行)
Default: no
Allowed: yes/no
在OSSEC内部有log收集和log分析进程,日志分析过程中,首先要收集log,然后对日志进行分析(解码,过虑,分类)。
一有事件写入OSSEC立即会处理它们。OSSEC能读内部日志文件,windows日志事件,和直接通过远程系统接收的日志。
程序监控
系统LOG是个好东西,在OSSEC中,我们把需要监控的目标当成一个日志来看,并用适当的规则分析它。然而,有一些信息在日志文件中没有,但是我们还是想监控它。要解决这个缺陷,我们需要在OSSEC中增加监控命令输出的功能,并且处理这些命令输出的。 它们像log文件一样。
配置实例:
监控磁盘空间利用率的一个例子
如果想要监控磁盘空间利用率,你需要设置一个crom任务,使命令df –h 的输出保存到一个log文件(/var/log/df.log)并且配置OSSEC查看它。
至OSSEC 2.3版本起,你可以在OSSEC中直接监控命令。配置如下:
<localfile>
<log_format>command</log_format>
<command>df -h</command>
</localfile>
在OSSEC中我们已经有了一个规则样本(为处理df –h 输出),当任何分区达到100%你将能看到下面的输出。
** Alert 1257451341.28290: mail - ossec,low_diskspace,
2009 Nov 05 16:02:21 (home-ubuntu) 192.168.0.0->df -h
Rule: 531 (level 7) -> "Partition usage reached 100% (disk space monitor)."
Src IP: (none)
User: (none)
ossec: output: "df -h": /dev/sdb1 24G 12G 11G 100% /var/backup
C中我们已经有了一个规则样本(为处理df –h 输出),当任何分区达到100%你将能看到下面的输出。
监控平均负载的一个例子。
如果你想要监控系统的平均负载,你可以配置OSSEC监控“update”命令,并当值高于2时报警。
<localfile>
<log_format>command</log_format>
<command>uptime</command>
</localfile>
增加一个规则
<rule id="100101" level="7" ignore="7200">
<if_sid>530</if_sid>
<match>ossec: output: "uptime": </match>
<regex>load averages: 2.</regex>
<description>Load average reached 2..</description>
</rule>
当一个命令的输出改变时报警
如果你想要在一个命令的输出发生改变时报警,在OSSEC规则中查看(check_diff)选项。 用一个例子来说明:当我们的server在监听模式有一个新的端口被打开,创建一个规则使其报警。
首先,在ossec.conf文件中,我们配置OSSEC运行netstat -tan |grep LISTEN命令。
<localfile>
<log_format>full_command</log_format>
<command>netstat -tan |grep LISTEN|grep -v 127.0.0.1</command>
</localfile>
而后,增加一个规则,当输出改变的时候报警。
<rule id="140123" level="7">
<if_sid>530</if_sid>
<match>ossec: output: 'netstat -tan |grep LISTEN</match>
<check_diff />
<description>Listened ports have changed.</description>
</rule>
注意我们使用的check_diff选项,第一次收到信息将存储在内部数据库。每次收到相同的数据,都和先前存储的数据进行比较,如果输出改变生成报警信息。
在这个例子中,我们用netcat工具连接23456端口,我们能得到如下报警信息。
OSSEC HIDS Notification.
2010 Mar 11 19:56:30
Received From: XYZ->netstat -tan |grep LISTEN|grep -v 127.0.0.1
Rule: 140123 fired (level 7) -> "Listened ports have changed."
Portion of the log(s):
ossec: output: 'netstat -tan |grep LISTEN|grep -v 127.0.0.1':
tcp4 0 0 *.23456 *.* LISTEN
tcp4 0 0 *.3306 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
Previous output:
ossec: output: 'netstat -tan |grep LISTEN|grep -v 127.0.0.1':
tcp4 0 0 *.3306 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
OSSEC有一个名为OSSEC- logcollector的监控新的事件日志文件的进程,并将其转发给其他进程进行分析。 OSSEC- logcollector的配置是在/ var / ossec/ etc/ossec.conf。 配置实例
配置要监视的日志文件很简单。只要提供要监视的文件的名称和格式:
配置要监控的日志文件很简单。仅需要提供要监控的文件的名称和格式:
<localfile>
<location>/var/log/messages</location>
<log_format>syslog</log_format>
</localfile>
监控windows 事件日志的例子
要监控Windows事件日志,您需要提供的格式为“eventlog”并且位置是事件日志的名称。示例:
<localfile>
<location>Security</location>
<log_format>eventlog</log_format>
</localfile>
监控多个文件的例子
要检查多个文件,OSSEC支持POSIX正则表达式。
例如,要分析/var/ log目录下以a.log结尾的文件,使用以下配置:
<localfile>
<location>/var/log/*.log</location>
<log_format>syslog</log_format>
</localfile>
监控以日期命名的日志文件
对于日志文件,根据日期改变,你也可以指定strftime的格式,以取代日,月,年等。例如监控日志C:\ WINDOWS\ APP\ LOG-08-12 -15日志,其中08是年,12是月份,15是天(并且日期每天更新)
<localfile>
<location>C:\Windows\app\log-%y-%m-%d.log</location>
<log_format>syslog</log_format>
</localfile>
ossec主要功能暂且介绍这么多,更多请参照:http://www.ossec.net/doc/