详解OSSIM-OSSEC WIN 4771案例
介绍
OSSIME中的HIDS是通过OSSEC来实现的,OSSEC采用服务端和客户端模式,主要通过文件完整性监视,日志监视,rootcheck和进程监视来主动监视Unix系统活动的所有方面。
OSSIM中服务端已经安装完成,只需要在要监控的主机上安装客户端即可:
ossec http://ossec.github.io/
今天就来看下,怎么一步一步配置4771暴力破解攻击的报警.
储备知识
接收所有日志
因为默认情况下,不是所有的日志都会接收,所以我们首先要打开ossec发送过来的所有日志:
如图操作之后,就可以看到ossec agent所有接收到的日志:
修改完记得要重启hids服务: Environment > Detection > HIDS > HIDS Control.–>Restart.
现在就可以看到所有ossec agent所接受到的日志:
#tail -10f /var/ossec/logs/archives/archives.log
匹配规则和报警
默认Ossec有900多条规则,基本上可以涵盖操作系统的各种异常事件,规则路径/var/ossec/alienvault/rules
如果接收到的日志能被规则所匹配就会产生一条报警:
# tail -10f /var/ossec/logs/alerts/alerts.log
插件ID和 SID
ossim中插件甚多,可分为采集插件和监视插件,每个插件又有ID和SID,插件位置:/etc/ossim/agent/plugins
alienvault:/etc/ossim/agent/plugins# ll-rw-r--r-- 1 root alienvault 5033 Jun 27 2016 actiontec.cfg-rw-r--r-- 1 root alienvault 20029 Nov 29 00:34 aerohive-wap.cfg-rw-r--r-- 1 root alienvault 5736 Jun 16 2015 airlock.cfg-rw-r--r-- 1 root alienvault 1720 Nov 15 00:37 airport-extreme.cfg-rw-r--r-- 1 root alienvault 12580 Sep 20 16:59 aix-audit.cfg-rw-r--r-- 1 root alienvault 744 Jun 16 2015 aladdin.cfg-rw-r--r-- 1 root alienvault 6869 Jul 25 2016 alcatel.cfg-rw-r--r-- 1 root alienvault 12886 Jan 10 23:30 alienvault_plugins.list-rw-r--r-- 1 root alienvault 8812 Jun 16 2015 allot.cfg-rw-r--r-- 1 root alienvault 1064 Jun 16 2015 alteonos.cfg......
比如rule id为18105 对应的插件是:ossec-single-line.cfg
继续在文件中找找翻译关系:
18105=7006
所以这里的plugin_id=700618105 是事件类型id
如图我们看看plugin_id=7085的插件有哪些事件类型id:
关联分析指令
免费的ossim默认只提供了80多个相关的分析指令.
指令地址:/etc/ossim/server
我们自己新建的指令在:
# pwd/etc/ossim/server/abb1c771-e2ce-11e6-9443-1b37c2298626# lsdirectives.xml disabled_directives.data user.xml
点击阅读原文查看一条指令,7085。
4771报警详解
有了刚刚上面的知识储备,就可以开始今天的正题了,首先我们看一下win 4771 事件代表什么?
4771事件:代表在域内的账号在除域控制器意外的任何一台加入域的计算机上登陆产生的登陆失败的日志(有点绕,多读几遍)
接收并查找相关日志
为了找到ossec发送过来的原始4771日志,我们首先需要打开接收所有日志,然后从日志中筛选出有关4771告警的日志:
打开接收所有日志上面的储备知识中已经介绍,这里不再赘述,请按照步骤操作.
到域控制器上部署ossec ,具体步骤请参考 OSSIM-HIDS
在域内的客户机登陆域内的任意账号,查找有关4771的告警日志:
如代码所示,我们已经成功的接收到了有关4771的告警日志
查找匹配的规则和报警
上文提到,ossec提供了900多条规则,大多数的事件是可以被匹配到的,我们现在查找下是否有默认策略匹配到4771事件:
在规则文件目录查找Windows audit failure event.
通过查看告警日志,我们成功的发现了4771已经被规则匹配出来,其实这里被匹配出的4771事件不是使用关键字4771在ossec规则中匹配到的,我们详细看下配置这个4771的规则是/var/ossec/alienvault/rules/msauth_rules.xml文件:
通过查看规则详情,我们发现真正的匹配是<status>^AUDIT_FAILURE|^failure</status>
我们返回的接收的原始日志查看,发现这么一段:
WinEvtLog: Security: AUDIT_FAILURE(4771):
正是由于这个关键字,我们成功的匹配到了4771事件,由于不是直接匹配4771事件,所以会存在一定的误报,毕竟登陆失败的代码还有很多,这里我采用修改其他规则文件来匹配4771事件.
我把18120事件修改成:
<rule id="18120" level="4"> <if_sid>18105</if_sid> <id>^4771$</id> <description>4771-Windows login fail.</description> </rule>
这样就能精确的匹配出4771事件,查看接收到的日志文件:
查找相关插件ID
我们已经把ossec有关报警的sid改成18120了,继续根据18120来查找相关的插件ID是哪个,从而编写出关联分析规则:
进入到插件目录,我们搜索18120,发现是存在这个插件中ossec-single-line.cfg,我们找到具体的规则:
18120=7006
所以这里的plugin_id=7006
18120 是事件类型id
至此,我们编写关联分析指令的所有信息都具备了,下面开始编写关联分析指令:
编写关联分析指令
具体的知识,请回顾2.4 关联分析指令,我们新建指令:
这里填写上NAME,INTENT,STRATEGY,METHOD即可,如图:
这里着重介绍下 PRIORITY的含义:PRIORITY:优先级,取值为0-5 ,表示如果这个攻击成功了,对系统所造成的影响程度,数值越高,危害就越大,本例来说没必要用4 ,这里要根据实际情况进行选择,这里我用4是为了突出实验效果..
点击SAVE之后,填写规则的名称,这里写个你能看懂的就行:
接下来就是用到我们上文提到的插件ID了,前文得之我们需要用7006
,这里直接搜索即可,然后选中:
然后选择事件类型ID,就是上文提到的 18120,查找填入即可.
接下来就是选择源了,因为这是策略的顶层,所以是接收任何ip,也就是any,直接下一步即可:
这里还要学习几个概念:Risk:取值范围(1-10),这里表示事件的风险值,值越高越要引起重视.计算方法下图已经给出了:Risk = (priority * reliability * asset_value) / 25.
至此我们已经完成一个指令的最上层了,继续重复上面的步骤建立下层:
最后,制造一些登录错误信息,查看报警:
ossim新手,如有错误,还请指正,欢迎交流~
- go http 服务器编程(1)
- Linux系统内存监控、性能诊断工具vmstat命令详解
- go http 服务器编程(2)
- 利用placeholder属性来添加输入框默认文字提示,提高用户体验
- Linux系统监控、诊断工具之top命令详解
- 【Dev Club分享】iOS黑客技术大揭秘
- Linux终端:用cat命令查看不可见字符
- golang 函数定义及其接口实例
- 分享两种圣诞节雪花特效JS代码(网站下雪效果)
- React 移动 web 极致优化
- golang 高效字符串拼接
- Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程
- golang 使用时间通过md5生成token
- golang中对map操作类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android Studio无法运行程序调试程序出现Unable to connect to ADB.Check the Event Log for possible issues.Verify th
- MySQL 中的 DML 语句执行流程,你理解的跟我一样吗?
- Android SharedPreferences的使用
- 【DB笔试面试846】在Oracle中,TWO_TASK环境变量的作用是什么?
- 分治策略之归并排序(Python实现)
- 分治策略之最大子数组(Python实现)
- 如何利用Gitlab-CI持续部署到远程机器?
- 动态规划之钢条切割问题:自顶向下(Python实现)
- 动态规划之钢条切割问题:自低向上(Python实现)
- Docker中安装Centos7操作系统
- 机器重启后 docker 容器启动报错 error creating overlay mount to
- 如何使用地图开发相应的产品
- 「2020最新」Spring最易学习教程—IOC 以及 整合Struts2
- SAAS| AbstractRoutingDataSource
- 【DB笔试面试847】在Oracle Windows中,错误“ORA-12560: TNS: 协议适配器错误”的常见原因有哪些?