安全编码,遵循代码安全最佳实践的代码设计原则,保护发布的代码免受已知、未知和意外漏洞的影响,例如安全漏洞、云机密丢失、嵌入式凭证、共享密钥、机密业务数据和个人可识别信息 (PII)。它反映了开发人员、安全团队和 DevOps 之间更广泛的理解,即代码安全必须作为CI/CD的一个组成部分来实施,支持代码和基础设施的持续变化,提供对给定环境的所有可见和隐藏组件的可见性。安全编码需要意愿、教育、工具,最重要的是文化变革。
为什么安全编码很重要?
安全编码通过字面上将开发人员命名为负责代码安全而不是安全团队,展示了责任的变化。这也为左移安全概念铺平了道路,该安全概念已作为软件开发生命周期 (SDLC) 最佳实践的一部分被广泛采用。
安全编码引入了一个抽象层,该层在将现有代码和任何新代码提交到代码存储库时对其进行扫描。它有助于实施最佳实践,进而实施生产就绪代码标准,并防止人为错误和开发人员“偷工减料”以满足严格的期限。
影响代码的安全漏洞
创建软件、应用程序或编写基础架构即代码需要云机密来访问和控制云资源,并保存敏感参数以实现自动化。有无数种情况可能会在您的代码中引入漏洞,下面我们将探讨遇到的最关键和最常见的问题:
泄露的访问密钥
所有编程语言都需要编程密钥来访问和管理云资源。密钥控制对 IAM 角色的访问,这些角色授予针对云资源执行的权限。秘密应该始终被加密,但一个常见的错误是将访问密钥和秘密嵌入到本地参数存储或 var 文件中。开发人员很容易无意中将这些秘密提交到代码存储库,尤其是在对代码进行故障排除时。如果您选择的存储库是公开的,那么世界上任何人都可以使用任何已发布的秘密。
硬编码应用程序机密
每个应用程序都有一个嵌入式配置数据集,其中详细说明了应用程序针对关联应用程序使用的安全参数。这可能包括数据库登录凭据、数据库参数、中间件配置变量或前端/后端 Web 应用程序服务的访问详细信息。参数和机密应该加密并且永远不要以明文形式写入,但某些应用程序仅使用文件系统权限来保护未经授权的用户无法读取配置。如果代码提交中未使用 .gitignore 等功能,则文件将以明文形式保存。
安全编码最佳实践
保护代码符合行业标准是一项极具挑战性的工作。以下是保护您的工作负载免受损害的顶级安全代码最佳实践。
可见性和监控:如果没有安全的编码保护,就很难准确知道代码存储库中保存了哪些数据。自动检测监控扫描存储库以查找漏洞,如果遇到任何问题,则会触发警报以进行分类。映射和监控隐藏的敏感资产、代码库、日志和其他可能暴露给面向公众的存储库的敏感知识产权。
安全自动化:自动秘密检测消除了必须手动搜索代码安全漏洞的艰苦和重复过程。自动化引擎使用 ML 训练的检测器扫描 repo 以提高成功率,并且预提交检查将在代码提交到源代码控制之前识别问题。
日志和警报:秘密可能无意中包含在日志条目中,因此自动保护应该针对日志。此外,确保在本地为自定义应用程序启用详细日志记录至关重要,这样可以监控看不见的资产,但永远不会检查代码存储库。
阻止反射 XSS:防止非持久性或反射 XSS 攻击可防止将恶意脚本提交到源代码控制中。反过来,这可以保护用户免受有针对性的恶意 HTML 或 JavaScript 的执行。
减少错误配置:人为错误和错误是编码不可避免的,安全编码最佳实践要求能够快速修复任何问题。应立即修复安全漏洞,并从回购历史中删除所有痕迹。
保护机密和数据:安全编码可防止机密和业务数据泄露到公共领域。这包括密码、API 密钥、令牌、凭证、PCI、PII 和 PHI 数据。该解决方案应作为标准满足这些 OWASP 建议:2017 年 - 身份验证失效,2017 年 - 敏感数据泄露,2017 年 - 访问控制失效,2017 年 - 安全配置错误。
利用 AI/ML 的力量:威胁的范围是巨大的,通过使用 AI/ML 数据集训练检测器自动识别已知和未知的代码安全风险来简化任务。
安全编码技术
可以引入无数技术来保护代码和业务数据。安全编码的基础知识必须涵盖移动设备、服务器和嵌入式应用程序。
以下是一些顶级安全编码技术:
实施代码混淆:在可能的情况下,使用代码缩小和代码混淆等技术保护您的代码。
避免偷工减料:不要试图走捷径。开发人员的最后期限很紧,但交付生产就绪代码是必不可少的,即使这会导致延迟。
Code Reviews:在主要项目上仍然有同行代码审查的地方,允许开发人员相互交流想法。此外,它还为其他专家提供了批评代码的机会。
创建安全文化:文化变革很难实现,需要时间才能融入公司。向整个团队迈出第一步,推广安全第一的叙述对于成功至关重要。
文档标准:安全编码标准必须记录在案并在私人仓库中共享。写下规则让开发人员有机会审查并有助于推动文化变革。
验证外部数据源:有时使用已经编写的模块和代码是有意义的。验证您的来源是否合法,使用 SHA 身份验证交叉检查下载,并确保提取的任何数据都是加密的和有效的。
使用威胁建模:威胁建模引入了一个多阶段过程,该过程在整个软件开发过程中检查代码是否存在弱点和漏洞。
在 CI/CD 中使用自动化工具:很难有效地执行安全标准,考虑投资自动化工具,例如Check Point CloudGuard Spectral,它可以为您完成所有艰苦的工作。