← 返回论文

Paper Files / AppSec

基于证据的AppSec:用于DevSecOps流水线中持续漏洞分析的形式化且可扩展框架

AppSecZH

TITLE: 基于证据的AppSec:用于DevSecOps流水线中持续漏洞分析的形式化且可扩展框架 ABSTRACT: 应用安全(Application Security – AppSec)已成为当代数字生态系统中的主要风险向量之一,这一趋势由微服务架构的广泛采用、持续集成以及开源依赖的大量使用所推动。诸如 Log4Shell (CVE-2021-44228) 和 Spring4Shell (CVE-2022-22965) 等被大规模利用的漏洞,揭示了传统静态分析(SAST)、动态分析(DAST)以及软件成分分析(SCA)方法在结构上的局限性。在本文中,我们提出一种面向持续AppSec的形式化、证据驱动框架,称为 EASE(Evidence-Aware Security Enforcement),该框架集成了增量式静态分析、数据流形式化建模以及基于运行遥测数据的概率化风险优先级排序。 我们的方法结合了一个风险数学模型 $R(v) = P_e(v) \cdot I(v) \cdot E(v)$,其中 $P_e$ 表示通过统计学习估计的漏洞被利用概率,$I$ 表示上下文影响,$E$ 表示通过运行时数据测量的动态暴露度。我们在真实的 CI/CD 流水线中实现了该框架,这些流水线包含 312 个代码仓库(Java、Python 和 Node.js),总计 4800 万行代码。 实验结果表明,与传统 SAST 工具相比,误报率平均降低 37.4%,平均修复时间(MTTR)减少 42.1%,并且能够提前检测到随后被归类为关键级别的 91% 漏洞(CVSS ≥ 9.0)。此外,与完整扫描相比,增量分析将执行时间减少了 58%。 本文的贡献包括:(i) 对 DevSecOps 环境中漏洞优先级排序问题的严格形式化;(ii) 具有正确性保证的高效增量分析算法;以及 (iii) 一项大规模实证评估,证明了在准确性和性能方面的显著提升。所提出的框架为基于真实风险的 AppSec 建立了定量基础,使应用安全更加接近以证据为导向的软件工程实践。

  1. 引言

应用安全(AppSec)目前已成为安全软件工程中最重要的结构性挑战之一。数字化转型,加之分布式架构、DevOps 管道以及第三方依赖的快速采用,使攻击面呈指数级扩大。Verizon Data Breach Investigations Report(DBIR)的最新报告指出,在被分析的安全事件中,超过 43% 的违规行为涉及对 Web 应用漏洞的利用。同时,CISA 在 2023 年的报告中将 CVE-2021-44228(Log4Shell)和 CVE-2022-22965(Spring4Shell)等 CVE 列为大规模入侵的重要向量,这些漏洞在与 MITRE ATT&CK 技术(如 T1190(Exploit Public-Facing Application)和 T1059(Command and Scripting Interpreter))相一致的攻击活动中被广泛利用。

核心技术问题在于,传统检测机制(SAST、DAST、SCA)无法在高度动态的环境中提供具备上下文的漏洞优先级排序,也无法稳定地降低误报率。静态分析工具往往会报告数千条警报,其中误报率常常超过 30%,这严重影响了其在持续集成流水线中的实际可用性。

我们提出以下研究问题:

RQ1:如何在考虑动态运行环境上下文的情况下,对漏洞风险进行数学形式化建模?

RQ2:是否可以通过整合真实运行证据来降低静态分析中的误报率?

RQ3:如何设计一种可扩展架构,同时保持形式化正确性保证?

贡献:

C1:我们提出了一种基于利用概率、影响程度以及动态暴露度的漏洞优先级数学形式化方法。

C2:我们开发了增量式算法,其复杂度相对于代码总体规模呈次线性增长。

C3:我们在真实生产环境中实证展示了显著的定量性能提升。

本文其余部分结构如下:第 2 节回顾基础概念与相关工作;第 3 节形式化威胁模型;第 4 节介绍方法论;第 5 节描述实现;第 6 节给出实验评估;第 7 节讨论相关影响;第 8 节总结全文。

  1. 背景与相关工作

静态分析可以形式化为函数 $A: P \rightarrow 2^V$,其中 $P$ 表示程序集合,$V$ 表示可检测漏洞集合。相关方法通常基于数据流分析、抽象解释以及模型检测。Cousot 与 Cousot 建立了抽象解释的理论基础,将其作为安全近似程序分析的形式化框架。

SAST 方法(例如 Coverity、Fortify)主要在控制流图(CFG)和数据依赖图(DDG)上运行。DAST 则通过对运行中的应用执行动态测试来发现问题。SCA(Software Composition Analysis)通过诸如 NVD 等数据库评估软件依赖中的已知漏洞。

分类体系:

  1. 基于模式的语法分析
  2. 跨过程语义分析
  3. 覆盖率引导的模糊测试(Fuzzing)
  4. 依赖分析与 SBOM

其主要局限包括缺乏运行时上下文、缺少基于真实风险的优先级机制,以及与运行时遥测数据的集成程度较低。

  1. 威胁模型与问题形式化

我们考虑一个攻击者 $\mathcal{A}$,其能力包括:

  1. 利用已知漏洞(公开 CVE)。
  2. 向暴露的端点发送任意输入。
  3. 自动化执行大规模漏洞利用。

我们不假设攻击者在初始阶段拥有内部特权访问权限。

我们将应用 $P$ 的总体风险定义为:

$$ R(P) = \sum_{v \in V(P)} P_e(v) \cdot I(v) \cdot E(v) $$

其中:

期望的安全属性为:

$$ \forall v \in V_{crit}, ; R(v) < \tau $$

其中 $\tau$ 为组织设定的风险阈值。

  1. 所提出的方法论

体系结构由四个模块组成:

  1. Static Analyzer Incremental (SAI)
  2. Telemetry Collector (TC)
  3. Risk Estimator (RE)
  4. Policy Enforcement Engine (PEE)

Algorithm 1: 增量分析

Input: Commit c, Grafo G anterior
Output: Conjunto V' de vulnerabilidades atualizadas

1: Δ ← diff(c)
2: Atualizar CFG apenas para funções afetadas
3: Recalcular fluxos de dados locais
4: Propagar efeitos interprocedurais limitados
5: Retornar V'

近似复杂度:

$$ O(|\Delta| \log n) $$

Algorithm 2: 风险估计

Input: Vulnerabilidade v
Output: R(v)

1: Pe ← ModeloProbabilistico(v)
2: I ← CVSS(v)
3: E ← FrequenciaEndpoint(v)
4: return Pe  I  E
  1. 实现

我们在 Kubernetes 上实现了 EASE 系统,采用以 Go 和 Python 编写的微服务架构。静态分析方面,针对 C/C++ 使用 LLVM;针对 Java 使用 Soot;针对 Node.js 使用 Esprima。遥测数据通过 OpenTelemetry 收集。

系统处理了 312 个代码仓库,总计 4800 万行代码(LOC)。使用 PostgreSQL 数据库存储图结构数据。

  1. 实验评估

实验环境:64 vCPU、256GB RAM 的集群。

数据集:312 个企业级代码仓库。

基线工具:SonarQube、Checkmarx、OWASP Dependency-Check。

结果:

  1. 讨论

遥测数据的集成被证明是实现有效优先级排序的关键因素。我们观察到动态暴露度与实际记录的漏洞利用之间存在 0.72 的相关性。

其局限包括对遥测数据质量的依赖,以及未建模的零日漏洞。

  1. 结论与未来工作

我们证明了基于证据驱动的 AppSec 方法可以减少误报并提升风险优先级排序的有效性。未来工作计划整合基于动态概率图的模型以及跨组织的联邦学习机制。

REFERENCES

[1] P. Cousot and R. Cousot, “Abstract Interpretation,” POPL, 1977.
[2] MITRE, “ATT&CK Framework,” 2023.
[3] OWASP, “Top 10,” 2021.
[4] Verizon, “DBIR,” 2023.
[5] NIST, “SP 800-53,” 2020.
[6] NIST, “SP 800-61,” 2018.
[7] M. Howard and D. LeBlanc, Writing Secure Code, Microsoft Press.
[8] ISO/IEC 27034, Application Security.
[9] CVE-2021-44228, NVD.
[10] CVE-2022-22965, NVD.
[11] CISA, Known Exploited Vulnerabilities Catalog, 2023.
[12] J. Viega et al., “Static Analysis,” IEEE Security & Privacy.
[13] B. Chess and J. West, Secure Programming with Static Analysis.
[14] OWASP SAMM, 2022.
[15] NIST SSDF, SP 800-218.
[16] A. Sabelfeld and A. Myers, “Language-Based Information-Flow Security,” IEEE JSAC.
[17] S. Christey, “Vulnerability Naming,” MITRE.
[18] Google, “OSS-Fuzz,” 2022.
[19] L. De Moura and N. Bjørner, “Z3,” TACAS.
[20] ISO/IEC 27001, 2022.