海量日志中,如何实时在线检测未知异常行为?看瀚思的序列异常算法

安全 应用安全 算法
随着互联网、移动互联网的发展,企业的传统网络边界在逐渐消失,工业界的企业,特别是大型互联网公司,平均每日活跃用户上千万,每个应用系统的日志都会高达几百G字节,甚至达到T数量级,同时,以灰产,黑产为代表的恶意访问占比依然居高不下,因此,不夸张的说,针对大型互联网公司,特别是金融、电信等行业的恶意攻击每天各个时段都在发生,并且攻击手段在不断推陈出新。

[[194630]]

 1. 背景

随着互联网、移动互联网的发展,企业的传统网络边界在逐渐消失,工业界的企业,特别是大型互联网公司,平均每日活跃用户上千万,每个应用系统的日志都会高达几百G字节,甚至达到T数量级,同时,以灰产,黑产为代表的恶意访问占比依然居高不下,因此,不夸张的说,针对大型互联网公司,特别是金融、电信等行业的恶意攻击每天各个时段都在发生,并且攻击手段在不断推陈出新。

反观,传统的被动防御技术,无论是Firewall、Web应用防火墙(WAF)、入侵防御系统、入侵防御系统(IPS)还是入侵检测系统(IDS),本质上的工作原理,不是依据白名单,就是基于已发现攻击总结出的规则,换句话说,传统防御技术仅限于防御已知威胁。所以,传统的防御技术,由于不知道何为未知的威胁,既无法检测到,也就更谈不上有效的阻断。

瀚思以将机器学习应用于信息安全的新角度,重新审视日志信息挖掘,提出了基于日志的实时在线检测序列异常算法。该算法能够在线检测出未知异常行为,并已在国内某Top10券商处上线使用。

2. 何为序列异常

序列异常是对离散异常时序事件的检测,常应用于工业设备检测,生物界中的氨基酸序列或基因组序列检测,用户行为分析等方面。举个栗子,一个冰箱的操作日志里,如果存在“冰箱柜门打开,冰箱内物品被取走,冰箱柜门关闭”的序列,认为是正常的。而出现了“冰箱柜门关闭,冰箱内物品被取走,冰箱柜门打开”则是异常的。

简单来说,序列异常分为两类。第一类为位置异常,即序列是否异常取决于位置上的实际值与模型预测值间的偏差。第二类是组合异常,以符号组合为考量,对整个序列进行判断,如果其与绝大多数不同,则被作为异常找出来。

在信息安全领域中,序列异常有很多表现形式。从传统的SQL注入,XSS攻击,到撞库,灰产/黑产的薅羊毛刷单等等。

在用户行为分析(UBA)中,异常序列一方面能够找出异常用户行为序列,另一方面,能更直观地表现出其为何异常的异常点。

3. 如何找序列异常

无论是找位置异常,还是组合异常,都是找离散类型的时序异常。马尔科夫链模型应用到这类应用中是十分合适的。我们使用了一种变阶马尔科夫链模型——Probabilistic Suffix Tree概率后缀树来查找序列异常。

1) 马尔科夫链模型

马尔可夫链,又称离散时间马尔可夫链,因俄国数学家安德烈·马尔可夫得名,为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马尔可夫性质。马尔科夫链作为实际过程的统计模型具有许多应用。

在马尔可夫链的每一步,系统根据概率分布,可以从一个状态变到另一个状态,也可以保持当前状态。状态的改变叫做转移,与不同的状态改变相关的概率叫做转移概率。随机漫步就是马尔可夫链的例子。随机漫步中每一步的状态是在图形中的点,每一步可以移动到任何一个相邻的点,在这里移动到每一个点的概率都是相同的(无论之前漫步路径是如何的)。

举个栗子,假设天气在晴朗sunny,下雨rainy和多云cloudy间互相转换。

其马尔科夫状态图见下图。可见每个状态都可迁移到其它状态,且概率皆不同。

其对应的一阶迁移矩阵,即为下图。

那么,今天是晴天,明天下雨的概率就是

PWeather2=rainy Weather1=sunny)=0.1

马尔科夫链模型对应的异常则为迁移中概率最小的路径。如

P( Weather1=sunny, Weather2=rainy, Weather3=cloudy, Weather4=sunny, Weather5=rainy )=0.1,就是5阶序列中,概率最低,出现可能性最小的序列,被认为是异常。

2) Probabilistic Suffix Tree概率后缀树

概率后缀树是一种变阶马尔科夫链模型的紧凑形式,它将后缀树作为索引结构使用。当序列集被组织在概率后缀树中时,仅通过检查与树中根节点相近的点就能区分异常和非异常序列。

概率后缀树简单来说,就是将具有预测能力的子序列存储在一颗后缀树上。然后,根据序列各子序列在树中的情况,计算整个序列的概率值。算法将归一化后的低概率的序列,作为异常找出来。

PST树例子

在概率后缀树中,每个节点代表一个元素,每条边代表一条从根节点到当前节点的路径,换句话说,代表一个入树的子序列。在每个节点上,均有一个概率分布。表示当前节点的下一个后缀子序列的概率。

在构建树时,需要将没有预测能力的的子序列和出现极少,本身就是异常的序列全部过滤掉。这样从根节点开始,以后缀的方式逐步构建出概率后缀树。建好树之后,还可以自行设置更严格的条件对树继续剪枝,使得该树具有更好的预测能力。

如何使用概率后缀树计算序列概率值?概率后缀树能够利用中间条件概率,从而可以高效计算出概率值。详细来说就是,某序列P(s)在概率后缀树上的概率为:

PS= PS1PS2S1)…PSlS1S2…Sl-1)。

举个栗子,P(BAAB) = P(B)P(A|B)P(A|BA)P(B|BAA)

= 0.7 * 0.5 * 0.2 * 0.7

如何利用概率后缀树找异常?将测试序列的概率值归一化后,低概率的序列就是异常序列。

4. 实例分析

1) 在某商业股份制银行的Web日志中,使用序列异常检测,发现了灰产/黑产自动化登录攻击实例。

在对其银行手机银行Web日志常规序列异常检测中,发现存在一些登录序列和正常序列区别很大。经过分析后发现,正常用户登录是无法产生该序列的。这些序列的出现,和其它证据指明,这些皆为灰产/黑产自动化登录的产物。

2) 在某券商的Web日志中,通过使用序列异常检测,发现了一个灰产/黑产可疑的用户探测行为。

序列异常检测程序发现,存在一些利用用户检存页面,被恶意地作为用户探测的手段利用了。经分析,正常用户使用这些页面很难产生这些序列。经过调查,以及和业务部门确认,该类序列皆为恶意用户探测行为。

5. 结语

工业界面临的现状是,一方面,传统的防护手段只能抵御“已知威胁”,迫切需要应对来自“未知威胁”的攻击。另一方面,互联网产品快速迭代更新,用户行为千变万化,攻击手段不断进化,急需可自学习,可实施的高效检测手段出现。

瀚思的序列异常检测算法,一来能够检测“未知威胁”,二来能够面对快速变化的环境,进行优化后的在线学习,三来已经在一些公司实际上线,并有所斩获。

【本文为51CTO专栏作者“瀚思 ”的原创稿件,转载请通过作者获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2021-03-31 11:20:57

PythonADTK异常检测

2013-04-27 13:33:33

2015-10-12 10:37:42

学习算法检测

2020-10-15 12:00:01

Python 开发编程语言

2015-11-20 08:36:43

2015-12-10 11:15:02

2020-05-13 11:10:32

安全 机器学习数据

2018-09-17 15:30:05

机器学习密度异常值

2013-03-12 10:54:24

2023-10-18 09:00:00

人工智能异常检测

2020-10-18 07:15:53

Python异常检测算法开发

2023-11-22 09:42:02

系统检测

2022-09-21 23:41:40

机器学习开源数据

2023-05-09 13:56:33

2022-02-25 23:54:43

人工智能数据计算

2021-01-15 12:22:35

异常检测工具

2021-07-28 09:53:53

FalconEye注入安全检测

2020-12-24 19:01:14

iForest大数据检测算法

2017-02-16 08:25:35

2023-03-09 12:21:38

点赞
收藏

51CTO技术栈公众号