基于机器学习技术的网络安全防护
2018-03-30刘金鹏
刘金鹏
摘 要:信息化时代,互联网在社会生活生产中的地位愈发重要。网络安全事关社会稳定、国家安全。网络安全技术与机器学习技术的结合,为网络安全技术的发展提供了新的思路和方向,是值得深入探讨和研究的。论文旨在针对现今机器学习技术在网络安全领域的应用和研究进行介绍。主要探讨了循环神经网络用于探测网络攻击数据,聚类算法用于排查异常输入, 强化学习应用于网络安全性检测的技术原理,实现的可行性等内容,并对未来可能的发展方向做一展望。
关键词:网络安全;机器学习;人工智能
中图分类号:TP309 文献标识码:A
Abstract: In the information era, The Internet plays a more important place in our live and our work. The security of the network is concerned with the Social stability and national security. The combination of network security and the Machine Learning technology provides new research directions for the network security protection, which is worthy to be discussed and researched. This article aims at an overview of the application of network security technology based on Machine Learning, and give an outlook on the development of Machine Learning in the future.
Key words: network security; machine learning; artificial intelligence
1 引言
近年来,随着计算机相关技术的高速发展、数据量的爆发式增长,以及计算机运算能力的逐步提升,基于机器学习技术的人工智能得到了长足发展的基础。基于机器学习的新算法的出现,更加推动了人工智能應用的大爆发。国家也将人工智能技术提高到国家发展战略的重要高度。2017年国务院印发《新一代人工智能发展规划》(国发〔2017〕35号文件),提出了面向2030年我国新一代人工智能发展的指导思想、战略目标、重点任务和保障措施,部署构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国。目前,人工智能技术在图像识别、自然语言处理、语音翻译、视频内容识别等方面都有了实际的应用场景,并取得了良好的效果。因此,探索在网络安全领域使用基于机器学习的人工智能技术具有重要的现实意义。
2 概述
2.1 机器学习与人工智能
人工智能技术是一个较为宽泛的范畴,泛指由人工制造出来的系统所表现出来的智能。通常所说人工智能,是指通过普通电脑实现的智能,其有很多不同的研究方向和分支。机器学习是人工智能的一个分支,是实现人工智能的一种途径。它以数据,或者称为“知识”为基础,以“学习”为手段解决人工智能中的问题。机器学习在近30多年已发展为一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。其最基本的做法,是使用算法来解析数据、从中学习规律,然后对真实世界中的事件做出决策和预测。机器学习与传统意义上为解决特定任务而编写的软件程序不同。传统软件是由程序员使用计算机语言来描述给定的输入与预期的输出之间的数学或逻辑关系;而机器学习是用大量的数据来“训练”一个数学模型,使其通过各种算法从数据中学习到给定输入与预期输出之间的关系,从而能够对新给出的输入数据做出正确的响应,完成预期的功能。
2.2 网络攻击
自上世纪80年代互联网技术诞生以来,网络为人类提供了工作生活工作的便利。同时,随着网路技术的高速进步,也伴生着针对互联网的各种网络攻击技术的发展。近年来,各类网络安全事件和网络攻击事件频发。如2016年10月由恶意软件控制的僵尸网络发起的拒绝服务(DDoS)攻击,造成美国东海岸大范围断网;2017年5月爆发的勒索病毒软件,造成全球数十万用户电脑资料被加密。网络攻击已经逐步从黑客个人对技术的尝试性挑战,发展为带有明确经济政治目的的行为。网络空间的安全关系着社会的稳定和国家的安全,因此网络安全受到国家、学术界及工业领域的高度重视。
网络攻击从攻击目标上分类,大致可分为四个类型:拒绝服务攻击(DDoS)、利用型攻击、信息收集型攻击(Information Gathering)、假消息攻击,如表1所述。
表1所述攻击方式,虽然大部分都有有效的防御手段,但攻击技术每天都在不断的发展,即使对于已知的攻击方式也有百密一疏的时候,因此网络安全是一个需要长期重视的课题。
3 人工智能技术在网络攻击探测方面的应用场景
3.1 深度学习用于分析网络访问数据流
深度学习是机器学习的一个分支,它使用由非常多个神经元组成的多层网络结构来拟合目标函数。只要神经元的个数及网络的层次足够多,理论上可以拟合任意函数。神经元是神经网络中的基本运算单元,由线性运算和非线性运算部分组成。例如,图1为一个神经网络中的神经元。
其中,a1、a2、a3为这个神经元的输入。他们可能是整个神经网络的输入数据,也可能是神经网络中上一层神经元的输出数据作为这个神经元的输入。w1、w2、w3分别为a1、a2、a3的权重,Z是这个神经元的输出。他们之间的关系为:
g称为激活函数,实现非线性变化。如果没有激活函数,纯线性运算的神经元相互叠加后,依然还是线性运算,不具备拟合非线性函数的能力。常用的激活函数有Relu、Tanh、Sigmoid等。
通过多个神经元多层次的叠加所组成的神经网络模型有较强的拟合能力,但其输入数据之间通常是没有时间的先后关系的。而网络中传输的数据流,通常与时间的先后有关。例如,某个IP对80端口的http协议发送POST请求是否是一种试探性的攻击,并不能单独从这一次请求的数据中确定,通常需要根据此IP之前的行为来推测。如果之前曾连续数百次向80端口发送http协议的POST请求,且POST内容相近,则怀疑可能是某种错误注入或扫描的尝试。这种需要考虑输入数据的时序关系的场景,就较适合使用循环神经网络(RNN)。
循环神经网络将t时刻的网络隐藏层输出数据作为中间数据,在t+1时刻连同t+1时刻的输入数据一同传送给神经网络,从而实现t+1时刻的输出会受到t时刻输入数据影响的效果。以此类推,t+2时刻的输出数据也受到t+1时刻及t时刻的输入数据影响,即,t+n时刻的输出取决于t+n时刻及t+n之前所有输入的影响,如图2所示。
当黑客试图攻击一台服务器时,经常会对直接暴露在互联网上的服务器进行扫描,以收集必要的信息。例如,对服务器的端口进行扫描,以获知服务器上都开启了哪些服务,其中是否有可以利用的缺陷或漏洞;或通过向某服务端口发送各种请求,分析其响应数据,根据特征来判断运行该服务的软件或操作系统的版本信息,进而尝试通过该系统的某种特殊的漏洞来进行攻击。由于扫描操作的实质还是攻击者向服务器发送合法的请求,通过服务器的响应来判断或猜测服务器的信息。作为服务器端的软件,很难将正常用户的合法请求和攻击者发来的用以探知服务器信息的合法请求区别开来。
然而,攻击者对服务器的扫描,必然和普通用户的访问是存在差异的。只是很难用编程的方式清晰的描述出这种差异,这时候,就是最适合深度神经网络发挥作用的场景了。此时可以将网络中的数据流作为循环神经网络的数据输入。由于循环神经网络的特性,可以很好地根据接受到的数据序列,判断当前的数据流属于什么操作(正常访问或恶意攻击),进而根据分类结果进行采取必要的防范措施。
例如,图3是使用Nmap工具对一台服务器扫描的log。
图4是从服务器端看到的数据流。
可以看到,攻击者依次对目标服务器的每一个端口请求连接,然后发现了一些开启的端口。这时使用循环神经网络,对这个过程进行学习。学习后神经网络将能够根据当前数据的特征,预测次操作是正常访问还是网络攻击。
例如,发现某IP地址连续对1、2、3、4、5端口发起连接请求,神经网络根据学习过的数万组数据判断,此IP准备进行网络攻击的概率为5%。(可以简单理解为:神经网络学习过的数据集里,所有扫描过1、2、3、4、5端口的操作中,只有5%在后续操作中表现为网络攻击,其余都是正常访问。)进而,该IP地址进一步扫描完5000个端口后,神经网络判断此IP企图网络攻击的概率增加到70%。根据神经网络给出的概率,管理员可以酌情进行干预,如确认权限、延时响应甚至拒绝访问等。
3.2无监督学习用于发现未知的攻击方式
使用有监督的深度学习,虽然可以很好的甄别出攻击者对服务器的攻击操作,但仍有两个缺点。
第一,有监督学习需要大量的有标记数据作为样本提供给深度学习网络。而标记数据的过程需要大量人工参与,涉及到人力和资金投入。如图5所示,人工标记数据的过程容易成为整个工作的瓶颈。
第二,有监督学习由于是根据既往的数据归纳总结规律,因此必然无法识别新的攻击手段,如图6所示。
即使对于已有的网络攻击模式,由于样本数量和学习时间及资源的限制,有监督学习也不可能学习到自从互联网问世到现在的所有攻击手段,只能够针对常见的、高发的、危害性较大的攻击方法进行学习。因此如果攻击者使用较为少见的攻击方式,有可能无法被识别。
相对于有监督学习,无监督学习模式则没有上述问题。无监督学习是指模型直接从无标签的数据中归纳总结规律的算法,如图7所示。无监督学习通常用于完成数据的分类,异常数据点的检测等任务。常见的无监督学习算法有主成分分析(PCA)、聚类(Cluster Analysis)、自编码器(Autoencoder)等。
以常见的SQL注入攻击为例。如果程序员在Web开发时,没有过滤敏感字符,或过滤規则不够完备,导致攻击者可以通过正常的输入用户名、密码之类的输入框,输入通过精心设计的字符串,绕过Web界面,直接执行数据库或系统的命令,从而获取服务器重要信息甚至获得管理员权限。
假设某网站Web页面使用Php语言编写,其中有页面根据用户名查询用户信息。在数据库中查找用户的语句如下:
$query = "SELECT * FROM users WHERE username = ",$iName
其中,$iName是输入参数,通过Post方法传入,其值为用户输入的用户名。
对于一个正常的用户操作,输入用户名“bob”,最终传输给数据库的查询指令是这样的:
SELECT * FROM users WHERE username = bob
但是如果攻击者输入的用户名为:bob OR 1=1,且网页没有做任何过滤,就对导致最终传给数据库的查询指令为:
SELECT * FROM users WHERE username = bob OR 1=1
这里,WHERE后面是一个“或”关系的两个表达式,任意一个为真则整体表达式为真。而1=1是永远为真的,这就导致数据库返回了所有用户的信息,而不只是要查询的bob用户。
那么我們如何利用非监督学习来预防这样的攻击呢?我们先来列出一些用户可能在这个页面输入的用户名:
Kimmy N
Nancy1992
Tom
Linkg_ding
PolKKND
Frank
bob OR 1=1
ZhangYN
Cdkids october
Alice
Kiya
当这些输入的用户名放在一起时,即使没有相关专业知识的人一眼看过去,也会感觉到bob OR 1=1这一项与其他项的差异较大。我们根据类似的原理,使用无监督学习进行孤立探测排除其中的差异项。
孤立探测有多种算法,基于高斯概率模型,基于距离算法,基于聚类的算法等等。我们以聚类算法举例,聚类算法用来对数据进行分类,是一种统计分析方法。通常将每项数据映射为多维空间的点,通过迭代计算质心点位置对所有数据尽进行分类。例如,二维平面上有n个数据点如图8所示。
在图中任意取两个点A和B,计算每个数据点到点A和点B的欧式距离。距离A点近的分为A类,距离B点近的分为B类,如图9所示。
全部分类之后,计算所有A类点的质心点A1,所有B类点的质心点B1,移动A、B两点,另A=A1.B=B1,然后重复分类过程。如此迭代n轮之后,A,B两点将不再移动,最终分类结果如图10所示。蓝色点为一类,红色点位另一类。可以看到算法正确的将两个数据异常点与其他数据区分开来。以上为聚类算法中较为简单的K-means聚类。这里为了直观使用了二维数据,同理可扩展到N维数据。在实际应用中,数据通常是较大维度的。如何将原始数据映射为n维数据点,也是我们需要仔细考虑的过程。
就上面说到的SQL注入攻击来说,可以将用户名映射为n维数据点,然后使用聚类算法,将最新输入过的1000个用户名使用K-means算法分为两类。(这里1000个仅为举例,实际根据分类的精准度和运算速度来取合适的值)由于K-means算法的特点,分类不会失败,无论数据分布情况如何,总能分为两类。我们可以根据分类后的数据情况来判断,通常情况下,没有异常数据点的话两类数据点的个数应该大致相同。如果有异常数据点,则异常点将被分做一类,其余数据一类。这样,我们就可以在没有任何先验数据的前提下,对攻击者的注入式攻击进行预警,而且这种预警是动态的,他并不关心什么样的输入才是攻击,而只管找出“和大多数不一样”的输入。
3.3 强化学习对网络安全性的测试
强化学习是通过构建一个智能体(Agent),使其与环境(Environment)进行交互,并从中学习的一种学习方式。智能体可以获得环境的当前状态,并根据当前状态进行动作(Action)。智能体的动作将影响环境下一时刻的状态。随着环境状态的改变,智能体将得到反馈(Reward)。如果环境朝着期望的状态改变,智能体将得到正向反馈,反之得到负反馈。通过与环境的这种反复交互,期望智能体最终能够习得根据环境做出最优解的动作,以获得最大回报,如图11所示。
Agent可以通过学习策略函数π来获得在给定状态s时,动作集上的函数分布。
或者也可以学习值函数V,根据给定状态s和动作a,获得未来状态优良度的评估,从而间接辅助选择动作a,使得所选择的a导致未来状态向良性发展。
学习值函数或策略函数的实现方式可根据实际情况选择不同的方法。对于整体系统较为简单,状态S有限的环境,可以使用Q-table方式实现。对于较复杂的系统,人们将其与机器学习相结合,使用深度神经网络来拟合策略函数或者价值函数。强化学习常被使用在游戏领域及自动化控制领域,如无人车、机器人等。
强化学习同样属于无监督学习过程,它不需要事先准备带有标签的数据,而是自己从环境中总结规律。这对于自动化控制领域是一个劣势,因为要从真实的物理环境中学习,时间成本会大大增加。(当然现在也在探索使用电脑模拟物理环境进行学习的技术,可以一定程度上提高学习速度。但由于模拟环境毕竟与真实环境有差异,最终还是需要在真实环境中学习。)但对于网络安全领域,环境本身就是数字化的。网络的吞吐量,服务进程运行状态,资源占用等情况,都可以轻易的提供给神经网络进行学习,学习时间上并没有比其他学习方式有明显差异。
强化学习已有被用来进行网络攻击的案例。从另一方面想,也可以利用强化学习来检测网络的安全性,排查服务器的漏洞。使用深度神经网络模型进行学习,以服务器状态作为环境状态,以攻击服务器获取权限或影响其正常运转作为目标进行训练。神经网络学习的过程,也就是它寻找服务器漏洞的过程。深度神经网络可以反复不停的试探对目标的攻击,并且,它的试探并不是无目的的遍历,而是逐步根据服务器给出的响应,总结规律,有方向有目标的尝试攻击目标。
使用强化学习的优势还体现在可以随着服务器软件版本的升级而随时改变自身的攻击策略,持续发挥作用。每次神经网络的动作都会得到响应的反馈,如果服务器的软件更新升级,得到的响应不同,反馈数据也会不一样。这将会导致神经网络参数更新,使其自动调整行为以适应新的环境。这避免了有监督学习中,在数据分布特征变化的时候必须重新训练网络的问题。
4 结束语
机器学习、神经网络等人工智能技术已在众多领域中发挥作用,深入到我们生活工作的方方面面。同时,我们也看到人工智能技术现有的一些局限性。例如其可解释性差,很多时候虽然可根据统计学原理确定人工智能的预测或判断是有效的,但具体到针对某一组数据的预测或判断,我们难以准确了解其做出预测或判断的依据。因此,目前在需要高可靠性的领域,人工智能模型通常只作为参考,而不起决定作用。
将机器学习、神经网络技术应用在网络安全领域,对于提高网络安全性,减少网络维护成本,有着积极的意义。人工智能与各传统行业的结合,已经产生出很多可观的成果。在网络安全领域应用机器学习技术,必将为网络安全技术带来新的发展方向,引领网络安全进入新的发展阶段。另一方面,应用人工智能技术进行网络攻击的手段也已出现。未来,网络攻击与防御将是两方人工智能技术的比拼。因此,将机器学习应用于网络安全中是有益且有必要的,机器学习必将引领网络安全技术获得长足的进步。
参考文献
[1] 周志华,王珏.机器学习及其应用2009[M].北京:清华大学出版社,2009.
[2] 张蕾,崔勇,刘静,江勇,吴建平.机器学习在网络空间安全研究中的应用[J].计算机学报,2018.
[3] 伊恩·古德费洛,约书亚·本吉奥.深度学习[M].北京:人民邮电出版社.
[4] Alpaydin E.Introduction to Machine Learning (Adaptive Computation and Machine Learning)[M].MIT Press,2004.