软件应用风险分析与缓解

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

软件应用程序的自动风险分析与缓解

摘要

本文提出了一种新颖的半自动风险分析方法,该方法不仅能够识别针对软件应用中资产的威胁,还能量化其风险,并建议相应的软件保护措施以缓解这些风险。基于软件、攻击、防护措施及其关系的形式化模型,我们的实现方案在真实世界的应用中表现出良好的性能。这项工作是迈向面向用户友好的软件应用保护专家系统的第一步。

关键词

软件保护 · Software风险分析 · Software攻击

1 引言

软件已经渗透到我们的日常生活中。无论我们从事何种领域,我们都依赖软件应用程序来娱乐和简化工作。此外,软件是全球经济的支柱之一,推动着从数十亿到数万亿美元的经济活动。开发者必须保护其应用程序免受篡改,并防止软件中的机密数据被泄露。简而言之,企业必须保护其软件中的资产,这些资产面临着来自破解者所发起的强大攻击威胁,即终端人攻击(MatE攻击),因为破解者完全控制了待保护软件的执行环境。

当需要保护软件时,人为经验是主要因素,几乎是唯一因素。大型公司可以设立专门团队来决定如何保护其应用程序,或者支付专业公司提供服务,而中小型企业则无法承担妥善保护其软件所需的费用。由于持续处于易受攻击的状态,不仅可能损害企业自身,造成经济损失,还可能影响到我们所有人,成为各类恶意软件传播的途径。因此,需要自动或辅助技术来帮助软件开发者保护其应用程序。

在本文中,我们提出了一种新的风险分析方法,用于(1)识别针对目标应用程序中资产的威胁,(2)量化其风险,以及(3)建议潜在缓解措施。在此背景下,mitigations是为降低各资产暴露于已识别风险的情况而采取的防护措施。本研究是迈向专家系统的第一步,该系统能够指导软件开发者完成软件保护的所有关键阶段。虽然我们的长期目标是使软件保护成为像编译一样标准化、近乎一键操作的常规流程,但在短期内,我们的方法可为中小型企业提供一个颇具吸引力的解决方案。

这项工作的初步版本已经发表[1],仅关注自动威胁识别。与我们之前的方法相比,本文的主要改进在于风险量化以及缓解措施的提出。此外,我们大幅提升了模型的表达能力,从而提高了攻击识别阶段的准确性。通过对攻击者目的、策略和篡改方法的形式化建模,可以进行更复杂的分析,并将发现的攻击与能够降低其可能性和后果的防护措施相关联。结合更复杂漏洞识别系统的形式化,构建和验证我们的新型风险分析模型需要评估攻击和防护措施对软件资产的影响。为了更好地验证我们的模型,我们通过向软件保护专家发放问卷的方式收集了评估信息。

本文结构如下。第2节介绍我们的方法、输入、输出以及工作流程。第3节引入一个参考应用,我们将使用该应用来具体描述我们的成果。第4节描述用于风险分析的正式模型,以描述应用程序。第5节介绍威胁与缓解识别引擎,其性能在第6节中详细说明。第7节介绍该领域的前期工作。最后,第8节总结结论并勾画未来的研究方向。

2 方法

本节介绍了我们方法的总体概述,其工作流程如图1所示。

我们系统的输入是需要保护的应用程序的源文件集合。目前仅支持C语言和C++语言,但该相同的核心思想可以轻松扩展到任何其他编程语言。第一阶段,应用模型构建,包括对源代码的静态分析,通过解析和分析源代码来创建应用程序的抽象模型。

我们将被分析应用程序中的通用代码片段称为应用部件。应用程序部分要么是数据,包括(全局和局部)变量、类字段以及函数/方法参数,要么是代码区域,即函数、方法、类或函数/方法中的特定代码段。代码区域具有层次结构,使其能够包含其他应用部件。例如,一个类(一个代码区域)可以包含一个方法(另一个代码区域),而该方法又包含一个局部变量(一个Datum)。除了包含关系外,应用部件还通过一组其他关系相互连接,例如调用图信息。有关这些关系的更多详细信息见第4节。

一旦初始应用程序模型被自动构建完成,用户必须通过选择哪些应用部件实际上需要被保护以及需要在这些部件上保证的安全属性来最终确定模型。至少与一个安全属性相关联的应用部件被称为资产。这是在资产识别阶段中完成的。识别资产在我们的方法中至关重要,因为它们既是需要保护的元素(开发者的视角),也是攻击的目标(攻击者的视角)。在本研究中,我们关注四种安全属性:完整性与机密性(已在我们之前的论文中建模)以及执行正确性和弱机密性(本文的新贡献)。

例如,某些应用部件在必须防止被修改时,可以标记integrity属性。在这种情况下,这些部件要么难以被修改,要么任何修改都必须能够被检测到。在其他情况下,开发者可能希望保证执行正确性,这是一种更强的完整性形式,此外还要求代码区域必须按预期被调用。例如,标记了执行正确性的应用部件不能被跳过,如身份验证/许可证检查。标记了机密性属性的部件对攻击者来说必须是不可理解的,例如用于解密媒体流的密钥或专利算法。某些数据也可以被标记为具有弱保密性属性。当攻击者能够在应用程序执行的每一时刻获取该数据值时,此属性即被视为已突破(因此对于硬编码数据而言,弱保密性与普通机密性相同)。这种情况主要与那些通过分布式方法持续获取数据值、以针对受害者应用程序资产(而非攻击者的副本)的攻击相关。例如,在一次性密码生成器中,下一个密码是通过对固定种子和每次生成时都会更新的计数器进行哈希运算而产生的,存储该计数器的变量可以被标记为具有弱保密性。为了预测后续的所有密码(而不仅仅是下一个),攻击者仅仅一次性获取受害者计数器的值是不够的,他必须在每次生成之前都能获取该值。因此,攻击者必须每次都能够访问受害者应用程序读取计数器值,或者他必须获取一个计数器,理解计数器更新函数,并在其副本上重现。

在资产识别过程中,用户还可以覆盖先前自动推断出的关系,或通过更精确的关联对其进行细化。此外,某些重要信息可能无法通过自动工具提取,因为正确识别这些信息需要源代码中无法推断出的知识。例如,准确判断某个函数是否对数据进行加密或解密是复杂的,特别是当代码使用了专用加密库时。此外,某些推断出的关系可以通过人工用户干预转化为更准确的关系。例如,只有在通过先前的许可证检查后,许可证验证函数才能调用另一个函数。这些函数会通过自动分析以简单的调用关系自动关联。然而,我们的模型支持更具表达力的关联方式,即启用关系,用于表示一个函数只有在另一个函数“成功”执行后才能被执行。为了简化此阶段的操作,我们开发了一种简单而有效的领域特定语言,如第4节所述。通过该语言,手动添加的数据可以保存到磁盘上,避免每次分析时都要求用户重新输入。

一旦由用户构建并验证了有效且准确的应用程序模型,在脆弱性分析阶段,我们的系统将识别出所有可能破坏资产安全属性的攻击,并为用户生成漏洞报告。攻击是由攻击者实施攻击必须执行的一系列更简单操作(即攻击步骤)组成的。因此,在本例中,一次攻击是一个有序的攻击步骤列表,因而被称为攻击路径。这种简化不会影响我们分析的准确性,因为我们关注的是攻击的影响,而不考虑其步骤的顺序如何。例如,当 step2和 step3可以同时执行或它们的相对顺序无关紧要时,就会产生两条攻击路径(step1, step2, step3)和(step1, step3, step2)。在向用户生成报告时,我们的方法将通过消除重复项仅展示上述两条攻击路径中的一条。这些示例攻击路径被称为唯一攻击路径。

在检测到攻击路径后,进行strategy identification阶段。该阶段旨在对推断出的攻击路径中的所有攻击步骤进行分类,以理解它们对达成目标的作用。在我们的研究中,我们将攻击步骤分为七种策略类型:静态和动态代码分析、静态和动态篡改、嗅探与欺骗,以及入侵攻击。需要注意的是,嗅探与欺骗还包括传统的网络中间人(MitM)攻击步骤,而入侵类型则包含代码注入以及试图控制应用程序受害者的副本。

最后,缓解阶段会生成一份缓解报告,列出所有可用于缓解(阻止或增加难度)所有攻击路径的保护技术。在我们的方法中,一项防护措施能够以特定的有效性级别(低、中等或高)来缓解一组攻击步骤类型。我们假设,如果某项防护措施能够缓解攻击路径中的至少一个步骤,则该攻击路径被视为已缓解。此阶段考虑了以下防护措施:
– 反调试,这使得通过附加可信调试器进行动态分析变得更加困难,从而防止攻击者使用他们自己的[2];
– 算法隐藏,这是一组针对逆向工程的混淆技术,用于保护代码的机密性和可理解性[3];
– 调用栈检查,通过检查函数是否按正确顺序调用以验证执行正确性[4];
– 屏障切片,通过将数据和代码区域移动到将在其中执行的可信服务器上来强制保证其完整性[5];
– 代码保护,即在应用程序中添加的用于检测和响应完整性破坏的检查[6];
– 代码移动性,通过将应用程序部分从应用程序中移除并在运行时需要执行时再安装,以保护其免受逆向工程和分析[7];
– 数据隐藏,涉及修改数据结构和函数的数据流以确保数据机密性[8];
– 远程证明,通过强制应用程序定期向验证服务器发送完整性证明来保护应用程序完整性[9]。

在审查了缓解报告中提出的保护措施后,可以将建议的防护措施应用于资产。ASPIRE项目通过使用特殊注解对所有变量和代码区域进行标记来实现这一阶段,这些注解随后由定制ASPIRE保护工具链处理。

3 参考示例

我们在此介绍一个用于测试我们方法的应用程序,即Linux记忆游戏,这是一款用C语言编写的开源视频游戏,基于流行的纸牌游戏记忆。游戏使用一组成对的卡片,所有卡片初始时正面朝下放置在桌面上。玩家的目标是以最少的翻牌次数找出所有的匹配对。该游戏提供五个技能等级:小家伙、新手、熟练、大师和守护进程。在“小家伙”难度等级中,所有卡片均为正面朝上且可见(适合儿童)。而在最高难度级别中,每次翻牌后卡片会以不同且越来越难的方式移动。

在我们的参考示例中,攻击者的主要目标是以最少的翻开的卡片数量获胜。另一方面,软件开发者必须保护游戏的公正性和最高分的有效性,例如像《魔兽世界》那样保持玩家的兴趣。

图2描绘了一个示意图,展示了游戏中最重要应用程序部分之间的关系(函数调用、变量访问和初始化)。卡牌值存储在全局变量lmem state中,该变量是一个整数向量,其元素是卡牌矩阵中的单元格,属于一项资产。必须保护其弱保密性,因为攻击者可以让所有卡牌可见;同时也必须保护其完整性,因为他可以强制形成已知卡牌排列。

lmem状态由lmem Newgame()函数设置,该函数在新游戏开始时执行。lmem Newgame()也是一个资产,其完整性必须得到保护。

关键数据还包括点击计数,这是一个用于统计翻转卡牌数量的整型变量。开发者必须保证其完整性,以避免非预期修改(例如攻击者可能降低该值以提高其最终得分)。

每次翻转卡牌时都会执行函数 lmem flip card(),其逻辑可以总结为以下步骤:
(1)当用户点击一张新卡牌时,将其正面朝上;
(2)增加点击计数;
(3)如果已有两张卡牌正面朝上,则将它们翻转为正面朝下;
(4)如果已有一张卡牌正面朝上,并且它与新卡牌匹配,则从桌面上移除这两张卡牌;
(5)根据选定的技能等级重新排列所有正面朝下的卡牌。

lmem from Little One()函数会翻转所有卡片,该函数由lmem Level()函数调用,而当用户将难度等级从初级难度更改为更高级别时,便会调用 lmem Level()函数。这三个函数必须避免被修改,因为可能针对它们发起大量攻击,即必须保证其执行正确性。

在接下来的章节中,我们将识别一组可用于改变应用程序正常工作流程的攻击。我们将通过非正式地介绍其中一些攻击来开始讨论。

攻击者可能会首先尝试发现所有卡牌的位置,即使它们正面朝下,或者强制设定已知卡牌配置。攻击者可以通过调试一个写入该向量的函数(例如在新游戏开始时执行的 lmem Newgame())来定位lmem状态,从而通过动态或静态分析轻松识别。动态或静态分析。他可以通过使用之前游戏中的已知卡牌配置,在lmem Newgame()中强制设定某些卡牌值。

攻击者还可以静态或动态地更改lmem Level(),以避免调用lmem from Little One()函数。通过这种方式,攻击者可以从“小家伙”难度等级开始,然后切换到更高等级,从而能够以所有卡牌正面朝上的方式游戏。

最后,lmem flip card() 的每一步都存在漏洞。攻击者可以篡改代码,避免点击计数增加,从而获得合理的分数(步骤 2)。他可以阻止卡片正面朝下翻转(步骤 3)。他可以跳过卡片匹配检查,从而使所有成对的卡片从桌面上移除,轻松获胜(步骤 4)。最后,他还可以假装在较高技能级别进行游戏,而实际上却在较低难度下进行游戏(5 步)。

4 应用程序建模

我们的方法旨在通过知识库(KB)自动推断出攻击以及缓解这些攻击的防护措施。在此背景下,起始知识是应用程序本身。理论上,应用程序代码是最佳的信息来源,因为它对完整的应用程序行为进行模型化。然而,它也包含了一些对我们分析类型而言并不重要的低级别细节。因此,一种更抽象的形式更适合我们的目的,即应用程序元模型。

图3勾画了我们方法中描述通用应用程序的元模型的UML类图。在我们的元模型中,一个应用程序本质上是若干应用部件的容器,这些应用部件可以是Datum,也可以是代码区域。代码区域可以递归地包含一个或多个其他应用部件。

每个应用部件都有一个名称(例如变量或函数名)和一个weight(权重),权重是一个非负实数,用于明确表示该部件的重要性(权重越大,部件越重要)。权重仅对资产有意义,并在风险评估过程中用于计算风险值。

阶段。应用部件与一个非空的安全属性列表相关联,以确保这些安全属性得到保障,这些安全属性也被视为攻击者的目标。

数据类存储了一个额外的type属性,用于声明其数据类型(例如,整数或字符串)。该字段用于排除不合适的保护措施,因为某些技术可能仅适用于特定类型的实例(例如,仅对整型变量进行数据混淆)。

代码区域是具有以下关系的复杂类型:
– 一个代码区域在读取或写入其内容时,会访问accesses一个Datum;
– 一个代码区域用一个值初始化initializes一个Datum(表示首次向变量中写入值);
– 一个代码区域调用 calls另一个代码区域;
– 一个代码区域启用 enables另一个代码区域,如果它的执行依赖于另一个代码区域的(成功)执行。

我们的元模型很简单,可以手动构建,但由于实际应用程序可能包含数百甚至数千个应用部件,因此这项任务可能会非常耗时。为此,我们方法中的应用模型构建阶段会从源代码中自动提取应用程序模型,并相应地实例化其组件。

如第2节所述,静态分析可能导致结果不准确或不完整,需要通过用户输入进行验证和细化来补充。为了帮助用户存储这些额外信息,我们开发了一种领域特定语言——应用程序描述语言(ADL),它表达了与应用程序元模型相同的概念,但形式更便于人工阅读。其巴科斯‐诺尔语法规则如图4所示。

终结符ID和FLOAT分别表示一个有效的C/C++标识符和一个无符号浮点数值。例如,图5报告了记忆游戏中lmem flip card()、lmem Newgame()和 lmem状态 资产的ADL描述。

5 脆弱性分析与缓解

在本节中,我们将介绍我们方法中的漏洞分析与缓解报告步骤。有关脆弱性分析的初步工作已在先前发表的论文中提供[1],其主要思想总结如下:
– 事实被存储到知识库(KB)中,知识库最初由来自应用程序模型的应用程序信息填充。
– 攻击者的目标是破坏资产属性。目标被建模为属性。本文中的属性包括:机密性、弱保密性、完整性以及执行正确性。
– 攻击步骤被建模为推理规则 P → C(id),其中 id 是identifier(即攻击步骤的名称), P 是一组前提,即知识库中必须为真的事实集合,以触发该步骤; C 是一组结论,即在执行攻击步骤后成立的额外事实集合。需要注意的是,某些攻击步骤(例如设置远程服务器)并不会直接破坏任何安全属性,它们只是破坏某些属性(如某些数据的机密性)所需的预备动作。
– 某些推理不属于攻击步骤,而是关联不同的步骤/事实和应用程序部分(例如,如果 x 存在于知识库中,则不执行攻击步骤 y)。

知识库填充完毕后,所有攻击路径均可通过逆向推理获得,该方法从破坏目标的攻击步骤开始,逐步推导出使攻击步骤前提成立的事实,直至达到公理(即没有前提的攻击步骤或事实)。攻击路径可通过任意选择的推理引擎以自动化方式提取。

先前的攻击路径发现模型通过引入新的推理类型得到了改进,从而能够检测更大范围的攻击。最重要的改进在于通过引入攻击策略的概念,使模型更具表达能力。攻击策略是用于确定攻击者行为的正式方法,通过改变逆向推理过程的工作方式对其进行建模。在某些情况下,策略能够启用不同的攻击步骤集合。例如,如果攻击者需要篡改受害者的副本,则必须执行多个面向网络的攻击步骤(如创建伪造服务器、篡改受害者的操作系统、注入恶意软件)。可以同时启用多种策略。此外,只有在应用特定攻击策略并启用或禁用某些前提时,才能推导出某些事实。

基于该策略。启用更复杂的策略(可能包含更多攻击步骤并使前提条件更加复杂)可能会对性能产生显著影响。

作为策略的首个实例,结合MatE攻击,我们建模了描述分布式场景的攻击策略,在该场景中,攻击者试图获取在受害PC上运行的应用程序的数据。例如,我们引入了一个建模代码注入攻击的攻击步骤,其中攻击者修改受害应用程序的代码,使其将代码访问的所有数据发送给他。我们还添加了破坏弱保密性的策略。如前所述,要破坏该属性,攻击者必须在应用程序执行的每一时刻都知道受害应用程序中数据项的值。在我们的内部模型中,我们建模了额外的前置条件:攻击者不仅必须获得数据项的值(例如,通过前面描述的代码注入攻击步骤),而且还必须通过静态或动态攻击获取所有访问(并因此可能修改)该数据项的代码区域。参考第3节中的示例应用程序,我们标记了包含卡牌位置的 lmem state,其具有弱保密性。为了破坏它,攻击者不仅必须在内存中定位该数据项,还必须在读取数据项值之前执行lmem Newgame代码,因为如图2所示,lmem Newgame初始化lmem state。我们还考虑了应用程序的调用图,这得益于调用关系:特别是,如果某段代码已被执行,即执行代码步骤存在于攻击路径中,则所有由该代码调用的代码也被视为已执行。

我们还可以对间接攻击策略进行建模,即攻击者为了实现其目标,必须先篡改应用程序的其他部分。例如,某些代码区域只有在被其他代码区域的执行预先启用后才会被执行。一个例子是包含许可证检查功能的应用程序,如果许可证检查成功执行,则会启用应用程序其余部分的执行。在我们的内部模型中,一个代码区域不仅在其启用代码区域已被执行之前被视为启用,而且如果该启用代码区域被修改过,也同样视为已启用,这涵盖了诸如攻击者不使用有效的许可证,而是修改许可证检查代码以绕过检查等情况。

另一种策略已被定义用于表示针对执行正确性的攻击:攻击者不仅可以通过修改代码来破坏其执行正确性,还可以通过避免对该代码的所有调用来实现。

最后,我们大幅提高了攻击路径推理规则的准确性,这些规则现在利用了应用程序部分之间更多种类的关系,例如第4节中描述的关系。此外,我们添加了多种新的攻击步骤,例如表示单个代码区域执行的新攻击步骤,这对于更好地处理初始化关联关系以及动态攻击等关系至关重要。

例如,如果lmem Level()到lmem from Little One(第3节)被标记为执行,则攻击者通过避免调用而在更高难度级别下使用明牌进行的攻击可在攻击推导阶段自动获得lmem from Little One被标记为执行正确性属性。在这种情况下,如果启用了相应的策略,则会生成图6中不同的攻击步骤。攻击路径用矩形表示,而攻击事实用圆角矩形表示。攻击步骤之间的连接用粗箭头表示,攻击步骤与其生成的事实之间的连接用普通箭头表示。由其他事实推导出的事实通过虚线箭头连接。

为了帮助安全工程师选择最易受攻击的资产,并恰当地决定在应用程序中需要保护的内容,我们还提供了一种衡量攻击路径危险程度的方法。当然,也可以使用自定义公式,以适应目标应用及其业务模型。

给定所有推导出的攻击路径 APi、它们的所有攻击步骤ASi,j以及所有资产 ak,我们将针对具备专业技能 ε的攻击者的某条攻击路径 APi的风险risk Ωε AP i 定义为:
Ωε AP i = π(APi, ε) ΓAPi (1)
公式(APi, ε) 在等式1 中表示具有专业技能 ε 的攻击者成功完成攻击路径的概率。请注意,在估算成功实施攻击路径的概率时,我们考虑了具有专业技能 ε 的攻击者能够成功执行完成该攻击路径所需的所有攻击步骤的概率,即 π(APi, ε) = f(π(ASi,j, ε))。该公式的思路是,攻击者要成功完成一条攻击路径,必须正确执行构成该路径的所有攻击步骤。我们已使用 f=min(得到最佳结果的参数)、一种不切实际但非常保守的 f=max 以及 f= · 对我们的方法进行了测试。

ΓAPi 是攻击路径成功后所造成损害的量化度量,通过计算每个攻击步骤的损害 ΓAS i, j 的总和得出。
ΓAPi =∑
j ΓAS i, j =∑
j

k (Wa k b(ak, ASi, j))
其中 Wak是用户定义的资产权重,而 b(ak,ASj) 是由我们的推理系统推导出的一个函数,用于返回攻击步骤 AS ak所突破的资产安全属性的比例,即当所有安全属性均被突破时返回 1,当无任何安全属性被突破时返回 0。最后,通过风险公式得到的数值将使用特定映射转换为三值评分(低、中等、高)。

我们的推理系统还建议了一系列可实施的防护措施,以缓解攻击风险。这些防护措施可应用于代码区域和数据,并与缓解等级相关联,缓解等级用于衡量它们在多大程度上降低特定攻击步骤的成功概率。为了评估用户从建议的防护措施中选择一组防护后,针对应用资产的攻击路径相关风险的缓解情况,我们通过使用更新后的成功执行每个攻击步骤的概率值来重新计算风险。为此,我们将函数 π(ASi,j, ε) 替换为 π(ASi,j, ε,{pl}l),该函数还考虑了已部署的{pl}l 防护措施对资产的保护。

攻击者实施攻击步骤所需的攻击者专业水平值,以及我们在实验中所使用的防护措施的缓解等级(及相应概率),是通过向ASPIRE项目( https://aspire-fp7.eu/)联盟及顾问委员会的20位软件保护专家发放问卷获得的。

6 实验结果

我们已在Java 8中实现了我们的方法,并作为Eclipse Mars平台的一组插件。此外,我们使用XText 2.9.0开发了ADL解析器,使用SWI‐Prolog 7.2.3实现了攻击路径引擎。为了加快计算速度,推理引擎被实现为一个多线程Prolog程序,以便可以并行评估多个资产。

我们在第3节中描述的Linux内存游戏应用上测试了我们的框架。该应用使用 C语言编写,包含53个应用部件(10个全局变量和43个函数)。我们已将其中6个应用部件标记为资产。测试在Intel i7‐4980HQ 2.80GHz、16GB内存的环境下进行,操作系统为Linux Debian 4.5.0,在漏洞分析阶段分配了4个CPU核心。表1总结了该应用程序上的测试结果,其中 CW表示弱保密性, I表示完整性, E表示执行正确性。

整个分析过程在启用所有攻击策略的情况下,耗时344.1秒(不到6分钟)完成。请注意,计算时间受到调用图中代码区域的入度和出度的显著影响。应用部件周围的关联关系越多,搜索组合的数量就越多,脆弱性分析必须尝试并考虑这些组合。例如,点击 计数 仅被2个直接使用应用程序部分及其分析仅需1.4秒,而lmem flip card()与16个应用程序部分相关,其分析耗时322.4秒。

该框架发现了针对资产的110次攻击,如果忽略攻击步骤顺序,则减少为 53种独特攻击(见第2节)。在风险分析中,由于示例应用程序的类型,我们选择使用“业余的”专业水平。表中的风险列分别列出了针对某项资产可发起的最危险的攻击的风险,以及通过使用本方法支持的最强保护技术后已缓解的风险(也在表中显示)。

大多数攻击即使由业余的攻击者执行也具有高风险,但使用我们框架建议的技术后,几乎可以避免所有这些攻击,将其风险降低到低水平。例如,针对 statLoc( c2) statCh(c2) ch(c2) br(exCor, c2) ))(图 6) 的攻击路径对 lmem from Little One()函数的执行正确性构成高风险。然而,我们的实现检测到,使用代码保护技术将使该风险降至低水平,因为攻击步骤 statCh(c2) 将受到严重阻碍。

资产 属性 攻击 初始唯一总数 风险 已缓解 已选 保护
click count I 2 反调试
lmem from Little One() E 12 high low 代码保护
lmem flip card() E 37 high low 远程证明
lmem level I 3 代码移动性
lmem state CW 20 high low 代码保护
lmem state I 4 high low 反调试
lmem Newgame() E 32 high low 远程 证明
total total 110

7 相关工作

漏洞评估是不同且跨学科研究领域的常见问题。同样,基于知识库的决策支持系统也被应用于多个需要基于大量预先收集的信息进行决策的领域。因此,文献中提出了多个项目。然而,据我们所知,目前尚无完全匹配我们迄今为止讨论内容的研究工作。在本节中,我们将介绍一些与我们讨论相关的工作。这些工作可以分为基于本体、Petri网和基于图的,以及基于Web的系统。

7.1 基于本体的系统

在风险管理中的应用,Ekelhart等提出了一种基于本体的系统,旨在作为决策支持系统[10]。作者提出的工作依赖于一种名为AURUM(自动化风险与效用管理)的方法论,用于执行风险评估、风险降低和防御成本估算。作者提出的专家系统能够在风险分析、缓解和保障措施评估方面支持决策。

Fenz 等提出了一种专家系统,旨在通过使用本体半自动推断保护系统所需的控制措施。该专家系统名为FORISK[11],是对其前期工作[12,13]的扩展成果。它是信息安全标准、风险判定和自动识别对策措施的形式化表示。

7.2 Petri网

Dalton et al. 已经表明,可以通过使用Petri网[14]来建模并进行攻击树的概率分析。该方法旨在自动模拟系统行为,并结合攻击树方法,识别适当的应对措施。

Dahl et al. 提出了一种基于区间定时有色Petri网的机制,能够分析多主体和多阶段攻击[15]。该方法可自动识别基于网络系统中的漏洞。

有色Petri网也被Wu等用于建模分层攻击。攻击被划分为高层和低层攻击。前者表示执行攻击所利用的所有路径和系统漏洞。基于此建模,可以推导出攻击成本估算和风险度量。后者使用独立的有色Petri网来描述攻击转移的细节。该级别增强了攻击理解以及有效对策识别。

Yao et al.最近提出了一种基于Petri网的机制来分析SDN威胁[16]。在所提出的机制中,他们使用Petri网对SDN结构和数据流进行建模,然后采用攻击树对攻击进行建模。然而,他们仅提出了一种攻击建模方法,未提供任何推导缓解措施或成本评估的机制。

7.3 基于Web和贝叶斯网络

谢 等 基于贝叶斯网络 [17] 开展了不确定性下的网络安全分析。该方法旨在改进企业安全分析。他们基于安全图模型构建了贝叶斯网络,并利用攻击语义和实验研究对方法进行了测试与验证。他们还证明了该系统不受参数扰动的影响。

Poolsappasit et al.[18] 提出了一种基于贝叶斯网络的风险管理框架。该框架使系统管理员能够评估网络被破坏的可能性,预见如何缓解和管理它们。该系统依赖于一种遗传算法,能够对安全管理员目标进行单目标和多目标优化。

Steffan等人[19]对安全信息共享的常用方法进行了比较。他们评估了这些系统在支持规避和发现漏洞方面的能力。最后,他们提出了一种基于协同攻击建模的方法。所提出的该方法结合了基于图的攻击建模与协作式基于Web的工具。

Basset et al.提出了一种基于概率图的网络安全分析方法,该方法将网络中的行为者、事件和属性建模为节点。然后,为每个节点分配一个估计值;该值表示实现该节点对应事件、条件或属性的难易程度。攻击被建模为到达被破坏的条件的路径。最后,他们为攻击路径中的每条边分配一个概率,从而得出最终的攻击可能性。

8 结论和未来工作

在本文中,我们扩展了最初在[1]中提出的成果。我们的方法能够半自动地构建应用程序源代码的表示,搜索针对软件资产的攻击,并识别可缓解这些攻击的防护措施,从而执行风险分析和防护评估周期。

我们已经证明,我们的实现能够推断出大量可能需要通过长时间手动检查代码才能发现的攻击。基于这些信息,它评估了针对应用资产的风险。此外,我们的推理引擎能够建议某种保护措施是否可以缓解某次攻击,从而能够以自动方式提出如何保护应用程序的方案,并在最小用户干预的情况下估计残余风险。

未来,我们旨在提升方法的性能,并支持更复杂的推理规则。我们计划增加功能,以建议应用于应用程序的防护措施最优序列,同时考虑这些防护措施之间的协同效应(即在相同资产上应用时效果良好的防护措施)以及防护措施的建议应用顺序。

内容概要:本文对下垂控制虚拟同步机(VSG)两种并网型(grid-forming)控制策略进行了系统性的性能对比研究,并基于Simulink仿真平台构建了完整的系统模型,开展动态响应分析。研究深入探讨了两种控制策略在频率调节、有功/无功功率分配、电压支撑能力以及应对负载突变、电网扰动等非理想工况下的控制特性差异。内容涵盖控制原理建模、关键参数设计、稳定性分析及仿真验证全过程,重点剖析了VSG在惯性和阻尼模拟方面的优势,以及下垂控制在简单性可扩展性上的特点,旨在为构网型逆变器在微电网、新能源并网及新型电力系统中的工程应用提供理论支撑选型依据。; 适合人群:具备电力电子、自动控制理论及新能源并网技术基础知识的研究生、科研人员及相关领域的工程技术人员。; 使用场景及目标:①深入理解下垂控制虚拟同步机的核心控制原理及其在Simulink中的实现方法;②掌握并对比两者在动态响应速度、系统稳定性、抗扰动能力及工况适应性等方面的性能差异;③为微电网、储能系统、分布式电源等场景下的控制器设计、参数优化技术路线选择提供仿真验证手段决策支持; 阅读建议:建议结合提供的Simulink仿真模型进行动手实践,重点关注控制器参数(如VSG的转动惯量、阻尼系数,下垂系数等)对系统性能的影响,通过对比不同扰动工况下的仿真波形,深刻领会两种策略各自的适用边界优缺点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值