异常检测以及开源工具简介

  • A+
所属分类:安全工具 安全文章

背景

互联网的不断发展促进了人类的发展和社会的进步,人们在享受互联网带来便利的同时,各类安全事件凸显,安全也越来越受到个人、企业以及社会的重视。异常检测作为网络安全检测手段之一,可以有效检测网络行为中的异常情况,提升网络安全检测效率,已经受到各类安全从业人员的关注。然而构建异常检测工具往往需要大量资金的投入,例如需要大量人员参与,聘请软件需求工程师、安全工程师,产品研发工程师,测试工程等人员。这对于一般企业科研机构而言是很难接受的。因此,为了减少在这方面的资金投入,许多安全从业人员都会选择使用一些开源软件来替代。事实上,无论是学习,科学实验,还是在生产基础上进行部署,安全从业人员长期以来都将开源软件视为其工具包的重要组成部分。 下文我们为大家整理推荐22款开源软件和数据集,你应该了解和值得使用的开源异常检测工具集。

什么是异常检测

异常检测(又称outlier detection、anomaly detection,离群值检测)是一种重要的数据挖掘方法,可以找到与“主要数据分布”不同的异常值,具有非常广泛的商业应用以及学术研究价值。例如,从信用卡交易中找出诈骗案例,从正常的网络数据流中找出入侵,同时它可以被用于机器学习任务中的预处理,防止因为少量异常点存在而导致的训练或预测失败。

异常检测以及开源工具简介

图1 异常检测

什么是异常点

异常点是指其值与其他值存在显著不同的数据点。以时间序列为例,时间序列中的异常点,其时间超过了该序列的正常范围,而不考虑数据点之间的时间关系。换句话说,即使将所有数据点都视为时间无关的  ,异常点就突出了,如下图所示。

异常检测以及开源工具简介

图2 异常点

然而,并不是所有超出范围的值都是异常点。在某些情况下,一个时间点是否正常取决于它的值是否与它“最近的过去”一致。如果价值突然增加或减少是暂时的,则称为峰值;如果这种变化是永久性的,则称为水平转移。请注意,虽然峰值看起来与离群值类似,但是峰值却不能等同于离群值,峰值不是时间依赖性的,而离群值是时间依赖性的。如果在不考虑时间顺序的情况下检查所有数据点,峰值的值可能是正常的(见下图)。

异常检测以及开源工具简介

图3 峰值

我们可以并排滑动两个时间窗口,并跟踪它们的平均值或中值之间的差异。这种随时间变化的差异是一种新的时间序列,可以用离群值检测器来检验。当左右窗口中的统计数据有显著差异时,则表明在此时间点附近发生了突然变化。时间窗口的长度控制用来检测变化的时间尺度:对于峰值,左边的窗口比右边的更长,以捕获近过去的代表性信息;另一方面,对于关卡转换,两个窗口都应该足够长以捕获稳定状态。

异常检测以及开源工具简介

图4 水平转移

异常检测开源工具

为了更好的对异常检测进行分析。我们整理了下面6种异常检测相关开源工具。

1、Arundo开源的ADTK

ADTK是一个用于非监督、基于规则的时间序列异常检测的Python包。这个软件包提供了一组具有统一通用检测器、转换器和聚合器的API,以及将它们连接到模型中的管道类。它还提供了一些处理和可视化时间序列和异常事件的功能。

异常检测以及开源工具简介

图5  ADTK包检测结果

组件的特点:

· 丰富的算法:包含多种时间序列异常检测算法;

· 标准的接口:支持标准化的对外服务接口,便于第三方系统调用

下载地址:https://github.com/arundo/adtk

2、LoudML

Loud ML是一个建立在TensorFlow之上的开源时间序列推理引擎。该工具有助于预测数据、检测异常值,并使用先验的知识使异常检测过程自动化。

异常检测以及开源工具简介

图6  Loud ML管理界面

工具特点:

· 内置HTTP API,方便与其他应用系统集成;

· 可以通过机器学习引擎处理来自不同数据源的异常数据;

· 支持ElasticSearch、InfluxDB、MongoDB、OpenTSDB等数据库;

· 支持JSON配置安装和管理;

· 近乎实时的数据处理,并提供给推理引擎以返回结果。

下载地址:https://github.com/regel/loudml

3、Linkedin开源的luminol

Luminol是一个轻量级的时间序列数据分析python库。它支持的两个主要功能是异常检测和关联。它可以用来计算异常的可能原因。给定一个时间序列,检测数据是否包含任何异常,并返回异常发生的时间窗口、异常达到其严重程度的时间戳,以及指示该异常与时间序列中的其他异常相比有多严重的分数。给定两个时间序列,帮助求出它们的相关系数。

异常检测以及开源工具简介

图7  Luminol API调用方式

工具的特点:可以建立一个异常检测分析的逻辑流程。例如,假设网络延迟出现峰值:异常检测可以发现网络延迟时间序列中的峰值,并获取峰值的异常周期,之后与同一时间范围内的其他系统指标(如GC、IO、CPU等)关联获得相关指标的排序列表,根源候选项很可能位于最前面。

下载地址:https://github.com/linkedin/luminol

4、PyOD

PyOD是用于检测数据中异常值的库,它能对20多种不同的算法进行访问,以检测异常值,并能够与Python 2和Python 3兼容。

异常检测以及开源工具简介

图8  PyOD异常检测库

工具特点:

· 包括近20种常见的异常检测算法,比如经典的LOF/LOCI/ABOD以及最新的深度学习如对抗生成模型(GAN)和集成异常检测(outlier ensemble);

· 支持不同版本的Python:包括2.7和3.5+;支持多种操作系统:windows,macOS和Linux;

· 简单易用且一致的API,只需要几行代码就可以完成异常检测,方便评估大量算法;

· 使用即时编译器(JIT)和并行化(parallelization)进行优化,加速算法运行及扩展性(scalability),可以处理大量数据;

下载地址:

https://pyod.readthedocs.io/en/latest/

5、PyOdds

PyODDS是一个端到端的异常检测Python组件。PyODDS提供异常检测算法,满足不同领域的用户需求,无论是数据科学还是机器学习背景。PyODDS提供了在数据库中执行机器学习算法的能力,而无需将数据移出数据库服务器。它还提供了大量基于统计和深度学习的异常检测算法。

异常检测以及开源工具简介

图9  PyOdds异常检测库

组件的特点:

· 全栈服务,支持从轻量级的基于SQL的数据库到后端机器学习算法的操作和维护,使得吞吐量速度更快;

· 先进的异常检测方法,包括统计、机器学习、深度学习模型与统一的API和详细的文档;

· 强大的数据分析机制,支持静态和时间序列数据分析与灵活的时间片(滑动窗口)分割;

· 自动化机器学习,首次尝试将自动机器学习与异常检测结合起来,并属于将自动机器学习概念扩展到现实世界数据挖掘任务的尝试之一。

下载地址:

https://github.com/datamllab/pyodds

6、Twitter开源的AnomalyDetection

AnomalyDetection是一个R语言程序包,Twitter通常会在重大新闻和体育赛事期间用AnomalyDetection扫描入站流量,发现那些使用僵尸账号发送大量垃圾(营销)信息的机器人。

异常检测以及开源工具简介

图10  AnomalyDetection 入站流量异常检测

下载地址:

https://github.com/twitter/AnomalyDetection

其他开源工具包情况如下表所示:

异常检测以及开源工具简介

异常检测以及开源工具简介

开源异常检测(入侵检测)数据集

为了更好的研究异常检测,数据集是必不可少的,我们整理了下面9种异常检测(入侵检测)相关数据集:

异常检测以及开源工具简介

异常检测以及开源工具简介

为便于排版已省去参考文献



原文来源:中国保密协会科学技术分会

异常检测以及开源工具简介

本文始发于微信公众号(网络安全应急技术国家工程实验室):异常检测以及开源工具简介

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: