谷歌揭幕 最近发布 Atheris项目,这是 一套开源工具 专业的 用于对Python代码进行模糊测试 和用C / C ++编写的CPython扩展。
萨尔瓦多PROYECTO 使用基于libFuzzer的引擎 并且可以与Address Sanitizer和Undefined Behavior Sanitizer工具一起使用,以检测其他错误。 该代码在Apache 2.0许可下打开。
关于Google Atheris
用Google Atheris的话来说,它是一个工具包,可用于自动查找Python代码和本机扩展中的错误。 Atheris是一个“覆盖率驱动”的模糊器,这意味着Atheris将在观看节目的同时反复尝试各种输入,并尝试寻找有趣的路径。
支持Python 2.7和Python 3.3+的代码审查,但要获得完整的指导性覆盖,建议使用Python 3.8和3.9分支,它们现在支持按操作码进行操作码统计。
正在进行中, Atheris列出输入数据的可能组合并生成报告 所有检测到的故障和未检测到的异常。
例如,当检查Atheris中的YAML解析库时,发现某些YAML构造(例如指定“ -_”而不是整数值或使用列表代替键)会引发意外的异常,而不是YAMLErrors标准错误。
模糊测试是发现编程错误的众所周知的技术。 这些可检测的错误中有许多都具有严重的安全隐患。 使用此技术时,Google已发现成千上万个安全漏洞和其他错误。 传统上在诸如C或C ++之类的本地语言中使用模糊测试,但是去年我们创建了一个新的Python模糊测试引擎。 今天,我们发布了开源的Atheris模糊引擎。
雅典娜 也可以用来识别行为差异 针对相同任务的库。 例如,对执行国际化域名解码任务的Python软件包“ idna”和库“ libidn2”的摘要检查发现,它们并不总是产生相同的结果。
Atheris的最佳用途之一是用于差分扩散器。 这些是模糊测试,目的是寻找打算做同一件事的两个库的行为不同。 与Atheris捆绑在一起的示例模糊器之一正是这样做的,目的是将Python的“ idna”软件包与C的“ libidn2”软件包进行比较。
特别是,如果域使用Unicode序列,则“ idna”和“ libidn2”会将国际化域名转换为其他主机。
通常,Atheris在纯Python代码中很有用,只要它能够表达什么是“正确的”行为,或者至少表达出哪些行为绝对是不正确的。 这可能与评估库输出准确性的模糊器中的自定义代码一样复杂,也可能与检查是否未引发意外异常一样简单。
重要的是要考虑到 模糊测试生成输入数据的各种随机组合的流, 接近实际数据(例如带有随机标记参数的html页面,标题异常的文件或图像等),并修复过程中可能出现的故障。
如果任何序列导致异常或与预期的响应不匹配,则此行为很可能表明存在错误或漏洞。
最后,如上所述 Atheris适用于2.7和3.3+版本的Python代码, 尽管Google强烈建议使用3.8+和为CPython编写的本机扩展。
Windows尚未受支持的操作系统之中,因此该引擎目前仅对Linux和Mac OS X用户感兴趣。
要在这些平台上使用它,开发人员必须安装最新版本的Clang编译器前端。
如果您想了解更多,您可以在 以下链接。