作者:
(1)Anna-Katharina Wickert,德国达姆施塔特工业大学([email protected]);
(2)Lars Baumgärtner,德国达姆施塔特工业大学([email protected]);
(3) Florian Breitfelder,达姆施塔特工业大学,德国([email protected])
(4)Mira Mezini,达姆施塔特工业大学,德国([email protected])。
背景:先前的研究表明,使用加密 API 的 Java 应用程序中高达 99.59% 至少滥用过一次 API。然而,这些研究都是针对 Java 和 C 进行的,而缺少针对其他语言的实证研究。例如,一项针对 Python 加密任务的受控用户研究表明,68.5% 的专业开发人员为加密任务编写了安全解决方案。
目的:为了了解此观察结果是否适用于现实世界的代码,我们对 Python 中的加密误用进行了研究。
方法:我们开发了一个静态分析工具,涵盖了 5 种不同 Python 加密 API 的常见误用。通过此分析,我们分析了来自 GitHub 的 895 个流行 Python 项目和 51 个用于嵌入式设备的 MicroPython 项目。此外,我们将结果与以前的研究结果进行了比较。
结果:我们的分析显示,52.26% 的 Python 项目至少存在一次误用。此外,一些 Python 加密库的 API 设计可帮助开发人员避免滥用加密函数,而这在使用 Java 和 C 代码进行的研究中更为常见。结论:我们得出结论,我们可以看到良好的 API 设计对 Python 应用程序的加密滥用产生积极影响。此外,我们对 MicroPython 项目的分析揭示了混合分析的重要性。
如今,密码学(以下简称加密)被广泛用于保护我们的数据并确保机密性。例如,如果没有加密,我们就无法安全地使用网上银行或进行网上购物。不幸的是,先前的研究结果表明,加密通常以不安全的方式使用 [3、4、7、9、11]。其中一个问题是为加密等加密原语选择不安全的参数(例如不安全的块模式)。有许多静态分析工具可以识别这些滥用,例如CryptoREX [13]、 CryptoLint [4]、 CogniCryptSAST [8] 和Cryptoguard [12]。
虽然这些工具和相应的实际研究集中在 Java 和 C 上,但用户研究表明,现有的 Python API 减少了加密滥用的数量。Acar 等人 [2] 对 307 名 GitHub 用户进行了一项实验,这些用户必须解决 3 个与加密相关的开发任务。他们观察到 68.5% 的专业开发人员用 Python 为给定的任务编写了一个安全的解决方案。在一项有 256 名 Python 开发人员尝试解决简单加密任务的对照实验中,Acar 等人 [1] 发现,简单的 API 设计(如 Python 库加密)可支持开发人员编写安全代码。但是,目前还没有任何实际实证研究证实 Python 中的加密滥用频率低于 Java 或 C。
为了实证评估 Python 中的加密滥用,我们引入了LICMA ,这是一个多语言分析框架,支持 5 种不同的 Python 加密 API 和 Java 的 JCA API。我们为所有 Python API 提供了 5 条不同的规则 [4],为 JCA 提供了 6 条不同的规则 [4],以检测最常见的加密滥用。通过 LICMA,我们分析了来自 GitHub 的 895 个流行 Python 应用程序和 51 个 MicroPython 项目,以深入了解 Python 中的滥用情况。我们发现,52.26% 的具有加密使用的 Python GitHub 应用程序至少存在一次滥用,导致 1,501 次滥用。总的来说,只有 7% 的滥用发生在应用程序代码本身中,其余的滥用是由依赖项引入的。此外,我们对 MicroPython 项目的研究表明,嵌入式领域的开发人员倾向于通过 C 代码使用加密。因此,揭示了混合静态分析的重要性,它可以跨多种语言跟踪程序信息,例如调用图 [5, 10]。
为了进一步了解 Python API 是否不易被加密滥用,我们做出了以下贡献:
• 一种新颖的多语言分析工具,用于检测 Python 和 Java 中的加密滥用。对于 Python,我们涵盖了 5 种常见 Python 加密 API 的加密滥用,对于 Java,我们涵盖了标准 API JCA。
• 对 GitHub 上 895 个最流行的 Python 应用程序中加密滥用的实证研究发现了 1,501 种滥用行为。
• 将我们在 Python 应用程序中的发现与以前关于 Android 应用程序和 C 语言固件映像的加密滥用的研究进行比较。我们观察到大多数 Python 应用程序更安全,并且具体滥用类型之间的分布差别很大。
• 对 MicroPython 项目中加密滥用的实证研究揭示了混合静态分析的重要性。
• 一个复制包,包括我们研究中使用的数据集、我们的分析结果以及 LICMA[1] 的代码。
[1] dx.doi.org/10.6084/m9.figshare.16499085