作为一个从乙方转到甲方的安全从业人员,近期,我的观点慢慢从挖掘技术的深度,转变为“解决问题“的模式。漏洞扫描系统作为不可获缺的企业安全建设组件,在平时的工作内容也是占有一席之地。遗憾的是,作为一个小甲方,我们确实没有足够的预算来支撑完全购买优秀的乙方安全产品以构建自己的安全体系。但是万幸“老东家”免费开放了 xray 的使用,同时作为一个公益项目,欢迎广大企业集成。这对我来说简直是新世纪福音。
xray 是一个优秀的低位安全的产品,在企业安全建设过程中的价值在于产生高质量的安全信息以供“大脑“(高位安全产品)进行分析、关联、归档以及决策。本文旨在为企业安全人员提供 xray 落地实践的行之有效的方式,并加深大家对高位/低位安全的认识。
SIEM: 安全信息与实践管理系统,一般作为企业安全“大脑”一样存在,负责分析/处理/运营安全事件。
一般来说 SIEM 最具代表性的商业案例 Splunk 提供了强大的数据分析能力,但是实际在运营过程中,会发现数据接入一般会采用接入安全日志的接入或者使用发送指定的 Schema 发送到 Splunk;SIEM 本质上不是数据源,一般作为数据二次加工工厂,根据数据生成分析结论,或者进行可视化,让运营人员去下结论;这虽然是运营的重要一环,但是也仅仅是一环。
Palm SIEM 是美菜安全研发的一款综合性 SIEM,旨在提供内部安全事件管理的一站式平台,最重要的它不仅是数据分析和二次加工的大脑,同时还具备了数据源的能力和足够的开放性,非常灵活(甚至可以编写脚本)来产生数据源;同时平台的工单体系可以实现运营过程的闭环,真正实现安全事件全生命周期的管理。
作为企业安全中心,我们的 SIEM 承担着:HIDS/节点监控/安全事件风控与审计/报表工单/资产收集/内部数据分享等一系列重要基础功能。
由于平台设计支持动态嵌入式语言与分布式节点提供数据源这种精彩的特性,虽然传统 SIEM 一般只作为数据分析和指令下发的大脑,但是 Palm SIEM 除此之外,却具有了各种“触手”来实现低位安全的功能和难以置信的数据分析能力。
本身平台采用相对成熟的 RabbitMQ AMQP 作为平台通信的协议,在此之上构建了完善的中心服务器与节点服务器的通信和管理协议,具备了常见服务分治系统的特性。也就意味着我们可以通过为 Palm SIEM 增加有特定功能的分布式节点,直接为 Palm SIEM 增加特定数据源;实际上,我们 Palm SIEM 的日志审计和风控功能就是通过一个 LogAgent 来接收内网各种业务系统的日志,通过 RabbitMQ 传输样本日志到平台内部做数据分析。
除此之外,我如果想要集成 IDS/IPS,我就为 Palm SIEM 写一个 IDS/IPS 功能的节点就可以(实际上,我用任何开源产品把它封装为 Palm SIEM 的节点也可以);当然,我可以写一个 Xray 专用节点,这样我们的 Palm SIEM 就理论上拥有了“分布式漏洞扫描“能力。
这可能是 Palm SIEM 最引以为傲的一个超能力,同时也是 xray 的生存土壤,是 xray 获取平台资源和产生漏洞信息源进入系统的入口;同时,由于平台绑定语言的存在,让我们的 SIEM 表现的更像一个具有各种特性的“操作系统”,你在脚本中甚至可以实现:
当然,我可并不是PPT工程师,风控与审计(异步与离线风控/内审)就是本特性落地的最佳实践:
当然,一些常规的资产扫描/定时扫描/监控通知任务,也都是通过这种脚本来进行的;
通常来说, 我见到的实现上述功能的系统, 复杂度相当之高, 研发通常需要辗转各种服务之间调用; 当时这些功能对于我们来说, 只需要一个脚本文件而已;
当大家对 Palm SIEM 核心功能有了一定印象之后,我们就可以着手将 xray 集成进 SIEM 中了!
我们吹牛说我们几十行就可以做到集成 xray, 当然要说到做到: Talk is cheep!
当然你肯定也发现了,这段代码你并没有办法分辨他准确的是一种啥语言:像是 Golang 但是又不像。不用怀疑了,这门语言就是我为 SIEM 平台改造的一个嵌入式语言,原项目(qiniu/qlang)当时源项目很多 Bug 和坑(核心原理是反射),并不可以直接拿来用做嵌入式语言;经过多次修复BUG和特定方向优化之后,我们把 qlang 与 SIEM 进行安全改造和深度整合,使之具有了操作 SIEM 内部各种功能的超强能力;
其实更多的情况是:”我想给这门语言一个xxx的功能“,然后我用 Golang 写好了,随手导出给了这门语言
"神说要有光"
我们简单总结一下上面脚本的具体内容:
当然,整个脚本本身就在一个新的进程中执行,不必担心脚本进程对主进程产生性能影响,一般来说他们会被分配到不同的CPU核上执行;另一方面,脚本进程如果异常了,我们可以毫无顾忌的 Kill 掉他们,而不必担心误杀主进程。
在这一小段代码中,我们发现,xray 是作为一个二进制文件加载在组件中的;
当然内置了 buildin tag 的脚本才可以使用可执行二进制文件;如下图可看到
我们发现了,威胁脚本其实控制了整个任务的执行流程,任何任务的执行,我们只需要写一个脚本就可以执行,我们发现他有如下几个要素
威胁分析脚本就是任务模版,控制整个任务的执行过程和扩展功能,包括
脚本精髓就是把各种恼人的服务,安全地封装成一个尽量的短数据通路;以减小各种研发成本和维护成本,同时给予规则的编写者最大程度的自由和对系统平台的控制权;
在使用脚本创建任务的时候,当然我们可以看到如下表单
下图为使用平台自带的指纹识别和资产收集 + xray 封装的基础爬虫漏扫创建任务的过程
我们发现 xray 相关的任务模版有三种
在界面上点点点之后,我们就成功创建了一个被动扫描的任务
我们打开我们的想要扫描的目标,设置情景模式为 xray,如下配置即可
就可以开心的点点点了
当然在任务日志中,我只是简单打印了一条
其实,如果想要查看详细信息,我们可以直接在 SIEM 的漏洞库查看,或者直接从任务页面进入漏洞分析页面
如果想要看任务状态和日志相关内容,我们可以按如下步骤处理
当然我们发现了,任务的 Actions 有很多很多,诸如
由于篇幅限制,使用本 Palm SIEM 平台进行实时通知,报表生成,DingDing 机器人通知,甚至工单系统等功能来不及介绍;
如果之后有机会再见,我们慢慢来谈更高级的平台使用案例和运营案例;
当然,本文写在这里,自然就要进入尾声了,毕竟我已经完整地告诉大家我是如何“几十行代码”将 xray 封装进真正的企业的安全运营中。
细心的读者也肯定注意到了,xray 集成入 Palm SIEM 仅仅是 Palm SIEM 的冰山一角
从侧边导航栏,我们可以发现 Palm SIEM 的功能不仅包含
甚至还有一些大家觉得写起来很繁琐的但是已经在我们平时工作中证明了非常优秀的功能
1. 后端 Golang
2. 前端 Typescript + React Hooks + Ant design + AntD L7 G2 + BizCharts(可视化)
3. Web 接口:swagger2.0,通过 go-swagger 来生成绝大部分 web (无聊的)业务代码,通过 @manifoldco/swagger-to-ts 生成 typescript 相关 Models
4. 消息中间件:RabbitMQ
5. 数据库:Postgres
与同类(SOC/SIEM)安全产品相比:最大的优势当然是核心脚本引擎的“最短数据通路”与“平台最大权限”
作为一个乙方研发转甲方安全的人,相较于乙方安全产品研发流程,本系统的研发有很多其他的开发过程优势:
1. 我想做的任何功能,都能马上得到用户反馈,至少他是符合当前公司使用习惯的
2. 开发周期的大大缩短,<del>设计</del>前后端同时开工,关键核心功能保证测试,自动化部署运维这些都已经融合在日常开发中
值得再提一嘴另外一个概念:低位安全和高位安全
Palm SIEM 本身不是一个低位安全产品,提供基础的数据采集,数据源生成等本身不是 Palm SIEM 的重点,作为高位安全产品,他的正统作用是使用嵌入式脚本超灵活分析安全数据,把各种低位安全数据整合起来才是他的正统的用法,比如异步/离线风控(行为风控/员工风控);但是由于同时维护各种低位安全产品的成本很高,我决定让 Palm SIEM 也可以拥有这一系列低位安全产品的能力,或者能力接口,比如 xray 的集成。
因此,高位安全和低位安全相结合的 SOC/SIEM 也是本系统的一大特色。