如果您的安全模型基于对整个代码库进行时间点外部审计的概念,那么您的安全性就错了。
...而且您可能也错误地使用了审计。但我们会做到这一点。
毫无疑问,所有代码都需要进行安全审计。在许多情况下,这实际上是一项法律要求:没有经过审计的代码就不会发布。传统观点认为,这样的审计是生命周期中某个时刻的事件,但更明智的做法是随时审计代码。也就是说,所有代码在签入您的代码库之前都会经过安全审核。
理论很简单;存储库已经过审核,因此我们不需要作为标准程序重新审核其组件。但是,当提出新功能或补丁或错误修复时,差异必须由适当的维护者签署。您可以签收对您来说重要的任何事情。例如,Linux 内核有一个相当复杂的审批流程,在此过程中需要对质量、简单性、一致性、性能等进行多次认可。您的要求可能会有所不同,但安全审计应该是该审批流程的一部分。
在这种情况下,您不是在端到端审核产品,您只是在审核差异。但是,在产品开发周期过程中进行的数千次小型审核将比任何一次端到端审核所希望的更加深入和全面。
完整的产品端到端审计肯定是有帮助的,不应该避免。这种审核应该以一种在您一直在进行的补丁级别审核中不容易做到的方式关注整个产品。您想不时查看整个森林,而不仅仅是单个树木。这些大规模审核的时间可能应该与主要版本、重大更改或合规认证审核相对应。
但是通过保持最新的补丁级审计,您可以确保代码始终保持在可验证的状态,因此您可以放心地继续定期发布。
关于提交时批准
如果您的公司没有这样做,那么您做的一切都是错误的。通过要求每个代码更改至少得到另一个人的批准,包括(尤其是)在初始开发期间,可以解决数十个甚至数百个问题。您应该始终至少有两个人了解每一行代码的工作原理,并同意代码是正确的。
这至少与单元测试一样重要。如果您不这样做,请停止一切并重新访问有关质量和安全性的政策。
是的,这个过程确实可以扩展。如上所述,世界上最大的软件项目使用它,世界上一些最敏捷和最成功的软件公司也使用它。