亚马逊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 替换为你的扫描名称,并运行以下命令:
第二步
控制台选择本地压缩已经压缩好的 zip 类型的文件并上传,Scan name 填写唯一的名称(如果一个项目存在多个版本,建议都在同一个名称下进行扫描)。
上传代码方式二 使用 curl 命令上传。将 your-zip-file 替换为包含你的文件名称;将 header0 key 和 header0 value 替换为 CreateUploadUrl 返回的第一个 header key 和 value;将 s3Url 替换为 CreateUploadUrl 生成 URL。
第三步
创建完成后页面会自动跳转到列表页面。此时 Status 状态是 In progress,代表正在扫描,扫描所花费的时间会受代码文件的大小的影响。扫描完成后 Status 会变为 Compete 状态。
第四步
在列表页点击 Tab 的 Metrics 页面的 Scan name 标签,会进入概览页面,这个页面展示发现数量、漏洞存在时间、关闭率指标等内容。
第五步
在 Findings 页面您可以查看发现的严重程度、关闭数量、和漏洞的名称。
第六步
可以看到存在漏洞的代码片段和对应的修复建议,和对应的 CWE 风险,在外链中有所介绍。
左侧通过 Helpful links 可以看到一些同类型漏洞的修复 Demo。
当通过漏洞修复后,概览页的关闭率会增加。
总结
代码的漏洞往往最容易导致安全事件的场景,除了忽略了代码规范,还有无法避免的隐性的原因,就是在多人完成同一个项目时,程序员的经验、安全标准熟悉程度、对业务实现的思考方式差异引入了漏洞。Amazon CodeGuru Security 集成了 AWS 多年沉淀的代码安全最佳实践的经验,把检验标准模型化,可以大大减少运营成本。