我不确定这是否适用于您的具体问题或情况,但它适用于问题的标题。我将其作为答案发布在这里,因为未经授权的代码(通常)使其成为网络服务器的问题在我所知道的任何指导中都没有很好地涵盖。我希望这个答案能帮助与我们的情况比你更相似的其他人。
您不能 100% 确定,但由工具增强的安全开发生命周期可以大大有助于提供帮助。它可能是劳动密集型的,并且涉及手动检查日志,或者至少是一些人工交互,但是如果您有敏感数据,并且有实施任何方法的预算,那么 IMO 值得付出努力。
我们有一个适当的流程来帮助确保发布到我们服务器的代码是经过批准和审查的代码。我不会列出任何产品,但这里是我们的程序和政策的概要:
政策:
- 开发人员无权访问实时系统,期间。开发人员无法将代码推送到服务器。代码需要由开发之外的指定团队推送。
- 跟踪所有更改(源代码控制)
- 所有更改必须在发布之前进行审核。(并且审查由审查人员和开发人员记录和签署。)
- 代码审查指定了批准发布的特定源代码修订版本号。
- 发布代码的团队通过自动构建/部署脚本直接从源代码控制发布代码。他们只是提供修订号和标签。该脚本负责从源代码控制中的正确位置获取代码并将其推送到实时服务器。他们不知道该怎么做。
有助于执行此操作的工具:
- 我们的网络服务器上运行着记录任何文件更改的软件。
- 代码更改会向我们的安全管理员发出标记,他们会检查以确保更改已被流程批准、审查和实施
- 这有助于我们捕获可能通过流氓内部人员或通过某些代码上传进入服务器的代码。
- 我们还有可以比较文件/目录差异的软件。(可能的工具在这里)这些工具可用于扫描“已知良好”的一组已发布代码,并将它们与我们的实时服务器进行比较。在这种情况下,“已知良好”是直接来自源代码控制的经过审查/批准的修订版中的代码。
- 其中许多工具都可以编写脚本。
- 我们还没有实现这一点,但我们正在考虑构建服务器配置的想法,该配置将从源代码控制中检查代码并使用脚本自动进行比较,如果检测到差异,则通过电子邮件发送指定的人。在纸面上,我们已经想出了如何做到这一点,但还没有开始测试/实现它。
当然,这不是我们开发/风险管理/部署过程的全部,但它确实突出了确保批准的代码在我们的实时服务器上实际到位的部分。我忽略了持续的自动化渗透测试,以及我们采用的一系列其他对策,以尽量减少对客户的风险。
这也不是万无一失的。有坚定的攻击者可以利用的漏洞。例如,如果我们的管理员实际上并未审核更改以确保其获得批准,则该流程将无法正常工作。此外,显然存在时间滞后 - 安全人员无法 24/7 全天候监控更改,因此如果他或她不在身边,那么有人可能会在服务器上获得未经授权的代码,并且它会一直存在,直到管理员重新开始工作。
作为替代方案,我们玩弄了一个简单的想法,即让构建服务器每隔 x 小时从一个预先确定的、预先批准的标签自动发布整个网站。这样,即使有错误的代码出现,它也会每 x 小时自动删除一次。但是这种方法存在明显的问题,我们还没有准备好走这条路。
很可能我们所有的工作都是愚蠢的,而且我们做错了,但是对于这个特定的问题没有太多的指导,我们只能尽力而为。这个过程也基于我们的特定环境和商业模式。(维护我们自己的网站、自托管、整个开发团队、业务部门和网络管理员都在内部。)它可能不适用于处于不同情况的任何人。希望其他人有其他更有效且效果更好的方法。
因此,与其他答案一致,没有 100% 万无一失的方法来确保未经授权的代码可以进入服务器。但这不应该阻止你尽你所能。而且,如果您可以记录并向用户证明您正在做某事,那么您将大大有助于建立他们的信任。如果您对计划/流程中的潜在漏洞诚实,您可能会进一步获得他们的信任。关键是在理性、预算、时间和可用工具的限制下,尽你所能。