0%

Python_Crypto_Misuses-论文笔记

Python Crypto Misuses in the Wild

来源信息

  • 机构:达姆施塔特工业大学
  • 作者:Anna-Katharina Wickert, Lars Baumgärtner, Florian Breitfelder, Mira Mezini

摘要

先前的研究表明,高达99.59%使用加密api的Java应用程序至少滥用一次API,但是针对Python的相关研究非常少,为了研究Python加密项目的API使用情况,作者开发了一个静态分析工具,涵盖了5种不同的Python加密api的常见滥用,分析了Github的895个项目和51个嵌入式项目,52.26%的Python项目至少有一次滥用。此外,一些Python加密软件库的API设计促使了开发人员滥用加密函数,而这些函数在使用Java和C的项目中更常见。

研究目标

作者聚焦于Python加密API中的六种加密方式。

Snipaste_2021-09-15_16-10-34.PNG

  • ECB加密被确定为不安全的加密方式
  • CBC如果使用非随机初始化向量(IV)。由于IV的可预测性,CBC的使用是确定性的和不安全的。
  • 固定的加密密钥不安全,而且不应该是硬编码
  • 非随机salt会使得加密变得不安全
  • PBE标准PKCS#5中定义的1,000次迭代的最小推荐值,因此小于1000不安全
  • 种子可以确保随机数生成器的输出是不确定性的。

LICMA工具

将一个源代码文件解析为各自的抽象语法树(AST)。更具体地说,我们使用Babelfish创建了一个通用的抽象语法树(UAST),它结合了独立于语言的AST元素与特定于语言的元素。定义误用的规则,如果触发该规则就继续向后分析。
后向切片是通过在XPath3查询的帮助下过滤AST来创建的,其工作原理如下:首先,后向切片算法(BSA)识别在各自规则中引用的所有源代码行。例子:一个函数调用参数,比如加密函数。其次,BSA确定所有函数调用的参数是硬编码的、本地分配的还是全局分配的。如果满足这三种情况中的一种,则返回相应的值。这个值会根据规则中定义的函数进行检查,例如,如果5的值小于1000。在负的情况下,BSA查找函数的调用者,并如上所述检查调用者的参数。如果返回一个值或没有进一步的分析调用者可用,则算法停止,并返回分析的结果。在报告中,LICMA区分了由于缺少调用者而无法解决的潜在误用,以及明确的不安全规则。

Snipaste_2021-09-15_16-38-04.PNG

结果

论文分析了Python5个加密模块cryptography, M2Crypto, PyCrypto, PyNaCl, ucryptolib

如图为每一个库所能覆盖到的误用规则
Snipaste_2021-09-15_16-47-54.PNG

超过30个滥用规则的Python项目
Snipaste_2021-09-15_16-49-12.PNG

在Python的库中发现的滥用规则
Snipaste_2021-09-15_16-49-35.PNG

与Java和C的分析工具进行对比
Snipaste_2021-09-15_16-49-41.PNG

Python的模块通过设计避免了6规则的触发

分析

  • 依赖:发现的所有依赖中,只有7%出现在代码中,剩余的都是出现在代码的依赖中,都是由于外部引入引发的。
  • 只有14.81%的项目中直接包含了滥用加密的API,其余的都是通过第三方代码引发的。
  • Python加密API的设计支持开发人员避免由于AES加密的不安全块模式而导致的滥用。
  • 58.82%的明确滥用,密码很容易受到字典攻击。
  • 使用Python的加密API可以避免在其代码中使用AES加密的块模式时的常见滥用