【摘要】最近看到越来越多的安全圈的同学开始关注UBA或者UEBA的相关产品和技术,恰好这一段时也一直在跟进UBA产品的状况,正如Gartner报告所述,最具创新能力的UBA供应商往往都是一些初创公司,我们比较了IBM、HPE、Splunk这类大公司的UBA产品,但是感觉无非就是SIEM产品的更新升级罢了,相反一些名不见经传的初创公司如Balabit、Sqrrl等的UBA产品到让人眼前一亮。在参考业界的同时,我们也在UBA的核心算法上做了一番研究,要知道UBA之所以号称下一代SIEM,其核心就是将机器学习引入行为数据检测,本文简要总结一下近期研究的适用于UBA的机器学习算法和效果。

UBA产品并不依赖某个“银弹”算法,其必定是一系列机器学习算法的有机融合,稍微了解机器学习的同学都清楚,像贝叶斯家族、线性回归这类有监督学习算法往往都需要大量的训练样本,但是网络安全领域APT攻击的样本一年抓不住两个,要说大量训练几乎没可能,因此UBA产品大量采用非监督学习算法,通过聚合行为数据巧妙的达到异常检测的目的。下面简要介绍一下在行为检测过程中常用的机器学习算法。

首先我们假设一个用户场景,张三,是一个SO的系统管理员,他的账号有很多出入IT系统的权限,某天他的账号被黑客盗用了,黑客通过VPN等通道接入内网,并且将数据偷盗到公司外出售给竞争对手。

一个低风险用户的正常业务活动通常没什么可关注的,但是一些高风险人群的正常活动或者低风险账号进行的高危操作则足以值得调查人员关注,更近一步,如果一个高风险用户做了一些高危并且不长出现的动作,那就绝对需要安全人员介入调查了。这里有一个问题,我们如何知道一个用户风险等级是高还是低?这便是UBA及其算法要解决的核心问题,通过建立动态行为基线发现用户偏离正常模式的行为,并根据风险累计的数值判断用户风险级别。综上,构建用户的特征行为矩阵是第一步,也即User-Profile,特征行为矩阵的构建方法五花八门,考虑到HBase支持数据量大,列式存储等特点,我们选择将特征矩阵保存在HBase里。

张三,像其他特权用户一样,利用其账号的权限登录到某一台主机或者服务器,主机登录算法用以检测每个用户经常使用的主机或者服务,DBA通常倾向于登录固定的几台机器,并且都是使用相似的命令,同时销售人员都是使用天兔或者某个XX系统的服务,两者使用方式完全不同。这里张三登录的是一台保存销售数据的服务器,而显然,这与他之前的模式或者与他所在的Peer-Group都是格格不入的。这里我们使用KMeans算法根据用户行为数据的特征矩阵对用户划分Peer-Group,行为模式类似的人群会划分到一个动态群组。

除了动态群组,根据现有的系统权限组进行风险评估同样是一种有效方式,我们从LDAP或者AD获取用户组以及组的成员数,通常规模较小的组比成千上万用户的组风险系数更高。当张三的账号被黑客从普通管理员组提升到超级管理员组的时候,他的账号瞬间进入了一个人烟罕至的群组,这时候他的风险值会瞬间提升。

除了用户登录的机器,登录时间也是行为特征中非常重要的一个环节,基于时间序列的分析方法有很多,这里我们使用KDE(核心概率密度估计)算法来统计和预测用户在某个时间段登录的概率,这种方法可以有效的克服离散数据在模式匹配过程中容易过耦合的问题。比如张三作为一个系统管理员,通常的登录时间是上班时间以及晚饭以后的时间,早上7:30属于正常登录时间,而凌晨0点登录就会被标记为高度反常和可疑。KDE曲线如下图:

张三登录系统以后进行了一系列的操作,通常一个用户在一段时间内能够产生的操作个数也是一个人的典型特征,User-Profile聚合一个用户在一段时间内产生的所有行为数据的数量,使用KDE重新组织统计数据,并检测这个模式是否发生明显改变。如果这里张三在一小时内接连登录了30+台服务器,而他通常也就登录2、3台,那么这里就与正常的行为有明显的偏移。

基于频繁项集的聚类算法(如Aprior/FP-Growth)在零售行业很早以前就有广泛应用,比如沃尔玛对顾客购买商品的模式发掘发现啤酒和尿布经常一起出售。基于频繁项集的机器学习算法在UBA领域也有广泛应用,比如,张三通常在周末的时候通过SSH协议登录,而在工作日通过RDP协议登录,那么有一天他在周末通过RDP登录就是一个行为模式的偏移。

主成分分析(PCA)是一种应用广泛的降维算法,其在行为数据异常检测的过程中有很好的效果,首先用户行为的特征矩阵往往都有成千上万个维度,如果我们想从海量数据的特征矩阵中找出异常也即离群的点,计算难度会比较大,我们采用PCA对特征进行降维并结合KMeans等聚类算法找出离群点。比如,张三通常会长时间使用前台的服务器,而运维后台服务器的时候比较短,如果他长时间停留在后台服务器上我们的算法会将其潜在的风险值提高。

上面介绍的几个算法Spark的MLlib提供的全部的实现,不得不感叹一下Spark确实是解放程序猿双手的良心之作。再往后,基于图数据的分析挖掘是我们后续的研究方向,安全调查人员时常需要看到用户和实体之间的数据关联,或者所谓的Kill-Chain,图数据库和基于Graph的算法天然支持这一点,好在Spark GraphX又替我们做到了这一步。图数据的挖掘我想业界应该没有比Palantir做的更好的了,就是那个号称帮助美军找到*** 的那家传奇数据公司

作者:菊花茶

机器学习算法在用户行为检测(UBA)领域的应用的更多相关文章

  1. 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考 ...

  2. 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...

  3. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

  4. Python机器学习算法 — 关联规则(Apriori、FP-growth)

    关联规则 -- 简介 关联规则挖掘是一种基于规则的机器学习算法,该算法可以在大数据库中发现感兴趣的关系.它的目的是利用一些度量指标来分辨数据库中存在的强规则.也即是说关联规则挖掘是用于知识发现,而非预 ...

  5. paper 19 :机器学习算法(简介)

    本来看了一天的分类器方面的代码,乱乱的,索性再把最基础的概念拿过来,现总结一下机器学习的算法吧! 1.机器学习算法简述 按照不同的分类标准,可以把机器学习的算法做不同的分类. 1.1 从机器学习问题角 ...

  6. paper 17 : 机器学习算法思想简单梳理

    前言: 本文总结的常见机器学习算法(主要是一些常规分类器)大概流程和主要思想. 朴素贝叶斯: 有以下几个地方需要注意: 1. 如果给出的特征向量长度可能不同,这是需要归一化为通长度的向量(这里以文本分 ...

  7. 机器学习算法GBDT

    http://www-personal.umich.edu/~jizhu/jizhu/wuke/Friedman-AoS01.pdf https://www.cnblogs.com/bentuwuyi ...

  8. 【机器学习PAI实践十二】机器学习算法基于信用卡消费记录做信用评分

    背景 如果你是做互联网金融的,那么一定听说过评分卡.评分卡是信用风险评估领域常用的建模方法,评分卡并不简单对应于某一种机器学习算法,而是一种通用的建模框架,将原始数据通过分箱后进行特征工程变换,继而应 ...

  9. 机器学习算法的基本知识(使用Python和R代码)

    本篇文章是原文的译文,然后自己对其中做了一些修改和添加内容(随机森林和降维算法).文章简洁地介绍了机器学习的主要算法和一些伪代码,对于初学者有很大帮助,是一篇不错的总结文章,后期可以通过文中提到的算法 ...

随机推荐

  1. CSPS模拟 76

    前序遍历,中序遍历,后序遍历 说的都是根节点在前,根节点在中,根节点在后. 长记性!

  2. 1.基础篇之vue入门

    为了建立高效团队,很多公司会采用全栈工程师,虽然利弊兼有,对于成本优先的创业团队,肯定是首选,特别是对.net生态圈,大部分都是小公司,就更加重要了.这里记录的是对vue的学习点滴,希望对你有所助力. ...

  3. 识别手写数字增强版100% - pytorch从入门到入道(一)

    手写数字识别,神经网络领域的“hello world”例子,通过pytorch一步步构建,通过训练与调整,达到“100%”准确率 1.快速开始 1.1 定义神经网络类,继承torch.nn.Modul ...

  4. UiPath之基础知识(一)

    各位小伙伴,大家好.在10月份小U的微信订阅号做了一个投票,主题是UiPath目前已经掌握的程度. 从投票的结果来看,有一半以上的人还是刚刚起步,为了帮助刚刚起步的小伙伴,准备陆续发布一些基础性的内容 ...

  5. Python3安装目录介绍

    目录组织方式 关于如何组织一个较好的Python工程目录结构,已经有一些得到了共识的目录结构. 假设你的项目名为foo, 我比较建议的最方便快捷目录结构这样就足够了: Foo/ |-- bin/ | ...

  6. 生信 - 从repeatmasker传送门过来的 blast

    以前有的是非完整时间写的博客,抽时间需要统一整理一下. 今天在重新装repeatmasker. 整个过程是这样的,有关联的事情有两个. 1. 装repeatmasker需要各种Prerequisite ...

  7. 解决vue低版本安卓手机兼容性问题

    低版本的安卓手机可能会白屏,是由新特性不支持引起的 解决代码es6新特性兼容问题 1,npm 安装 npm install babel-polyfill npm install es6-promise ...

  8. pat 1054 The Dominant Color(20 分)

    1054 The Dominant Color(20 分) Behind the scenes in the computer's memory, color is always talked abo ...

  9. 力扣(LeetCode)求众数 个人题解

    给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] 输出: 3 ...

  10. 类加载器 - ClassLoader详解

    获得ClassLoader的途径 获得当前类的ClassLoader clazz.getClassLoader() 获得当前线程上下文的ClassLoader Thread.currentThread ...