蔷薇灵动知心行为分析引擎 对抗未知威胁的神兵利器

首页 / 业界 / 企业 /  正文
来源:蔷薇灵动
发布于:2023-11-03
行为分析与未知威胁

在网络安全领域里有两个特别热门的技术,虽然一直被热烈讨论,但至少从字面上看本身却藏着特别大的悖论,因此也就一直充满争议:一个是未知威胁,一个是零信任。就说零信任吧,网络要通信就必须存在信任,都零信任了还咋通信?你说你这是零信任网络,然后还能通信,这不骗人么。再说未知威胁,要说一种威胁是未知的,那么你根据什么去认识它呢?要说你有办法认识它,那咋说它是未知的呢?类似这样的争论,这几年不绝于耳。
 
一个概念在流传的过程中,一定会不断的简化,这样才容易被传播,但是在简化的过程中,一不小心就会把一些必要的信息给漏掉。对于资深人士来说当然无妨,因为TA们有着对于整个网络安全体系的系统认知,说一件事,就说它最核心的地方,其他的都不提,这样才显得重点突出。但是对于更多的人来讲,这个就比较麻烦,至少从字面看,这个概念就有问题,然后顺着这个字面的概念去讨论,围绕这个概念做的那一大套东西看起来就都有问题了。
 
其实呢,这两个技术从各个角度看都是没什么问题的,要不然也不能在全世界盛行,而且被写入国家标准了。蔷薇灵动的知心平台在这两个技术领域都有着突破性的技术创新,因此我们将就这两个技术主题进行讨论,并给出基于知心平台的解决方案,零信任我们下回说,本文主要讨论未知威胁。
 
“未知威胁”这个词是在国标里正式出现过的,在2022年发布并于今年正式实施的国标《信息安全技术 关键信息基础设施安全保护要求》(GB/T 39204-2022)的第九章第二节“9.2 监测”中的第一条就是“应在网络边界网络出入口等网络关键节点部署攻击监测设备,发现网络攻击和未知威胁”。令人遗憾的是,在这个文本里,并没有“未知威胁”的名词解释。所以,到底啥是未知威胁就说不清楚,怎么侦测未知威胁也就说不清楚了,而用户应该部署什么设备,采用什么技术,以及看到什么东西算是未知威胁,就都不好说了。比如说APT检测算么?APT是高级威胁,但如果说抓到的APT的特征是已知的,手段也无非就是对流量进行特征匹配,那么这样抓到的APT攻击算防范未知威胁么?
 
(关保要求监测内容节选)
 
相较于关保要求里这个悬浮的概念,等保2.0里的阐述就好多了。在等保2.0的第三级安全要求里,在边界防护的入侵防范章节“8.1.3.3 入侵防范”里有这样的表述:“应采取技术措施对网络行为进行分析,实现对网络攻击特别是新型网络攻击的分析”。在等保2.0里没提到未知威胁,但是提了个“新型网络攻击”,同样也是没给名词解释,我们大约可以把这个新型网络攻击等同于关保中的未知威胁。而之所以说等保写得好,是因为等保里点出了防范新型网络攻击(未知威胁)的手段是“网络行为分析”!
 
(等保2.0入侵防范内容节选  )
 
所谓未知威胁,指的是“恶意签名”未知的威胁。我们传统的网络安全检测逻辑是首先要捕获恶意代码的样本,然后研究它的代码特征和行为特征,然后基于这些特征生成“恶意签名”,利用这个签名对网络数据进行特征匹配,匹配一致就是恶意代码,匹配不一致就不是。而如果说有一种攻击的代码特征和行为特征我们都不知道,那么就可以称之为未知威胁,或者说是一种新型攻击。那么这时就一定会出现一个推论,对未知威胁的检查是不能通过特征匹配的方式来做的!有人可能会说:“我有特别强的安全研究能力,有特别广泛的攻击捕获网络,我有能力发现这种新威胁”。这其实不过就是五十步笑百步,捕捉和响应得再快还是比攻击本身慢,从基本逻辑上还是改变不了攻击在先防御在后的局面。这种安全研究能力当然也非常宝贵,但他们要应对的不是未知威胁,只能说是“很少人知”的威胁,本质上还是已知威胁。而未知威胁检测就是要检测那种我们真的对其“一无所知”的那种威胁。
 
都一无所知了,还咋检测呢?答案就是行为分析!要对未知威胁进行匹配,就一定不能依赖恶意签名了,那我们依赖什么呢?其实我们还有一套可以用的信息,那就是网络行为基线。如果说恶意签名描述的是坏人长什么样,那么网络行为基线描述的就是我们自己长什么样。比较粗的基线可以是业务间的访问关系、流量的时空分布,比较细的基线可以是可执行程序的位置和大小、进程的调用堆、内存的使用空间等等。此时的检测逻辑是,我们用行为基线来分析网络数据,如果匹配上了,那么就意味着一切正常,如果匹配不上,那就说明有什么不正常的事情发生了,用一句有点戏剧张力的台词说:“我不知道你在哪,但我知道你来了”。
 
其实等保2.0里对行为分析也没说得特别明白,而到了2023年发布的另外一个国标《信息安全技术 网络安全态势感知通用技术要求》(GB/T 42453-2023)里就完全说明白了。在态感国标里,没有用未知威胁、新型威胁这种词,直接就是叫“异常行为”。在网络攻击分析(态感的核心能力)章节里,把攻击分为两类,基于签名的放在“6.2.1 网络攻击分析”里描述,基于行为分析的放在“6.2.3 异常行为分析”里描述。异常行为当然可以是由特征已知的威胁导致的,不过这样一来这两部分的目的和价值就重合了,所以可以肯定地说,异常行为分析就是用来发现未知威胁的。通过阅读这部分内容,可以明确的得到这样的结论,在当今的国内主流安全理论里,攻击侦测就是两条路,一条基于特征发现已知威胁,一条基于行为分析发现未知威胁。

(态感国标网络攻击、异常行为中内容节选)

行为分析到底怎么搞
 
基线检测这个概念也不是新概念,但是一直以来很难见到真正落地的产品实现,真正大行其道的还是特征检测。蔷薇灵动的知心数据分析平台则属于典型的基线检测类平台,不得不说这是对国内网络安全技术能力体系的一个重要贡献。我们就基于知心的实现,谈谈到底怎么做基线检测,其实也简单,就跟把大象放冰箱差不多,也分三步:建立基线;建立检测;持续优化基线与检测。
 
先说基线的建立。我们把一切能够刻画网络行为特征的模型都称之为基线,一个基线要好用,要满足三个条件,首先是有可观测性,然后是有稳定性,然后还要有可检测性。所谓可观测性就是这个基线是能够被观察到的。举个例子,人的行为就有可观测性,我们可以根据行为把人分为跑得快的、跑得慢的。人的相貌也有可观测性,我们可以依据这个基线把人分为高的、矮的、黄的、白的。人的心里活动虽然也是一种客观存在,但是很难被观察到,也就是缺少可观测性,我们希望根据这个基线把人分为好的、坏的、忠的、奸的,就很难,只能靠猜,还往往猜错。蔷薇灵动的数据分析平台起名叫知心,就是要解决这个“知人知面不知心”的问题。
 
截至当前版本,蔷薇灵动能够识别的主要还是网络行为基线,其他类型基线要等到后续版本再说了。就是网络基线的建立,也是非常困难的事情,知心目前的表现,在国内可以说是绝无仅有了。知心的网络基线分为两个级别:一个是策略级,一个是指标级。
 
所谓策略级,就是用一条策略来描述两个实体之间是否具有通信关系,这两个实体可以是两个业务,两个虚拟机或者两个容器,或者它们的自由组合。一个网络里可以有多少策略呢?具体的计算这里就不说了,蔷薇之前的文章里说过,这里给个大概的概念,对于一个200台左右服务器(物理机/虚拟机/容器)的用户,这个数量大概是几万,而对于一个1000台服务器的用户,这个数量就会达到100万这个级别。这个级别的策略一旦建立起来,就相当于在一个狭小的空间里拉起了密度极大的激光探测网,只要你碰到一条,系统就会告警。
 
看起来很厉害对吧,但是特别难。可以负责任的说,目前没有任何客户可以准确的描述其网络里全部资源实体之间的通信关系。注意,我说的是没有任何客户,我都没有加“国内”的限定。因为根据我们和国际知名分析机构专家交流的结果,访问关系确立是全球大难题,中国人搞不好,外国人也搞不好。首先,可观测性就是个问题,如何能够感知到全部内部实体的通信是个全球范围内的难题,而知心平台凭借微隔离的数据能力很好地解决了这个问题(参看前面的文章)。

但真正困难的地方是基线的“稳定性”或者换个词叫“可信性”。也就是说,也许我们观察到了两个实体之间确实有通信关系,但是这个通信是稳定的么,我们可以基于这个关系生成策略么,能够用这个策略反过来检查网络是否正常么?很多情况下不是我们观察不到,而是这个通信关系本身就是个偶发通信,它就不稳定,不能用来构建基线。过去有的人就进行简单的网络数据镜像分析,然后构建了内部策略,但是这样的策略根本不能用,全都是误报。在这种情况下,要如何建立策略呢?
 
知心的创新水平这时候就出来了,我们通过一系列算法,对各级实体的通信稳定性进行评估,并帮助用户进行策略设计,对于那些稳定性达标的基线,我们提供了一键生成策略的能力,数以百万计的基于数学分析创建的可靠策略,biu的一声,就建立好了。所以,可观测性其实是微隔离的功劳,而稳定性判别才是知心的能力,基于这个能力,用户可以建立足够细密的基线,但是基本没有误报。
 
可观察性和稳定性都解决了,那么可检测性咋办呢。首先我们讨论啥叫可检测性。不是所有的基线都能用来进行检测的,比如说人的相貌这件事,它是可以观测的,也是稳定的,但是在人脸识别技术成熟之前,我们是无法用这个基线来识别人的身份的。事实上很多指标最终停留在了“感觉”上,无法成为检测基线,就是因为缺少相应的检测技术。那知心平台用什么作为检测技术呢?答案是主机防火墙。知心平台生成的策略会被推送到服务器上,生成主机防火墙策略,根据用户需求,主机防火墙会进入防护或者侦测状态。对于与策略不一致的访问,主机防火墙会生成阻断(防护态)或预阻断(测试态)日志并回传给知心平台。根据这样的检测数据,知心平台就可以发现异常行为了。
 
除了策略型基线外,知心的另外一种基线叫“指标型”基线。比如,按照策略的角度说,a可以访问b,但是根据统计,从时间上看,a一般在上午10点到下午3点间访问b,从数量看,日均访问次数在200到500之间,如果有一天我们发现a在夜里12点访问了b 10000多次,那么这显然是个异常行为,这种异常就叫做指标型异常,它符合策略但是不符合一些具体的数据指标。相较于策略型基线,指标型基线就更加复杂了。它可以是时间、空间、访问源、访问目的、访问量、甚至主机进程等诸多要素的复杂组合。组合越多指标就越精准,当然建立起来也越难(作为一种组合型的基线,它要求你依赖的每一种度量指标对于这个访问关系来说都是稳定的,这样它们构成的组合指标才能是稳定的,而你用的指标越多,这个稳定性就越难达成)。

知心平台提供了一个非常复杂的指标定义系统,并且预定义了一些复合指标。对于高手来说,它还可以自己修改这些定义,甚至创造专属于自己的复合指标。而知心平台要根据这样的指标来做侦测,所需用到的侦测数据就更加多样了,包括主机行为数据、网络访问数据、防火墙检测数据、主机角色、业务关系等多维数据。相信大家已经感觉到这套体系的复杂,也能感觉到它的强大威力了。
 
量身定制,因地制宜
 
建立了基线还不能工作,我们还需要建立具体的检测。软件定义安全的一个主要特征是策略与策略作用对象的脱藕。在过去,设计策略都是直接针对具体的网络资源进行设计的,网络资源发生啥变化,策略就得跟着调整,网络资源多了,策略设计就变得困难,网络资源的变化多了,策略调整也就很困难了。如果资源又多又爱变化,那事情就彻底搞不动了。所以在云计算时代,策略和策略作用对象是脱藕的。也就是我定义了一个规则,但是并没有设定这个规则要在哪里生效,具体的生效情况,需要通过一个规则计算引擎(所谓软件定义就是定义这个)来根据实际情况进行计算。
 
回到基线检测这件事。我们前面建立了基线,但是这个基线具体要不要用,要在哪里用,要怎么用,还没有定下来,需要我们根据需求建立起具体的检测。一般来说,为了不淹没在告警的海洋里,我们建议用户在建立检测时保持克制。
 
建立一个具体的检测,包含三种选择:检测对象、检测基线、检测周期。用户需要在这三者之间找到平衡,如果作用的对象很多,那么检测基线就别选得太多;如果检测基线选得多,那么最好检测周期就别太频繁。比如说,我们常见的一个基线检测事件是“地址探测”,这个事情就可以全局搞,而且检测周期也可以相对短一些。而另一个事件“访问源发散”就费劲了,它的定义是,如果一个对象(比如一个业务)的访问源的数量超过过去一个周期(比如过去一周) 的平均值的一定比例(比如3倍),那么被视为一种异常,如果要把这个检测作用于全局,如果你的网络还挺大,那知心的计算量就有点高了。
 
所以呢,我们的建议是,在全局范围内使用的基线应尽量组合简单,通用性强,比如前面说的地址探测,再比如“堡垒机”绕过一类的,而且检测周期也不用太短,比如一小时一次就差不多了。然后对一些关键业务做重点检测,结合业务属性,多放一些基线进来,并且缩短检测周期。知心预定义了40多种基线组合,应该够用了。还记得有一回和一个央企的安全负责人聊,他的原话就是:“把所有基线都给那些数据库用上!”。
 
迭代优化,持续精进
 
知心平台是个“可玩性”特别高的平台,它需要用户比较多的投入,才能真的用好。我们跟所有用户讲,知心的侦测模型不太可能在你这儿直接就能很好地工作,你需要做两件事情,一个是算法调参,一个是噪音消除。
 
先说算法调参。我们前面举过一个例子,比如说“地址探测”这件事情,就有两种做法,一种是绝对值匹配,一种是基线匹配。绝对值匹配就是指定一个具体的数值,比如100,如果一个服务器访问了网络中的100台其他服务器,那么它就是地址探测了。但这个数显然是需要调的,如果你的系统里都没有100台服务器,那显然这个检测就永远不会报警了。而如果你的系统里有200台服务器,100这个数也显得有点大,会不那么敏锐。再如果说你的系统里有5000台服务器,那么100这个数又有点太小了,肯定经常误报。那多少合适呢,这个就得调了。
 
而基线匹配则更加精确,它是说如果一个访问源在特定周期(比如一小时)内访问的目标地址数大于它过去一段时间内(比如一个月)在这个周期访问均值的一定倍数(比如3倍),那么这就叫地址探测了。但是,这些指标也需要调。比如说一小时是不是太敏感了,一天是不是就行?一个月是不是太不敏感了,是不是一周更合适?3倍到底是低了还是高了?这个还得看这个网络的日常抖动情况,总之都得调。
 
知心在这个调参过程中,提供了一个很有价值的功能,就是基于历史数据的演算。也就是说,当用户调整一个参数后,我们会根据新的参数对历史数据进行测试,看看基于这个参数产生的报警是否可用。如果不可用,还可以接着调,直到可用为止,这让我们的用户可以不用等待参数生效,而是可以快速迭代算法,发现那个最有效的参数,一个独属于你的参数! 
 
调参的作用能有多大,这里举个例子。在今年的网安嘉年华(你懂的)里,蔷薇在一家汽车行业央企部署了知心平台,一开始每天的告警量达到几千条,而通过调参之后,日告警就下降到了10条以内,而且条条都中。
 
(算法调参)
 
当然,调参也不是万能的。在几乎所有的用户网络中都存在一些已知的异常,也就是那些不符合要求,用户也知道,但是短期内无法解决的网络访问。这样的访问往往量还挺大,你要是不检测吧,可能就把真的攻击放过去了,你要是检测吧,真的攻击就可能淹没在大量的已知异常告警信息里。为了解决这个问题,知心提供了“噪音消除”功能,也就是对于那些已知异常,我们可以选择不再进行告警,只作为日志留存。这样一来,既能保持检测有效性,又不会被网络噪音干扰。
 
(噪音消除)
 
经过不断的调参和噪音消除,最终用户将会建立起一套自己的基线侦测系统。这套系统本质上凝结了用户对于自己的网络和业务的深刻理解,这些基线任何攻击者都不知晓,而且还会根据基础设施的调整,根据业务的弹性变化而动态调整。它是一张变幻莫测的侦测网,是由用户和知心平台一起打造出来的,独一无二的零信任天网。