OSSEC主要通过日志监控,分析;syscheck(完整性监控)以及rootcheck三个大方向来进行入侵检测。
1.syscheck(完整性监控)
ossec提供了一套完整性监控系统,系统通过读取用户设定的配置文件,遍历要求完整性监控的文件,把这些文件保存到其自身的数据库里面,过滤用户设定的不需要监控的项,记录文件,文件属性,计算出的md5值,sha1值等。若存在高机密文件,如密码本等,可以选择只保存属性及hash值即nodiff项。
系统设定周期扫描值,每次重新检查文件属性,hash值,若出现变化,将信息输出到服务器或者本地日志,ossec提供一套队列消息处理系统,供日志监控,分析机制去处理。
服务器根据汇报的变化情况可以选择查看文件变化情况,syscheck提供了一套系统去将变化后的文件与原始文件进行比对然后反馈给管理员。若是上面使用nodiff项,则这个功能对这个文件项无效。
默认监控的文件项:
/etc /usr/bin /usr/sbin /bin /sbin
默认忽视项:
/etc/mtab /etc/hosts.deny /etc/mail/statistics /etc/random-seed /etc/adjtime /etc/httpd/logs
2. rootcheck
1.读取包含由它们常用rootkits和文件的数据库的rootkit_files.txt。它会尝试的统计,fopen每个执行opendir指定的文件。我们使用所有这些系统调用,因为一些内核级的Rootkit隐藏在一些系统调用的文件中。尝试更多的系统调用,会得到更好的检测。这更像一个需要不断更新的防病毒规则。
2.读取包含由rootkit生成的特洛伊木马程序文件的签名数据库的rootkit_trojans.txt。使用木马库版本修改二进制这种技术通常被大多数现有流行的rootkit的使用。这种检测方法不会找到任何内核级Rootkit或任何未知的rootkit。
3.扫描寻找异常/ dev目录。在/ dev应该只有设备文件和脚本MAKEDEV。大量的rootkit的使用/ dev下隐藏文件。该技术可以检测到甚至是非公开的rootkit。
4.扫描整个文件系统寻找不同寻常的文件和权限问题。文件属于root,但是别人具有写权限的文件是非常危险的,而rootkit检测会寻找他们。 SUID的文件,隐藏的目录和文件也将被检查。
5.寻找隐藏进程的存在。ossec使用GETSID()和kill(),以检查是否正在使用PID。如果正在使用的PID,但“PS”不能看到它,呢么它是内核级的rootkit或者是某个木马版本免疫’ps’。同样还需要确认kill和GETSID的输出是相同的。
6.寻找隐藏端口的存在。我们使用bind()来检查系统上的每个TCP和UDP端口。如果我们不能绑定端口(它被使用),但netstat的不表现出来,我们可能已经被安装了一个rootkit
7.扫描系统上的所有接口,并查找启用“PROMISC”模式的接口。如果接口处于混杂模式,呢么使用“ifconfig”应该可以显示。如果没有,我们可能已经被安装了一个rootkit。
所有检查到的文件会汇总给分析器进行报警处理。
3.Log monitoring/analysis(日志监控分析)
主系统运行日志监控分析,以及处理队列中来自其它组建产生的消息。对于日志,消息信息,其处理方式如下:
1、日志预解码(解码文件在decode. xml中):
目的,从日志中提取一般的信息。
例如,从系统日志头中获取主机名,程序名和时间等等。
条件,日志必须格式良好。
2、日志解码:日志解码是利用正则表达式匹配出某些关键字,包括主机名、来源ip、日志信息等;
3、日志分析:日志分析主要是拿这些解码后的日志去匹配ossec rule *.xml中的规则,如果匹配则
会触发,则寻找相对应的处理,报警等。
ossec提供的解码方式覆盖了基本所有的日志格式,其目录是/ossec/etc/decode.xml
ossec rule *.xml中的规则是一个有权深度搜索树状结构,其规则树放在其数据库中,依据解码获得条目去匹配,从优先级(id)较小的项开始匹配,匹配成功则向下匹配。每一层依据优先级只匹配一次,根据最后一个匹配到的节点及优先级给出处理措施如报警等。规则文件目录在/ossec/etc/rules