对于 MuleSoft API 的开发来说,代码扫描以检测安全敏感参数的漏洞是一项关键实践。
代码扫描涉及对 MuleSoft 源代码的系统分析,以识别漏洞。这些漏洞可能从硬编码的安全参数(如密码或 accessKey)到在属性文件中以明文格式暴露密码或 accessKey。这些漏洞可能被恶意行为者利用,以危害应用程序的机密性、完整性或可用性。
缺乏漏洞自动检测
MuleSoft Anypoint Studio 或 Anypoint 平台没有提供保持对上述漏洞的治理的功能。这可以通过设计时治理来管理,需要对代码进行手动审查。然而,有许多可用的工具可以用于扫描部署的代码或代码存储库,以查找此类漏洞。您甚至可以编写任何语言的自定义代码/脚本来执行相同的任务。编写自定义代码会增加另一层复杂性和可管理性。
使用生成式人工智能来审查代码以检测漏洞
在本文中,我将介绍如何利用生成式人工智能来检测此类漏洞。我使用了 Open AI 基金会的模型“gpt-3.5-turbo”来演示代码扫描功能,以查找上述漏洞。然而,我们可以使用任何基金会模型来实现此用例。
可以使用 Python 代码或其他语言中的任何代码来实现此功能。可以以以下方式使用 Python 代码:
- 可以手动执行 Python 代码来扫描代码存储库。
- 可以将其集成到 CICD 构建流程中,该流程可以扫描并报告漏洞,并在存在漏洞时导致构建失败。
- 可以将其集成到任何其他程序中,例如 Lambda 函数,该函数可以定期运行并执行 Python 代码来扫描代码存储库并报告漏洞。
高级架构
架构
- 有许多执行 Python 代码的方法。更合适和实用的方法是将 Python 代码集成到 CICD 构建流程中。CICD 构建流程执行 Python 代码。
- Python 代码读取 MuleSoft 代码的 XML 文件和属性文件。
- Python 代码发送 MuleSoft 代码内容并提示 OpenAI “gpt-3.5-turbo 模型”。
- OpenAI 模型返回硬编码和未加密的值。
- Python 代码生成找到的漏洞报告。
实施细节
MuleSoft API 项目结构包含两个主要部分,其中安全敏感参数可以以明文形式暴露。 src/main/mule 文件夹包含所有的 XML 文件,其中包含流程、连接详细信息和异常处理。MuleSoft API 项目可能还包含自定义的 Java 代码。然而,在本文中,我没有考虑在 MuleSoft API 中使用的自定义 Java 代码。
src/main/resources 文件夹 包含环境属性文件。这些文件可以是开发、质量和生产的.properties 或 .yaml 文件。这些文件包含属性键值,例如用户、密码、主机、端口、accessKey 和 secretAccessKey,以加密格式存储。
根据 MuleSoft 项目结构,可以通过以下两个步骤实现:
MuleSoft XML 文件扫描
实际代码在 MuleSoft Anypoint Studio 中定义为流程。我们可以编写 Python 代码来使用 Open AI 基金会的模型,并编写一个提示,用于扫描包含代码实现的 MuleSoft XML 文件,以查找硬编码的参数值。例如:
- Global.xml/Config.xml 文件:该文件包含所有连接器配置。这是 MuleSoft 的标准推荐做法。但根据组织中定义的标准和指南,可能会有所不同。生成式 AI 基金会模型可以使用此内容来查找硬编码的值。
- 其他 XML 文件:这些文件可能包含一些自定义代码或调用其他 API 调用、DB 调用或任何其他系统调用的流程。这可能是错误地硬编码的连接凭据。生成式 AI 基金会模型可以使用此内容来查找硬编码的值。
我提供了一张MuleSoft API代码的示例截图。此代码包含三个XML文件:api.xml包含Rest API流程,process.xml包含基于JMS的异步流程,global.xml包含所有的连接配置。
api.xml
process.xml
global.xml
为了演示目的,我使用了一个global.xml文件。代码片段中有许多硬编码的值用于演示。硬编码的值用红色框标出:
Python代码
下面的Python代码使用Open AI基金会模型扫描上述XML文件以查找硬编码的值。
执行此代码后,我们得到以下结果:
生成AI模型的结果
类似地,我们可以提供api.xml和process.xml来扫描硬编码的值。您甚至可以修改Python代码,按顺序迭代读取所有XML文件,并获得所有文件的结果。
扫描属性文件
我们可以使用Python代码向AI模型发送另一个提示,该提示可以找到属性文件中保存的明文密码。在下面的截图中,dev-secure.yaml文件的client_secret是加密值,db.password和jms.password是明文。
配置文件
Python代码
下面的Python代码使用Open AI基金会模型扫描配置文件以查找硬编码的值。
执行此代码后,我们得到以下结果:
生成AI的结果
生成AI对开发生命周期的影响
我们可以看到对开发生命周期有重大影响。我们可以考虑利用生成AI来解决与开发生命周期相关的不同用例。
高效全面的分析
像GPT-3.5这样的生成AI模型具有理解和生成人类文本的能力。应用于代码审查时,它们可以分析代码片段,提供改进建议,甚至识别可能导致错误或漏洞的模式。这项技术可以在相对较短的时间内对代码进行全面的检查。
自动问题识别
生成AI可以帮助检测潜在问题,例如语法错误、逻辑缺陷和安全漏洞。通过自动化代码审查的这些方面,开发人员可以将更多时间用于高层次的设计决策和创造性的问题解决。
遵循最佳实践
通过分析编码模式和上下文,生成AI可以提供关于遵循编码标准和最佳实践的见解。
学习和改进
生成AI模型可以从大量的代码示例和行业实践中“学习”。这种知识使它们能够为开发人员提供上下文相关的建议。因此,开发人员和AI系统都从不断的学习循环中受益,不断完善对编码约定和新兴趋势的理解。
结论
总之,使用OpenAI的技术进行代码审查,以找出以明文形式暴露的安全敏感参数,已被证明是一种有价值且高效的过程。利用OpenAI进行代码审查不仅加快了审查过程,还有助于生成更健壮和可维护的代码。然而,需要注意的是,虽然AI在审查过程中可以提供极大的帮助,但人工监督和专业知识对于做出明智决策和充分理解代码的上下文仍然至关重要。