机器学习技术正改变着我们的世界观并冲击着我们日常生活的方方面面。因此机器学习在信息安全也正扮演着日益重要的角色。通过本文 peerlyst 的读者不但能探索机器学习技术的基本原理还能进一步亲手体验如何从零开始,通过前沿技术,代码库和能公开获取的数据集来构建一个真实的入侵检测系统。我们也提供了有用的附件来帮助你更方便的选择机器学习的算法。
本文将涵盖
机器学习模型
构建机器学习项目的必要步骤
如何评估一个机器学习模型
最有用的数据科学和机器学习代码库
人工神经网络和深度学习
基于机器学习的下一代入侵检测系统
人工智能
人工智能是让电脑程序变得像人一样行为的艺术。行为指像人一样感知,学习,理解,认知。AI 技术囊括诸如计算机科学,神经学,心理学在内的多个领域。
机器学习模型
机器学习是从给定的数据和样本中研究并创造算法。它是通向人工智能的一个特别方式。Tom M. Mitchell (一个美国计算机科学家) 将机器学习定义为"一个计算机程序是从经验 E 学到的关于某类任务 T 和性能测量方法 P, 如果它的性能在任务 T 中, 由 P 测量, 并通过经验 E 来改善"。在机器学习中,我们有四种主要的模型: 监督学习,半监督学习,非监督学习,强化学习。
监督学习: 如果我们有输入输出那他就是一个监督学习。在本示例中,我们只需要映射输入输出之间的函数。监督学习能被分成两个子类: 分类算法和回归算法。
分类算法: 输出值是一个绝对的值。
回归算法: 输出值是连续的。
现在来看一些监督学习的算法:
①朴素贝叶斯: 这个分类算法基于贝叶斯原理。
Bayes_rule.png
②决策树: 归功于树形结构使其能预测可能输出值的机器学习算法。整个数据集被表示成一个根节点,树枝末梢的叶子被称为结果节点,分支的节点被称为决策节点。
③支持向量机: 是用于识别多维空间中表示数据分离的超平面的二元分类器。所以,超平面不一定要是一条直线。
④半监督学习: 此模型因为包含标记的和未标记的数据所以不是完全监督。该模型一般用于提高学习准确度。
⑤非监督学习: 如果我们没有关于输出值的信息,那它就是非监督学习。此类模型完全由未标记的数据训练。聚合是其最有名的非监督学习技术。
kmeansclustering-1-300x225.png
⑥强化学习: 此模型基于环境的反馈(奖励信号)来优化。
想知道如何选择合适的机器学习算法,你可以下载 [Machine Learning Algorithms sheet](Machine Learning Algorithms sheet)
机器学习
为了构建一个机器学习模型,我们的项目需要经历两个阶段: 训练和测试。在训练阶段 feature engineering operation 是必须的因为提供给模型一系列定义好的特征非常重要。不是所有的数据对我们的项目是有用的。在选择好算法之后,我们提供他所选择的数据集。模型训练之后,我们需要进行测试,或将之称为模型[安全脉搏SecPulse:www.secpulse.com]
机器学习的评估
构建一个机器学习模型是一个方法论的过程。因此为了测试我们的机器学习模型的表现我们需要使用基于科学的公式严格定义的指标: 所有的公式需要考虑四个方面: 误报,正样例,漏报,负样例。.=
符号
tp = 正样例
fp = 误报
tn = 负样例
fn = 漏报
精确率
精确率或阳性预测值, 被归类为阳性样本总数和被正确归类为阳性样本总数的比率。简单地说是命中率。
yMu8iaR.png
召回率
召回率或真阳率即在数据集中发现正样本数跟总的阳性样本数的比率。它代表发现了多少正样例被发现。
qp6FSCV.png
F-Score
f-测量的 f 评分, 是一个结合准确率和召回率的评价公式。
准确率
准确率是按样本总数正确分类样本总数的比率。这一指标本身是不够的, 因为我们在有相同数量的类别时才使用它。
X5BxiJQ.png
混淆矩阵
混淆矩阵是一个表, 通常用来描述分类模型的性能。
机器学习的 Python 框架
我们使用 Python 作为编程语言有多方面的考量。首先与其他语言相比,它比 Java 和 C++ 更灵活高效。根据 thestateofai.com 的统计: 78% 的开发者使用 Python 作为他们 AI 项目的开发语言。这意味着 Python 开发社区有着更好的文档和支持。Python 带来外部的,便利的,先进的的机器学习的代码包。下面是机器学习中一些最著名的 Python 代码库:
SciPy: 通常用于数学和工程领域。
NumPy: 用于操作大型多维数组和线性代数。
MatplotLib: 它提供了卓越的数据可视化能力包括: 混淆矩阵,Hitmaps,linear plots。
Tensorflow: 是一个由Google 的机器智能研究机构的 Google Brain 团队开源的机器智能和数字计算代码库。你可以在一个或多个 cpu 和 GPU 上部署计算。
Keras: 这是一个用 Python 编写的运行于 Tensorflow 之上的开源神经网络代码库。它用以加快神经网络模型的实验和评估过程。
Theano: 这是一个用 Python 编写的运行于 Tensorflow 之上的开源神经网络代码库。它用以加快神经网络模型的实验和评估过程。(译注:两段原文一模一样。)
使用 pip install 包名 来安装任意的 Python 代码库。
由 Favio Vázquez 做的图表展示了一些机器学习框架间特别是深度学习框架间的对照关系。
1_ZsVNvFsQ5iQnuVvm14sEpg-1024x542.png
等下,但什么是深度学习呢?
人工神经网络和深度学习
人工神经网络的主要目标是模仿人脑的工作方式。为了便于理解,让我们探索一下人脑是实际上是如何工作的。人脑是一个令人着迷的复杂实体。它通过不等的区域来执行不同的任务诸如听看尝等。如果人脑是通过不同区域来执行多任务的,那么逻辑上,在不同的区域使用某种特定的算法。例如: 在用于视觉的算法,用于听觉的算法等等,对吗?错了!大脑是用一个算法来运行的。这个假设被称为"一个学习算法" 假设。这里有些证据表明人脑使用本质上相同的算法 来理解许多不同的输入形式。获取更多相关信息,可以去查看 Ferret 实验。实验中视觉部分的"输入" 被放入人脑的听觉部分,而听觉部分的皮质学会了 "看"。构成神经系统的细胞被称为神经元。人脑通过神经元树突, 利用电化学信号进行信息传输和传播。
把人脑神经元类比到机器学习中的就是感知机。所有输入数据都被求和, 输出应用一个激活函数。我们可以看到作为信息闸门的激活函数。
perceptron_node.png
这里有许多使用的激活函数:
Step Function: 每个输出节点都有一个预定义的临界值。
Sigmoid Function: 使用最广泛的激活函数之一
Tanh Function: 另一个常用的激活函数
ReLu Function: 它也被称作修正线性单元。如果输出值为 x 且 x 为正数, 则输出 x, 否则输出 0。
activation.png
许多连接感知机建立一个简单的神经网络, 由三部分组成: 输入层、隐藏层和输出层。隐藏层在神经网络中扮演着内部通讯的角色, 有时我们将有多层隐藏层的称之为多层感知机网络。如果超过3隐藏层, 那么我们谈论的是深度学习和深度学习网络。
1_dnvGC-PORSoCo7VXT3PV_A.png
根据数据科学家和深度学习专家像是机器学习从业者 Dr. Jason Brownlee 的说法: 每个深度学习模型必须经过五个步骤。
神经网络定义: 这阶段我们需要定义隐藏层数。归功于 Keras 这阶段已经变得非常简单了因为它会将神经网络定义成序列并且会去定义隐藏层数。我们只需创建带有需要结果数的序列实例即可。
神经网络编译: 现在需要对网络进行编译, 包括选择优化技术如随机梯度下降 (sgd) 和损失函数 (用于测量拟合度),平均平方误差 (mse)来评估模型。
神经网络过滤:根据编译步骤中指定的参数, 在此步骤中使用 Back-Propagation 算法。
神经网络评估: 过滤之后,需要对模型进行评估。
预测: 最后完成模型训练后,我们现在能使用它来预测测试数据集中新的恶意软件样本了。
基于机器学习的入侵检测系统
危险的黑客总是在发明新的技术来绕过安全层并避免被侦测。所以,现在是时候想出新技术来对抗网络威胁了。入侵检测系统是指一系列在现代组织中在对抗入侵和恶意行为中发挥重要作用的设备或软件。入侵检测系统主要有两类:
主机型入侵侦测系统: 运行于企业服务器上的。
网络型入侵侦测系统: 通过监听出站入站的流量来检测网络异常。
可以使用两种入侵检测技术进行检测:
基于签名的检测技术: 将通信量与已知威胁的签名数据库进行比较 基于异常的入侵技术: 根据活动行为对流量进行分析。
diagram-what-is-idp-ips-1024x427.png
现代组织每天都面临数以千计的威胁。这就是经典的技术不可能是一个明智的解决方案来抵御他们。许多研究人员和信息安全专家都带着新的概念、原型或模型来尝试解决这一严峻的安全问题。例如, 下图所展示的不同的入侵检测技术, 包括讨论过的机器学习算法。
2rRGBwN.png
现在在阅读完先前章节之后,我们已经能够构建一个基于机器学习的入侵检测系统。和之前讨论的一样,第一步是数据处理。现在有很多可公开获取的数据集被数据科学家广泛用来训练模型。你可以从这里下载到一部分:
The ADFA Intrusion Detection Datasets: https://www.unsw.adfa.edu.au/australian-centre-for-cyber-security/cybersecurity/ADFA-IDS-Datasets/
Publicly available pcap files: http://www.netresec.com/?page=PcapFiles
The Cyber Research Center - DataSets: https://www.westpoint.edu/crc/SitePages/DataSets.aspx
The NSL-KDD dataset: https://github.com/defcom17/NSL_KDD
NSL-KDD 是在异常入侵检测中被广泛使用的数据集。它包含了不同的攻击类别: DoS, Probe, U2R and R2L。
它是来自数据集 KDD99 的加强版。
The-relation-between-main-and-extracted-datasets-KDD99-is-created-from-DARPA-NSL-KDD-is.ppm_.png
在选择了要制作的特性后, 并将数据集分成两个子数据集用于训练和测试,(它们不应该是相同的), 您可以选择在入侵检测技术示意图中所出现的机器学习算法。检测技术和培训您的模型。最后, 当你完成训练阶段, 是时候测试你的模型并根据指标来检测它的准确性。为了探索一些经过测试的模型, 我建议大家关注一下 "Shallow and Deep Networks Intrusion Detection System: A Taxonomy and Survey" 的研究论文。[安全脉搏SecPulse:www.secpulse.com]
关于机器学习或人工智能在信息安全方面的承诺, 有很多讨论, 但在另一阵营有一个辩论和担忧。要发现更多关于机器学习的承诺在网络安全它是强烈建议观看 Thomas Dullien 谈话: "Machine Learning, offense, and the future of automation" Machine Learning, offense, and the future of automation.