「驭龙」开源主机入侵检测系统了解一下

传送门:「驭龙」Linux执行命令监控驱动实现解析

 

0x00 简介

驭龙HIDS是一款由 YSRC 开源的入侵检测系统,由 Agent, Daemon, Server 和 Web 四个部分组成。集异常检测、监控管理为一体,拥有异常行为发现、快速阻断、高级分析等功能,可从多个维度行为信息中发现入侵行为。

简单的讲,驭龙提供了一个OSSEC/OSSIM之外的开源HIDS选择。对于“一个人的安全部/没有钱的安全部”来说,是一个功能更丰富,二次开发门槛更低一些的“轮子”。

除了agent中涉及到驱动的部分是c写的,其他后端、web都是golang写的,天然跨平台。agent支持32位/64位win、linux环境,后端所依赖的Elasticsearch、MongoDB本身也支持多平台,所以后端部署在win、linux皆可。如果只有小几百个agent部署实例,最少单台机器就能支撑。

0x01 功能特点

  • 实时监控、秒级响应
  • 全局首次出现概念,可发现未知威胁
  • 支持自定义规则,高扩展性
  • 高级分析功能,可溯源
  • 全局快速阻断(进程、文件)
  • 威胁情报查询(可自定义接口)

0x02 整体架构

Agent为采集者角色,收集服务器信息、开机启动项、计划任务、监听端口、服务、登录日志、用户列表,实时监控文件操作行为、网络连接、执行命令,初步筛选整理后通过RPC协议传输到Server节点。

Daemon为守护服务进程,为Agent提供进程守护、静默环境部署作用,其任务执行功能通过接收服务端的指令实现Agent热更新、阻断功能和自定义命令执行等,任务传输过程使用RSA进行加密。

Server为整套系统的大脑,支持横向扩展分布式部署,解析用户定义的规则(已内置部分基础规则)对从各Agent接收到的信息和行为进行分析检测和保存,可从各个维度的信息中发现webshell写入行为、异常登录行为、异常网络连接行为、异常命令调用行为等,从而实现对入侵行为实时预警。

架构图

测试演示

0x03 web 控制台

  • 控制台拥有以下功能:统计查看、主机查看管理、数据分析、告警处理、任务推送、规则配置、系统设置。

展示驭龙HIDS的各项数据信息,包括:警报分布、警报信息TOP、警报类型统计、主机数、任务、数据总览等等。

  • 主机列表

    展示当前已部署agent的主机列表,可通过搜索功能和快速标签进行筛选并进行实时监控主机行为和查看关键信息。

  • 主机信息查看
  • 实时监控
  • 数据分析通过此功能可搜索分析查看所有从agent收集到的信息,包括以下:用户列表、服务列表、开机启动项、计划任务、监听端口、登录日志、文件行为、网络连接、执行命令以及统计信息。可对整个企业主机行为信息进行人工分析和入侵行为进行溯源。
  • 警告所有触发规则的记录都会在此显示,通过此面板进行处置,网络连接、进程和文件可在此面板进行全网阻断。
  • 任务可通过此功能对指定主机发送任务指令,包括以下:
  • kill: 结束进程(传入进程名)
  • uninstall: 卸载自身
  • update: agent更新
  • delete: 文件删除(传入文件路径)
  • exec: 自定义命令(这个功能其实比较“危险”,所以对外发布的代码中我们注释掉了。如需启用这个功能,请去掉注释,自行编译agent)
  • reload: 重启agent
  • quit: 结束自身
  • 规则引擎定义告警规则,可通过此面板进行添加、修改、删除、启用、关闭、导出,具体格式可查看规则编写文档。

其他还有些设置相关的,这边就不再贴了。

0x04 规则

具体的规则格式、结构、字段定义请参照Github上的文档。

这里引用职业欠钱前辈写的《大型互联网企业入侵检测实战总结》中关于入侵检测基本原则的描述,在定义规则的时候可以思考一下。

  1. 不能把每一条告警都彻底跟进的模型,等同于无效模型 ——有入侵了再说之前有告警,只是太多了没跟过来/没查彻底,这是马后炮,等同于不具备发现能力;
  2. 我们必须屏蔽一些重复发生的相似的误报告警,以集中精力对每一个告警都闭环掉 —— 这会产生白名单,也就是漏报,因此单个模型的漏报是不可避免的;
  3. 由于任何单模型都会存在漏报,所以我们必须在多个纬度上做多个模型,形成纵深 —— 假设WebShell静态文本分析被黑客变形绕过了,在RASP(运行时环境)的恶意调用还可以监控到,这样可以选择接受单个模型的漏报,但在整体上仍然不漏;
  4. 任何模型都有误报漏报,我们做什么,不做什么,需要考虑的是“性价比” —— 比如某些变形的WebShell可以写成跟业务代码非常相似,人的肉眼几乎无法识别,再追求一定要在文本分析上进行对抗,就是性价比很差的决策,通过RASP的检测方案,其性价比更高一些;
  5. 我们不可能知道黑客所有的攻击手法,也不可能针对每一种手法都建设策略(不具备性价比),但是,针对重点业务,我们可以通过加固的方式,让黑客能攻击的路径极度收敛,仅在关键环节进行对抗(包括加固的有效性检测)可能会让100%的目标变得现实

基于上述几个原则,我们可以知道一个事实,或许,我们永远不可能在单点上做到100分,但是,我们可以通过一些组合方式,让攻击者很难绕过所有的点。

更多细节的介绍以及系统部署、编译步骤、规则编写的文档请参照GitHub  https://github.com/ysrc/yulong-hids

0x05  又及

驭龙项目目前的开源版本已经可以正常使用,基础功能也基本都有了。

但是目前并没有完全开发完毕,这边列了一些 To do:

  • 建立入侵行为case库,自动化重放case模拟测试
  • 机器学习判断可疑行为,作为规则之外的补充
  • 资产盘点,例如识别补丁,应用版本、负责人,各种包/kernel版本…辅以漏洞库,能更快速的应急响应,哪些必须要修,那些不修可以接受
  • 区分通讯模式(主动、被动)
  • 使用消息队列代替RPC
  • 基线核查,没有代码能力的社区成员也可以整理好相关文档,YSRC来实现
  • 幻影蜜罐,agent动态代理蜜罐端口,大规模提升蜜罐覆盖密度
  • 支持多场景(办公环境、Docker),目前驭龙仅适合线上服务器环境
  • 轻量级的linux内核防护,在不升级内核的情况下,免疫一些攻击

除了希望社区在二次开发过程中会回馈一部分代码给上游之外,YSRC这边急需补充一些人手:

渗透测试核心,不限学历,要求无黑产经历,熟悉各种渗透姿势,猥琐流;

资深golang开发,配合安全同事、带领开发同事进行功能及架构迭代;

具体JD就不写了,跟大部分厂商的要求大同小异。

地点base苏州,感兴趣的可以关注公众号后对话或者发送简历至 sec@ly.com

最后,感谢驭龙项目的两位核心开发同事 wolf、nearg1e,贡献了驱动代码的Z000000、mlsm,帮助review驱动代码的 taylor3768,以及对外测试期间提供了协助、反馈及建议的 kingjin、superhuahua、Johnny

你们的贡献在开源社区留下了自己的印记

we salute you~

YSRC 坚持开源不易,git clone 的时候顺手转发一下文章吧

关注公众号后回复 驭龙,加入驭龙讨论群。

(完)