异常检测的一些资料整理

=Start=

缘由:

整理一下最近和之前收集到的和「异常检测」相关的资料,方便以后要用的时候参考。

正文:

参考解答:
什么是异常检测?

(因为在一个正常的环境中,异常对象是相对罕见的)所谓异常检测就是发现与大部分对象不同的对象,其实就是发现离群点。异常检测有时也称偏差检测。

为什么要做异常检测?

为了发现系统中的风险点,比如:

信息安全中:

  • WebShell检测
    恶意提权检测
    渗透攻击检测
    恶意操作检测
    僵尸主机检测
    木马回连检测
    恶意爬虫检测
    恶意访问检测

业务安全中:

  • 信用卡盗刷
    骗保骗赔

业务运维中:

  • 复杂业务指标(请求量、收入等)的异常波动检测
异常检测期望达到什么效果?

快速、准确的发现异常现象,以做出及时的应对,保证系统的整体稳定、安全。

常见异常检测方法整理
方法一:基于经验

基于分析人员自身的经验,使用特定的与日志相关的特征进行分析挖掘。比如特定的关键字等。

方法二:基于数据统计

比如常见的阈值、频率、同比、环比等。

方法三:基于外部数据关联

比如恶意手机号码库、恶意IP库、病毒木马库等。这个其实也可以归结到「基于经验」的分类中去。

方法四:基于算法

比如常见的以下几种:

基于模型的技术许多异常检测技术首先建立一个数据模型,异常是那些同模型不能完美拟合的对象。例如,数据分布的模型可以通过估计概率分布的参数来创建。如果一个对象不服从该分布,则认为他是一个异常。

基于邻近度的技术通常可以在对象之间定义邻近性度量,异常对象是那些远离大部分其他对象的对象。当数据能够以二维或者三维散布图呈现时,可以从视觉上检测出基于距离的离群点。

基于密度的技术:对象的密度估计可以相对直接计算,特别是当对象之间存在邻近性度量。低密度区域中的对象相对远离近邻,可能被看做为异常。

以上内容只是我对「异常检测」做的一点介绍、梳理和收集,根据我当前遇到的一些情况来看,有以下几点想法:

  1. 数据的质量最重要!
  2. 数据的质量最重要!
  3. 数据的质量最重要!
  4. 一定要对实际场景有所了解!
  5. 规则有时候比算法、模型更有效,算法、模型并不是万能的。
  6. 异常可能总是在变化,需要不断的调整策略和重新训练模型。
参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4471.html

《异常检测的一些资料整理》上有11条评论

  1. 无监督异常检测模型原理与安全实践
    https://xz.aliyun.com/t/5378

    异常检测模型按照其数据样本的分布可以分为无监督模型、半监督模型和有监督模型。当已标记数据量充足的情况下,例如具有海量真实样本数据的阿里云和360,此时优先选用有监督学习,效果一般不错;当只有少数黑样本的情况下,例如有成熟安全团队的二线互联网厂商应该有一些积累,可以考虑半监督学习;当遇到一个新的安全场景,没有样本数据或是以往积累的样本失效的情况下,只有先采用无监督学习来解决异常检测问题,当捕获到异常并人工审核积累样本到一定量后,可以转化为半监督学习,之后就是有监督学习。

    现实的情况是安全场景被细分,问题需要一个一个单独去解决,能够借助的资源比较有限,所以异常检测问题的开始往往是两眼一抹黑,只有业务场景和没有标记的海量数据,这时候就需要无监督异常检测模型了。

    无监督异常检测模型有基于密度的异常检测、基于邻近度的异常检测、基于模型的异常检测、基于概率统计的异常检测、基于聚类的异常检测、OneClassSVM的异常检测、iForest的异常检测、PCA异常检测、AutoEncoder异常检测、序列数据的异常检测等,有点杂乱,知乎大佬总结的很好,分为五大类:统计和概率模型、线性模型、基于相似度衡量的模型、集成异常检测和模型融合、特定领域的异常检测。

    1、统计和概率模型:主要是假设和检验。假设数据的分布,检验异常。
    2、线性模型:假设数据在低维空间上有嵌入,那么无法、或者在低维空间投射后表现不好的数据可以认为是异常点。
    3、基于相似度衡量的模型:这里的相似度衡量可以是密度、距离、划分超平面等。其中典型的当属基于局部相对密度的Local Outlier Factor,和基于划分超平面的Isolation Forest。
    4、集成异常检测和模型融合:Isolation Forest是经典例子,判别异常的直接依据是异常点的划分超平面数远小于正常点,Isolation Forest通过数据和特征的bagging和多模型等集成学习技术增加模型的鲁棒性。

    实践中可能会面临的几个问题:
    1、场景问题
    2、数据问题
    3、特征工程问题
    4、算法选择问题

  2. 八大无监督异常检测技术
    https://www.csuldw.com/2019/03/24/2019-03-24-anomaly-detection-introduction/

    异常检测是一种用于识别不符合预期行为的异常模式的技术,又称之为异常值检测。在商业中也有许多应用,如网络入侵检测(识别可能发出黑客攻击的网络流量中的特殊模式)、系统健康性监测、信用卡交易欺诈检测、设备故障检测、风险识别等。这里,将异常分为三种:

    1、数据点异常:如果样本点与其他数据相距太远,则单个数据实例是异常的。业务用例:根据“支出金额”检测信用卡欺诈。
    2、上下文异常:在时间序列数据中的异常行为。业务用例:旅游购物期间信用卡的花费比平时高出好多倍属于正常情况,但如果是被盗刷卡,则属于异常。
    3、集合异常:单个数据难以区分,只能根据一组数据来确定行为是否异常。业务用例:蚂蚁搬家式的拷贝文件,这种异常通常属于潜在的网络攻击行为。

    异常检测类似于噪声消除和新颖性检测。噪声消除(NR)是从不需要的观察发生中免疫分析的过程; 换句话说,从其他有意义的信号中去除噪声。新颖性检测涉及在未包含在训练数据中的新观察中识别未观察到的模式。

    1. 何为异常
    2. 异常检测的难点
    3. 基于统计的异常值检测
    4. 基于密度的异常检测
    5. 基于聚类的异常检测
    6. OneClassSVM的异常检测
    7. iForest异常检测
    8. PCA+MD异常检测
    9. AutoEncoder异常检测
    10. Conclusion
    11. References

  3. 梳理 | 异常检测
    https://www.zuozuovera.com/archives/1395/

    1 异常是什么?
    1.1 异常的成因
    1.2 异常的类型
    2 异常检测的应用
    3 异常检测的方法
    3.1 标签问题
    3.2 基于模型的方法
    3.2.1 一元高斯分布
    3.2.2 多元高斯分布
    3.2.3 混合模型方法
    3.2.4 优缺点
    3.3 基于邻近度的离群点检测
    3.4 基于密度的离群点检测
    3.5 基于聚类的技术
    4 异常检测的挑战
    5 References

  4. 异常检测的N种方法,阿里工程师都盘出来了
    https://mp.weixin.qq.com/s/kv-ZrOF4nnxXoQwFOodzjA

    导读:互联网黑产盛行,其作弊手段层出不穷,导致广告效果降低,APP推广成本暴增。精准识别作弊是互联网公司和广告主的殷切期望。今天我们将从时间序列、统计、距离、线性方法、分布、树、图、行为序列、有监督机器学习和深度学习模型等多个角度探讨异常检测。

    1.时间序列

    1.1 移动平均(Moving Average,MA)
    1.1.1 简单移动平均(Simple Moving Average,SMA)
    1.1.2 加权移动平均(Weighted Moving Average, WMA)
    1.1.3 指数移动平均(Exponential Moving Average, EMA)

    1.2 同比和环比

    1.3 时序指标异常检测(STL+GESD)
    (1)先将指标做STL时序分解,得到seasonal,trend,residual成分,如图3所示;
    (2)用GESD (generalized extreme studentized deviate)算法对trend+residual成分进行异常检测;
    (3)为增强对异常点的鲁棒性,将GESD算法中的mean,std等统计量用median, MAD(median absolute deviation)替换;
    (4)异常分输出:abnorm_score = (value - median)/MAD, value为当前值,median为序列的中位数。负分表示异常下跌,正分表示异常上升。

    2.统计
    2.1 单特征且符合高斯分布
    2.2 多个不相关特征且均符合高斯分布
    2.3 多个特征相关,且符合多元高斯分布
    2.4 马氏距离(Mahalanobis distance)
    2.5 箱线图

    3.距离
    3.1、基于角度的异常点检测
    3.2 基于KNN的异常点检测

    4.线性方法(矩阵分解和PCA降维)

    5.分布
    5.1 相对熵(KL散度)
    5.2 卡方检验

    6.树(孤立森林)
    孤立森林(Isolation Forest)假设我们用一个随机超平面来切割数据空间, 每切一次便可以生成两个子空间。接着继续用一个随机超平面来切割每个子空间,循环下去,直到每个子空间里面只有一个数据点为止。那些密度很高的簇是需要被切很多次才能让子空间中只有一个数据点,但是那些密度很低的点的子空间则很快就被切割成只有一个数据点。如图7所示,黑色的点是异常点,被切几次就停到一个子空间;白色点为正常点,白色点聚焦在一个簇中。孤立森林检测到的异常边界为图7中红色线条,它能正确地检测到所有黑色异常点。

    7.图
    7.1 最大联通图
    7.2 标签传播聚类

    8.行为序列(马尔科夫链)

    9.有监督模型
    9.1 机器学习模型GBDT
    9.2 深度学习模型Wide&Deep
    Wide&Deep通过分别提取wide特征和deep特征,再将其融合在一起训练,模型结构如图12所示。wide是指高维特征和特征组合的LR。LR高效、容易规模化(scalable)、可解释性强。出现的特征组合如果被不断加强,对模型的判断起到记忆作用。但是相反的泛化性弱。

    10.其他问题
    10.1 常用选择阈值的思路
    10.2 非高斯分布转高斯分布
    有些特征不符合高斯分布,那么可以通过一些函数变换使其符合高斯分布,以便于使用上述统计方法。常用的变换函数:,其中c为非负常数;,c为0-1之间的一个分数。

  5. DataCon 2019: malicious DNS traffic & DGA analysis
    https://www.cdxy.me/?p=806
    https://bithack.io/forum/258

    通过对数据的初步人工浏览和简单可视化分析发现:
    ……

    据此,我的解题策略为:
    原始日志->特征工程->异常检测->人工验证(得到部分答案)->pattern提取->规则匹配->全部答案。

    接下来开始思考本题的特征维度。根据我的安全经验,将DNS攻击分为三种建模:
    1、密集请求型:例如随机子域名DDoS、反射型DDoS。其特征为QPS高、时序特征强,一般能够可视化观察到波峰。
    2、漏洞攻击型:例如针对DNS server的已知漏洞攻击。其特征为数量少、受DNS type影响,适合分类统计。如果批量PoC的话,则特征同1。
    3、数据传输型:例如DNS Tunnel、Malware DGA、PoC中的DNS回显、SSRF重绑定等。其特征在于域名文本特征明显、适用于规则匹配。

    将DNS日志的Request和Response join到一起,然后做统计特征和文本特征:
    DNS请求时序分布
    QPS min/max/avg
    QPS均值
    QPS波动性
    连接成功率
    DNS响应率
    TCP报文占比
    请求响应比
    单域名平均访问次数
    单目标高频访问
    多级子域名变化率
    DNS type时序分布
    DNS type源IP分布
    长随机域名
    DNS Tunnel特征
    部分DNS RCE
    心跳包

    异常检测
    将以上统计特征通过全量数据建立基线,然后在每个特征维度滤出超越3sigma的异常值。

    总结:
    从结果来看,本题最高效的特征如下:
    1、DNS type。
    2、src_ip维度的统计分析特征(QPS、域名数量、请求响应数),因为出题人将src_ip的行为做的非常干净,找到了IP就找到了攻击。

    分析方法只用了3sigma异常基线一种,人工排序观察Top的异常结果,确认攻击后写规则捞出全部同类攻击。

  6. 异常点检测算法小结
    https://www.cnblogs.com/pinard/p/9314198.html

    异常点检测,有时也叫离群点检测,英文一般叫做Novelty Detection或者Outlier Detection,是比较常见的一类非监督学习算法,这里就对异常点检测算法做一个总结。

    1. 异常点检测算法使用场景
      什么时候我们需要异常点检测算法呢?常见的有三种情况。一是在做特征工程的时候需要对异常的数据做过滤,防止对归一化等处理的结果产生影响。二是对没有标记输出的特征数据做筛选,找出异常的数据。三是对有标记输出的特征数据做二分类时,由于某些类别的训练样本非常少,类别严重不平衡,此时也可以考虑用非监督的异常点检测算法来做。

    2. 异常点检测算法常见类别
      异常点检测的目的是找出数据集中和大多数数据不同的数据,常用的异常点检测算法一般分为三类。

      第一类是基于统计学的方法来处理异常数据,这种方法一般会构建一个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为异常点。比如特征工程中的RobustScaler方法,在做数据特征值缩放的时候,它会利用数据特征的分位数分布,将数据根据分位数划分为多段,只取中间段来做缩放,比如只取25%分位数到75%分位数的数据做缩放。这样减小了异常数据的影响。

      第二类是基于聚类的方法来做异常点检测。这个很好理解,由于大部分聚类算法是基于数据特征的分布来做的,通常如果我们聚类后发现某些聚类簇的数据样本量比其他簇少很多,而且这个簇里数据的特征均值分布之类的值和其他簇也差异很大,这些簇里的样本点大部分时候都是异常点。比如我之前讲到的BIRCH聚类算法原理和DBSCAN密度聚类算法都可以在聚类的同时做异常点的检测。

      第三类是基于专门的异常点检测算法来做。这些算法不像聚类算法,检测异常点只是一个赠品,它们的目的就是专门检测异常点的,这类算法的代表是One Class SVM和Isolation Forest。

  7. 智能监控成效的上限该如何突破?
    https://mp.weixin.qq.com/s/WCdtcGvT117PKe3Dfcmw3w

    与通常的介绍文章不同,本文结合作者从事智能监控的实践经验,从聚合数据、明细数据两种数据形态入手分析它们对模型效果上限的影响,并介绍了基于这两种数据形态的智能监控常用做法的本质。

    “数据决定效果的上限,而算法只是尽量逼近这个上限”。所以,本文从异常检测数据形态的角度出发,分析了它们对检测模型效果的影响,同时给出了一些实践中的经验和理解,希望抛砖引玉,帮助到大家。

    现阶段的人工智能善于解决问题定义良好、问题边界清晰、且有大量标注数据的问题,比如:图像识别等。对于异常检测,缺乏标注数据、问题定义模糊,在工业界、学术界都是一个挑战,但是我相信在广大行业同胞、学术界教授们的努力下,有一天无人值守的梦想可以实现。

  8. 智能监控成效的上限该如何突破?
    https://mp.weixin.qq.com/s/WCdtcGvT117PKe3Dfcmw3w

    作为在工业界的人,我必须讲究方法在实践中的有效性,在做应用的这一波人里,有一句流行话:“数据决定效果的上限,而算法只是尽量逼近这个上限”,所以本文先从数据形态(聚合数据、明细数据,下文将详细解释)来分析方法的上限,然后再结合数据形态讨论方法的优缺点。

    现阶段的人工智能善于解决问题定义良好、问题边界清晰、且有大量标注数据的问题,比如:图像识别等。对于异常检测,缺乏标注数据、问题定义模糊,在工业界、学术界都是一个挑战,但是我相信在广大行业同胞、学术界教授们的努力下,有一天无人值守的梦想可以实现。

  9. 学会五种常用异常值检测方法,亡羊补牢不如积谷防饥
    https://www.jiqizhixin.com/articles/2019-07-05-2
    https://towardsdatascience.com/5-ways-to-detect-outliers-that-every-data-scientist-should-know-python-code-70a54335a623

    什么是异常/离群点?
    在统计学中,离群点是并不属于特定族群的数据点,是与其它值相距甚远的异常观测。离群点是一种与其它结构良好的数据不同的观测值。
    当观测值是一堆数字且都是一维时,辨别离群点很容易,但如果有数以千计的观测值或数据是多维的,你可能会需要更机智的方法来检测这些离群点。

    方法 1—均方差
    在统计学中,如果一个数据分布近似正态,那么大约 68% 的数据值会在均值的一个标准差范围内,大约 95% 会在两个标准差范围内,大约 99.7% 会在三个标准差范围内。
    因此,如果你有任何数据点超过标准差的 3 倍,那么这些点很有可能是异常值或离群点。

    方法 2—箱形图
    箱形图是数字数据通过其四分位数形成的图形化描述。这是一种非常简单但有效的可视化离群点的方法。考虑把上下触须作为数据分布的边界。任何高于上触须或低于下触须的数据点都可以认为是离群点或异常值。

    方法 3—DBScan 聚类
    DBScan 是一种用于把数据聚成组的聚类算法。它同样也被用于单维或多维数据的基于密度的异常检测。其它聚类算法比如 k 均值和层次聚类也可用于检测离群点。

    方法 4—孤立森林
    孤立森林是一种无监督学习算法,属于组合决策树家族。这种方法和以上所有方法都不同。之前的所有方法都在试图寻找数据的常规区域,然后将任何在此定义区域之外的点都视为离群点或异常值。
    这种方法的工作方式不同。它明确地隔离异常值, 而不是通过给每个数据点分配一个分数来分析和构造正常的点和区域。它利用了这样一个事实:异常值只是少数,并且它们具有与正常实例非常不同的属性值。
    该算法适用于高维数据集,并且被证明是一种非常有效的异常检测方法。

    方法 5—Robust Random Cut Forest
    Random Cut Forest (RCF) 算法是亚马逊用于异常检测的无监督算法。它也通过关联异常分数来工作。较低的分数值表示数据点点是正常的,较高的分数值则表示数据中存在异常。
    「低」和「高」的定义取决于应用,但一般实践表明,超过平均分三个标准差的分数被认为是异常的。算法的细节可以在论文《Robust Random Cut Forest Based Anomaly Detection On Streams》里找到。
    这个算法的优点在于它可以处理非常高维的数据。它还可以处理实时流数据(内置 AWS Kinesis Analytics)和离线数据。

发表评论

电子邮件地址不会被公开。 必填项已用*标注