收益:
- 能够理解 DevSecOps 和秘密管理的黄金规则(不输入代码,保存在保险库中,在运行时注入,返回,最小权限)
- 能够使用人工智能确定安全扫描输出(SCA、SAST、图像、IaC、秘密)的优先级并审核代码以用于防御目的
- 知道秘密泄露的第一步是撤销/逆转,并且仅在授权系统中出于防御目的在法律限制内使用人工智能
系统部署的速度有多快并不意味着它受到损害的那一天。虽然 DevOps 注重速度,但安全性有时会被留到最后——而留到最后的安全性往往根本不会出现。 DevSecOps 是一种将安全性置于 DevOps 流程的开始和每一步的方法:“将安全性左移”——也就是说,在编写代码时而不是在产品中捕获管道中的漏洞。对于 DevSecOps 专业人员来说,安全性不是单独团队的工作,而是每个提交、每个映像、每个清单的一部分。
该单元有两个主轴。第一个是机密管理:密码、密钥、证书等机密信息的安全生成、存储、分发和轮换。第二个是安全扫描和强化:查找依赖项、镜像、配置中的漏洞。人工智能在这两方面都是一个强大的助手——它会披露漏洞、确定扫描输出的优先级、建议修复。但最重要的警告也适用于此:人工智能是用于防御的;人工智能是用于防御的。未经授权访问他人系统、未经授权的扫描或创建攻击工具都是非法的,是本平台的严格限制。
秘密管理的黄金法则
- Secret 永远不会进入源代码。不是 Dockerfile,不是 YAML,不是脚本,不是 Git。一旦进入 Git,秘密就一直存在。
- 秘密保存在中央金库中。 HashiCorp Vault、AWS Secrets Manager、Azure Key Vault、GCP Secret Manager — 这些加密存储机密、控制访问并跟踪它们。
- 它是在手术时注射的。应用程序在运行时从保管库或环境变量中检索机密,而不是从磁盘中检索。
- 它有规律地旋转。秘密存在的时间越长,泄露的风险就越大。自动旋转是理想的选择。
- 最小的权限。只有需要它的服务才能访问每个秘密。
提示:最有效的对策是在管道中放置秘密扫描器(例如 git-secrets、gitleaks、trufflehog):如果意外尝试提交秘密,它会停止提交。这样可以从源头上阻止泄漏。人工智能帮助编写这些浏览器的管道集成。
一步一步:应对秘密泄露
如果秘密泄露,不要惊慌,顺序很重要:
- 立即取消并轮换。使泄漏的密钥失效,生成新的密钥。仅仅删除它是不够的——它仍然是过去的事。
- 评估影响。这个密钥从哪里访问?是否被滥用了?检查日志。
- 关闭电源。怎么泄露的?清晰的代码、历史记录;但请记住:取消是在清算之前进行的。
- 防止。将秘密浏览器添加到管道中,这样就不会重复。
注意:最昂贵的赌注是不要仅仅因为“没有人看到”而归还泄露的秘密。放入公共存储库的密钥会在几秒钟内被机器人扫描。当有疑问时,轮换——轮换的成本很低,但泄漏的成本是灾难性的。
安全扫描的类型
DevSecOps 使用多层扫描; AI 有助于解释每个的输出:
- SCA(软件成分分析):查找您使用的开源依赖项中的已知漏洞(CVE)。
- SAST(静态应用程序安全测试):扫描源代码中的漏洞而不运行它。
- DAST(动态应用程序安全测试):在外部测试正在运行的应用程序。
- 镜像扫描:查找容器镜像中的漏洞(trivy、docker scout)。
- IaC 扫描:查找 Terraform/清单中的错误配置(tfsec、checkov)。
注意:扫描仪会转储数百个结果;同时修复所有这些问题是不可能的。使用人工智能对发现进行优先排序:哪些是真正可利用的,哪些在理论上是显而易见的但在实践中无法获得?但请根据您自己的情况验证最终的优先级。
栅格图层表
层
它扫描什么?
样车
当
斯卡
依赖漏洞 (CVE)
Dependabot,斯尼克
每个构建
科学技术协会
源代码漏洞
Semgrep、CodeQL
每一次公关
图像扫描
容器漏洞
琐事,侦察兵
构建后
IaC扫描
配置错误
tfsec、检查
地形公关
秘密扫描
泄露的秘密
吉特泄漏
每次提交
三个迷你箱子
案例 1 — 300 个 CVE,12 个实际风险。图像扫描报告了 300 个漏洞;球队陷入瘫痪。将扫描输出交给人工智能,并询问“哪些可以被远程利用,它们是否可达?”他们优先考虑它。 AI 强调了 12 项真正存在风险的发现。团队首先将它们关闭;他按计划雇用了其余的人。优先考虑恐慌。
案例 2 — 旋转挫败了一次攻击。开发人员不小心将云密钥推送到公共存储库。警报响了;团队在 4 分钟内取消并归还了钥匙。日志显示该密钥已被机器人查询,但现在无效。快速的周转避免了潜在的计费灾难和数据泄露。
案例 3 — IaC 扫描发现一个打开的桶。 AI 辅助的 IaC 扫描在 Terraform 代码中捕获了一个具有“公共读取”权限的存储桶,而无需进行生产。开发人员打开它“进行测试”,却忘记关闭它。管道停止了提交; open 从未进入生产阶段。这正是向左滑动的目的。
四个可复制模板
1) 扫描输出的优先级:
优先考虑下面的安全扫描输出。对于每个发现:(1) 是否真正可利用(远程/未经身份验证?),(2) 在我们的环境中是否可以访问,(3) 修复工作,(4) 建议的优先级(严重/高/中/低)。突出 5 个最紧急的事项。说清楚;表明我需要根据我的上下文验证每个优先级。输出:[扫描]
2)保密管理设计:
为[应用程序/信息结构]提出一种秘密管理方法:哪个保管库,如何在运行时注入秘密,如何自动轮换,如何强制执行最低权限?描述一个从不将秘密嵌入代码中的具体流程。
3)搜索代码中的漏洞(防御):
检查下面我自己的代码的安全性(我有权限):是否有任何注入、嵌入秘密、不安全的默认值、未经验证的输入?给出每个发现的重要性和修正。目的是防御和巩固。代码:[代码]
4)泄密应对方案:
[秘密类型]可能意外渗透到[地点]。给我一步一步的干预顺序:我应该先做什么(取消/退货),如何评估效果,如何防止再次发生?还要解释为什么仅仅删除是不够的。
弱提示/强提示
弱:“我如何破解这个系统/利用这个漏洞?”
此请求既不道德,又严格超出该平台的范围。利用人工智能进行攻击是违法的。
Strong:“授权我自己的应用程序的代码以确保安全:查找嵌入的秘密、注入风险和不安全的默认值,修复它们。目标是强化系统。”
区别:第二个请求是出于防御目的,在权限范围内,是为了巩固。这就是AI在DevSecOps中的正确使用。
常见错误
- 将秘密嵌入代码/历史中。最常见且持续存在的漏洞。
- 不归还泄露的秘密。 “没有人见过”是最昂贵的赌注。
- 将所有筛查结果视为平等。因优先顺序而陷入瘫痪或错过真正的风险。
- 将安全性留到最后。产品中的缺口比管道中的缺口要贵很多倍。
- 绕过最低权限。有权访问所有内容的秘密/角色会使一次泄漏成为灾难。
- 尝试使用AI进行攻击。非法和平台外。
总之
DevSecOps 将安全性置于 DevOps 流程的开始和每一步 — 捕获代码和管道中的漏洞,而不是产品中的漏洞。秘密管理的黄金规则:秘密不进入代码,保存在中央保管库中,在运行时注入,定期返回,并以最小的权限进行访问。泄漏的第一步始终是中止/返回。人工智能在确定扫描输出的优先级、设计秘密流程和防御性检查代码方面非常强大,但它仅在您有权控制的系统上并在法律限制范围内用于防御性使用。
应用任务
承担您自己的项目(您有权限)。 (1) 使用“查找代码中的漏洞”模板检查嵌入的秘密和不安全的默认设置。 (2) 通过“分类”模板对安全扫描输出(实际或样本)进行排序,并确定 3 个最紧急的发现。 (3) 使用“秘密管理设计”模板为您的项目制作流程草案,完全消除代码中的秘密。
清单
- [ ] 我已验证我的代码、图像和清单中没有嵌入秘密。
- [ ] 我将秘密保存在中央保管库中并在运行时注入它们。
- [ ] 我知道泄漏情况的第一步是中止/返回。
- [ ] 我根据可利用性和我的上下文对扫描结果进行了优先排序。
- [ ] 我将安全扫描移至管道的早期步骤(左侧)。
- [ ] 我仅在我拥有权限的系统上将人工智能用于防御目的。