韩 烨,周利均
(1.中电科网络空间安全研究院有限公司,河北 保定 071800;2.中国电子科技网络信息安全有限公司,四川 成都 610041)
21 世纪以来,网络空间作为“第五空间”引领了人类生产、生活方式的重大变革。但是,网络与信息技术的广泛应用在极大促进了经济、社会繁荣进步的同时,也带来了新的安全风险与挑战。在网络空间安全的博弈中,于攻防双方而言,漏洞不是万能的。漏洞是决定网络空间对抗胜负的战略资源。在“网络战”硝烟四起、国家级网络攻击频繁打响的背景下,石油、电力、能源等关键基础设施软件程序和网络系统中的漏洞发现成为攻击者与防御者争夺的关键领域[1]。
漏洞不同于病毒、木马、恶意软件等人为制造的系统脆弱点,存在于网络信息系统硬件、软件、协议和策略等多个维度,是可能对系统结构、功能和数据造成损害的固有缺陷[2],在现有的技术条件下无法实现彻底根除。任何一个信息系统都存在漏洞,漏洞的发现与利用往往只存在很小的时间间隔。对于攻击者而言,先发现漏洞就能立即设计漏洞利用机制,开展针对网络信息系统的破坏攻击;对防御者而言,先发现漏洞就可立即着手修补工作,建立免疫机制,有效减少来自网络的威胁,降低潜在的损失。在一定历史时期的软件架构、服务模式或开发风格限制下,漏洞的产生速率趋于稳定,攻击者与防御者关于漏洞的识别和发现能力直接影响对抗的成败[3]。
当前,如何有效分析与发现漏洞已经成为世界各国网络安全领域的研究重点。提升对漏洞资源的掌控能力,已成为维护国家安全和公众权益的重要保障和迫切需求。目前,漏洞挖掘方法主要包括开源代码分析和逆向分析[3]等,以手工实施为主,在时效性、准确度和专业化上都远远难以满足进行有效实时防御的需求。为了应对持续严峻的网络空间安全挑战,业界开始尝试多种技术组合的方式来提高挖掘分析能力。卡耐基梅隆大学的Avgerinos 等人提出一种面向控制流的漏洞利用方案AGE[4],首次实现了漏洞的自动挖掘。后续提出的Mayhem 系统,融合了符号执行与模糊测试两种漏洞挖掘方法,在美国国防部高级研究计划局(Defense Advanced Research Projects Agency,DARPA)2016年举办的“网络超级挑战赛”(Cyber Grand Challenge,CGC)中获得第一名[5]。360 冰刃实验室提出的Digtool 系统根据不同漏洞的特点,将漏洞细分为OOB 越界访问漏洞、UAF 释放后使用漏洞、Time-Of-Check-To-Time-Of-Use 漏洞、参数未检查漏洞、信息泄露漏洞和竞争条件型漏洞6 种,并利用硬件虚拟化和Intel PT 等技术提升系统调用接口和内核活动的能力,收集虚拟机内核的运行情况,达到自动发掘与利用漏洞的目的[6]。Wang 等人针对物联网漏洞提出了一种基于AutoDES 调度策略的漏洞自动发现与利用框架,提高了漏洞发现和利用的效率和有效性[7]。
从当前的研究来看,“分布式并行计算平台+虚拟机堆叠”的方式存在平台通用性差、虚拟机单点资源受限、协同方式单一等缺陷。如何通过人类专家的漏洞挖掘方法经验与异构多引擎计算资源的融合,构建合理分工、高效协作、成本均衡和自主进化的新型漏洞挖掘作业平台,是提高实时化、规模化漏洞挖掘能力的核心问题。本文余下部分对基于群体智能技术的漏洞挖掘实现机理进行了详细探讨。其中,第1 部分简要介绍群体智能的特征及其在网络空间安全中的重点应用;第2 部分阐述利用群体智能进行漏洞挖掘的原理;第3 部分构建基于群体智能的漏洞挖掘模型;最后总结全文。
“群体智能”一词最早在1989 年由Gerardo Beni 和Jing Wang 提出[8],用于描述具有分布控制、去中心化特点的自组织智能行为,即鱼群、鸟群、蜂群等低等智能体通过群体间的交互协作涌现出来的明显超越个体智能水平的集体智慧。群体智能突出表现为两类模式,即自上而下有组织的群智行为和自下而上自组织的群智涌现。在这两类不同的模式中,虽然构成群体的每一个体都不具有智能或只具有有限的智能,但整个群体却表现出远超过任意个体能力的智能行为,形成了一种“集体脑”思考的效果,从而为很多极具挑战性的复杂性问题提供了崭新的解决方案和思路[9]。
群体智能的核心理念包括多元化、分布式、强协同和自适应等,突出特点为天然的高并发能力、快速高效的搜索求解能力、极强的环境适应性、高鲁棒性及自恢复能力。群体通过遵循简单的行为规则,涌现出宏观上复杂的智能行为,应用竞争和合作等多种自主协同方式共同应对挑战性任务,特别是开放环境下的复杂系统决策任务。这种独特而泛在的智能模式已被应用于体制优化、组织管理、商业创新以及社会模拟等领域[10-12],也是我国新一代人工智能重点发展的五大智能形态之一,在推动我国新一代人工智能技术发展中占据重要地位。
网络空间安全是攻防博弈的对抗,网络安全的“木桶效应”说明系统的整体防御能力并不取决于其长板,而是取决于其短板。防御者的最高目标在于发现和抵消攻击者所能造成的所有破坏,而这一目标的实现需要所有安全主体、客体共同参与御敌。可见,网络空间安全中这类攻防态势的非对称性,为群体智能的引入和推广提供了理论前提和组织基础。通过不同类型、不同等级、不同侧重点的安全参与者的连接和协同,来完成全局安全目标下的复杂防御任务,能够为解决复杂网络空间安全问题提供新方法和新思路。
群体智能在网络空间安全中的重点应用包括入侵检测、网络测绘、态势感知和密钥管理等方面。尤其值得注意的是漏洞挖掘领域,群体智能具有巨大的应用潜力[13-14]。群体智能的多元性使漏洞发现评估验证主体能够广泛参与,达到更高的挖掘效率;群体智能的并发性使挖掘工作齐头并进,规模效果显著拓展,达到更快的挖掘速度;群体智能的协同性使不同水平级别主体间实现能力互补,达到更低的挖掘成本;群体智能的适应性使系统从经验定式中学习改进挖掘能力,达到更优的挖掘迭代。整体上,可以预期漏洞挖掘领域的群体智能能够有效利用多方参与者的知识、经验和能力,高效完成大规模、短时限漏洞挖掘任务,为扭转攻防非对称的局面提供有效解决途径,驱动漏洞挖掘进入“全民时代”[15]。
理论是技术突破和应用创新的基础。漏洞挖掘作为一类以网络或计算机软硬件系统为对象,以静态或动态方式开展的,以识别目标在设计、实现或部署等方面存在的脆弱性为目标的活动,可以将其实施的过程形式化为支持语义计算的流程模型。在高度随机复杂的网络空间环境下,面向漏洞挖掘的群体智能工程与4 大因素相关,即参与漏洞挖掘的主体(人或机)、挖掘使用的工具、挖掘需达成的目标任务和挖掘所处的物理网络环境。漏洞挖掘即是在这4 类因素构成的一定的时空条件下,在主观或客观的知识、经验或规则引导下完成的,宏观上具备主体动态性、工具多样性、目标非线性和环境时变性等特点。
漏洞挖掘的主体A(Attendees)、工具T(Tools)、目标G(Goal)和环境E(Environment)紧密关联。通过对4 类要素分别选择合适的模型建模,使群智漏洞挖掘过程的自动规划运行成为可能。
关于漏洞挖掘的主体A,它的取值既包括不同能力水平的人员,也包括不同功能性能的计算平台。基于知识图谱对主体进行基于属性的多角度刻画,形成关于主体的准确画像,促进人机协同、机群协同、工具选取和任务规划的自动化。
关于漏洞挖掘的工具T,它的范围既包括传统的扫描工具、探测工具和模糊测试工具,也包括符号执行辅助、机器学习/深度学习驱动的漏洞挖掘工具。将这些工具归纳形成有序的工具谱系,按照“挖掘工具-功能组件-原子能力”三级结构建立开放标签系统,使其能够以便捷、灵活的方式嵌入群智漏洞挖掘过程的自动化组织、重构和编排中。
关于漏洞挖掘的目标G,可以将其建模为自动机模型的状态子集。如果将对象系统所有组件的状态作为系统整体的状态刻画,则对象系统的状态空间可看作组件状态空间的笛卡尔积。在漏洞挖掘过程中,在用户与工具的作用下,系统将发生状态转移。如果进入了设计者未曾预期的、可导致被利用的状态,则在网络空间中可认为找到了一条漏洞的发现路径。
关于漏洞挖掘的环境E,它既包括群体智能漏洞挖掘过程所依赖的环境,也包括该所过程所改变的环境。能够对漏洞挖掘产生影响的环境要素包括政策、法规、条令、制度以及激励等。微观环境包括已知漏洞、软件结构、网络状态和平台属性等。不同要素对群智挖掘过程的影响各不相同,总体表现为条件或限制性的作用。
在定义了相关的要素后,可以将漏洞挖掘归约为两个递进问题——“如何在一定的环境约束E 下,通过选择参与主体A 的子集a、挖掘工具T 的子集t,构建对象系统状态转移路径path,使系统进入目标集合G 中的可接受状态集合g?”“如果存在多条这样的路径,如何选出其中效费比最优的一条?”可以看出,最优化路径极值的求解是群智漏洞挖掘规划的核心,需综合考虑时间和空间上分散的漏洞挖掘主体和可获取的工具集,将群体中的个体能力有效编排和聚合,在可接受的计算时间和空间复杂度内完成挖掘工作。
群体智能系统的运行原理与传统计算的“尽力而为”机制不同。它的能力与作用的发挥程度与适当的任务策略和激励机制直接相关。漏洞挖掘的主体具有多元性、工具具有多样性、环境具有时变性、漏洞挖掘产出具有偶然性,如何在有限的资源条件下实现漏洞挖掘要素的最佳配置,发挥各个主体的优势形成合力,恰当的激励引导机制非常关键。
激励是通过理性化的制度来反映激励主体与激励客体相互作用的科学概念。从组织行为学看,激励机制是指通过特定的方法与管理体系,满足工作参与者的内在需求和外在需求,调动工作参与者的积极性、主动性和能动性,将工作参与者对组织的贡献度最大化,进而实现组织目标的过程。群体智能漏洞挖掘理念符合激励科学中的目标设定理论,主要研究者是埃德·洛克(Ed.Locke)和加里莱瑟姆(Gary P.Latham)[16]。激励体系如图1 所示。
图1 基于群体智能的漏洞挖掘激励体系
在激励体系中,首先将系统的输入转化为与漏洞挖掘相关的安全需求,再将安全需求明确为需要执行的漏洞挖掘任务。此过程中,将环境E 和系统目标G 联系起来,建立有效和有意义的任务内容。其次,将系统目标G 与主体A 通过利益驱动联系起来,为主体参与任务执行提供充分和持续的动机。再次,将主体A 与工具T 通过行为联系起来,使主体能够运用适当的工具达到任务推进的目标。最后,根据任务执行结果,判断挖掘目标是否达成,并将任务执行的过程进行复盘,在输出结果的同时,对相关主体进行奖励或惩罚。
基于目标设定理论的漏洞挖掘群体智能涌现机制,本质上是通过建立有效的和有意义的绩效目标,激励参与者按照任务牵引目标实现的过程。目标的设定要随着任务的进展、环境的变化、个体能力的增长、可用工具的情况适时变化,尽可能提高群智漏洞挖掘的效果。可用的优化原则包括长期激励与短期激励相结合、个体目标与整体目标相结合、公平性与差异性相结合、时效性与明确性相结合等。
为实现漏洞挖掘过程的人机协同,引入群体智能。需要分解漏洞挖掘任务,将复杂的任务系统拆解为相对独立的子任务,将子任务分配给各漏洞挖掘参与者(包括漏洞挖掘主体与工具)。根据任务的定义,将重复性较强、计算能力要求较高的子任务分配给计算平台,将需要分析与理解的子任务分配给人类型主体(如网络安全专家)[17]。
3.2.1 参与者能力刻画
漏洞挖掘主体与漏洞挖掘工具是漏洞挖掘任务中的两个主要参与者。对于挖掘主体来说,不同漏洞挖掘主体的挖掘能力与挖掘成本不同。例如,网络安全人员有初学者与专家之分,计算平台有算力与运行成本的区分。此外,不同网络安全人员对不同种类的漏洞熟悉程度可能不同,不同漏洞挖掘工具也可能适用于不同的漏洞挖掘任务。因此,为发挥群体智能的功用,实现漏洞挖掘主体之间的优势互补和资源与工具的优化配置,需要评估每个漏洞挖掘参与者在不同漏洞挖掘子任务上的能力,并利用数学语言量化描述评估结果,据此在不同漏洞挖掘子任务与其最佳适配的漏洞挖掘主体或工具之间完成双向映射,启动挖掘流程。
为实现不同漏洞挖掘参与者在不同漏洞挖掘子任务上能力的有效评估,需要对参与漏洞挖掘活动的各主体与工具进行基于知识工程的本体属性详细画像[18]。本文通过构建可扩展、可查询、可推理的漏洞挖掘知识图谱,实现对人类型主体的基本属性、社会属性、偏好属性、行为属性和专业属性,以及计算平台类主体的基本属性、硬件属性、软件属性、配置属性等必要信息进行有序组织和管理,利用知识推理促进人机协同、机群协同、工具选取等过程的自动化,引导产生合适的激励效果。
知识图谱的构建过程如图2 所示,主要分为以下步骤。
(1)采集不同来源的数据,包括用户手动录入的信息、已知漏洞信息(可从NVD、CNNVD、CNVD 等现有安全漏洞数据库中获取)、挖掘工具以及软件信息(可从Github,Maven 等代码托管平台获取)等,主要分为结构化数据、半结构化数据以及非结构化文本等。
(2)围绕漏洞挖掘的目标与需求,收集整理上述信息,根据相关专家的意见,对相关领域知识进行概念化与形式化,形成规范的本体结构,并定义本体之间的相互关系[19-20]。本文将漏洞挖掘中的主要参与者包括网络安全专家、计算平台、漏洞挖掘工具等,以及4.1 节中定义的漏洞挖掘子任务、漏洞挖掘对象(如软件信息等),作为知识图谱中的本体。定义“漏洞提交”(安全专家与漏洞之间)、“共同库依赖”(不同软件之间)、“攻击类型相同”(不同漏洞之间)等关系,充分描绘漏洞挖掘过程。
(3)根据本体构建结果,利用自然语言处理等技术,从半结构与非结构化数据中抽取漏洞挖掘实体及其相关属性。将实体属性存入该实体在知识图谱中对应的节点,根据关系抽取结果确定节点之间的连接。
(4)利用实体链接技术,对知识图谱中的冗余节点进行实体消歧,将不同数据源中获取的实体对象链接到同一个节点[21]。
(5)利用Neo4j 等图数据库存储知识图谱,供后续使用。
图2 知识图谱构建流程
在完成知识图谱的构建后,定义漏洞挖掘主体节点、工具节点以及漏洞挖掘任务节点之间的距离计算规则,通过距离计算确定挖掘主体与挖掘任务之间的匹配程度。利用基于符号的推理技术和基于统计的推理技术[22],估算漏洞挖掘主体节点、漏洞挖掘工具节点以及与漏洞挖掘任务节点之间的距离关系。前者基于经典逻辑(一阶谓词逻辑或者命题逻辑)或经典逻辑的变异(如说缺省逻辑)对知识进行推理,后者通过机器学习方法利用统计规律实现节点间关系的推断。
3.2.2 目标函数与收益函数
定义漏洞挖掘的目标函数如下:
其中,N1为3.1 节中定义的所有分配给漏洞挖掘主体(包括人类型主体和计算平台)的挖掘任务的数量,N2为3.1 节中定义的所有分配给漏洞挖掘工具的挖掘任务的数量。Pi表示所有漏洞挖掘主体对第i个子任务的贡献总和。Qi´表示所有漏洞挖掘工具对第i´个子任务的贡献总和。γ为权重系数。
定义:
其中pk,i表示挖掘主体k对第i个漏洞挖掘子任务的贡献,ql,i´表示挖掘工具l对第j个漏洞挖掘子任务的贡献。K与L分别表示漏洞挖掘主体与挖掘工具的总数。
定义:
式中Ai,k表示漏洞挖掘主体k在任务i上的能力度量,可利用3.2.1 节中构建的知识图谱通过知识推理确定。Ti,k表示挖掘主体k在任务i上的工作时长,φ(Ti,k)为时间-效用映射函数,将工作时长映射为漏洞挖掘的绩效因子。显然,能力越强的主体,工作时间越长,对任务的贡献也越大。e-λni为衰减项,ni为当前致力于完成挖掘任务i的挖掘主体数量,λ为惩罚因子。当致力于完成任务i的挖掘主体数量较多时,每个挖掘主体的贡献会相应减小,对整体目标函数的优化作用也会相对减弱。此时,系统会倾向于使挖掘主体向尚未涉及的任务分散。
对于挖掘工具,定义:
式中ηl,i´为漏洞挖掘工具l与漏洞挖掘任务i´的匹配程度,可以通过先验知识与知识图谱获得。nl,i´为运行工具l的计算单元数,通常在任务启动时根据计算需求进行分配。Tj表示计算单元j的工作时间。
为充分发挥人类型挖掘主体(如网络安全工程师)的主观能动性,需要设定合理的激励机制使其通过参与漏洞挖掘工作而获得回报。
设人类型漏洞挖掘主体k获得的收益为Uk,定义:
式中,pk,i为参与者k对任务i的贡献,φ(pk,i)为贡献-激励映射函数。C为漏洞的类别数。Pi,l为参与者在完成任务i时发现类型为l的漏洞的概率,可根据参与者以前的任务经历进行评估。Bl为发现类别为l的漏洞后挖掘者获得的额外奖励。由此可见,人类型漏洞挖掘主体的收益由其对漏洞挖掘任务的贡献与提交漏洞后获得的奖励两部分组成。
为实现计算资源的优化配置,定义ζk´为计算平台类主体k´的净运行成本:
式中Ck´,i为计算平台k´参与任务i´时花费的运行成本,与运行时间呈现正相关。计算平台类主体的净运行成本等于其实际运行成本与贡献的差值。
同理,可计算漏洞挖掘工具的净运行成本σl:
3.2.3 工作分配机制
漏洞挖掘任务的分配过程可以视为一个多目标优化的过程。通过为参与者分配适合的漏洞挖掘任务,使总体目标函数、参与漏洞挖掘的人类型主体的收益函数以及计算平台与工具的净运行成本的相反数均获得最大值。由于各个目标之间存在相互制约,多目标优化问题通常不存在使所有目标性能都达到最优的解。因此,工程实际中,通常以迭代方式求解问题的Pareto 解集作为最优解。
借鉴文献[23]中的方法,将优化目标表示为:
其 中T=(T1,T2,…,TN)T,N=(N1+N2)(K1+K2+L)。向量T中每个元素表示某个漏洞挖掘主体(或工具)在某个漏洞挖掘子任务上的工作时间,满足0 ≤Ti≤τ,i=1,…,N,其中τ为工作时间上限,由环境约束E 确定。Ti=0 表示当前实体(或工具)没有参加对应的漏洞挖掘任务。
为计算方便,将约束条件0 ≤Ti≤T变形为-(Ti)2+τTi≥0,则多目标优化问题可以表示为:
为求解该问题,需要将约束问题转换为非约束问题。
定义惩罚项:
θ为惩罚因子。
为描述方便,将G(T)重新表述为G(T)=(G1(T),G2(T),…,Gm(T))T,m=K1+K2+L+1,则对于第j(j=1,2,…,m)个优化目标,构建包含惩罚项的目标函数如下:
对gj(T+d)进行泰勒展开,有:
对于Tk来说,迭代方向d满足d=T-Tk,故目标函数gj(T)可以表示为:
定义目标评价函数η(T)为所有目标函数的加权和:
计算η(T)对d的求导结果,得到评价函数在Tk处的迭代方向dk,表达式为:
与牛顿法中的牛顿方向的定义相同。
当η(T)不满足连续二阶可导时,不能保证牛顿方向始终为其下降方向。为使优化过程中所有迭代方向均为下降方向,提高优化效率,在此处增加一个判别环节,即当某处牛顿方向为上升时,将评价函数η的负梯度方向作为迭代方向。
定义ak为牛顿方向与负梯度方向的内积,则:
求解Pareto 解的具体步骤如下。
步骤1:每个优化目标构建包含惩罚项的目标函数gj(T)和目标评价函数η(T)。
步骤2:给定起始点T0,确定停止条件ε与μ、迭代步长α以及惩罚因子θ。
步骤3:依次计算目标函数gj(T)的梯度,如果,则停止迭代,直接跳转至步骤7。
步骤4:根据式(17)计算迭代方向dk。
步骤6:更新变量T的值,令Tk+1=Tk+αdk,k=k+1,返回步骤3。
步骤7:计算惩罚项h(T),如果|h(T)|≤μ,则停止迭代,并输出Tk;否则,令θ=10θ并返回步骤2,目的是确保求得的解满足所有约束条件。
漏洞挖掘参与者的能力存在差异,在实际应用过程中通常会通过冗余分发的形式,将同一个漏洞挖掘子任务分发给不同的人。因此,需要由网络安全专家对不同漏洞挖掘者提交的漏洞报告进行汇总分析,探讨漏洞的形成机理,酌情给漏洞提交者发放额外奖励,进而形成初步的漏洞检测报告发布在漏洞挖掘平台上,指导其他漏洞挖掘参与者进一步发现新的漏洞,提高漏洞挖掘的准确率和效率。
漏洞挖掘是网络安全领域的重要课题,软硬件系统漏洞使得攻击者可以借此入侵系统、窃取信息或者控制、破坏目标,从而引发各种网络安全问题。网络是一个整体,任何一个部件存在漏洞都会成为黑客攻击的跳板,成为整个系统的薄弱环节。作为近几年的新兴热点,群体智能为实现人机协同的软件与系统脆弱性研究提供了先进的技术手段。本文创造性地将群体智能技术集成到网络安全的应用场景中,可以有效降低漏洞挖掘的人力与资源成本,提高挖掘效率。未来将在本文研究成果的基础上搭建基于群体智能的漏洞挖掘平台,利用群体智能技术更具科学性的漏洞挖掘策略与知识汇总策略,进一步实现漏洞挖掘任务的群体化与智能化。