Aura大规模 Python 源码审计和静态分析
Aura 是一个静态分析框架,旨在应对 PyPI 上发布的恶意包和易受攻击的代码不断增加的威胁。
项目目标:
- 在上传到 PyPI 的包上提供一个自动监控系统,对可能表明正在进行的攻击或代码中的漏洞的异常发出警报
- 使组织能够对源代码进行自动安全审计并实施安全编码实践,重点是审计 3rd 方代码,例如 python 包依赖项
- 允许研究人员大规模扫描代码存储库、创建数据集并进行分析,以进一步推进易受攻击和恶意代码依赖项领域的研究
功能列表:
- 适用于分析恶意软件,保证零代码执行
- 通过重写 AST 树的高级反混淆机制——持续传播、代码展开和其他肮脏的技巧
- 递归扫描自动解压 zip、wheels 等档案并扫描内容
- 还支持扫描非 python 文件——插件可以在“原始文件”模式下工作,例如内置的 Yara 集成
- 扫描硬编码机密、密码和其他敏感信息
- 自定义差异引擎 - 你可以比较不同数据源之间的变化,例如对 PyPI 包进行域名仿冒与所做的变化
- 适用于 Python 2.x 和 Python 3.x 源代码
- 高性能,旨在扫描整个 PyPI 存储库
- 以多种格式输出,例如纯文本、JSON、SQLite、SARIF 等……
- 在超过 4TB 的压缩 Python 源代码上进行测试
- Aura 能够报告代码行为,例如网络通信、文件访问或系统命令执行
- 计算“Aura score”,告诉你源代码/输入数据的可信度
- ……
Aura 使用所谓的 URI 来标识要扫描的协议和位置,如果未使用协议,则扫描参数将被视为本地系统上文件或目录的路径。
虽然还有其他功能与 Aura 重叠的工具,例如 Bandit、dlint、semgrep 等,但这些替代方案的侧重点不同,这会影响功能及其使用方式。这些替代方案主要旨在以类似于 linters 的方式使用,集成到 IDE 中,在开发过程中经常运行,这使得在理想情况下最小化误报和报告并提供明确的可操作解释非常重要。
另一方面,Aura 报告代码的行为、异常和漏洞,并以误报为代价提供尽可能多的信息。aura 报告的很多事情不一定可由用户操作,但它们会告诉您很多有关代码行为的信息,例如进行网络通信、访问敏感文件或使用与混淆相关的机制来指示可能的恶意代码. 通过收集此类数据并将其聚合在一起,Aura 可以在功能上与其他安全系统(例如防病毒、IDS 或防火墙)进行比较,这些系统本质上进行相同的分析,但使用不同类型的数据(网络通信、正在运行的进程、 ETC)。
以下是 Aura 与其他类似 linters 和 SAST 工具之间差异的快速概述:
-
输入数据:
- 其他 SAST 工具——通常仅限于 python(目标)源代码和安装该工具的 python 版本。
- Aura还可以分析二进制(或非 Python 代码)和 Python 源代码。能够使用相同的 Aura 安装分析与不同 python 版本(py2k 和 py3k)兼容的 python 代码的混合。
-
报告:
- 其他 SAST 工具- 旨在与其他系统(如 IDE、具有可操作结果的 CI 系统)很好地集成,同时尽量减少误报,以防止用户收到太多无关紧要的警报。
- Aura - 尽可能多地报告不能立即采取行动的信息,例如行为和异常分析。输出格式旨在便于机器处理和聚合,而不是人类可读的。
-
配置:
- 其他 SAST 工具- 通过自定义签名以针对目标项目使用的特定技术,这些工具针对目标项目进行了微调。覆盖配置通常可以通过在源代码中插入注释来实现,例如
# nosec
在该位置抑制警报 - Aura - 预计对于被扫描的代码所使用的技术,例如审核新的 python 包以批准用作项目中的依赖项,事先几乎一无所知。在大多数情况下,甚至不可能修改扫描的源代码,例如使用注释来指示 linter 或 aura 跳过该位置的检测,因为它正在扫描托管在某个远程位置的该代码的副本。
- 其他 SAST 工具- 通过自定义签名以针对目标项目使用的特定技术,这些工具针对目标项目进行了微调。覆盖配置通常可以通过在源代码中插入注释来实现,例如
评论