Paper Files / AppSec
基于图导向混合分析与风险定量优先级排序的Application Security(AppSec)形式化可扩展架构
TITLE: 基于图导向混合分析与风险定量优先级排序的Application Security(AppSec)形式化可扩展架构 ABSTRACT: 随着基于微服务的分布式应用以及与大规模开源依赖链的集成日益复杂,攻击面和可被利用漏洞的出现频率显著增加。近期与Log4Shell(CVE-2021-44228)以及不安全反序列化漏洞相关的安全事件表明,仅依赖静态或动态扫描的传统Application Security(AppSec)方法已难以满足需求。本文提出一种形式化且可扩展的AppSec架构,该架构基于图导向的混合分析方法,结合静态分析(SAST)、动态分析(DAST)、软件成分分析(SCA)以及通过语义依赖图和跨过程数据流实现的自动化威胁建模。我们引入一种用于风险定量优先级排序的数学模型,该模型整合了CVSS指标、通过统计学习估计的可利用概率以及调用图中的结构中心性。我们实现了一个分布式原型系统,能够分析超过500万行代码的应用程序,并处理120万个图节点,在CI/CD流水线中平均延迟为38分钟。 我们在42个关键开源项目(包括Apache Struts、Spring PetClinic和NodeGoat)上对系统进行了评估,共计9,317个已知漏洞。与传统SAST工具相比,我们的方法将误报率降低了37.4%,并将真实可利用漏洞路径的检测率提高了28.9%。在受控测试环境中,该优先级机制在两周的Sprint周期内将关键漏洞的修复率提高了41%。结果表明,在统一的图导向模型下对多种技术进行形式化整合能够显著提升精度、可扩展性和操作相关性,从而推动AppSec领域的技术进展,并促进安全在DevSecOps生命周期中的有效集成。
- 引言
应用安全(Application Security – AppSec)如今已成为公共与私营组织中最主要的网络风险向量之一。向基于微服务架构、RESTful API、基础设施即代码(Infrastructure as Code)以及高度自动化的 CI/CD 流水线的转型,从根本上改变了传统威胁模型。与孤立的单体系统不同,现代应用集成了数百甚至数千个第三方依赖,其中许多独立演进,从而引入潜在漏洞。
近期事件展示了问题的规模。Log4Shell 漏洞(CVE-2021-44228)通过 JNDI 注入实现远程代码执行,影响了全球数百万个系统。Apache Struts 漏洞(CVE-2017-5638)的利用与对 Equifax 的攻击相关,暴露出补丁管理与输入验证方面持续存在的缺陷。在 MITRE ATT&CK 框架中,诸如 T1190(Exploit Public-Facing Application)和 T1059(Command and Scripting Interpreter)等技术在 Mandiant 和 Verizon DBIR 的报告中仍然是最常见的攻击手段之一。
尽管 SAST(Static Application Security Testing)、DAST(Dynamic Application Security Testing)和 SCA(Software Composition Analysis)工具不断发展,但仍然观察到较高的误报率、缺乏可利用性上下文,以及优先级排序困难。在企业环境中,流水线通常会产生数千条安全告警,而实际的分诊能力有限。数据流、传递依赖以及风险度量之间缺乏语义层面的整合,从而削弱了实际操作中的有效性。
在此背景下,我们提出以下研究问题:
RQ1:如何在统一模型中形式化整合多种 AppSec 技术,以捕获结构依赖关系及真实可利用的数据流?
RQ2:如何在考虑标准化指标(例如 CVSS)以及代码结构属性的情况下,对漏洞风险进行上下文化量化?
RQ3:在保持较高分析精度的同时,是否能够实现对大规模应用的可扩展性?
我们的主要贡献包括:
C1:提出一种基于带标签有向图的形式化模型,在统一语义下整合静态分析、动态分析以及依赖关系分析。
C2:提出一种定量风险优先级机制,结合图中心性、估计的利用概率以及 CVSS 严重性评分。
C3:实现并对一个分布式系统进行实证评估,展示了误报显著降低以及操作层面优先级排序的改进。
本文其余部分组织如下。第 2 节介绍基础概念与相关工作。第 3 节定义威胁模型并形式化问题。第 4 节描述提出的方法。第 5 节详细说明实现。第 6 节给出实验评估。第 7 节讨论影响与局限性。第 8 节总结全文并指出未来研究方向。
- 背景与相关工作
形式化地,我们将应用建模为带标签的有向图 $G = (V, E, \lambda)$,其中 $V$ 表示代码实体(函数、类、端点),$E \subseteq V \times V$ 表示关系(调用、数据流、依赖),而 $\lambda: V \cup E \rightarrow \Sigma$ 关联语义标签。
SAST 方法,例如 Livshits 和 Lam(USENIX Security 2005)所描述的方法,利用数据流分析识别诸如 SQL 注入等漏洞。DAST 则依赖于模糊测试(fuzzing)和受监控执行,如 Zalewski 关于 AFL 的研究所讨论。SCA 工具,如 Black Duck 和 OWASP Dependency-Check,主要关注版本映射与 CVE 数据库。
现有方法大致可分为三类:
- 基于签名的孤立分析。
- 基于跨过程数据流的静态分析。
- 结合动态插桩的混合方法。
然而仍存在若干限制:(i) 由于缺乏运行时上下文导致较高误报率;(ii) 难以扩展到包含数百万节点的图结构;(iii) 缺乏以结构性影响为导向的优先级排序机制。
近期研究探索利用程序图与机器学习进行漏洞检测(例如 Devign,Zhou 等,NeurIPS 2019),但通常缺乏与 DevSecOps 流水线的操作级集成以及正式的风险度量体系。
- 威胁模型与问题形式化
我们假设攻击者具备以下能力:
- 利用已知漏洞(零日漏洞不在研究范围内)。
- 与公共端点交互。
- 进行漏洞链式利用(chaining)。
- 操纵任意输入。
我们不假设内部系统已被预先攻陷。
将检测到的漏洞集合定义为 $Vul = {v_1, v_2, …, v_n}$。每个漏洞 $v_i$ 关联于一个节点子集 $S_i \subseteq V$。
上下文化风险建模为:
$$ R(v_i) = S_{cvss}(v_i) \cdot P_{exploit}(v_i) \cdot C_{struct}(v_i) $$
其中:
- $S_{cvss}$ 为归一化的 CVSS 分数。
- $P_{exploit}$ 为基于结构特征通过逻辑回归估计的利用概率。
- $C_{struct}$ 为图中的介数中心性:
$$ C_{struct}(v_i) = \sum_{s \neq t} \frac{\sigma_{st}(v_i)}{\sigma_{st}} $$
其中 $\sigma_{st}$ 表示 $s$ 与 $t$ 之间的最短路径数量。
该问题的目标是根据 $R(v_i)$ 对 $Vul$ 进行排序,以最大化其与观察到的真实利用情况之间的相关性。
- 提出的方法
该架构由四个模块组成:
- 语义图提取。
- 混合分析引擎。
- 利用概率估计器。
- 优先级排序机制。
Algorithm 1: 构建集成图
Input: Código fonte C, Dependências D
Output: Grafo G
1: V <- extrair_entidades(C, D)
2: E_call <- extrair_chamadas(C)
3: E_data <- analisar_fluxo_dados(C)
4: E_dep <- mapear_dependencias(D)
5: G <- (V, E_call ∪ E_data ∪ E_dep)
6: return G
近似复杂度:在增量构建情况下为 $O(|V| + |E|)$。
Algorithm 2: 漏洞优先级排序
Input: Vulnerabilidades Vul, Grafo G
Output: Lista ordenada L
1: for v in Vul:
2: S_cvss <- normalizar_cvss(v)
3: P_exploit <- estimar_probabilidade(v, G)
4: C_struct <- calcular_centralidade(v, G)
5: R[v] <- S_cvss P_exploit C_struct
6: L <- ordenar_por_valor(R)
7: return L
中心性计算采用 Brandes 近似算法,时间复杂度为 $O(|V||E|)$,并通过采样进行优化。
- 实现
我们基于 Kubernetes 实现了一个分布式架构原型。后端使用 Rust 实现静态分析,并使用 Python 进行统计建模。图数据存储采用 Neo4j,可处理多达 120 万个节点的图。
系统与 GitHub Actions 和 GitLab CI 集成,支持 Java、Python 和 JavaScript 语言。平均流水线在一个 16 节点集群(Intel Xeon 32 核,每节点 128GB RAM)上,在 38 ± 4.2 分钟内处理 530 万行代码。
在设计中需要在完整跨过程精度与简化分析以获得性能提升之间进行权衡。
- 实验评估
我们评估了 42 个开源项目,总计包含 9,317 个已知 CVE。
评估指标:
- 精确率(Precision)
- 召回率(Recall)
- F1-score
- 误报率
平均结果:
- 传统 SAST:Precision 0.61;Recall 0.74;F1 0.67。
- 我们的方法:Precision 0.84;Recall 0.79;F1 0.81。
误报率降低:37.4%。
风险排名与模拟真实利用之间的 Spearman 相关系数为 0.72,而单独使用 CVSS 时为 0.46。
额外计算开销比单独 SAST 高 18%,但仍在企业流水线 SLA(<60 分钟)范围内。
- 讨论
结果表明,结构中心性是攻击利用影响的重要预测指标。具有高介数中心性的漏洞在模拟攻击链中参与的概率高出2.3倍。
局限性包括对流建模质量的依赖以及缺乏深入的二进制分析。对于复杂动态语言的泛化仍需进一步改进。
对有效性的威胁包括开源数据集中的偏差以及受控条件下的利用模拟。
- 结论与未来工作
我们证明,一种面向图的形式化架构,通过结合混合分析与定量优先级排序,能够在 AppSec 中显著提升检测精度与运营相关性。
作为未来工作,我们计划通过图深度学习集成零日漏洞检测,并扩展对基础设施即代码(IaC)分析以及基于 eBPF 的运行时策略支持。
References
[1] MITRE, “ATT&CK Framework,” 2023.
[2] OWASP, “Top 10,” 2021.
[3] NIST, “SP 800-53,” 2020.
[4] T. H. Austin and C. Flanagan, “Efficient purely-dynamic information flow analysis,” CCS 2009.
[5] V. B. Livshits and M. S. Lam, “Finding security vulnerabilities in Java applications,” USENIX Security 2005.
[6] M. Zalewski, “American Fuzzy Lop,” 2014.
[7] P. Mell et al., “CVSS v3.1 Specification,” FIRST, 2019.
[8] Apache Foundation, “CVE-2017-5638.”
[9] Apache Foundation, “CVE-2021-44228.”
[10] Verizon, “Data Breach Investigations Report,” 2023.
[11] FireEye Mandiant, “M-Trends,” 2022.
[12] S. Zhou et al., “Devign,” NeurIPS 2019.
[13] Neo4j Documentation, 2024.
[14] Kubernetes Documentation, 2024.
[15] GitHub, “Actions Documentation,” 2024.
[16] OWASP, “Dependency-Check,” 2023.
[17] Black Duck Software, “Open Source Security Report,” 2023.
[18] U. Brandes, “A Faster Algorithm for Betweenness Centrality,” J. Math. Sociology, 2001.
[19] ISO/IEC 27034, “Application Security,” 2011.
[20] ENISA, “Threat Landscape,” 2023.