Flexible and Optimal Dependency Management via Max-SMT
Basic Information:
- Title: Flexible and Optimal Dependency Management via Max-SMT (通过Max-SMT实现灵活和最佳依赖管理)
- Authors: Donald Pinckney, Federico Cassano, Arjun Guha, Jon Bell, Massimiliano Culpo, Todd Gamblin
- Affiliation: Northeastern University, Boston, MA, USA (作者Donald Pinckney, Federico Cassano, Arjun Guha, Jon Bell所在的机构为美国马萨诸塞州波士顿东北大学)
- Keywords: dependency management, optimization, package manager (依赖管理、优化、包管理器)
- Urls: https://dl.acm.org/doi/pdf/10.1145/3415506.3420079, Github:None
- Repo: https://github.com/donald-pinckney/pacsolve
Summary:
-
a. background:
- PACSOLVE和MAXNPM是旨在解决NPM依赖性解析器的一些限制的新工具。虽然NPM是软件开发的重要工具,但它具有一些缺点,使得开发人员难以实现其目标。
-
b. past methods and problems:
- NPM使用的贪心算法可能会导致重复依赖和膨胀的代码,对于需要最小化代码大小的Web应用程序来说尤其糟糕。 此外,NPM的漏洞修复算法也是贪心的,甚至可能引入新的漏洞,并且NPM的复制依赖能够破坏有状态框架,需要大量解决方法。
-
c. methodology
- PACSOLVE通过一个高级DSL来规定包版本、版本约束、优化目标等的语法和语义,并使用一个基于求解器的语言来生成Max-SMT 求解器的问题,确保与NPM的贪心方法进行比较的最优解。
-
d. task and performance
- 通过一个多目标优化的依赖性解析实验,MAXNPM通常优于NPM和特定工具,从而在33% 的情况下减少依赖中的漏洞,在14% 的情况下选择更新的依赖,并在21% 的情况下减少了依赖的数量。
Introduction:
现有工作的问题:
npm官方漏洞修复工具audit
NPM内置的工具npm audit通过查询GitHub安全咨询数据库检查有漏洞的依赖项。该工具还可以通过升级依赖项而不违反版本限制来修复漏洞。但是,该工具有几个缺点。
- 首先,每次运行只尝试修复一个漏洞。过去,NPM的贪婪算法常常导致重复依赖和膨胀的代码,NPM的漏洞修复算法也是贪心的,会引入新的漏洞。
- 其次,它仅升级有漏洞的依赖项,即使有一个无漏洞的版本可以满足版本限制。
- 第三,尽管CVSS漏洞评分可在GitHub安全咨询数据库中获得,但该工具并不按漏洞分数进行优先修复。漏洞评分(CVSS)是一种用于评估计算机系统和网络设备漏洞风险的开放标准,它为安全研究人员、企业和政府提供了一种简单、标准化的方法来评估漏洞的严重程度。
- 最后,该工具不会基于漏洞的严重性进行妥协。例如,一个修复可能会引入比原漏洞更严重的新漏洞。
以往的研究忽略了软件开发的复杂性,特别是在需求多元化的情况下,开发人员需要更好的依赖性解析器。在复杂的软件开发中,需要更好的依赖性解析器来确保开发人员实现其目标。
Webpack、Browserify或Parcel
Bundler(如Webpack、Browserify或Parcel)是一个与NPM协同工作的工具,用于管理前端Web应用程序的依赖项。主要任务是将所有依赖项打包成要通过Web加载的文件,而不是本地文件系统。然而,Bundler的功能不止于此,还包括通过各种技术来尽可能减少页面加载时间。减少代码大小是减少页面加载时间的简单方法。不幸的是,NPM容易重复包,从而导致代码大小增加[1]。现代打包器采用了各种技术,从代码压缩到统一相同内容的单个文件。然而,这些技术并不总是可靠的,并且已知会破坏广泛使用的前端框架[2],[3]。
管理状态依赖项
NPM选择同一依赖项的多个版本的能力在使用某些有状态框架时也是无助的。例如,React是一种常用的Web框架,它依赖于内部全局状态来安排视图更新。如果程序依赖于两个传递依赖于React的不同版本的软件包,则很可能会遇到运行时错误或静默失败。避免这个问题的唯一方法是,如果所有软件包作者都小心地将其对React的依赖标记为peer dependency:即由项目中的其他软件包安装的依赖项。然而,无法确定所有第三方依赖项是否正确使用peer dependencies。还很难确定一个软件包是否永远不会被用作依赖项,因此不应使用peer dependencies。What?
我们的关键见解是,所有这些问题都可以被定义为一个更普遍的问题的实例:最优依赖解决,其中优化目标和约束的选择决定了哪些目标的优先级。由于NPM生态系统中存在广泛的目标,本文认为NPM应该允许开发人员定制和结合多个目标。例如,开发人员应该能够指定策略,如“依赖关系不能存在任何重要漏洞”,“不应重复使用任何软件包”,并将这些与“选择满足所有约束条件的最新软件包版本”的基本目标相结合。为了使这种定制和结合的目标成为可能并评估其有效性,我们提出了MAXNPM:一个完整的、可以直接替代NPM的工具,它使开发人员能够结合多个目标。
Methods:
- a. Study’s theoretical basis
- PACSOLVE 通过一个高级DSL来规定包版本、版本约束、优化目标等的语法和语义,并使用一个基于求解器的语言来生成Max-SMT 求解器的问题。 (DSL是指领域特定语言(Domain-Specific Language),也称为专用领域语言。DSL是一种针对特定领域的编程语言,用于解决该领域中的特定问题。与通用编程语言不同,DSL的语法、语义和功能都是为了满足特定领域的需求而设计的。DSL的目标是使编写和阅读代码更加容易,减少出错的可能性。)
- b. Article’s technical route (step by step)
- PACSOLVE和MAXNPM为依赖解决提供了一个统一的框架和实现,可让开发者自定义约束和优化目标。MAXNPM允许开发者在安装依赖关系时组合多个目标,例如更喜欢新的依赖项,减少代码大小并最小化安全漏洞数量或其严重程度。
A. Describing a Dependency Solver with PACSOLVE
PACSOLVE是一种基于约束优化的依赖关系解决器,旨在解决软件依赖项管理领域中的复杂问题。它是一个用Python编写的开源项目,可以自定义和组合多个优化目标和约束条件来优化软件依赖项的选择。
PACSOLVE的目标是提供一种灵活、可扩展的依赖项解决方案,可以满足各种不同类型的开发项目。它支持多种优化目标,如最小化软件包数量、最大化软件包的版本稳定性、最小化安全漏洞数量等。此外,PACSOLVE还支持自定义约束条件,如依赖项版本的范围限制、禁止特定依赖项的使用等。
PACSOLVE的优势在于它使用的是约束优化算法,可以在满足所有约束条件的前提下找到最优解。它还可以解决由于重复软件包、版本冲突和安全漏洞等问题而引起的依赖项选择困难的问题。同时,PACSOLVE还支持与其他依赖项管理工具和构建系统集成,可以方便地应用于各种不同类型的软件项目。
B. The Semantics of PACSOLVE
C. Synthesizing Solution Graphs with PACSOLVE
Max-SMT求解器高效实现PACSOLVE
Evaluation:
数据集:Top 1000没有漏洞的npm软件包 和 715个CVSS得分高的包的Vuln715数据集
RQ1: Can MAXNPM find better solutions than NPM when given different optimization objectives?
a.更多减少漏洞 比较npm和PACSOLVE的CVSS得分
b.找到更新的npm包:
c.减少代码膨胀,利用重复的package
RQ2: Do MAXNPM solutions pass existing test suites?
NPM通过, MAXNPM大多数能通过
RQ3: Does MAXNPM successfully solve packages that NPM solves?
成功构建了972/1000个包,有可比性?和npm对比多构建了多少个包?
RQ4*: Does using MAXNPM substantially increase solving time
多增加了2-4s的额外时间
Conclusion:
- a. Work significance
- PACSOLVE和MAXNPM提供了一种解决NPM依赖解决器限制的有效方法,使开发人员能够实现其目标,同时确保最优性并支持可自定义的约束和目标。
- b. Innovation, performance, and workload
- PACSOLVE的创新性在于使用了一个高级DSL来规定语法和语义,并利用一个基于求解器的语言生成问题,以便使用Max-SMT解决器求解问题,确保最优性和可扩展性。MAXNPM在多个目标优化中常常优于NPM和特定工具,在减少依赖漏洞、选择更新依赖和减少依赖项数量方面显著。
- c. Research conclusions (list points)
- PACSOLVE和MAXNPM为依赖解决提供了一个统一的框架和实现;
- 通过使用PACSOLVE和MAXNPM,开发人员可以根据其自定义的约束和目标进行多目标优化的依赖解决;
- 实验表明,MAXNPM在多个目标优化中常常优于NPM和特定工具,在减少依赖漏洞、选择更新依赖和减少依赖项数量方面显著。
Thinking
1、相关工作做的不够充分
ICSE 2022 - Demystifying the Vulnerability Propagation and Its Evolutionvia Dependency Trees in the NPM Ecosystem
TSE 2023 - Plumber_Boosting_the_Propagation_of_Vulnerability_Fixes_in_the_npm_Ecosystem 都没有提及