【论文阅读】POIROT:关联攻击行为与内核审计记录以寻找网络威胁(CCS-2019)

POIROT: Aligning Attack Behavior with Kernel Audit Records for Cyber Threat Hunting

CCS-2019
伊利诺伊大学芝加哥分校、密歇根大学迪尔伯恩分校
Milajerdi S M, Eshete B, Gjomemo R, et al. Poirot: Aligning attack behavior with kernel audit records for cyber threat hunting[C]//Proceedings of the 2019 ACM SIGSAC conference on computer and communications security. 2019: 1795-1812.


目录

  • 0. 摘要
  • 1. 引言
  • 2. 相关工作
  • 3. 方法概述
    • 3.1. 溯源图的构建
    • 3.2. 查询图的构建
  • 3.3. 图对齐(Graph Alignment)
  • 4. 算法
    • 4.1. 对其度量
      • 4.1.1. 影响分数
      • 4.1.2. 对齐分数
    • 4.2. 尽力相似搜索


0. 摘要

  网络威胁情报 (CTI,Cyber threat intelligence) 用于搜索可能已经长期危害企业网络但未被发现的攻击的表征。为了进行更有效的分析,CTI 开放标准纳入了描述性关系,显示表征或可观察值之间的关系。然而,这些关系要么在信息收集中被完全忽略,要么不用于威胁搜寻。

  在本文中,我们提出了一个名为 Poirot 的系统,它使用这些相关性来揭示成功攻击活动的步骤。

  我们使用内核审计作为可靠来源,涵盖系统实体之间的所有因果关系和信息流,并将威胁搜寻建模为不精确的图形模式匹配问题。们的技术方法基于一种新颖的相似性度量,该度量评估由 CTI 相关性构建的查询图与由内核审计日志记录构建的溯源图之间的一致性。

  使用 DARPA 进行评估,评估结果表明,Poirot 能够在包含数百万个节点的图形内部进行搜索,并在几分钟内查明攻击,结果表明 CTI 相关性可以用作威胁搜寻的稳健可靠的工件。




1. 引言

  当组织内部检测到的高级持续性威胁 (APT) 相关的妥协表征 (IOC,Indicators of Compromise) 出现时,就需要安全分析师判断企业是否已成为APT的目标,这个过程称为威胁搜寻。高置信度地回答这个问题往往需要对企业的主机和网络日志进行冗长复杂的搜索和分析,从这些日志中识别出现在IOC描述中的实体,最终评估特定APT成功渗透企业的可能性。

  一般而言,企业内部的威胁搜寻面临多项挑战:

  • 大规模搜索(主要是时间上,对应APT的“P”的特点
  • 鲁棒(robust)地识别和关联威胁相关实体(揭示整个场景
  • 高效匹配(高效率低误报

  通常,有关 APT 活动中使用的恶意软件的知识发布在网络威胁情报 (CTI) 报告中,并以自然语言、结构化和半结构化形式等多种形式呈现。为了以 IOC 的形式促进 CTI 的顺利交换并能够表征对抗性技术、策略和程序 (TTP),安全社区采用了开放标准,例如 OpenIOC、STIX 和 MISP 为了更好地概述攻击,这些标准通常包含描述性关系,显示表征或可观察值如何相互关联。

文章的所使用的IOC来自MISP和STIX

然而,绝大多数当前的威胁搜寻方法要么仅针对网络威胁的碎片化视图,例如签名、可疑文件/进程名称和 IP 地址,要么通过使用时间戳等启发式方法来关联可疑事件。这些方法很有用但也有局限性:

  • 无法准确揭示威胁如何展开的全貌,尤其是在长时间内(即APT时间,数周数月甚至数年
  • 容易受到错误信号的影响或无法区分攻击与良性系统活动(即无法应对APT的高隐蔽性和丰富的检测规避手段
  • 依赖低级签名,在面临攻击者更改或更新工具时无效

  为了克服这些限制并建立强大的检测系统,必须考虑 IOC 之间的相关性。事实上,IOC 工件之间的关系包含有关受感染系统内部攻击行为的基本线索,这与攻击者的目标相关,因此更难以更改。(因此将 IOC 作为检测依据更可靠

  本文从 CTI 报告和 IOC 描述中形式化了威胁搜寻问题,开发了一种严格的方法来推导表示攻击活动成功可能性的置信度分数,并描述了一个名为 Poirot 的系统来实现这种方法。简而言之,给定一个基于图形的 IOC 表示和它们之间的关系来表达 APT 的整体行为,我们称之为查询图,我们的方法能够有效地在包含长时间内核审计日志的溯源图中查找是否有这个查询图的嵌入。假设内核审计日志不会受到未经授权的篡改,且可靠地包含了系统实体之间的关系。

也即,将IOC用图关系来描述,作为一个子图。作者的方法能够快速在溯源图中查找这个子图得存在性以检测恶意行为。

  更准确地说,我们将威胁搜寻表述为图形模式匹配 (GPM) 问题,用于搜索与查询图中描述的系统实体相似的系统实体之间的因果依赖关系或信息流。为了稳健地抵御旨在影响匹配的规避攻击(例如,模仿攻击),我们根据攻击者产生的成本对流进行优先级排序。鉴于图匹配问题的 NP 完全性,我们提出了一个近似函数和一个新颖的相似性度量来评估查询图和溯源图之间的相似度。

  我们使用三个不同的数据集测试 Poirot 的有效性和效率,DARPA、公开可用的真实世界事件报告、普通用户产生的无攻击活动。我们已经为 Linux、FreeBSD 和 Windows 实现了不同的内核日志解析器,我们的评估结果表明 Poirot 可以在包含数百万个节点的图形中搜索并在几分钟内查明攻击




2. 相关工作

  这一节作者分别介绍了以下几个方面的前人的相关工作。我这里就不再赘述了。读者感兴趣的话可以自行阅读原文。

  • 基于日志的攻击分析
  • 溯源图探索
  • 查询处理系统(SAQL、AIQL、CamQuery)
  • 行为发现
  • 图模式匹配



3. 方法概述

  方法整体视图如下所示:
在这里插入图片描述

3.1. 溯源图的构建

  为了确定 APT 的行为是否出现在系统中,我们将内核审计日志建模为带标签的、有类型的和有向图,我们称之为溯源图 ( G p G_p Gp)。在此图中,节点表示内核审计日志中涉及的系统实体,它们具有文件和进程等不同类型,而边缘表示考虑方向的这些节点之间的信息流和因果关系。
  POIROT支持利用来自 Microsoft Windows、Linux 和 FreeBSD 的内核审计日志,并在内存中构建一个溯源图。为了支持在此图上进行高效搜索,我们利用其他方法(例如快速散列技术和反向索引)将进程/文件名映射到唯一节点 ID

3.2. 查询图的构建

  我们从与已知攻击相关的 CTI 报告中提取 IOC 以及它们之间的关系。这些 IOC 除了自然语言之外,通常也以结构化或半结构化的方式出现。这些格式包括 OpenIOC、STIX、MISP 等。这些标准描述通常由安全操作员手动创建。
  此外,还构建了自动化工具来自动从自然语言中提取 IOC 并补充人类操作员的工作。这些工具可用于执行初始特征提取以生成查询图,然后由安全专家手动完善。我们认为手动细化是查询图构建的重要组成部分,因为自动化方法通常会产生噪音并降低查询图的质量。

  人工参与这个点见仁见智吧。从完美主义的角度来看,自然语言的威胁情报数量也不在少数,依赖人工去完善工作量不小且质量参差不齐。而且由于APT中“advance”的特点,致命攻击往往来自能够逃逸检测系统的新型攻击,这种新型攻击的威胁情报在一开始大多都是以非结构化形式出现的,在引起足够重视和深入调查之后才会有结构化数据出现。考虑到这不是作者的主要贡献,而且这个方案也并不追求时效性,只是通过这个让查询图的信息来源覆盖面更广的同时降低误报而已,也就无关紧要了。

  我们也将 CTI 报告中出现的行为建模为标记的、类型化的有向图,我们称之为查询图 ( G q G_q Gq)。查询图的节点和边可以进一步与附加信息相关联,例如标签(或名称)、类型(例如,进程、文件、套接字、管道等)和其他注释(例如,哈希值、创建时间等)取决于分析师可能认为匹配所需的信息。在当前的 Poirot 实现中,我们使用名称和类型来指定查询图中的节点与来源图中的节点之间的显式映射

结构化数据也需要人工了。。。
这个显示映射应该是指用名称和类型的哈希来为节点分配id,确保查询图和溯源图的相同节点能匹配上。

  作为查询图构造的示例,考虑以下关于我们评估中使用的 DeputyDog 恶意软件的报告的摘录。
在这里插入图片描述  第一句话清楚地表示一个写入文件的进程(恶意软件在执行时将文件写入一个位置)。我们指出,此摘录中的详细程度在大多数 CTI 报告中都很常见,并且可以由合格的网络分析师转换为可靠的查询图。特别是,表示主体执行的动作的动词通常可以很容易地映射到磁盘或网络的读/写以及进程之间的交互(例如,浏览器下载文件,进程产生另一个进程,用户单击在鱼叉式网络钓鱼链接等上)。

既然大多数情报都这么详细全面且易转化的话,那确实不依赖专家知识了,人工成本低了不少。

  图 2 显示了与上述摘录相对应的查询图。椭圆形、菱形、矩形和五边形分别代表进程、套接字、文件和注册表项。在图中,节点 B 代表恶意软件进程或进程组(我们使用 * 表示它可以有任何名称),节点 A 代表恶意软件的镜像文件,而节点 C、D 和 E 分别代表一个被丢弃的文件、注册表和 Internet 位置。查询图是对实际攻击图的总结,在我们的实验中,我们获得的查询图通常很小,包含 10-40 个节点和最多 150 条边。

一个小疑问:既然恶意行为的主体和对象都是*,那名称参与作为节点的唯一ID咋搞。到底是需要节点信息匹配,还是不需要节点信息,只查询相似结构?或者说二者综合,都参与威胁评分?

3.3. 图对齐(Graph Alignment)

  我们将威胁搜寻建模为确定攻击的查询图 G q G_q Gq 是否在来源图 G p G_p Gp 中“表现”自身(manifests itself)。我们称这个问题为图对齐问题。
  我们注意到 G q G_q Gq 表达了实体之间的几个高级流(进程到文件等)。相比之下, G p G_p Gp 表示系统的完整低级活动。因此, G q G_q Gq 中的一条边可能对应于 G p G_p Gp 中由多条边组成的路径。例如,如果 G q G_q Gq 表示写入系统文件的受损浏览器,那么在 G p G_p Gp 中,这可能对应于表示 Firefox 进程的节点分叉新进程的路径,其中只有一个最终写入系统文件。通常,这种对应关系可能是由攻击者在其活动中添加噪音以逃避检测而创建的。因此,我们需要一种图形对齐技术,可以将 G q G_q Gq 中的单个边与 G p G_p Gp 中的路径匹配。

  现有的图匹配工作用于这个场景存在以下几个局限性:

  • 不是为每个节点分配了标签和类型的有向图而设计的
  • 不会扩展到数百万个节点
  • 旨在彻底对齐查询图中的所有节点或边。

出于这些考虑,我们设计了一种新颖的图形模式匹配技术来解决这些限制。

  如图 1 中,图形节点以不同的形状表示,以模拟不同的节点类型,例如文件、进程和套​​接字,但是,为简洁起见,省略了标签Poirot 首先找到所有可能的候选对齐集合 i : j i : j i:j,其中 i i i j j j 分别代表 V ( G q ) V (Gq) V(Gq) V ( G p ) V (Gp) V(Gp) 中的节点。然后,从最有可能找到匹配项的对齐方式(称为种子节点)开始,我们扩展搜索以找到更多节点对齐方式。种子节点在图 1 中由六边形表示,而两个图中的匹配节点由虚线连接。

  为了找到与 CTI 关系中表示的攻击相对应的对齐方式,搜索会沿着更可能受到攻击者影响的路径进行扩展。为了估计这种可能性,我们设计了一个名为影响分数的新指标。使用这个指标可以让我们在很大程度上从搜索中排除不相关的路径,并有效地缓解依赖爆炸问题。

  先前的工作还提出了根据长度或成本的分数来确定流优先级的方法。然而,它们可能会被攻击规避,攻击者经常改变他们的方式来逃避检测技术。我们的分数定义明确考虑了潜在攻击者的影响。通过根据攻击者生成流所需的努力来确定流的优先级,从而增加了攻击者逃避我们检测的成本。

  在找到对齐 G q : : G p G_q :: G_p Gq::Gp 之后,计算一个分数,表示 G q G_q Gq G p G_p Gp 的对齐子图之间的相似性。当分数高于阈值时,Poirot 会发出警报,宣布攻击的发生,并向系统分析师提供对齐节点的报告,以进行进一步的取证分析。否则,Poirot 从下一个候选种子节点开始对齐。在 Gp 中找到攻击子图后,Poirot 生成一份报告,其中包含对齐的节点、它们之间的信息流以及相应的时间戳。




4. 算法

  在本节中,我们讨论了 G q G_q Gq G p G_p Gp 之间对齐的主要方法,方法是:(a) 定义对齐度量来衡量图形对齐的正确程度,以及 (b) 设计基于特定区域特征的最大相似性搜索。

4.1. 对其度量

  我们引入了一些符号:

  我们定义了两种对齐方式,即两个不同图中两个节点之间的节点对齐方式,以及以一组节点为单位的图对齐方式。通常,当两个节点 i i i j j j 表示同一实体时,它们处于节点对齐中,例如,表示 CTI 报告中提到的常用浏览器的节点(图 3 的查询图 G q G_q Gq 中的节点 % b r o w s e r % \%browser\% %browser%)和代表源图中 F i r e f o x Firefox Firefox 进程的节点。一般情况下,节点对齐关系是从 V ( G q ) V(Gq) V(Gq) V ( G p ) V(Gp) V(Gp) 的多对多关系。因此,给定一个查询图 G q G_q Gq G q G_q Gq 和许多 G p G_p Gp 的子图之间可能存在大量图对齐。在这些子图中,我们寻找一个与图 G q G_q Gq 最匹配的子图。

   G p G_p Gp 边缘显示的数字不是来源图的一部分,但用于在我们的讨论中识别单一路径。此外,由这两个图与 G q G_q Gq 对齐确定的 G p G_p Gp 的子图由 G p G_p Gp 中的虚线边表示。 G p G_p Gp 中的每个流和 G q G_q Gq 中的相应边都用相同的数字标记。因此,问题是要决定在众多对齐中哪一个是最佳候选。对于这个特定的图,比对 ( G q : : G p ) 2 (Gq::Gp)_2 (Gq::Gp)2 ( G q : : G p ) 1 (Gq::Gp)_1 (Gq::Gp)1更接近 G q G_q Gq,主要是因为其对齐节点的数量高于 ( G q : : G p ) 1 (Gq::Gp)_1 (Gq::Gp)1,并且最重要的是,它的流与查询图 G q G_q Gq 的边有更好的对应关系。

如何去衡量这个对应关系谁更好呢? ( G q : : G p ) 1 (Gq::Gp)_1 (Gq::Gp)1连中心节点都没有对应上,不看边的匹配程度我都知道 ( G q : : G p ) 2 (Gq::Gp)_2 (Gq::Gp)2更匹配

4.1.1. 影响分数

  我们必须引入一个路径评分函数,我们称之为影响分数,它为两个节点之间的给定流分配一个数字。

  考虑图 3 中图 G p G_p Gp 中的两个节点 f i r e f o x 2 firefox_2 firefox2 % r e g i s t r y % / f i r e f o x \%registry\%/firefox %registry%/firefox。存在从 f i r e f o x 2 firefox_2 firefox2 % r e g i s t r y % / f i r e f o x \%registry\%/firefox %registry%/firefox的两个流,一个由标有数字 2 的边表示(和通过节点 j a v a 1 java_1 java1 j a v a 2 java_2 java2),另一个由标记为 3、3 和 5 的边表示(并通过节点 t m p . d o c tmp.doc tmp.doc w o r d 1 word_1 word1)。假设 f i r e f o x 2 firefox_2 firefox2 在攻击者的控制之下,攻击者更有可能执行第一个流程而不是第二个流程。

  事实上,为了执行第二个流程,除了 f i r e f o x 2 firefox_2 firefox2 之外,攻击者还必须控制进程 l a u n c h e r 2 launcher_2 launcher2 w o r d 1 word_1 word1。由于 l a u n c h e r 2 launcher_2 launcher2 w o r d 1 word_1 word1 在进程树中与 f i r e f o x 2 firefox_2 firefox2 没有共同的祖先,因此这种接管必须涉及对 l a u n c h e r 2 launcher_2 launcher2 w o r d 1 word_1 word1 的额外利用,这比简单地执行第一个流程更不可能,在第一个流程中,所有进程共享一个共同的祖先 l a u n c h e r 1 launcher_1 launcher1。我们指出,这种可能性不取决于流程的长度,而是取决于该流程中的流程数量以及这些流程在流程树中共享的不同祖先的数量。

我的理解是,相较于控制 l a u n c h e r 2 launcher_2 launcher2 w o r d 1 word_1 word1两个对象达到这个目的,攻击者更可能通过控制 l a u n c h e r 1 launcher_1 launcher1,同时利用 j a v a 1 java_1 java1 j a v a 2 java_2 java2 达到目的。此外,不管攻击者控制多少个进程,进程树的祖先数量始终是固定的,并不会因为

  除非攻击者支付更高的成本来执行更多不同的妥协,否则,攻击者可能用来增加噪音并试图逃避检测的每项活动都可能具有相同的共同祖先,即攻击的初始妥协点。因此,这种努力在改变路径的影响分数方面是无效的。

由于威胁评分参考的是妥协进程的祖先而不是妥协进程的数量和攻击链长度,因此可以避免噪声的检测。除非攻击者花很高的成本去制造一个新的妥协入口,然后又回到这个可疑点,为子图增加一个祖宗,才能影响这个事件的分数。

  基于这些观察,我们定义节点 i i i 和节点 j j j 之间的影响分数 Γ i , j \Gamma_{i,j} Γi,j 如下: Γ i , j = { max ⁡ i → j 1 C m i n ( i − − > j ) ∃ i → j ∣ C m i n ( i − − > j ) ≤ C t h r 0 otherwise \Gamma_{i,j}=\begin{cases}\max_{i\to j}\dfrac{1}{Cmin(i--> j)}&\exists i\to j\mid C_{min}(i--> j)\leq C_{thr}\\ 0&\text{otherwise}\end{cases} Γi,j= maxijCmin(i>j)10ijCmin(i>j)Cthrotherwise

   C m i n ( i − − > j ) C_{min}(i--> j) Cmin(i>j) 表示攻击者必须执行的不同、独立的妥协的最小数量,以便能够生成流 i − − > j i--> j i>j。该值捕获攻击者对流的控制程度,并根据流中存在的进程的最小共同祖先数计算得出。如果存在从节点 i i i 到节点 j j j 的流程,并且该流程中涉及的所有进程在流程树中都有一个共同的祖先,攻击者只需要破坏该共同的祖先进程即可启动该流程,并且因此 Cmin(i ̶̶◁ j) 等于 1。为了让攻击者控制流 f i r e f o x 2 → t m p . d o c → w o r d 1 → % r e g i s t r y % / f i r e f o x ) firefox2 → tmp.doc → word_1→ \%registry\%/firefox) firefox2tmp.docword1%registry%/firefox),他需要同时控制 l a u n c h e r 1 launcher_1 launcher1 l a u n c h e r 2 launcher_2 launcher2;因此 C m i n C_{min}%= Cmin 等于 2。

  在绝大多数记录在案的 APT 中,通常只有一个入口点或极少数入口点可供攻击者进入系统,一旦攻击者有了初步的妥协,他们就不太可能投入额外的资源来发现和利用额外的入口点。因此,我们可以对 C m i n ( i − − > j ) C_{min}(i--> j) Cmin(i>j) 值设置一个限制 C t h r C_{thr} Cthr,并合理地假设两个节点之间的任何 C m i n ( i − − > j ) C_{min}(i--> j) Cmin(i>j) 大于 C t h r C_{thr} Cthr 的流都不可能由攻击者发起。如果两个节点 i i i 和节点 j j j 之间存在多个流,则影响分数将是所有这些流中的最大值 1 C m i n ( i − − > j ) \dfrac{1}{Cmin(i--> j)} Cmin(i>j)1

4.1.2. 对齐分数

  对于特定的一次图形对齐 G q : : G p G_q :: G_p Gq::Gp 。评分函数 S ( G q : : G p ) S(G_q::G_p) S(Gq::Gp) 如下: S ( G q : G p ) = 1 ∣ F ( G q ) ∣ ∑ ( i − − > j ) ∉ F ( G q ) Γ k , l ∣ i : k & j : l S(G_q:G_p)=\frac{1}{|F(G_q)|}\sum\limits_{(i-->j)\notin F(G_q)}\Gamma_{k,l}\mid i:k\&j:l S(Gq:Gp)=F(Gq)1(i−−>j)/F(Gq)Γk,li:k&j:l节点 i i i j j j V ( G q ) V(G_q) V(Gq) 的成员,节点 k k k l l l V ( G p ) V(G_p) V(Gp) 的成员。流 i − − > j i --> j i>j 是定义在 G q G_q Gq 上的流。 ∣ F ( G q ) ∣ |F(Gq)| F(Gq) G q G_q Gq 中的流数。由于两个节点之间的影响力得分最大值等于1,因此流的数量自动代表影响力得分之和的最大值。

   S ( G q : : G p ) S(G_q :: G_p) S(Gq::Gp) 的值越大,节点对齐的数量越多, G q G_q Gq 中的流与 G p G_p Gp 中的流之间的相似度越大,很可能受到影响一个潜在的攻击者。 C t h r C_{thr} Cthr 是我们假设攻击者愿意独立利用的不同入口点进程的最大数量。因此,假定攻击者能够影响影响分数为 1 C t h r \frac{1}{C_{thr}} Cthr1或更高的任何信息流。所以,当对齐分数 S ( G q : : G p ) S(G_q :: G_p) S(Gq::Gp) 超过预定阈值 ( τ ) (\tau) (τ) 时,我们会发出警报。 S ( G q : : G p ) ≥ τ S(G_q::G_p)\geq\tau S(Gq::Gp)τ τ = 1 C t h r \tau=\frac{1}{C_{thr}} τ=Cthr1

4.2. 尽力相似搜索

   我们假设所有分析都是在 G p G_p Gp 的静态快照上进行的,并且从搜索开始到搜索终止的那一刻,其节点或边缘没有发生任何变化。我们的搜索算法由以下四个步骤组成,其中重复步骤 2-4,直到找到得分高于阈值 τ \tau τ 的对齐方式。

  1. 列出所有候选节点这些候选对齐是根据查询图节点上的名称、类型和注释来选择的。例如,在 G q G_q Gq G p G_p Gp 中出现具有相同标签(例如 Firefox)的相同类型的节点(例如,两个进程节点)可能形成候选对齐,其标签与正则表达式匹配的节点(例如,文件系统路径和文件姓名)等。用户还可以手动注释来源图中的节点,并明确指定与查询图中节点的对齐方式。在图 3 中,候选节点对齐由具有相同颜色的节点对表示。
  2. 选择种子节点。攻击活动通常只占 G p G_p Gp 的一小部分,而良性活动通常会重复多次。因此,特定于攻击的节点更有可能比良性活动的节点具有更少的对齐。基于这一观察,我们按照与每个节点相关的候选对齐数量的递增顺序对 G q G_q Gq 的节点进行排序。我们首先选择对齐最少的种子节点。对于图 3 中的示例,种子节点将为 %browser%,因为它具有最少数量的候选节点对齐。如果存在候选对齐数量相同的种子节点,我们随机选择其中一个。
  3. 扩展搜索。从种子节点开始,我们遍历 G p G_p Gp 中与其对齐的所有节点,并启动一组向前或向后的图遍历,以确定我们是否可以到达步骤1中找到的其他对齐的节点。一旦种子节点和该路径中最后一个节点之间的影响得分达到 0,我们就可以停止沿该路径扩展搜索。例如,假设我们决定图 3 中的 $C_{thr} 等于 2。然后, 沿路径搜索 ( f i r e f o x 2 → t m p . d o c → w o r d 1 → (firefox2 → tmp.doc → word1 → %registry%\firefox→ word2) (firefox2tmp.docword1 不会扩展到节点 w o r d 2 word_2 word2,因为 f i r e f o x 2 firefox_2 firefox2 和沿该路径的任何节点之间的 C m i n C_{min} Cmin w o r d 2 word_2 word2 处变得大于 2,并且因此影响分数变为 0。有时可能需要多个前向/后向跟踪循环才能访问所有节点(例如,如果我们在示例中选择 % b r o w s e r % \%browser\% %browser% 作为种子节点,则 G p G_p Gp 中的节点 240.2.1.1 240.2.1.1 240.2.1.1 无法从 f i r e f o x 1 firefox_1 firefox1 f i r e f o x 2 firefox_2 firefox2 开始的向前或向后遍历一遍就访问到)。在这种情况下,我们从与未访问节点相邻但已访问的节点开始重复向后和向前遍历。迭代这个过程,直到我们覆盖查询图 G q G_q Gq 的所有节点
  4. 图对齐选择。由于 G q G_q Gq中的每个节点都可能有很多候选节点,为了有效地执行此搜索,我们设计了一个程序,该程序根据测量每个比对对最终比对分数的最大贡献的近似函数,迭代地为 G q G_q Gq 中的每个节点选择最佳候选者。从 G q G_q Gq 中的一个种子节点开始,我们选择 G p G_p Gp 中对对齐分数贡献最大的节点,并固定此节点对齐。

就是从根开始,每次都评估其贡献值,每次都选贡献最大的来比对并固定这个匹配。

  最优候选者选择函数。对于 G p G_p Gp 中给定的候选对齐节点 k k k,计算该节点与 G p G_p Gp 中所有其他具备以下条件的候选节点 l l l 之间的最大影响分数 Γ k , l \Gamma_{k,l} Γk,l 之和:1)可从 k 到达或具有到 k 的路径, 2) G q G_q Gq 中其对应的对齐节点 j 具有来自或者去到 G q G_q Gq 中对应于节点 k 的节点的流。例如,考虑节点 % B r o w s e r % \%Browser\% %Browser% 和我们例子中的两个候选对齐节点 f i r e f o x 1 firefox_1 firefox1 f i r e f o x 2 firefox_2 firefox2。为了确定 f i r e f o x 1 firefox_1 firefox1的贡献,我们对每个流 ( % B r o w s e r % − − > ∗ . e x e , % B r o w s e r % − − > s p o o l s v , % B r o w s e r % − − > % r e g i s t r y % ) (\%Browser\% --> ∗. exe, \%Browser\% --> spoolsv, \%Browser\% --> \%registry\%) (%Browser%>.exe,%Browser%>spoolsv,%Browser%>%registry%) G q G_q Gq 中来自或去到 % B r o w s e r % \%Browser\% %Browser% 的最大影响分数,分别为 f i r e f o x 1 firefox_1 firefox1 和与 ∗ . e x e ∗.exe .exe s p o o l s v spoolsv spoolsv % r e g i s t r y % \%registry\% %registry% 对齐的候选节点之间的影响分数。即,在这三种类型里面分别选一个分数最大的,得到一个和,这个和就是 f i r e f o x 1 firefox_1 firefox1 的最大贡献。然后对 f i r e f o x 2 firefox_2 firefox2 重复同样的过程,最后选择贡献值最高的排列组合。评估 A ( i : k ) A(i : k) A(i:k) 节点对齐方式 i : k i : k i:k 的贡献的公式如下:
A ( i : k ) = ∑ j : ( i → → j ) ∈ F ( G q ) ( 1 { j ; I } × Γ k , l + ( 1 − 1 { j ; l } ) × max ⁡ m ∈ c a n d i d a t e s ( j ) ( Γ k , m ) ) A(i:k)=\sum_{j:(i\to\to j)\in F(G_{q})}\left(1_{\{j;I\}}\times\Gamma_{k,l}+(1-1_{\{j;l\}})\times\max_{m\in c a n d i d a t e s(j)}(\Gamma_{k,m})\right) A(i:k)=j:(i→→j)F(Gq)(1{j;I}×Γk,l+(11{j;l})×mcandidates(j)max(Γk,m)) + ∑ j ( j → → i ) ∈ F ( G q ) ( 1 { j , I } × Γ l , k + ( 1 − 1 { j ; l } ) × max ⁡ m ∈ c a n d i d a t e s ( j ) ( Γ m , k ) ) +\sum_{j(j\to\to i)\in F(G_{q})}\left(1_{\left\{j,I\right\}}\times\Gamma_{l,k}+\left(1-1_{\left\{j;l\right\}}\right)\times\max_{m\in c a n d i d a t e s(j)}\left(\Gamma_{m,k}\right)\right) +j(j→→i)F(Gq)(1{j,I}×Γl,k+(11{j;l})×mcandidates(j)max(Γm,k))其中 1 A 1_{\mathcal A} 1A 为指示函数,若 A \mathcal A A 表示的对齐方式已经固定则为1,否则为0。对于具有第 3 步生成的一组 K 个候选对齐方式的每个节点 i,固定 i 对齐方式的选择函数如下: arg ⁡ max ⁡ k ∈ K A ( i : k ) \underset{k\in K}{\operatorname{arg}\max}A(i:k) kKargmaxA(i:k)这类似贪心的算法,可能并不总是能带来最好的结果,但在实践中,我们发现它非常有效。

最后,在固定所有节点对齐后,按照等式(2)计算对齐得分。如果分数低于阈值,则再次执行步骤2-4。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/48491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea http request无法识别环境变量

问题描述 创建了环境变量文件 http-client.env.json,然后在*.http 文件中引用环境变量,运行 HTTP 请求无法读取环境变量文件中定义的变量。 事故现场 IDEA 版本:2020.2 2021.2 解决步骤 2020.2 版本环境变量无法读取 2021.2 版本从 2020.…

lesson9: C++多线程

1.线程库 1.1 thread类的简单介绍 C11 中引入了对 线程的支持 了&#xff0c;使得 C 在 并行编程时 不需要依赖第三方库 而且在原子操作中还引入了 原子类 的概念。要使用标准库中的线程&#xff0c;必须包含 < thread > 头文件 函数名 功能 thread() 构造一个线程对象…

探工业互联网的下一站!腾讯云助力智造升级

引言 数字化浪潮正深刻影响着传统工业形态。作为第四次工业革命的重要基石&#xff0c;工业互联网凭借其独特的价值快速崛起&#xff0c;引领和推动着产业变革方向。面对数字化时代给产业带来的机遇与挑战&#xff0c;如何推动工业互联网的规模化落地&#xff0c;加速数字经济…

【C语言】数组概述

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将带你了解 一维数组&#xff0c;二维数组等相关知识。 目录&#xff1a; &#x1f4d8;前言&#xff1a;&#x1f…

KaiwuDB CTO 魏可伟:回归用户本位,打造“小而全”的数据库

8月16日&#xff0c;KaiwuDB 受邀亮相第十四届中国数据库技术大会 DTCC 2023。KaiwuDB CTO 魏可伟接受大会主办方的采访&#xff0c;双方共同围绕“数据库架构演进、内核引擎设计以及不同技术路线”展开深度探讨。 以下是采访的部分实录 ↓↓↓ 40 多年前&#xff0c;企业的数…

html动态爱心代码【三】(附源码)

目录 前言 特效 内容修改 完整代码 总结 前言 七夕马上就要到了&#xff0c;为了帮助大家高效表白&#xff0c;下面再给大家带来了实用的HTML浪漫表白代码(附源码)背景音乐&#xff0c;可用于520&#xff0c;情人节&#xff0c;生日&#xff0c;表白等场景&#xff0c;可直…

OrienterNet: visual localization in 2D public maps with neural matching 论文阅读

论文信息 题目&#xff1a;OrienterNet: visual localization in 2D public maps with neural matching 作者&#xff1a;Paul-Edouard Sarlin&#xff0c; Daniel DeTone 项目地址&#xff1a;github.com/facebookresearch/OrienterNet 来源&#xff1a;CVPR 时间&#xff1a…

win10 下运行 npm run watch-poll问题

背景&#xff1a;在本地练习laravel项目&#xff0c;windows 宝塔环境&#xff08;之前装过ubuntu子系统&#xff0c;很慢&#xff0c;就放弃了。有知道的兄弟说下&#xff0c;抱拳&#xff09;。以下命令我是在本地项目中用git bash里运行的&#xff0c;最好用管理员权限打开你…

Django实现音乐网站 ⒀

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是推荐页-推荐排行榜、推荐歌手功能开发。 目录 推荐页开发 推荐排行榜 单曲表增加播放量 表模型增加播放量字段 执行表操作 模板中显示外键对应值 表模型外键设置 获取外键对应模型值 推荐排行榜视图 推…

函数式编程

函数式编程 函数式编程思想&#xff1a;对方法中的数据进行了什么操作 优点&#xff1a;代码简介、便于理解、易于并发编程 1.Lambda表达式 JDK8中的语法糖&#xff0c;可以对某些匿名内部类的写法进行简化 使用条件&#xff1a;匿名内部类是一个接口&#xff0c;并且接口只…

GraphScope,开源图数据分析引擎的领航者

文章首发地址 GraphScope是一个开源的大规模图数据分析引擎&#xff0c;由Aliyun、阿里巴巴集团和华为公司共同开发。GraphScope旨在为大规模图数据处理和分析提供高性能、高效率的解决方案。 Github地址&#xff1a; https://github.com/alibaba/GraphScope GraphScope 的重…

【电商领域】Axure在线购物商城小程序原型图,抖音商城垂直电商APP原型

作品概况 页面数量&#xff1a;共 60 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;网上商城、品牌自营商城、商城模块插件 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为品牌自营网上商城…

logstash配置文件

input { kafka { topics > “xxxx” bootstrap_servers > “ip:port” auto_offset_reset > “xxxx” group_id > “xxxx” consumer_threads > 3 codec > “json” } } filter { grok { match > { “message” > ‘%{IP:client_ip} - - [%{HTTPDATE:…

线性代数的学习和整理---番外1:EXCEL里角度,弧度,三角函数

目录 1 角的度量&#xff1a;角度和弧度 1.1 角度 angle 1.1.1 定义 1.1.2 公式 1.1.2 角度取值范围 1.2 弧长和弦长 1.3 弧度 rad 1.3.1 弧长和弧度定义的原理 1.3.2 定义 1.3.3 取值范围 1.3.4 取值范围 1.4 角度&#xff0c;弧度的换算 1.5 EXCEL里进行角度和…

STL list基本用法

目录 list的使用构造函数和赋值重载迭代器(最重要)容量相关插入删除元素操作reversesortuniqueremovesplice list的底层实际是双向链表结构 list的使用 构造函数和赋值重载 构造函数说明list()无参构造list (size_type n, const value_type& val value_type())构造的li…

安全学习DAY18_信息打点-APP资产搜集

信息打点-APP资产&静态提取&动态抓包&动态调试 文章目录 信息打点-APP资产&静态提取&动态抓包&动态调试本节知识&思维导图本节使用到的链接&工具 如何获取目标APP从名称中获取APP从URL获取APP APP搜集资产信息APP提取信息分类信息提取方式信息…

怎么管理运营私域流量?

私域流量管理是当今企业运营的重要议题&#xff0c;对于企业发展和品牌建设具有不可忽视的作用。然而&#xff0c;管理私域流量并不是一项轻松的任务&#xff0c;需要我们采取科学有效的措施&#xff0c;才能取得良好的效果。 首先&#xff0c;私域流量管理需要建立清晰的目标。…

Linux系统安全——NAT(SNAT、DNAT)

目录 NAT SNAT SNAT实际操作 DNAT DNAT实际操作 NAT NAT: network address translation&#xff0c;支持PREROUTING&#xff0c;INPUT&#xff0c;OUTPUT&#xff0c;POSTROUTING四个链 请求报文&#xff1a;修改源/目标IP&#xff0c; 响应报文&#xff1a;修改源/目标…

HTTP 握手过程

HTTP 握手过程 TCP 建立连接 3 次握手 客户端请求连接服务器服务器响应成功客户端回应服务器准备开始连接 TCP 结束连接 4 次挥手 客户端向服务器发送&#xff0c;断开请求服务器向客户端发送&#xff0c;还有数据没有传输完毕&#xff0c;请稍等服务器向客户端发送&#x…

基于微信小程序的中医体质辨识文体活动的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于微信小程序的中医体质辨识文体活动的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java s…