伍星宇,裴旭斌,陈泽堃
(国网浙江省电力公司信息通信公司,浙江 杭州 310020)
人工智能的核心内容之一就是机器学习,机器学习是让机器模拟人类的思维和行为基础从而使自己变得更聪明和智能。机器学习是一种不断学习和进化的过程。机器学习的策略大体分类:机器学习,类比分析,典型事例学习。机器学习常用算法有:概率论、统计学以及数理分析等。目前业界一致认为机器学习的重要组成部分就是逻辑推理和判断,二者构成了机器学习的基础。
作为人工智能的重要组成部分机器学习技术一直在工程应用和科学领域有着广泛应用,概率近似正确以及以概率统计为理论基础的人工智能方法促进了机器学习技术的极大发展。
机器学习自20世纪80年代以来在人工智能界取得了长足的发展和进步,特别是21世纪以来,机器学习领域的研究工作发展很快,已成为人工智能的重要课题之一。除在基于知识的系统中得到应用之外,机器学习还在模式识别、机器视觉、非单调推理、自然语言理解等许多领域也有广泛应用。学习能力已经成为一个系统是否智能化的重要判断依据。机器学习的研究方向主要有以下两个方面[1]:
传统的学习,通过模拟人的学习机制来提高机器的逻辑推理水平;大数据环境下的学习,通过对大数据的分析和判断来分析事物内在的联系和关系,从而为机器判断提供依据。
经过多年的发展模拟人脑的多层分片机器学习方法取得了长足的进步,在图像识别方面已小有成就,在医疗方面配合医生经验可以对某些疾病提供诊断。
传统机器学习的研究方向主要包括:决策树、随机森林、人工神经网络、贝叶斯学习等方面的研究。
决策树是机器学习常见的一种方法。其发展经历了AS-SISTANT Algorithm、Chi-Squa统计算法、C4.5算法,CART算法,SLIQ(决策树分类)算法等,目前决策树作为机器学习的重要组成部分很好地支撑了传统机器学习。
随机森林(RF)作为机器学习重要算法之一,是一种利用多个树分类器进行分类和预测的方法。近年来,随机森林算法研究的发展十分迅速,已经在生物信息学、生态学、医学、遗传学、遥感地理学等多领域开展的应用性研究。
人工神经网络(Artificial Neural Networks,ANN)在20世纪40年代就已经受到关注,并一直持续发展,具有非线性适应性信息处理的能力,可克服传统人工智能方法对于直觉,如模式、语音识别、非结构化信息处理方面的缺陷。
贝叶斯学习是机器学习较早的研究方向,其方法最早起源于梳理统计,由贝叶斯在1763年所证明的一个关于贝叶斯定理的一个特例。后经过多位统计学家和数学家的共同努力,在20世纪50年代逐步建立起来,发展为统计学及机器学习的重要组成部分和发展方向。
大数据的价值主要体现在数据的内联分析和逻辑判断上,数据作为信息系统乃至人类社会的重要载体,一直存在于系统的各方面,随着存储、计算能力的提升使得数据能发现自身规律,更好的服务系统对系统的判断提供依据是大数据存在的价值。利用并行和分布式的处理方法能够使得数据处理能力极大提高,也为机器学习提供了新的思路和办法。
当今技术发展的主要动力之一是可利用机器学习高效快速地获取知识,从错综复杂的数据中找出其中发展的规律,并伴随着人工智能等算法的应用不断发现新的需求。机器学习在大数据时代已成本数据沉淀的一种通用手段和技能。当前大数据的重要研究方向是利用机器学习对繁杂的数据进行分析和提炼,从而对生产提供有利的判断。智能数据分析成为机器学习的一个重要方向。随着信息技术指数级的增长,数据的增长也是指数级的增加,结构化、非架构化、半结构化数据的增长需要机器学习朝着更加智能的方向发展,如何快速检索信息、识别信息已经成为机器学习的重要增长点,制约着大数据技术的发展。在“2015年大数据十大热点技术与发展趋势”中,结合机器学习等智能计算技术的大数据分析技术被推选为大数据领域第一大研究热点和发展趋势。
机器学习的本质为:获取数据、处理数据、分析数据、指导生产实践,处理和分析数据过程伴随着数据模型和算法,基础数据模型的建立过程需要科研工作者不断的探寻和发现,随着数据存储能力和计算能力的增强对数据的预测准确性也越来越精准[2]。在信息安全领域机器学习的意义主要体现在:自身的数据处理能力,可以通过数据分析提前预判系统的安全漏洞和突发的异常行为,避免人工因疏忽出现的问题,有助于降低系统的误判率,有效保障用户系统的安全,降低系统恶意软件的安装率。
极验验证码产品据说是基于深度学习对人类的验证码行为和机器的行为进行建模,此外还用了聚类等无监督算法对样本进行分析。破解极验教程,就是利用了模型还没有对这一小撮行为进行标记确定的时间窗口,极验数据分析人员进行标记之后,自然这类绕过行为就被限制住了。网易也做了类似的验证码产品,原理应该也类似。
传统的杀软是基于文件签名和特征码来确定恶意文件的,这会导致大量漏报,因为恶意代码稍变形就可以绕过。后来出现了沙盒和虚拟机技术,可以对病毒的动态行为进行检测。这是从静态检测到动态分析的进步,对未知的恶意代码检测能力有了很大提升。但从本质上还是基于规则的检测。机器学习应用于恶意代码检测是大势所趋,大量论文都提出了自己的机器学习应用于恶意代码行为分析检测上的思路[3]。ESET、Cylance、CrowdStrike等厂商也推出了基于机器学习的恶意代码检测产品。
入侵检测是指“通过对审计数据、行为、安全日志或审计数据或其他网络上可以获得的信息进行操作,检测到对系统的闯入或闯入的企图”。早期有个叫作为CIDF(Common Intrusion Detection Framework)的组织,描绘了一个入侵检测系统的通用模型(见图1)。
图1 早期CIDF描绘的入侵检测模型
事件产生器(Event generators),如E盒;
事件分析器(Event analyzers),如A盒;
事件数据库(Event databases),如D盒;
响应单元(Responseunits),如R盒;
E盒采集数据并传递给A盒,A盒通过误用模式开始检测;A、E盒的数据存储在D盒,D盒可提供判断信息;R盒从A、E盒中提取数据,D盒启动适当的响应。A、D、E、R盒之间靠通用入侵检测对象GIDO(Generalized Intrusion Detection Objects,)和CISL(Common Intrusion Specification Language,通用入侵规范语言)协议进行通信。通过对GIDO实现标准化并使用CISL可在A、E、D及R盒之间实现不同种类互操作。
入侵检测的过程可以说是将问题分类的过程,主要目的是将“合法”流量与“恶意”流量区分开来。目前有很多威胁检测和入侵检测的方法。一般来说,网络入侵检测系统(NIDS)按照检测方式可以分为异常入侵检测(Anomaly Detection)和误用入侵检测(Misuse Detection)。
2.3.1 误用入侵检测
利用已知系统和应用软件的弱点攻击模式和已知恶意行为来检测入侵称为误用入侵检测。这是比较简单的检测方式,利用关于“坏”行为的特定描述,通过特征标识(Signatures)、黑名单以及其他入侵指标的学习完成训练过程。训练过程完成后,就能按照各种指标对新数据进行检测。如果没有击中任何标识,那么这个新数据就被判定为“好”数据。
传统的误用入侵检测技术主要有以下两种:
(1)基于专家系统的攻击检测技术。对专家在业务现场和实际运维中碰到的真实案例进行总结和提炼,翻译成机器可识别的语言再次碰到这个情况时可直接触发,专家模型依赖于专家经验的总结和沉淀适应性较广。
(2)基于模型推理的攻击检测技术。对已发生的攻击行为进行总结,通过大数据对行为进行总结和判断。通过大数据特定算法建立模型,监控特定行为触发判断机制,模型推理的攻击检测技术适用于大数据场景,依赖于算法的正确性和运算能力。
2.3.2 异常入侵检测
根据计算机资源使用情况和异常行为来检测入侵。通过定量方式描述可接受的行为特征是异常入侵检测的基本特征,可用以区分潜在的、非正常的入侵性行为。相比于误用入侵检测方式该方式更加量化指标,可通过量化指标区分出攻击流量和非攻击流量。
异常入侵检测可检查出非正常行为,从另一个维度发现问题。
异常入侵检测技术分以下两种情况:
(1)基于统计方法的攻击检测技术。对用户的历史数据进行统计和分析,通过正态分布图来分析用户的历史行为,当用户的数据超出正态分布区间时进行告警,该模式可预防90%以上攻击和异常,存在一定误报的风险;
(2)基于神经网络的攻击检测技术。神经网络算法作为一种全新的技术,实现算法较复杂需要开发者经验丰富,对算法本身的逻辑判断有很高的要求,能对实时检测得到的信息进行有效的处理,并做出攻击可能性的判断。
异常入侵检测的细微特征体现在不会设置一系列关于好坏不同的精确描述,而是可以利用机器学习找到某种程度上“突出”的信息。从原则上来说,如果不要求关于检测目标的精确描述,机器学习的算法就会非常有助于异常检测。
利用机器学习进行WebShell检测,主要思路分为静态检测、动态检测和流量检测。静态检测是把WebShell文件当作普通文本序列,使用词袋模型(BOW)、TD-IDF进行特征提取;动态检测是对opcode或系统调用序列进行建模;流量检测的思路是基于Web流量,根据一系列参数特征、信息熵、时间分布特征等对正常流量和WebShell访问流量样本训练分类模型,从而发现WebShell的访问行为。
机器学习在垃圾邮件检中的应用可以看成是对其运行原理的特殊应用,如:可将邮件定义为[-1,1],上限1代表垃圾邮件,下限-1代表正常邮件,通过专家经验确定垃圾邮件常用关键词,再通过机器学习提炼丰富垃圾邮件词库,提高垃圾邮件的检测率。
域名作为互联网访问的门户,往往作为黑客攻击的头道要素。过去通过域名系统、黑名单拦截、防火墙等的作用下,来实现对域名恶意攻击的检测。在新的机器学习方法下可通过对合法域名训练数据集的建立、恶意域名的剔除,进一步的调整和验证。以此来判断其是否属于恶意域名。
异常检测一般应用于白样本黑样本数量极不均衡(有监督的异常检测),或者没有标记信息(无监督的异常检测)的情况。常用的算法包括单分类SVM、周志华教授提出的孤立森林(Isolation Forest)、局部异常因子算法(Local Outlier Factor,LOF),对于序列样本有隐马尔可夫模型(HMM)、循环神经网络(RNN)、LSTM、Encoder-Decoder等算法可以用于异常检测[4]。
3.1.1 主动外联检测
现在的病毒大多采用分体形式进行感染,为了逃避安全域边界上的恶意代码检测机制,常先感染病毒母体,再释放自身在互联网上下载子体。还有基于隐蔽通道的SQL注入攻击、SSRF攻击、RFI攻击、反弹Shell等,也会出现由内网服务器主动对外发出请求的情况。针对此类攻击,可以在网络边界处进行流量收集,提取端地址、域名、协议、端口等维度的频次、时间段、数据包特征,对每个内网服务器的外联情况进行建模[5]。
3.1.2 内网流量异常检测
在APT或渗透攻击过程中,当黑客通过一定手段获取了某一台服务器权限,会利用这台服务器进行一定内网嗅探和漏洞利用尝试,因此安全防御机制需要考虑到来自内网服务器的攻击识别。当然可以用WAF或IDS之类的传统安全设备来做,但可能会丢掉很多有用的信息。比如在内网正常时的网络流量信息和Socket建立情况,其实可以利用这部分数据进行建模,当某个服务器突然出现了大量的对内网其他服务器的请求,这时就可以用模型来进行异常检测,从而进行报警。
3.1.3 Web异常访问检测
一个特定的线上网站,对于每个访问主体,访问序列和访问参数应该是有一定规律的。通常一个特定的访问序列对应着访问主体的某一个特定的访问目的,以修改网站个人信息为例,一般的访问页面序列应该是登录-首页-个人信息页-修改个人信息,而如果出现了登录-个人信息页500,这样的访问序列自然是不正常的,很有可能出现了水平越权查看其他用户信息的攻击。再以搜索接口为例,正常的搜索参数可能有3个,A是int,B和C是str,如果某个请求中A、B、C顺序不对、全都是str而且长度比同接口其他请求大很多,一定也是有问题的。
可以提取大量正常样本作为训练集,对参数key、value(包括请求参数和请求头等)进行分别建模,还可以提取其他必要的统计、分布特征,作为每个请求的特征向量。再对请求序列的URL路径进行词向量训练,这样就获得了访问序列的二维特征矩阵,和每个请求的特征向量合并在一起,作为模型训练集,得到异常检测模型。
强化学习(Reinforcement Learning,RL)也是可以应用在信息安全领域的。强化学习有其天生的优势,可以解决传统机器学习和深度学习难以解决的序贯决策问题,在与环境进行交互的过程中训练模型,如图2所示。
图2 强化学习
3.2.1 代码动态审计
目前常见的代码审计工具还都是基于规则的,把一些危险函数、SQL拼接语句等作为目标进行正则匹配,如果匹配到就报漏洞。而且基本上都是静态审计,也即没有运行代码,只是通过解析代码查找漏洞。
3.2.2 自动化渗透测试
目前的渗透测试基本上是手动的,当然有一些扫描工具,如AVWS、Nessus、APPScan等,虽然很省力,但测试覆盖面和深度上肯定是不如手动测试的。其实渗透测试也有一套成熟框架,单说漏洞挖掘和利用这个环节。一般都是渗透测试人员:(1)看到一个页面(或截包看到接口返回结果);(2)分析页面内容;(3)找到可尝试的参数;(4)设计Payload;(5)发送攻击请求;(6)查看返回结果,这样一个循环。
这个循环流程可以利用强化学习模型来模拟。首先使用深度学习算法对正常页面进行建模。实际进行渗透测试时,将当前页面抽象为状态(state)特征向量,按某种搜索策略选择Payload或者生成新的Payload,作为动作(action)向Web系统发送请求,根据已经训练好的深度网络模型判断返回页面的正常程度,返回Agent与正常程度成反比的回报(reward)。训练后,可以得到一个高效率的使页面返回不正常的渗透测试智能体。
号称基于机器学习的渗透测试工具GyoiThon,仔细看其源码和原理说明,发现其应用机器学习只是做了系统识别这一方面的工作,比如根据一些字段和页面内容的特征确定是哪个Web容器、CMS系统等,而实际的渗透测试还是调用了Metasploit框架进行的。
生成式对抗网络(Generative Advertorial Networks,GAN)是一项无监督学习技术,可以通过训练两个模型:生成模型(Generative Model)和判别模型(Discriminative Model)来用于无中生有。生成模型随机生成样本,判别模型对生成的样本进行判断真伪,如果与真实样本很像则返回接近1,一点都不像则返回接近0。当生成模型生成的样本判别模型看不出真假来了(返回接近0.5),则我们的生成模型就可以拿来用于生成以假乱真的新样本了。GAN可应用于信息安全以下几个方面。
3.3.1 生成蜜罐响应内容
蜜罐用来迷惑入侵攻击者,给安全管理人员宝贵的应急响应时间窗口和取证机会。如果蜜罐的返回结果不够真实(不像是正常系统被入侵后返回的结果),入侵者就会反应过来,不会再访问蜜罐,这个蜜罐的效果就不够好。GAN可以用来训练模型生成与正常系统很相似的响应内容,使蜜罐更具有迷惑性。
3.3.2 生成训练集
信息安全机器学习应用时常常遇到的最大困难就是黑白样本不均衡问题,黑样本获取难度大,导致绝大多数的训练样本都是白样本。此时可以在原黑样本集上增加一些随机少量扰动的方式生成黑样本,也可以尝试使用GAN自动生成一些黑样本。例如在已经收集的攻击Payload基础上,自动生成一些其他的Payload,其相似度很高,可以起到类似Fuzzing的效果。
文章在基于机器学习在安全领域应用的基础上,借助于异常检测、深化学习和生成对抗网络应用思想,提出一种解决提升产品安全系数和运行稳定性目的的可行性操作。利用该操作安全信息问题时,基本能够保证信息安全满足需求。在目前普遍的机器学习研究领域,提供一种新的可供参考的思路。但正如前文提到的,各个方案存在有个体上的差异性,其在处理过程中只能求同存异。因此,在方案选择方面还存在诸多值得继续研究完善之处。