CN114791801B - 一种基于多变体的软件安全防御方法和系统 - Google Patents
一种基于多变体的软件安全防御方法和系统 Download PDFInfo
- Publication number
- CN114791801B CN114791801B CN202210732182.6A CN202210732182A CN114791801B CN 114791801 B CN114791801 B CN 114791801B CN 202210732182 A CN202210732182 A CN 202210732182A CN 114791801 B CN114791801 B CN 114791801B
- Authority
- CN
- China
- Prior art keywords
- software
- variant
- code
- variants
- service
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
Abstract
本发明提出一种基于多变体的软件安全防御方法和系统,属于软件防御技术领域。所述方法包括:获取与软件服务对应的软件代码,基于所述软件代码的形式构造所述软件服务的多个软件变体,所述软件代码的形式包括软件源代码和软件中间代码;将构造出的所述软件服务的多个软件变体部署到多变体运行环境中,以构成软件服务变体集群,部署的所述多个软件变体向软件服务请求方提供软件服务,所述多变体运行环境包括若干容器,每个所述容器中至少包含一个所述软件变体。本发明以多样化的方法,使得信息系统具备应对和适应不断变化的环境,提高攻击难度,有效解决缺陷同质性带来的软件防御难题。
Description
技术领域
本发明属于软件防御技术领域,尤其涉及一种基于多变体的软件安全防御方法和系统。
背景技术
复杂软件代码重用率高,同源同构性是普遍存在的固有属性。同源同构软件具有相同的漏洞或缺陷,当单个软件被攻破后,攻击者可以无代价攻击其它同质软件。针对上述缺陷的滞后性防护手段对此类问题代价过高甚至难以奏效。因此,如何以多样化的方法,让信息系统具备应对和适应不断变化的环境,从而提高攻击难度,成为亟需解决的问题。
发明内容
为解决上述技术问题,本申请提出一种基于多变体的软件安全防御方案。
本发明第一方面公开了一种基于多变体的软件安全防御方法。所述方法包括:
获取与软件服务对应的软件代码,基于所述软件代码的形式构造所述软件服务的多个软件变体,所述软件代码的形式包括软件源代码和软件中间代码;
将构造出的所述软件服务的多个软件变体部署到多变体运行环境中,以构成软件服务变体集群,部署的所述多个软件变体向软件服务请求方提供软件服务,所述多变体运行环境包括若干容器,每个所述容器中至少包含一个所述软件变体;
其中,当有多个所述软件服务请求方请求所述软件服务时,所述软件服务变体集群以负载均衡的方式调用所述软件服务的多个软件变体;
其中,当发现所述软件服务变体集群中存在异常软件变体时,终止所述异常软件变体提供服务,令所述异常软件变体退出所述软件服务变体集群,并将所述异常软件变体上的软件服务请求以所述负载均衡的方式分配至其他正常工作的软件变体;
其中,持续构造所述软件服务的新的软件变体,并将所述新的软件变体不断部署到所述多变体运行环境,以加入所述软件服务变体集群,且不中断在先的各个软件变体正在运行的服务,从而实现所述软件变体的持续更新。
根据本发明第一方面的方法,当所述软件代码的形式为软件源代码时,利用如下方式构造所述多个软件变体:
在代码编译阶段向所述软件源代码中加入新的代码逻辑,以生成多个第一软件变体,所述加入新的代码逻辑包括:加入空指令随机注入、等价代码混淆、变量突变中的一种或多种;
提取各个所述第一软件变体的样本特征,通过特征距离计算来评估各个所述第一软件变体之间的差异性,所述样本特征包括代码逻辑特征、API序列特征、特征字符串、导入/导出表、行为特征中的一个或多个;
分析各个所述第一软件变体的产生逻辑与所述差异性之间的关系,更新生成多个所述第一软件变体的过程,通过不断迭代产生符合差异性目标的软件变体作为构造出的所述软件代码的多个软件变体。
根据本发明第一方面的方法,当所述软件代码的形式为所述软件中间代码时,利用如下方式构造所述多个软件变体:
获取运行在所述容器上的软件变体产生的所述中间代码,在所述中间代码中插入自定义软件逻辑,具体包括:
对于C和C++机器原生语言,利用低级虚拟机技术将其编译成中间表达作为所述中间代码,在所述中间表达上插入所述自定义软件逻辑;
对于直接获取的支持反射机制的二进制中间代码,以反射的方式将所述自定义软件逻辑注入到所述支持反射机制的二进制中间代码的字节码中;
对于直接获取的不支持反射机制的二进制中间代码,利用所述低级虚拟机技术提供的代码插桩机制和转换功能机制,通过修改所述不支持反射机制的二进制中间代码将所述自定义软件逻辑插入到指定位置;
将插入所述自定义软件逻辑的所述中间代码转换成对应的机器代码。
根据本发明第一方面的方法,实时采集所述软件变体的运行数据,并对所述运行数据进行安全分析,当发现所述软件变体存在运行异常的情况时,针对所述异常选择对应的防御策略,根据所述防御策略对所述异常软件变体进行安全修复或直接终止所述所述异常软件变体提供服务,并利用所述防御策略指导所述新的软件变体的构造过程。
本发明第二方面公开了一种基于多变体的软件安全防御系统。所述系统包括:
第一处理单元,被配置为:获取与软件服务对应的软件代码,基于所述软件代码的形式构造所述软件服务的多个软件变体,所述软件代码的形式包括软件源代码和软件中间代码;
第二处理单元,被配置为:将构造出的所述软件服务的多个软件变体部署到多变体运行环境中,以构成软件服务变体集群,部署的所述多个软件变体向软件服务请求方提供软件服务,所述多变体运行环境包括若干容器,每个所述容器中至少包含一个所述软件变体;
其中,所述第二处理单元具体被配置为:
当有多个所述软件服务请求方请求所述软件服务时,所述软件服务变体集群以负载均衡的方式调用所述软件服务的多个软件变体;
其中,当发现所述软件服务变体集群中存在异常软件变体时,终止所述异常软件变体提供服务,令所述异常软件变体退出所述软件服务变体集群,并将所述异常软件变体上的软件服务请求以所述负载均衡的方式分配至其他正常工作的软件变体;
其中,所述第一处理单元持续构造所述软件服务的新的软件变体,并将所述新的软件变体通过所述第二处理单元不断部署到所述多变体运行环境,以加入所述软件服务变体集群,且不中断在先的各个软件变体正在运行的服务,从而实现所述软件变体的持续更新。
根据本发明第二方面的系统,所述第一处理单元具体被配置为,当所述软件代码的形式为软件源代码时,利用如下方式构造所述多个软件变体:
在代码编译阶段向所述软件源代码中加入新的代码逻辑,以生成多个第一软件变体,所述加入新的代码逻辑包括:加入空指令随机注入、等价代码混淆、变量突变中的一种或多种;
提取各个所述第一软件变体的样本特征,通过特征距离计算来评估各个所述第一软件变体之间的差异性,所述样本特征包括代码逻辑特征、API序列特征、特征字符串、导入/导出表、行为特征中的一个或多个;
分析各个所述第一软件变体的产生逻辑与所述差异性之间的关系,更新生成多个所述第一软件变体的过程,通过不断迭代产生符合差异性目标的软件变体作为构造出的所述软件代码的多个软件变体。
根据本发明第二方面的系统,所述第一处理单元具体被配置为,当所述软件代码的形式为所述软件中间代码时,利用如下方式构造所述多个软件变体:
获取运行在所述容器上的软件变体产生的所述中间代码,在所述中间代码中插入自定义软件逻辑,具体包括:
对于C和C++机器原生语言,利用低级虚拟机技术将其编译成中间表达作为所述中间代码,在所述中间表达上插入所述自定义软件逻辑;
对于直接获取的支持反射机制的二进制中间代码,以反射的方式将所述自定义软件逻辑注入到所述支持反射机制的二进制中间代码的字节码中;
对于直接获取的不支持反射机制的二进制中间代码,利用所述低级虚拟机技术提供的代码插桩机制和转换功能机制,通过修改所述不支持反射机制的二进制中间代码将所述自定义软件逻辑插入到指定位置;
将插入所述自定义软件逻辑的所述中间代码转换成对应的机器代码。
根据本发明第二方面的系统,所述第二处理单元还被配置为:实时采集所述软件变体的运行数据,并对所述运行数据进行安全分析,当发现所述软件变体存在运行异常的情况时,针对所述异常选择对应的防御策略,根据所述防御策略对所述异常软件变体进行安全修复或直接终止所述所述异常软件变体提供服务;并且所述第一处理单元利用所述防御策略指导所述新的软件变体的构造过程。
本发明第三方面公开了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现本公开第一方面中任一项所述的一种基于多变体的软件安全防御方法中的步骤。
本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本公开第一方面中任一项所述的一种基于多变体的软件安全防御方法中的步骤。
本发明提供的技术方案具备以下技术效果:1.通过构造多样化的软件多变体,多样化软件变体具有不同的攻击面,解决了同源同构软件无法抵御相似攻击的问题;2.传统单体软件的构造以及部署模式,很难适应于大量多变体的大规模部署,采用容器化方式部署软件多变体,软件服务由多个变体复合形成服务实例集群,每个软件变体作为微服务实例运行在一个容器中,既保证了多变体之间的隔离,又保证了软件多变体之间的协同服务;3.实时监测软件多变体的运行状态,在遭受攻击时隔离异常变体,并反馈指导多变体构造模块构造出生成新的多变体,实现了软件防御能力的演化提升。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例的一种基于多变体的软件安全防御方法的流程图;
图2为根据本发明实施例的构造软件变体的示意图;
图3为根据本发明实施例的基于多变体的软件安全防御架构图;
图4为根据本发明实施例的一种基于多变体的软件安全防御系统的结构图;
图5为根据本发明实施例的一种电子设备的结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明第一方面公开了一种基于多变体的软件安全防御方法。图1为根据本发明实施例的一种基于多变体的软件安全防御方法的流程图;如图1所示,所述方法包括:(步骤S1)获取与软件服务对应的软件代码,基于所述软件代码的形式构造所述软件服务的多个软件变体,所述软件代码的形式包括软件源代码和软件中间代码。(步骤S2)将构造出的所述软件服务的多个软件变体部署到多变体运行环境中,以构成软件服务变体集群,部署的所述多个软件变体向软件服务请求方提供软件服务,所述多变体运行环境包括若干容器,每个所述容器中至少包含一个所述软件变体。
在步骤S1,获取与软件服务对应的软件代码,基于所述软件代码的形式构造所述软件服务的多个软件变体,所述软件代码的形式包括软件源代码和软件中间代码。
图2为根据本发明实施例的构造软件变体的示意图;如图2所示,具体地,在开发阶段,以软件代码为基础,通过编译器安全使能和自定义安全机制代码插装等技术构造软件多变体,通过多变体差异性分析,提高多变体的多样性。根据软件代码形式的不同,多变体构造有两种方法:1.基于源码编译的多变体构造,在软件代码的编译阶段加入新的代码逻辑,并通过差异性度量,生成多个具有差异性的软件多变体。2.基于中间代码的多变体构造,在无法提供软件源代码的情况下,通过对中间代码进行修改和插桩生成多变体。
在一些实施例中,当所述软件代码的形式为软件源代码时,利用如下方式构造所述多个软件变体:
在代码编译阶段向所述软件源代码中加入新的代码逻辑,以生成多个第一软件变体,所述加入新的代码逻辑包括:加入空指令随机注入、等价代码混淆、变量突变中的一种或多种;
提取各个所述第一软件变体的样本特征,通过特征距离计算来评估各个所述第一软件变体之间的差异性,所述样本特征包括代码逻辑特征、API序列特征、特征字符串、导入/导出表、行为特征中的一个或多个;
分析各个所述第一软件变体的产生逻辑与所述差异性之间的关系,更新生成多个所述第一软件变体的过程,通过不断迭代产生符合差异性目标的软件变体作为构造出的所述软件代码的多个软件变体。
具体地,基于源码(如C、C++、JAVA等编程语言编写的源代码)编译的多变体构造,在编译阶段生成大量具有多样性的软件变体,实现差异化的软件多变体,防止在同质化软件产生普遍性漏洞。步骤如下:
1.1a在编译阶段通过加入新的代码逻辑产生多变体,如加入空指令随机注入、等价代码混淆、变量突变等多变体产生逻辑,生成多个软件变体。
1.2a提取软件样本特征,如代码逻辑特征、API序列、特征字符串、导入/导出表,以及行为特征等,通过特征距离计算,评估多变体样本之间的差异性。
1.3a通过多变体之间的差异性度量结果,分析多变体产生逻辑与软件个体差异性之间的关系,对多变体编译器进行反馈调整产生新的多变体集合。
1.4a上述过程不断迭代,直至系统产生出符合差异性目标的软件多变体集合。
在一些实施例中,当所述软件代码的形式为所述软件中间代码时,利用如下方式构造所述多个软件变体:
获取运行在所述容器上的软件变体产生的所述中间代码,在所述中间代码中插入自定义软件逻辑,具体包括:
对于C和C++机器原生语言,利用低级虚拟机技术将其编译成中间表达作为所述中间代码,在所述中间表达上插入所述自定义软件逻辑;
对于直接获取的支持反射机制的二进制中间代码,以反射的方式将所述自定义软件逻辑注入到所述支持反射机制的二进制中间代码的字节码中;
对于直接获取的不支持反射机制的二进制中间代码,利用所述低级虚拟机技术提供的代码插桩机制和转换功能机制,通过修改所述不支持反射机制的二进制中间代码将所述自定义软件逻辑插入到指定位置;
将插入所述自定义软件逻辑的所述中间代码转换成对应的机器代码。
具体地,基于中间代码的多变体构造,在无法提供源代码的场景下,需要通过对中间代码进行插桩构造多变体。步骤如下:
1.1b为了对软件进行修改和增强,首先对软件程序进行转换。对于运行在虚拟机上的软件,在编译的时候会产生中间代码,在生成机器代码之前可以对中间代码进行修改,插入一些自定义的软件逻辑,用于提高性能、安全性等。对于C、C++等机器原生语言,一般情况下不会产生中间代码,可采用LLVM(Low Level Virtual Machine)技术,将这些编程语言编译成中间表达(IR),然后在IR上进行操作。
1.2b将自定义的多变体产生逻辑注入到二进制代码中。对于支持反射机制的语言(二进制中间代码),能够以反射的方式将自定义的多变体产生逻辑注入到程序的字节码中。对于不支持反射机制的语言(二进制中间代码),需要借助LLVM提供的代码插装LLVMPass机制和转换功能LLVM Instrumentation机制,修改中间代码IR,将自定义代码逻辑精确插入到指定的位置。
1.3b针对不同硬件平台,如x86_64、ARM等架构,将带有安全功能的IR转换成相应的机器代码。
其后步骤同1.2a-1.4a。
在步骤S2,将构造出的所述软件服务的多个软件变体部署到多变体运行环境中,以构成软件服务变体集群,部署的所述多个软件变体向软件服务请求方提供软件服务,所述多变体运行环境包括若干容器,每个所述容器中至少包含一个所述软件变体。
具体地,图3为根据本发明实施例的基于多变体的软件安全防御架构图;如图3所示,在运行环境方面,采用容器化的软件多变体运行环境,每个多变体运行在一个容器中,软件服务由多个多变体复合而成,并根据服务安全需求实现多变体服务的动态部署,当发现服务异常时,及时隔离异常变体。
在一些实施例中,当有多个所述软件服务请求方请求所述软件服务时,所述软件服务变体集群以负载均衡的方式调用所述软件服务的多个软件变体。
在一些实施例中,当发现所述软件服务变体集群中存在异常软件变体时,终止所述异常软件变体提供服务,令所述异常软件变体退出所述软件服务变体集群,并将所述异常软件变体上的软件服务请求以所述负载均衡的方式分配至其他正常工作的软件变体。
在一些实施例中,持续构造所述软件服务的新的软件变体,并将所述新的软件变体不断部署到所述多变体运行环境,以加入所述软件服务变体集群,且不中断在先的各个软件变体正在运行的服务,从而实现所述软件变体的持续更新。
具体地,将软件多变体分发部署到运行环境中,采用容器化方式部署软件多变体,容器的自治、隔离等特性有助于多变体的大规模应用和运行时的安全控制。步骤如下:
2.1一个软件服务由多个变体复合形成服务实例集群,每个软件变体作为微服务实例运行在一个容器中,对该服务的请求通过负载均衡(如轮询、随机、加权轮询等)发送给不同变体的服务实例执行。
2.2根据服务安全需求动态调整软件多变体服务实例集群,当变体出现异常时,及时隔离异常变体的服务。
2.3在运行过程中,软件多变体构造模块不断产生新的变体,这些变体需要快速部署到运行环境中。采用灰度发布的方式,逐渐上线部署新的多变体,而不中断服务的运行,实现多变体的连续更新。
在一些实施例中,实时采集所述软件变体的运行数据,并对所述运行数据进行安全分析,当发现所述软件变体存在运行异常的情况时,针对所述异常选择对应的防御策略,根据所述防御策略对所述异常软件变体进行安全修复或直接终止所述所述异常软件变体提供服务,并利用所述防御策略指导所述新的软件变体的构造过程。
具体地,实时监测软件多变体的运行状态,在遭受攻击时隔离异常变体,并反馈指导多变体构造模块构造出生成新的多变体,实现了软件防御能力的演化提升。
具体地,软件多变体运行时监控,为了获得软件的安全状态,对多变体进行运行时监控及分析,评估多变体在遭受攻击时的安全问题,并指导生成安全防御策略应用于多变体构造和部署。步骤如下:
3.1 运行时监测子模块实时采集日志(系统日志、应用日志)、事件、系统调用等与安全相关的高维度数据。系统日志、应用日志和事件等数据是多变体自身或者系统自身输出的,可直接采集。系统调用和细粒度执行流需要利用中间代码插桩技术,将能够追踪的代码逻辑提前注入到多变体中。在多变体的运行过程中,这些追踪逻辑会被触发,记录多变体执行过程。
3.2 运行时安全分析子模块利用采集到的日志、事件、系统调用等高维度信息,进行安全评估、安全问题定位。采用机器学习或传统分类算法对采集到的日志、事件、系统调用等多维度信息进行分析,分析出有安全问题的异常软件变体及攻击类型。同时异常变体服务终止,并退出软件服务变体集群,将该变体上的服务请求迁移到其他软件变体上
3.3安全防御策略决策子模块根据运行阶段的安全问题分析结果,从可行的安全防御策略集合中,选择合适的策略应用于多变体,并且能够根据运行环境的变化自适应调整安全抵抗措施,同时保证不对性能产生明显影响。
3.4 在构造阶段,当已知软件防御代码时,将防御代码以插桩的方式插入到该变体中以修复软件变体,修复后的软件变体重新加入软件服务变体集群,并将防御代码插入到新构造的软件中,以抵御未来同种攻击。
3.5 新的软件变体将再次经历运行、监控、分析、优化步骤3.1-3.4。
本发明第二方面公开了一种基于多变体的软件安全防御系统。图4为根据本发明实施例的一种基于多变体的软件安全防御系统的结构图;如图4所示,所述系统400包括:
第一处理单元401,被配置为:获取与软件服务对应的软件代码,基于所述软件代码的形式构造所述软件服务的多个软件变体,所述软件代码的形式包括软件源代码和软件中间代码;
第二处理单元402,被配置为:将构造出的所述软件服务的多个软件变体部署到多变体运行环境中,以构成软件服务变体集群,部署的所述多个软件变体向软件服务请求方提供软件服务,所述多变体运行环境包括若干容器,每个所述容器中至少包含一个所述软件变体;
其中,所述第二处理单元402具体被配置为:
当有多个所述软件服务请求方请求所述软件服务时,所述软件服务变体集群以负载均衡的方式调用所述软件服务的多个软件变体;
其中,当发现所述软件服务变体集群中存在异常软件变体时,终止所述异常软件变体提供服务,令所述异常软件变体退出所述软件服务变体集群,并将所述异常软件变体上的软件服务请求以所述负载均衡的方式分配至其他正常工作的软件变体;
其中,所述第一处理单元401持续构造所述软件服务的新的软件变体,并将所述新的软件变体通过所述第二处理单元402不断部署到所述多变体运行环境,以加入所述软件服务变体集群,且不中断在先的各个软件变体正在运行的服务,从而实现所述软件变体的持续更新。
根据本发明第二方面的系统,所述第一处理单元401具体被配置为,当所述软件代码的形式为软件源代码时,利用如下方式构造所述多个软件变体:
在代码编译阶段向所述软件源代码中加入新的代码逻辑,以生成多个第一软件变体,所述加入新的代码逻辑包括:加入空指令随机注入、等价代码混淆、变量突变中的一种或多种;
提取各个所述第一软件变体的样本特征,通过特征距离计算来评估各个所述第一软件变体之间的差异性,所述样本特征包括代码逻辑特征、API序列特征、特征字符串、导入/导出表、行为特征中的一个或多个;
分析各个所述第一软件变体的产生逻辑与所述差异性之间的关系,更新生成多个所述第一软件变体的过程,通过不断迭代产生符合差异性目标的软件变体作为构造出的所述软件代码的多个软件变体。
根据本发明第二方面的系统,所述第一处理单元401具体被配置为,当所述软件代码的形式为所述软件中间代码时,利用如下方式构造所述多个软件变体:
获取运行在所述容器上的软件变体产生的所述中间代码,在所述中间代码中插入自定义软件逻辑,具体包括:
对于C和C++机器原生语言,利用低级虚拟机技术将其编译成中间表达作为所述中间代码,在所述中间表达上插入所述自定义软件逻辑;
对于直接获取的支持反射机制的二进制中间代码,以反射的方式将所述自定义软件逻辑注入到所述支持反射机制的二进制中间代码的字节码中;
对于直接获取的不支持反射机制的二进制中间代码,利用所述低级虚拟机技术提供的代码插桩机制和转换功能机制,通过修改所述不支持反射机制的二进制中间代码将所述自定义软件逻辑插入到指定位置;
将插入所述自定义软件逻辑的所述中间代码转换成对应的机器代码。
根据本发明第二方面的系统,所述第二处理单元402还被配置为:实时采集所述软件变体的运行数据,并对所述运行数据进行安全分析,当发现所述软件变体存在运行异常的情况时,针对所述异常选择对应的防御策略,根据所述防御策略对所述异常软件变体进行安全修复或直接终止所述所述异常软件变体提供服务;并且所述第一处理单元401利用所述防御策略指导所述新的软件变体的构造过程。
本发明第三方面公开了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现本公开第一方面中任一项所述的一种基于多变体的软件安全防御方法中的步骤。
图5为根据本发明实施例的一种电子设备的结构图,如图5所示,电子设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、近场通信(NFC)或其他技术实现。该电子设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示屏上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本公开的技术方案相关的部分的结构图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本公开第一方面中任一项所述的一种基于多变体的软件安全防御方法中的步骤。
本发明提供的技术方案具备以下技术效果:1.通过构造多样化的软件多变体,多样化软件变体具有不同的攻击面,解决了同源同构软件无法抵御相似攻击的问题;2.传统单体软件的构造以及部署模式,很难适应于大量多变体的大规模部署,采用容器化方式部署软件多变体,软件服务由多个变体复合形成服务实例集群,每个软件变体作为微服务实例运行在一个容器中,既保证了多变体之间的隔离,又保证了软件多变体之间的协同服务;3.实时监测软件多变体的运行状态,在遭受攻击时隔离异常变体,并反馈指导多变体构造模块构造出生成新的多变体,实现了软件防御能力的演化提升。
请注意,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种基于多变体的软件安全防御方法,其特征在于,所述方法包括:
获取与软件服务对应的软件代码,基于所述软件代码的形式构造所述软件服务的多个软件变体,所述软件代码的形式包括软件源代码和软件中间代码;
将构造出的所述软件服务的多个软件变体部署到多变体运行环境中,以构成软件服务变体集群,部署的所述多个软件变体向软件服务请求方提供软件服务,所述多变体运行环境包括若干容器,每个所述容器中至少包含一个所述软件变体;
其中,当有多个所述软件服务请求方请求所述软件服务时,所述软件服务变体集群以负载均衡的方式调用所述软件服务的多个软件变体;
其中,当发现所述软件服务变体集群中存在异常软件变体时,终止所述异常软件变体提供服务,令所述异常软件变体退出所述软件服务变体集群,并将所述异常软件变体上的软件服务请求以所述负载均衡的方式分配至其他正常工作的软件变体;
其中,持续构造所述软件服务的新的软件变体,并将所述新的软件变体不断部署到所述多变体运行环境,以加入所述软件服务变体集群,且不中断在先的各个软件变体正在运行的服务,从而实现所述软件变体的持续更新。
2.根据权利要求1所述的一种基于多变体的软件安全防御方法,其特征在于,当所述软件代码的形式为软件源代码时,利用如下方式构造所述多个软件变体:
在代码编译阶段向所述软件源代码中加入新的代码逻辑,以生成多个第一软件变体,所述加入新的代码逻辑包括:加入空指令随机注入、等价代码混淆、变量突变中的一种或多种;
提取各个所述第一软件变体的样本特征,通过特征距离计算来评估各个所述第一软件变体之间的差异性,所述样本特征包括代码逻辑特征、API序列特征、特征字符串、导入/导出表、行为特征中的一个或多个;
分析各个所述第一软件变体的产生逻辑与所述差异性之间的关系,更新生成多个所述第一软件变体的过程,通过不断迭代产生符合差异性目标的软件变体作为构造出的所述软件代码的多个软件变体。
3.根据权利要求2所述的一种基于多变体的软件安全防御方法,其特征在于,当所述软件代码的形式为所述软件中间代码时,利用如下方式构造所述多个软件变体:
获取运行在所述容器上的软件变体产生的所述中间代码,在所述中间代码中插入自定义软件逻辑,具体包括:
对于C和C++机器原生语言,利用低级虚拟机技术将其编译成中间表达作为所述中间代码,在所述中间表达上插入所述自定义软件逻辑;
对于直接获取的支持反射机制的二进制中间代码,以反射的方式将所述自定义软件逻辑注入到所述支持反射机制的二进制中间代码的字节码中;
对于直接获取的不支持反射机制的二进制中间代码,利用所述低级虚拟机技术提供的代码插桩机制和转换功能机制,通过修改所述不支持反射机制的二进制中间代码将所述自定义软件逻辑插入到指定位置;
将插入所述自定义软件逻辑的所述中间代码转换成对应的机器代码。
4.根据权利要求3所述的一种基于多变体的软件安全防御方法,其特征在于,实时采集所述软件变体的运行数据,并对所述运行数据进行安全分析,当发现所述软件变体存在运行异常的情况时,针对所述异常选择对应的防御策略,根据所述防御策略对所述异常软件变体进行安全修复或直接终止所述异常软件变体提供服务,并利用所述防御策略指导所述新的软件变体的构造过程。
5.一种基于多变体的软件安全防御系统,其特征在于,所述系统包括:
第一处理单元,被配置为:获取与软件服务对应的软件代码,基于所述软件代码的形式构造所述软件服务的多个软件变体,所述软件代码的形式包括软件源代码和软件中间代码;
第二处理单元,被配置为:将构造出的所述软件服务的多个软件变体部署到多变体运行环境中,以构成软件服务变体集群,部署的所述多个软件变体向软件服务请求方提供软件服务,所述多变体运行环境包括若干容器,每个所述容器中至少包含一个所述软件变体;
其中,所述第二处理单元具体被配置为:
当有多个所述软件服务请求方请求所述软件服务时,所述软件服务变体集群以负载均衡的方式调用所述软件服务的多个软件变体;
其中,当发现所述软件服务变体集群中存在异常软件变体时,终止所述异常软件变体提供服务,令所述异常软件变体退出所述软件服务变体集群,并将所述异常软件变体上的软件服务请求以所述负载均衡的方式分配至其他正常工作的软件变体;
其中,所述第一处理单元持续构造所述软件服务的新的软件变体,并将所述新的软件变体通过所述第二处理单元不断部署到所述多变体运行环境,以加入所述软件服务变体集群,且不中断在先的各个软件变体正在运行的服务,从而实现所述软件变体的持续更新。
6.根据权利要求5所述的一种基于多变体的软件安全防御系统,其特征在于,所述第一处理单元具体被配置为,当所述软件代码的形式为软件源代码时,利用如下方式构造所述多个软件变体:
在代码编译阶段向所述软件源代码中加入新的代码逻辑,以生成多个第一软件变体,所述加入新的代码逻辑包括:加入空指令随机注入、等价代码混淆、变量突变中的一种或多种;
提取各个所述第一软件变体的样本特征,通过特征距离计算来评估各个所述第一软件变体之间的差异性,所述样本特征包括代码逻辑特征、API序列特征、特征字符串、导入/导出表、行为特征中的一个或多个;
分析各个所述第一软件变体的产生逻辑与所述差异性之间的关系,更新生成多个所述第一软件变体的过程,通过不断迭代产生符合差异性目标的软件变体作为构造出的所述软件代码的多个软件变体。
7.根据权利要求6所述的一种基于多变体的软件安全防御系统,其特征在于,所述第一处理单元具体被配置为,当所述软件代码的形式为所述软件中间代码时,利用如下方式构造所述多个软件变体:
获取运行在所述容器上的软件变体产生的所述中间代码,在所述中间代码中插入自定义软件逻辑,具体包括:
对于C和C++机器原生语言,利用低级虚拟机技术将其编译成中间表达作为所述中间代码,在所述中间表达上插入所述自定义软件逻辑;
对于直接获取的支持反射机制的二进制中间代码,以反射的方式将所述自定义软件逻辑注入到所述支持反射机制的二进制中间代码的字节码中;
对于直接获取的不支持反射机制的二进制中间代码,利用所述低级虚拟机技术提供的代码插桩机制和转换功能机制,通过修改所述不支持反射机制的二进制中间代码将所述自定义软件逻辑插入到指定位置;
将插入所述自定义软件逻辑的所述中间代码转换成对应的机器代码。
8.根据权利要求7所述的一种基于多变体的软件安全防御系统,其特征在于,所述第二处理单元还被配置为:实时采集所述软件变体的运行数据,并对所述运行数据进行安全分析,当发现所述软件变体存在运行异常的情况时,针对所述异常选择对应的防御策略,根据所述防御策略对所述异常软件变体进行安全修复或直接终止所述异常软件变体提供服务;并且所述第一处理单元利用所述防御策略指导所述新的软件变体的构造过程。
9.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现权利要求1至4中任一项所述的一种基于多变体的软件安全防御方法中的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1至4中任一项所述的一种基于多变体的软件安全防御方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210732182.6A CN114791801B (zh) | 2022-06-27 | 2022-06-27 | 一种基于多变体的软件安全防御方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210732182.6A CN114791801B (zh) | 2022-06-27 | 2022-06-27 | 一种基于多变体的软件安全防御方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114791801A CN114791801A (zh) | 2022-07-26 |
CN114791801B true CN114791801B (zh) | 2022-08-30 |
Family
ID=82463822
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210732182.6A Active CN114791801B (zh) | 2022-06-27 | 2022-06-27 | 一种基于多变体的软件安全防御方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114791801B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112671882A (zh) * | 2020-12-18 | 2021-04-16 | 上海安畅网络科技股份有限公司 | 一种基于微服务的同城双活系统和方法 |
CN112839036A (zh) * | 2020-12-30 | 2021-05-25 | 中国人民解放军战略支援部队信息工程大学 | 基于拟态防御理论的软件运行环境生成方法及系统 |
CN113918276A (zh) * | 2021-09-17 | 2022-01-11 | 浪潮思科网络科技有限公司 | 一种基于容器的sdn控制器部署方法、设备及介质 |
CN114546425A (zh) * | 2022-01-25 | 2022-05-27 | 深圳无域科技技术有限公司 | 模型部署方法、装置、电子设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8584080B2 (en) * | 2010-03-22 | 2013-11-12 | International Business Machines Corporation | Modeling and generating computer software product line variants |
-
2022
- 2022-06-27 CN CN202210732182.6A patent/CN114791801B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112671882A (zh) * | 2020-12-18 | 2021-04-16 | 上海安畅网络科技股份有限公司 | 一种基于微服务的同城双活系统和方法 |
CN112839036A (zh) * | 2020-12-30 | 2021-05-25 | 中国人民解放军战略支援部队信息工程大学 | 基于拟态防御理论的软件运行环境生成方法及系统 |
CN113918276A (zh) * | 2021-09-17 | 2022-01-11 | 浪潮思科网络科技有限公司 | 一种基于容器的sdn控制器部署方法、设备及介质 |
CN114546425A (zh) * | 2022-01-25 | 2022-05-27 | 深圳无域科技技术有限公司 | 模型部署方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114791801A (zh) | 2022-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Li et al. | Cerebro: context-aware adaptive fuzzing for effective vulnerability detection | |
Salis et al. | Pycg: Practical call graph generation in python | |
Schulte et al. | Automated repair of binary and assembly programs for cooperating embedded devices | |
CN103389939B (zh) | 一种针对堆可控分配漏洞的检测方法及系统 | |
CN102880546A (zh) | 一种基于xml数据库的软件集成测试方法及系统 | |
Tian et al. | Test data generation for path coverage of message-passing parallel programs based on co-evolutionary genetic algorithms | |
Colombo et al. | poly Larva: runtime verification with configurable resource-aware monitoring boundaries | |
Jantz et al. | Performance potential of optimization phase selection during dynamic JIT compilation | |
CN112559367A (zh) | 基于系统调用依赖图的内核模糊测试用例生成方法 | |
US20200117433A1 (en) | Code optimization conversations for connected managed runtime environments | |
Panigrahi et al. | An approach to prioritize the regression test cases of object-oriented programs | |
Mishra et al. | Test case optimization and prioritization based on multi-objective genetic algorithm | |
Grimmer et al. | Supporting program analysis for non-mainstream languages: experiences and lessons learned | |
CN115562987A (zh) | 针对智能合约调用序列优化与资源分配导向的模糊测试方法 | |
CN114791801B (zh) | 一种基于多变体的软件安全防御方法和系统 | |
Chen et al. | Test generation for embedded executables via concolic execution in a real environment | |
CN105279065A (zh) | 在云测试平台中统计测试结果的方法及装置 | |
JP6127639B2 (ja) | プログラム実行制御プログラム、プログラム実行制御方法 | |
CN100465853C (zh) | 基于程序内部行为监控的软件安全保障的方法 | |
Ji et al. | Effuzz: Efficient fuzzing by directed search for smart contracts | |
Yeboah-Antwi et al. | Online Genetic Improvement on the java virtual machine with ECSELR | |
Ghafari et al. | Improved Harris Hawks Optimizer with chaotic maps and opposition-based learning for task scheduling in cloud environment | |
Wang et al. | Smart contract vulnerability detection for educational blockchain based on graph neural networks | |
Shirzad et al. | Scheduling optimization of parallel linear algebra algorithms using supervised learning | |
Li et al. | Ota: An operation-oriented time allocation strategy for greybox fuzzing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |