前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >还在为告警筛选而发愁吗?

还在为告警筛选而发愁吗?

作者头像
绿盟科技研究通讯
发布2021-10-15 10:57:01
5900
发布2021-10-15 10:57:01
举报

一、前言:智能推荐的不足

海量告警筛选问题困扰安全运维值守工作已非一朝一夕,行业内使用各种机器学习方法进行告警评估和筛选的尝试也已经数不胜数。

当面对未知威胁时,很多机器学习方法目前看来效果尚可。随着数据量的不断增加,评估筛选的效果会持续改善,非常适合安全运营场景。

然而,我们在多次实战中发现,在面对已知威胁时,这些方法无论效果和性能都不如写规则好。尤其是,实战中攻击告警研判常常涉及一些外部知识,它们很难输入到结构复杂的模型中。

例如,在实际工作中,值守人员可能已经打电话确认过“这个IP是自己人在做测试”,但要依靠训练样本等输入让模型得到这个知识却非常困难,导致最终使用体验不佳。

因此,在部分告警筛选的场景中,还是需要考虑这些“规则明确的”告警评估问题,以辅助机器学习方法。

以下我们针对基于规则的告警筛选机制进行探讨。

二、现有基于规则的告警筛选机制比较

事实上,已经有很多成熟的基于规则的告警筛选方法,比如直接调整探针策略、提供告警搜索功能、事件规则归并机制等等。

但实际使用时发现,上述方法或多或少还是存在一些问题。

如果直接调整探针策略(比如修改IDS规则),此时策略变更的开销较大,不宜频繁调整,且禁用规则不能消除历史告警,启用规则也不能挽回历史告警;在告警搜索功能中,搜索流程依赖用户主动查询,不擅长同时启用多个筛选规则;而在事件规则归并机制中,事件规则虽然能够筛选出关键告警,却不擅长排除掉无用告警,而且事件记录一旦产生,通常很难再追加或拆分,对于持续时间较长的攻击也比较尴尬。

可见上述机制适用场景不同,无法完全满足需求。经过反复尝试,我们最终选择在流程中添加一层独立的过滤器机制,根据设定规则筛选出/筛选掉一些告警。

三、基于过滤器的告警筛选机制

过滤器的一个优势在于,它可以作用于告警的呈现过程(而非产生告警的过程),因此能够快速筛选历史告警,使得配置失误导致的不可挽回的影响降至最低。

例如,如果我们发现IPS配置中某个应当启用的检测规则实际未启用,即使修改配置将它启用,也无法检测到在此之前已经发生的攻击;但如果使用过滤器机制,当我们发现某个应当启用的过滤规则实际未启用时,只要将它启用之后重新查询告警列表,就可以将符合过滤规则的告警找出来,而不论告警产生于什么时间。

事实上,配置失误的问题在安全值守场景中非常常见,尤其是各类保障工作中,值守人员很可能处于比较糟糕的身心状态,包括但不限于疲惫、枯燥、注意力涣散、杂务纠纷、谣言传播、以及人员密集导致的流行性感冒等…

四、过滤器规则的语言标准

既然要将配置过滤器的工作交给现场用户,就要从机制上提出两点要求:

首先,配置操作不能太复杂,但筛选机制本身却要充足多样。需要的是一种以规则为单位的、易于理解的机制,但其中的规则单元要足够强大;

其次,要考虑不同技术水平的用户,确保技术水平一般也能正常使用,技术水平优秀也允许充分发挥。要使用灵活的语言或结构来定义这些规则,另外提供一系列便利性的常用规则模板。

一般来说,如果要追求灵活性,普通防火墙ACL那种简单的机制肯定不够用。但要是另外设计一套过滤器专用的语言或配置结构,难免会增加用户的学习成本,而且功能上也未必真就能做到足够灵活。

考虑到安全攻防人员掌握最普遍的通用编程语言,Python(各种exp/poc常用)和JavaScript(XSS常用)当居首位,这里选用并行化支持相对较好的Python来实现告警过滤器:

图1:用Python定义告警过滤器

五、RestrictedPython实现

众所周知,Python在数据处理方面的能力相当强劲。但如果不加限制地允许用户提交Python代码并运行,那就是一个白给的RCE漏洞了,安全性层面是无法接受的。

关于如何“执行不受信任的代码”,现有方案众多:虚拟化、容器化、沙箱环境、等等。

但今天要给大家介绍的是一款轻量级解决方案:https://pypi.org/project/RestrictedPython/

图2:RestrictedPython

与沙箱类方案不同,RestrictedPython其实只是限制了“不受信任的代码”可以调用的模块、类、函数等,甚至不需要创建新的进程。

因此,使用RestrictedPython来实现告警过滤器时,不仅在性能上占据优势,还能够方便地向过滤器脚本提供各类API,而且实现起来非常方便。

一个简单的案例如下:

代码语言:javascript
复制
import RestrictedPython
'''定义各种保护函数
'''
def  GuardedImport(key,globals_dict=None,locals_dict=None,fromlist=None,level=0):
     ##import操作,在此检查是否合规
    return  __import__(key,globals_dict,locals_dict,fromlist,level)
def GuardedGetItem(obj,key):
    ##取下标(obj[key])操作,在此检查是否合规
    return  obj[key]
def GuradedGetAttr(obj,key,default=None):
    ##取成员(X=obj.key)操作,在此检查是否合规
    return  RestrictedPython.Guards.safer_getattr(obj,key,default)
def GuardedGetIter(obj):
    ##迭代(for i in obj)操作,在此检查是否合规
    return  RestrictedPython.Eval.default_guarded_getiter(obj)
def GuardedWrite(obj):
    ##写成员(obj.X=Y)操作,在此检查是否合规
    return  obj
'''安全地执行script中的代码
'''
def  SafeExecute(script,globals_dict=None,locals_dict=None):
    if  globals_dict is None:
         globals_dict={
             "__builtins__":{
                 **RestrictedPython.safe_builtins,
                 **RestrictedPython.limited_builtins,
                 "set":set,
                 "frozenset":frozenset,
                 "__import__":GuardedImport,
                 "_getitem_":GuardedGetItem,
                 "_getattr_":GuradedGetAttr,
                 "_getiter_":GuardedGetIter,
                 "_iter_unpack_sequence_":RestrictedPython.Guards.guarded_iter_unpack_sequence,
                 "_write_":GuardedWrite,
                 "_print_":RestrictedPython.PrintCollector
             },
             "__metaclass__":type,
             "__name__":"_SafeExecution_"
        }
    if  locals_dict is None:
         locals_dict={}
     result=exec(RestrictedPython.compile_restricted(script),globals_dict,locals_dict)
    return result,globals_dict,locals_dict

如上所示,RestrictedPython库会劫持其中代码的各种基础功能,允许我们Hook这些功能,从而限制其中执行的代码可以访问的接口。甚至像set这样的内置类型,都需要用户手动提供后才能访问。

所以,RestrictedPython的安全性很大程度上依赖于各个Hook的实现是否严格。但Python代码执行所需的内置对象非常多,要是全都手动检查,实在是一件很麻烦的事情。

为此,RestrictedPython提供了一些默认的__builtins__字典(safe_builtins、limited_builtins等),以及一些内置的保护函数(safer_getattr、guarded_iter_unpack_sequence等),可以帮助我们快速建立一个好用的安全执行环境。

限定在告警过滤器场合中,过滤规则实现以数据处理需求为主,涉及的接口并不多,因此可以比较容易地通过白名单模式进行限制。

六、后记

至此,一款功能灵活的告警过滤器引擎就浮出水面了。实际实现时,为了使用方便,可以提供一些代码生成模板,来达到交互体验和功能灵活的双丰收。

更多前沿资讯,还请继续关注绿盟科技研究通讯。

如果您发现文中描述有不当之处,还请留言指出。在此致以真诚的感谢~

往期回顾(与该文章相关的往期公众号文章)

AISecOps:基于动态图的威胁分析

【安全告警分析之道:三】异常处理篇

关于天枢实验室

天枢实验室聚焦安全数据、AI攻防等方面研究,以期在“数据智能”领域获得突破。

内容编辑:天枢实验室 吴复迪 责任编辑:王星凯

本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。

关于我们

绿盟科技研究通讯由绿盟科技创新中心负责运营,绿盟科技创新中心是绿盟科技的前沿技术研究部门。包括云安全实验室、安全大数据分析实验室和物联网安全实验室。团队成员由来自清华、北大、哈工大、中科院、北邮等多所重点院校的博士和硕士组成。

绿盟科技创新中心作为“中关村科技园区海淀园博士后工作站分站”的重要培养单位之一,与清华大学进行博士后联合培养,科研成果已涵盖各类国家课题项目、国家专利、国家标准、高水平学术论文、出版专业书籍等。

我们持续探索信息安全领域的前沿学术方向,从实践出发,结合公司资源和先进技术,实现概念级的原型系统,进而交付产品线孵化产品并创造巨大的经济价值。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 绿盟科技研究通讯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 往期回顾(与该文章相关的往期公众号文章)
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档