亚马逊云科技为您的代码安全保驾护航

关键字: [reInforce, Amazon CodeGuru Developer, Code Security Scanning, Shift-Left Security Approach, Secure Code Generation, Developer-Friendly Tools, Auto-Fix Feature]

本文字数: 4100, 阅读完需: 20 分钟

导读

在这场演讲中,Shandong Mishra探讨了Amazon Developer如何助力开发者实现代码安全性,构建安全应用程序。他阐释道,Amazon Developer内置了安全扫描功能,能够检测和修复代码中的漏洞,包括静态应用程序安全测试(SAST)、密钥扫描和基础设施代码扫描。该演讲重点介绍了Amazon Developer如何通过左移安全方法,使开发者从一开始就编写安全代码,缓解不一致的发现和缺乏面向开发人员的工具等痛点,并利用生成式AI生成安全代码补丁和检测不安全的AI生成代码。

演讲精华

以下是小编为您整理的本次演讲的精华,共3800字,阅读时间大约是19分钟。

在软件开发领域,随着应用程序变得日益复杂和互联,代码安全性的重要性不容忽视。亚马逊开发人员团队的工程经理Shandong Mishra深谙这一关键方面,并负责监督为Amazon CodeGuru Security和Amazon Inspector提供代码扫描功能的Code Security Engine。他的演讲深入探讨了亚马逊开发人员如何通过从一开始就培养编写安全代码的文化,帮助开发人员构建安全的应用程序。

代码安全性贯穿软件开发生命周期(SDLC)的每个阶段。Mishra以CI/CD管道中的一个实例为例,关键漏洞可以作为防护网,防止不安全的代码合并或部署到生产环境中。这种主动方法确保应用程序在到达最终用户之前经过彻底审查,从而降低潜在风险并保护敏感数据。然而,真正的力量在于让开发人员在集成开发环境(IDE)内尽早解决安全问题。通过在编码阶段检测和解决问题,开发人员可以节省大量时间和精力,否则这些时间和精力将在开发过程的后期阶段耗费。

Mishra倡导采用左移安全方法,这种方法强调在开发的最早阶段(从IDE开始)检测和修复安全问题。该方法将开发人员定位为第一道防线,与安全工程师在共同责任模式下协同工作。这种方法的好处是多方面的:它具有成本效益,因为在开发阶段识别和解决问题的成本远远低于在部署后修复漏洞的成本。此外,它减轻了安全团队的工作负担,因为他们通常人手不足,无法支持所有开发人员。通过让开发人员承担安全责任,左移方法加快了新功能的发布,提高了整个开发过程的敏捷性。

以下是对原文的编辑,确保了公司名称、个人名称、产品名称、技术术语和亚马逊云科技服务保持不变,并且所有大写字母也保持大写。其他部分进行了润色,输出格式与原始源文本保持一致,并使用简体中文。

然而,左移安全方法并非毫无挑战,Mishra承认开发人员可能会遇到的痛点。其中一个挑战是不同工具和软件开发生命周期阶段发现的结果存在不一致性。为了缓解这一问题,亚马逊云科技构建了一个统一的SAST(静态应用程序安全测试)代码扫描引擎,支持10种编程语言和超过2,000条检测规则。这些规则不仅包括安全漏洞,还涵盖代码质量问题、亚马逊云科技最佳实践和ML最佳实践。该集中式引擎集成到Amazon Developer、亚马逊云科技CodeGuru Security和亚马逊云科技Inspector中,确保整个开发生命周期中发现的结果保持一致性。

Mishra解决的另一个痛点是安全扫描器错误地将代码标记为易受攻击的假阳性问题。亚马逊云科技采用了测试驱动的方法来应对这一挑战,收集合规和不合规的代码样本,编写检测规则,并在大量公共和内部数据(不包括客户代码)上运行这些规则。通过手动和AI辅助的影子审查,完善规则,将假阳性降至最低水平。

认识到需要开发人员友好的工具,亚马逊云科技将安全扫描功能直接集成到Amazon Developer中,无需单独安装工具。开发人员可以在IDE中运行扫描,自动扫描功能持续监控代码并内联显示发现的问题,最大限度减少上下文切换。“Explain”选项进一步增强了用户体验,通过在Q&A聊天中打开发现的问题,提供更多详细信息,并允许开发人员无缝地提出后续问题。

为了解决开发人员由于缺乏领域知识而无法有效解决安全问题的问题,亚马逊云科技引入了自动修复功能。利用生成式AI,该功能为检测到的问题提供代码修补程序,节省了开发人员宝贵的研究时间。目前支持5种编程语言,计划在今年年底前扩展到所有支持的语言,自动修复功能使开发人员能够高效地修复漏洞,即使没有广泛的安全专业知识。

米什拉(Mishra)也承认了不安全的AI生成代码所带来的潜在风险,因为开发人员越来越依赖AI编码助手。为了减轻这种风险,亚马逊云科技(Amazon Web Services)会过滤AI模型的训练数据,删除具有高风险或关键漏洞的代码。此外,该模型的输出也会被扫描,不安全的建议会被剪枝,而自动修复则会在可能的情况下应用,确保AI生成的代码遵循安全最佳实践。

Pranav是安全分析的科学负责人,他深入探讨了代码扫描引擎的架构和工作流程。他讨论的第一个组件是代码分区,这是分析大型应用程序时的一个关键方面。为了在不牺牲准确性的情况下减少内存占用和分析时间,分区算法将相互依赖的工件映射到同一分区,而将独立的工件分开。这种方法可以并行分析较小的独立代码块,从而显著提高性能。

第二个组件是检测器,它建立在μgraph程序表示之上,这是一种丰富的内部表示,捕获了代码语义、数据和控制流、类型以及常量传播。由亚马逊云科技开发的Guru查询语言(GQL)是一种领域特定语言,可以在μgraph上表达安全检查,从而实现精确的漏洞检测。

第三个组件是自动修复生成器,它结合了基于规则的代码转换和经过微调的大型语言模型。这种强大的组合可以建议代码补丁来修复检测到的漏洞,进一步增强开发人员体验并简化修复过程。

为了说明这些功能的实际应用,Pranav展示了一段录制的演示,演示了Amazon Developer IDE插件中的安全扫描功能。该演示突出显示了开发人员如何检测硬编码密码和不安全的基础设施即代码配置等漏洞,查看详细说明,并无缝应用自动修复建议来修复问题。

米什拉(Mishra)表示,在过去几年中,生成式AI改变了开发人员构建应用程序的方式。开发人员越来越依赖生成式AI应用程序和工具来编写代码,生成式AI充当编码助手。根据Gartner的一份报告,到2026年,预计将有80%的企业使用某种形式的生成式AI应用程序。

在亚马逊云科技,他们认识到通过过去二十年构建的多种产品和服务,能够协助客户解决安全问题。这些产品不仅提供给客户,也在亚马逊及其组织内部使用。去年,亚马逊云科技推出了Amazon Bedrock,它可以促进生成式AI应用程序的开发,而无需管理基础设施,因为Amazon Bedrock会处理运行大型语言模型所需的所有基础设施管理。

在去年的re:Invent大会上,亚马逊云科技推出了Amazon Developer的公开预览版,今年,Amazon Developer已成为最强大的助手,可以协助开发人员执行各种与编码相关的任务,如编写、调试、测试和升级代码。它为开发人员和IT专业人员提供了构建高可用性软件应用程序的工具。在开发Amazon Developer时,亚马逊云科技将安全性和隐私性从一开始就纳入考虑,而非事后才想到。亚马逊云科技的目标是确保客户能够放心使用其生成式AI产品和服务,并在生成式AI的协助下构建安全的应用程序。

在Amazon Developer的代码安全性方面,亚马逊云科技已采取措施确保AI生成的代码是安全和健壮的。此外,他们还在Amazon Developer中提供了内置功能,帮助开发人员发现和修复问题,即使在AI协助生成代码时,开发人员也在修改AI生成的代码。

亚马逊云科技讨论了静态应用程序安全性测试(SAST),这是应用程序安全性测试中的一个分支,有助于识别和修复第一方代码中的漏洞。在SAST中,会分析与安全漏洞相关的常见模式,并制定规则来检测和修复这些问题。SAST的好处包括提高整体应用程序安全性,并通过在开发早期阶段修复问题来降低成本。

在审视一般软件开发流程时,Mishra解释说,它始于设计,随后在首选的IDE或代码编辑器中进行编码。一旦编码和测试完成,代码将由高级开发人员进行代码审查。经过批准后,代码将合并到代码仓库中,并通过CI/CD管道,在该管道中,它将经历构建过程、集成测试,并在到达生产阶段之前,部署到各个阶段(测试、gamma、beta等)。

应用程序安全性在软件开发生命周期的每个阶段都至关重要。Mishra提供了一些示例,说明如何在CI/CD管道中解决代码安全性问题,例如在检测到关键漏洞时阻止管道或防止代码合并。然而,如果开发人员需要修复问题,他们必须返回IDE并进行代码更改,如果他们需要在代码审查过程中验证修复的有效性,这可能会很有挑战性。在IDE中拥有代码扫描器有助于开发人员编写代码、验证其安全性,并确保在发送代码审查之前没有漏洞,从而节省大量时间。

同样,对于代码仓库和生产应用程序,IDE和CI/CD流程只扫描开发人员正在积极处理的代码更改。然而,在2021年Log4j事件等零日漏洞的情况下,当没有活跃的代码更改时,在IDE或CI/CD管道中执行安全检查就变得困难。在这种情况下,应用程序安全团队需要扫描所有代码仓库和生产应用程序,以确保没有应用程序受到关键漏洞的影响,从而凸显了应用程序或代码仓库扫描的重要性。

为了在软件开发生命周期的每个阶段解决安全问题,亚马逊云科技为各种用例构建了SAST扫描器。在IDE中,开发人员可以使用内置安全扫描功能的Amazon CodeWhisperer。对于CI/CD和代码管道,亚马逊云科技提供支持SAST扫描的Amazon CodeGuru Security。对于运行在生产环境中的应用程序,Amazon Inspector分析生产工作负载并执行代码安全性分析。

米什拉继而阐述了”左移安全”(shift-left security)方法,其目标是在开发的最早阶段,从IDE开始,就检测和修复安全问题。在开发人员编写代码时,即能识别出存在漏洞的代码,而非在构建或发布周期的后期阶段。开发人员成为安全的第一道防线,安全工程师和开发人员在共同承担责任的模式下合作,安全由双方共同负责。

“左移安全”方法的好处包括成本效益,因为在开发阶段检测问题比在部署后解决漏洞的成本要低廉得多。另外,它有助于安全工程资源有限的组织,因为开发人员可以在寻求安全审查之前先自行解决一些安全问题,从而卸下部分安全责任。这种方法通过简化安全审查流程,加快了功能发布的速度。

然而,“左移安全”方法也为开发人员带来了新的痛点,他们现在需要在构建应用程序和快速发布功能的同时,理解和解决安全问题。米什拉讨论了这些痛点以及Amazon云科技如何缓解它们。

第一个痛点是,在SDLC的不同工具和阶段中,发现的问题存在不一致。为了解决这个问题,Amazon云科技开发了一个单一的SAST代码扫描引擎,支持代码安全性、代码质量问题、Amazon云科技最佳实践和ML最佳实践的代码扫描。该引擎拥有超过2,000条检测规则,支持10种编程语言,并根据客户需求快速增加更多语言支持。

第二个痛点与硬编码凭证、密钥以及将它们部署或提交到可供开发人员访问的应用程序或存储库的风险有关。为防止这种情况,Amazon云科技将密钥扫描集成到了他们的代码扫描引擎中,从而无需单独的密钥扫描工具。

软件开发的另一个最佳实践是通过基础设施作为代码(IaC)部署软件,而非将资源硬编码到配置文件中。Amazon云科技已将IaC扫描集成到他们的代码扫描引擎中,为跨不同用例检测问题提供了一站式服务。该引擎的检测能力涵盖了OWASP前10大漏洞和CWE前25大漏洞。

为了确保软件开发生命周期(SDLC)各个阶段的发现结果保持一致,亚马逊云科技已将其代码扫描引擎与所有静态应用程序安全测试(SAST)产品集成,包括面向集成开发环境(IDE)的Amazon Developer、面向持续集成/持续交付(CI/CD)和代码管道的亚马逊云科技 CodeGuru Security,以及用于监控生产应用程序的Amazon Inspector。

亚马逊云科技采用了测试驱动的方法来构建检测规则,收集合规和不合规样本,编写检测规则,并在大量公共和内部数据(不包括客户代码)上运行这些规则。通过手动和人工智能辅助的影子审查,完善规则并降低假阳性率,从而解决了高假阳性率的痛点,即安全扫描器错误地将代码标记为存在漏洞。

为了解决缺乏面向开发人员的工具的痛点,亚马逊云科技已将安全扫描功能作为Amazon Developer的内置功能。开发人员可以在IDE中运行项目扫描,扫描所有代码、配置文件和文本文件,以检查安全问题、基础设施问题和密钥扫描。发现的问题和缓解措施建议都会在IDE中提供。

为了避免上下文切换可能会干扰开发人员的问题,亚马逊云科技引入了自动扫描功能,可以在开发人员编写代码时持续监控代码,并在编辑器中以黄色波浪线的形式内联显示发现的问题。开发人员可以单击这些线条,查看详细信息并了解问题,而无需中断工作流程。此外,当开发人员需要更多信息或修复问题的替代解决方案时,他们可以使用”Explain”选项,该选项会自动在问答聊天中打开发现的问题,提供更多详细信息并允许后续提问。

为了缓解缺乏领域知识的痛点,因为左移方法要求开发人员在构建应用程序时理解和解决安全问题,亚马逊云科技引入了自动修复功能,利用生成式人工智能为检测到的问题生成代码补丁。目前支持五种编程语言,并计划在今年年底前扩展到所有支持的语言,自动修复功能可以为开发人员节省宝贵的研究时间,在IDE中提供代码补丁。

米什拉讨论的第五个痛点是由于开发人员越来越依赖AI编码助手,因此生成的代码存在安全隐患。为了解决这个问题,亚马逊云科技已经在AI模型训练过程和输出生成中实施了安全措施。

在为训练AI模型注入数据的过程中,亚马逊云科技会运行安全扫描并过滤掉具有高风险或关键漏洞的代码。这一步骤大大降低了AI模型生成不安全代码的可能性。

此外,当模型生成输出时,亚马逊云科技已经实施了输入和输出防护措施,包括安全扫描。对于内联代码补全,不安全的建议会被剪枝,防止开发人员看到它们。对于其他发现,亚马逊云科技会应用自动修复功能来修复代码片段,并为开发人员提供安全的代码。

通过实施这些措施,亚马逊云科技旨在确保开发人员可以自信地使用其AI编码工具,并确保生成的代码遵循安全最佳实践。

接下来,Pranav深入探讨了代码扫描引擎的架构和工作流程。他从高层次概述开始,解释工作流程始于开发人员请求安全扫描。请求被发送到IDE中的Amazon Developer插件,插件将代码工件上传到S3存储桶,并向后端引擎发送请求以启动扫描。

后端引擎下载代码,并通过结合规则和基于机器学习的过滤器来识别第三方代码(如库代码),并将第一方代码传递给代码分区引擎。

代码分区引擎负责将代码工件分区为较小的独立块,这些块可以由支持安全分析的检测器并行分析。每个检测器如果发现代码不安全,就会生成发现结果,这些发现结果会被汇总并转发给代码修复生成器。

代码修复生成器接收发现结果并生成修复,然后将修复与发现结果一起汇总,并发送回后端引擎。后端引擎通过插件向用户展示发现结果和修复,并删除S3存储桶中上传的代码工件。

Pranav接着深入探讨了三个组件:代码分区、检测器和代码修复生成器。

代码分区对于分析大型代码库或应用程序至关重要,因为大多数代码分析算法具有二次或三次时间复杂度,导致对于大型应用程序的分析时间过长或超时。代码分区引擎的目标是将应用程序代码分解为较小的、独立的块,这些块可以并行分析,从而减少内存占用和分析时间,而不会影响发现的准确性或质量。

分区算法将所有代码工件(包括文件或类)映射到不同的分区,并逐步组合具有高度代码内聚性的分区。这确保了存在依赖关系的工件被映射到同一个分区,而独立的工件被分离到不同的分区以进行并行分析。Pranav 提到,关于分区算法的更多细节可以在他们于 2022 年提交给软件工程基础会议的一篇论文中找到。

接下来讨论检测器,Pranav 解释说,许多检测器都基于 μgraph 程序表示,这是一种从源代码获得的丰富的内部程序表示。μgraph 表示捕获了代码语义、数据和控制流、类型以及常量传播。

Pranav 使用一个运行示例来说明 μgraph 表示。该示例显示了一个方法,通过调用 DriverManager 类中的 GetConnection API 来创建 SQL 连接。然而,开发人员在代码中硬编码了用户名和密码,这是一个严重的安全漏洞。

代码扫描引擎将代码转换为一种称为 μgraph 的图形表示。该表示由节点和边组成,其中节点对应于不同的代码实体(例如,GetConnection 节点表示 GetConnection API),边表示依赖关系。μgraph 精确地捕获了程序中的数据和控制流,以及类型和常量传播等语义信息。

为了在 μgraphs 之上表达安全检查,亚马逊云科技开发了 Guru 查询语言 (GQL),这是一种领域特定语言。Pranav 提供了一个用于检测硬编码数据库凭证泄露漏洞的 GQL 检测器示例,它检查是否存在来自 Java SQL DriverManager 类的 GetConnection API 调用,确保传递了三个参数(以避免对不同的重载产生误报),并验证第三个参数(密码)是硬编码的字符串文字。

普拉纳夫随后讨论了自动修复生成器,这是一种将基于规则的修复(代码转换库)和基于微调的大型语言模型(LLM)修复相结合的生成式解决方案,用于修复安全漏洞。该大型语言模型是在错误修复数据集上进行训练的。

当用户发现安全问题时,自动修复生成器会在发现的描述中填充一个修复建议。在硬编码密码漏洞的运行示例中,修复建议将密码替换为从系统环境变量中读取密码的代码。如果用户接受此建议,他们可以单击”修复”按钮应用代码补丁并修复漏洞。

普拉纳夫随后通过亚马逊开发者IDE插件中的安全扫描功能进行了现场演示。在演示中,他使用了创建带有硬编码密码的SQL连接的运行示例。

开发人员在IDE中运行了启用了自动扫描功能的亚马逊开发者。这意味着亚马逊开发者会在开发人员编写代码时主动扫描打开的文件中的漏洞。在这种情况下,它识别出了开发人员引入的硬编码密码漏洞。

开发人员可以将鼠标悬停在漏洞上以获取更多详细信息并预览修复。单击”查看详情”会打开一个选项卡,其中包含有关漏洞的其他信息,包括指向通用弱点枚举(CWE)条目的链接、有关硬编码凭据的详细信息以及修复预览。

“解释”选项会将漏洞和代码上下文与亚马逊开发者的Q&A聊天共享,后者会生成一个响应,描述漏洞及潜在的修复方案。

最后,开发人员可以单击”修复”来应用建议的补丁并修复代码中的漏洞。

普拉纳夫提供了第二个扫描基础设施代码的示例,在这个示例中,开发人员正在使用Python中的亚马逊云科技云开发工具包(Amazon CDK)创建一个S3存储桶。默认情况下,S3不会为传输中的数据启用SSL/TLS加密,如果使用默认配置创建存储桶,就会存在数据被拦截的风险。

启用自动扫描后,亚马逊开发者在开发人员编写代码时就能识别出这个漏洞。开发人员可以将鼠标悬停在发现的问题上,阅读更多相关信息并查看修复方法,即在创建存储桶时强制启用SSL。开发人员同意修复建议,并单击”修复”来应用它。

代码中还存在第二个与缺乏静态加密相关的漏洞,亚马逊开发者也检测到了这一点。描述建议启用亚马逊云科技密钥管理服务(Amazon Web Services KMS)加密来解决这个问题。

普拉纳夫总结说,这个演示展示了亚马逊开发者的安全扫描功能如何帮助开发人员在编写代码时检测和修复各种代码类型(包括应用程序代码和基础设施代码)中的漏洞。内联发现、解释和自动修复建议使开发人员能够在不切换上下文的情况下解决安全问题,即使他们缺乏特定的安全领域知识。

视频强调,在过去几年中,生成式人工智能改变了开发人员构建应用程序的方式,根据Gartner的一份报告,到2026年,大约80%的企业将使用某种形式的生成式人工智能应用程序。

亚马逊云科技认识到他们在过去二十年中通过内部使用和组织内部使用而构建的多样化产品,能够帮助客户解决安全问题。去年,亚马逊云科技推出了亚马逊Bedrock,以便在无需管理基础设施的情况下构建生成式人工智能应用程序,因为亚马逊Bedrock会处理运行大型语言模型所需的基础设施管理。

在去年的re:Invent大会上,亚马逊云科技推出了亚马逊开发者的公开预览版,今年,亚马逊开发者已成为最强大的助手,可以帮助开发人员执行各种与编码相关的任务。在开发亚马逊开发者时,安全性和隐私性从一开始就被考虑在内,确保客户可以在生成式人工智能的帮助下自信地构建安全的应用程序。

总的来说,这段视频介绍了一种贯穿整个软件开发生命周期的全面代码安全方法。该方法利用了诸如代码分区、丰富的程序表示、用于自动修复漏洞的生成式人工智能等先进技术,并将安全扫描整合到了各种亚马逊云科技产品和服务中。其目标是通过缓解常见的痛点、培养安全编码实践的文化,以及提供开发者友好的工具和资源,赋予开发者构建安全应用程序的能力。

下面是一些演讲现场的精彩瞬间:

亚马逊云科技公司推出了Amazon Developer,这是一款功能强大的助手,可助力开发人员执行各种与编码相关的任务,包括编写代码、调试代码、测试或升级代码,为开发人员和IT专业人士提供构建高可用性软件应用程序的全套工具。

757515f341214a0be4e65f3737733abb.jpeg

第二个痛点是高假阳性率:安全扫描器可能会在代码的某一行号标记出安全漏洞,但实际上安全工程师或开发人员认为该发现不会使代码不安全。

23db9832d675d546b915ff57091241ff.jpeg

我们必须根据代码的上下文来判断某个API或代码的使用是否存在安全漏洞。

a7b0d45cd0395a088d1f3a39ef1225f6.jpeg

总结

  1. 左移安全方法能够在开发阶段早期发现并修复安全问题,从而降低成本并减轻安全工程师的负担。然而,它也为开发人员带来了新的挑战,如发现结果不一致、误报率高以及缺乏面向开发人员的工具和领域知识。
  2. 亚马逊云科技构建了一个统一的静态应用程序安全测试(SAST)代码扫描引擎,支持跨多种编程语言进行安全性和代码质量问题的代码扫描。它集成了秘密扫描、基础设施代码扫描,并涵盖了OWASP前10大和CWE前25大漏洞,确保了软件开发生命周期不同阶段的发现结果保持一致。
  3. 为了缓解开发人员面临的挑战,亚马逊云科技在Amazon CodeGuru Developer中引入了自动扫描、解释和自动修复等功能。这些功能分别减少了上下文切换、提供了详细的解释,并使用生成式人工智能生成了安全的代码补丁。

总的来说,本次演讲强调了赋予开发人员从一开始就编写安全代码的重要性,同时为他们提供必要的工具和资源来克服左移安全方法带来的挑战。

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值