亚马逊AWS官方博客

应用安全 – 静态代码检测工具 Amazon CodeGuru Security

在企业软件开发过程中,代码安全是至关重要的一环,也是薄弱的一环,往往因为代码的漏洞造成非常多的安全事故,导致这个情况的有几个原因:

  • 最显著的原因是程序员的经验、编程规范、安全标准理解存在差异,这给代码安全的审查带来很大的挑战;
  • 评审员在审计代码的时候,需要对结构、业务逻辑、常用规范有一致性的理解,这个对评审员自身的经验也是一个挑战;
  • 复杂度不断的升级,随着业务复杂增加,不同模块之间的交互关系交织在一起,在产品快速迭代过程里,业务人员考虑安全因素往往阻碍迭代速度,产品优先考虑业务迭代效率而忽略安全性。

Amazon CodeGuru Security 是一种静态应用程序安全测试(SAST)工具,它结合了机器学习(ML)和自动推理,可以实现高精度漏洞检测,识别代码中的漏洞,如注入漏洞、数据泄漏、弱加密等,并提供有关如何修复已发现漏洞的建议。

持续增加的运营成本

为了处理误报,企业需要投入更多的资源,增加运营负担。随着业务愈加复杂,问题愈加明显。Amazon CodeGuru Security 将通过扫描名称的项目代码上传多个版本,如果已经被修复,关闭率指标会提升,这极大程度地简化了人工检查和操作工作,节省了近 90% 的运营成本。

漏洞优先级的原理

Amazon CodeGuru Security 漏洞的严重性可以是关键、高、中、低四个等级,漏洞评分系统(CVSS)分配严重性。CVSS 会评估其上下文(例如,可以在互联网上完成,或者需要物理访问),根据访问级别和被攻击的复杂度评估威胁程度。

操作步骤

使用 CodeGuru Security 控制台权限,要访问 Amazon CodeGuru Security 控制台。为了确保用户和角色仍然可以在 CodeGuru Security 控制台中查看信息,他们的权限策略必须包括以下操作:

codeguru-security: BatchGetFindings

codeguru-security: GetAccountConfiguration

codeguru-security: GetFindings

codeguru-security: GetMetricsSummary

codeguru-security: GetScan

codeguru-security: ListFindingsMetrics

codeguru-security: ListScans

codeguru-security: ListTagsForResource

第一步

使用控制台 Security 模块的 Scans 页面,点击 Create new scan 创建一个扫描。

使用 AWS CLI 方式创建扫描 将 scan-name 替换为你的扫描名称,并运行以下命令:

Aws codeguru-security create-upload-url \ 
——scan-name scan-name 

第二步

控制台选择本地压缩已经压缩好的 zip 类型的文件并上传,Scan name 填写唯一的名称(如果一个项目存在多个版本,建议都在同一个名称下进行扫描)。

上传代码方式二 使用 curl 命令上传。将 your-zip-file 替换为包含你的文件名称;将 header0 key 和 header0 value 替换为 CreateUploadUrl 返回的第一个 header key 和 value;将 s3Url 替换为 CreateUploadUrl 生成 URL。

curl -X PUT \
-T your-zip-file \
-v\
-k\
-H header0键:header0值\
-H header1 key:header1的值 s3Url 

第三步

创建完成后页面会自动跳转到列表页面。此时 Status 状态是 In progress,代表正在扫描,扫描所花费的时间会受代码文件的大小的影响。扫描完成后 Status 会变为 Compete 状态。

第四步

在列表页点击 Tab 的 Metrics 页面的 Scan name 标签,会进入概览页面,这个页面展示发现数量、漏洞存在时间、关闭率指标等内容。

第五步

在 Findings 页面您可以查看发现的严重程度、关闭数量、和漏洞的名称。

第六步

可以看到存在漏洞的代码片段和对应的修复建议,和对应的 CWE 风险,在外链中有所介绍。

左侧通过 Helpful links 可以看到一些同类型漏洞的修复 Demo。

当通过漏洞修复后,概览页的关闭率会增加。

总结

代码的漏洞往往最容易导致安全事件的场景,除了忽略了代码规范,还有无法避免的隐性的原因,就是在多人完成同一个项目时,程序员的经验、安全标准熟悉程度、对业务实现的思考方式差异引入了漏洞。Amazon CodeGuru Security 集成了 AWS 多年沉淀的代码安全最佳实践的经验,把检验标准模型化,可以大大减少运营成本。

本篇作者

赵迪

亚马逊云科技专家解决方案架构师,曾在多家 Top 规模互联网企业任职、在多个领域造诣深厚,具有 15 年资深研发和安全专家的经验。他具有丰富的黑产对抗实战经验。目前负责 AWS 中国区网络安全事件应急响应中心组织的 Lead 工作。