深度学习软件系统安全

  随着深度学习越来越多地应用于安全关键领域,对模型预测准确性的高度信任至关重要。正如传统的软件开发一样,对模型行为正确性的信心源于对各种可能场景的严格测试。然而,与传统的软件开发不同,深度学习系统的逻辑是通过训练过程学习的,这为许多可能的意外行为原因打开了大门,例如训练数据中的偏差,过度拟合,欠拟合等等。作为一个实际的代码行不存在,深度学习模型极难测试,那些做的人面临两个关键挑战:如何触发模型的所有(或至少大部分)逻辑以发现不正确的行为;如果没有人工检查,如何识别这种不正确的行为。

  研究小组结合差分测试和模糊测试的方法,设计实现了高效的深度学习系统灰盒测试工具,从而提高深度学习系统测试的神经元覆盖率,并发现更多存在于神经网络模型中的异常行为,同时也可以通过生成测试输入反馈训练提高神经网络模型的精度。具体来说,首先从图片上抽取图像的关键特征作为模糊测试的变异点,再通过输出一致性保证的变异算法进行关键素点变异或图像旋转等变异操作,并将变异前后的图片输入到DNN进行预测,变异前后预测结果的距离以及神经元覆盖信息的距离作为变异的导向因素,使得DNN产生不正确的输出,并得到改动尽可能小的对抗样本。通过差分模糊测试,和传统多模型对比的模糊测试相比,可以显著降低测试的难度提升通用性。


区块链软件系统安全

  区块链技术逐渐成为热门话题,其应用前景受到各国政府、科研机构和企业公司的高度重视与广泛关注。随着技术的发展,区块链应用与项目层出不穷,但其安全问题不容忽视。近年来,区块链安全事件日益增多,引发的后果较为严重,造成的经济损失数以亿计。在智能合约,虚拟机,底层设施都存在大量的安全风险。

  小组围绕区块链系统中代码的安全性展开,探测评估分析区块链系统的安全漏洞及不足,研究区块链系统中的智能合约,虚拟机及设施层代码跨层全栈的等安全评估分析,增强相关业务的安全。结合区块链平台代码的特点,采用分层次的导向性模糊测试方法对区块链平台进行系统化的测试。本方法拓展了传统模糊测试方法的单一输入,根据待测程序的分层情况将程序拆分,从而使用多重入口测试程序的不同层次;拓展了传统方法的导向目标(单纯的覆盖率导向),将代码的提交、修复、接口等类型的信息加入测试目标的计算,从而有所侧重地测试具有重大测试意义的模块。具体地:分层次的特性,能够支持区块链平台从代码编译、字节码执行到网络通信、数据存储等各个层次,从不同入口高效测试各个层次中存在的内存安全问题;导向性的特性,能够支持区块链平台从最初的开源代码导入,到新功能引入,以及缺陷修复等生命周期中的各个环节。


固件、二进制应用安全

  工业控制系统是国家关键基础设施的重要组成部分,它被广泛用来执行关键基础设施的生产控制。在电力、石化、天然气、水利、智能制造和轨道交通等诸多关乎国计民生的行业领域,超过80%的关键基础设施均使用某些类型的工业控制系统。随着信息和互联网技术的高速发展以及它们向各产业的不断延伸与渗透,原有封闭、孤立的工业控制系统逐步走向开放、互联,一个高度自动化、个性化和互动化的工业互联网即将诞生。与此同时,工业互联网也将面临着更加严峻的安全威胁。仅2016年一年,美国ics-cert收录的针对工业控制系统的网络攻击事件就高达290起,包括电网、水利设施和交通系统在内的关键基础设施均成为攻击目标。在国内,cncert的工控漏洞库(ics-cnvd)2017年新增漏洞351个,较去年同比增长104%。如何高效挖掘工控软件系统的安全漏洞具有重要意义。

  研究小组瞄准面向复杂工控环境下的工控软件链漏洞分析与安全增强技术,研究并完成工业互联网设备驱动、固件等漏洞的自动化挖掘和漏洞库管理框架,指导保障工控安全实践。主要包含三点:1)提出固件和硬件驱动智能提取策略;2)设计工控固件及驱动的抽象模型表示方法并建设基于抽象模型表示的软件链漏洞库;3)搭建大规模工控设备对象在复杂战场环境下的快速检测平台。小组将突破现有工控软件链模型表示及漏洞分析方法的限制,通过启发式固件及驱动提取二进制表示,再基于二进制强化语义流抽象模型,运用深度学习进行特征向量及语义签名提取,快速解决设备驱动及固件跨硬件平台的漏洞数据库的抽象表示。通过语义化深度学习的漏洞克隆静态分析和导向性的并行模糊动态测试,静动结合以支持海量漏洞的特征存储和匹配,实现面向大规模工控设备软件链的漏洞自动挖掘和漏洞库的建立。


应用及操作系统软件安全

  操作系统中存在很多潜在漏洞代码,严重威胁业务应用的可靠性。根据2005年至2016年,针对3094个CVE漏洞的4080个安全补丁统计表明,漏洞数量最多的为Linux内核,漏洞数量前10名软件有5个与Linux及其发行版有关。因此,如何在确保内核稳定性条件下,挖掘内核的缺陷并保障内核顺利部署,从而保障业务应用的可靠性具有十分重要的意义。

  小组围绕内核漏洞的挖掘展开研究工作,从业务场景实际负载统计数据与内核历史版本漏洞入手,以模糊测试产生的崩溃输入、漏洞报告作为测试输出。整体来看,该部分为两大部分。首先,针对业务场景负载,通过性能分析工具,进行业务场景特征抽取,将业务场景特征作为模糊测试入口函数的选择依据。然后,针对内核历史漏洞,通过基于语义学习的克隆检测框架,进行内核代码漏洞克隆检测,挖掘内核潜在漏洞位置作为模糊测试目标测试函数。最后,基于业务特征与潜在漏洞,进行业务特征驱动的潜在漏洞导向内核模糊测试。本测试模型与现有模糊测试不同点在于,现有模糊测试未考虑反馈、或仅以内核代码覆盖率作为反馈来指导模糊测试,未考虑实际业务场景特征。以业务场景负载特征为指导,结合内核漏洞克隆检测技术,可以更为高效快速的进行内核模糊测试。


模型驱动的软件开发

  随着物联网技术的飞速发展,嵌入式系统不仅在传统的航空航天、工业控制、军事装备等领域发挥重要作用,而且越来越深入到自动驾驶、智能家居、医疗健康等人们日常生活的方方面面中。由于软件代码本身的隐蔽性和复杂性,在嵌入式设备生产出来之后,人们很难察觉到软件中存在的问题,所以任何的代码错误都可能导致严重的后果。传统的人工编写代码的软件开发方式难以保证不会出现误差,而采用可视化的建模并配合代码自动生成的基于模型的软件开发方式可以在提高系统开发效率的同时有效减少人为错误的出现。

  研究小组针对现有模型驱动开发工具在代码生成和模型质量保障方面展开了多年的研究。主要解决现有工具生成的代码运行效率低、模型仿真效率低以及模型测试不充分的问题。为此,研究小组设计了如上图所示的代码生成框架,并在此框架基础上完成了多项成果。首先模型解析层将不同建模工具构建的模型转化为模型中间表示(MIR),从而实现不同建模工具到该框架的对接。模型中间表示具有很强的扩展性,可以方便地接入新的建模工具。之后调度转换层将模型中间表示中不同的语义模型转化为基于控制流逻辑的代码中间表示(CIR)。基于代码中间表示可以使用代码翻译层中不同的代码翻译器实现建模过程中的多种任务,比如生成用于部署到目标设备的代码、生成用于快速仿真的代码、生成用于测试的代码等。在调度转换层和代码翻译层之间设计了代码优化层,它可以对代码中间表示进行多阶段的优化从而实现高质量代码生成。该代码生成框架能够促进模型驱动开发领域中代码生成工具的整体水平。