程序员征服安全:基础设施即代码系列——禁用安全功能

如今,网络安全威胁无处不在且持续不断。随着我们生活方方面面的数字化,网络犯罪分子面临的诱惑也越来越大——代码量庞大且难以全面防护,而私人数据又价值连城。况且,在程序部署后,想要跟上并防御攻击面的每一个环节几乎是不可能的。
有一些方法可以缓解这些问题,其中之一就是精明的组织开始拥抱“基础设施即代码”(IaC)的概念。当然,与任何开发工作一样,其中也存在一些需要规避的安全陷阱。由于开发人员正在编写用于托管应用程序的关键基础设施代码,因此在流程的每个阶段保持安全意识都至关重要。
那么,对于刚接触云服务器环境的开发人员来说,该如何提升技能、掌握诀窍并以更高的安全意识进行构建呢?我们创建了新一期的“程序员征服安全”系列课程,旨在解决常见的 IaC 漏洞,接下来的几篇博客将重点介绍作为开发人员的您可以采取哪些步骤,开始在自己的组织中部署安全的基础设施即代码。
让我们开始吧。
美国西部旧时代流传着这样一个寓言:一个人总是担心强盗会袭击并抢劫他的家园。为了防范,他投入了各种安保措施,比如安装了超坚固的前门,封死了所有的窗户,并随手放置了许多枪支。然而,一天晚上他在睡觉时还是被抢了,因为他忘记锁上侧门。强盗们轻而易举地发现了这个被禁用的安全防线,并迅速利用了这一漏洞。
在基础设施中禁用安全功能就像那样。即使您的网络拥有强大的安全架构,如果其中的某些要素被禁用,那么这些防护措施也将形同虚设。
在深入探讨之前,先向大家发起一个挑战:
访问上面的链接,您将进入我们的游戏化培训平台,在那里您可以立即尝试攻克一个“已禁用安全功能”的漏洞。(温馨提示:它将在 Kubernetes 中打开,但您可以使用下拉菜单选择 Docker、CloudFormation、Terraform 或 Ansible)。
做得怎么样?如果您还有些地方需要改进,请继续阅读:
安全功能被禁用的原因多种多样。对于某些应用程序和框架,它们可能是默认禁用的,必须先手动开启才能发挥作用。也有可能是管理员为了更轻松地执行某些任务,避免不断受到验证或拦截(例如将 AWS S3 存储桶设为公开),而禁用了特定的安全功能。在工作完成后,他们可能会忘记重新启用这些功能。他们甚至可能为了以后工作方便,倾向于让这些功能保持关闭状态。
为什么禁用安全功能如此危险
禁用一项或多项安全功能会带来严重的后果。首先,安全功能被植入基础设施资源中,是为了防御已知的攻击、威胁或漏洞。如果它被禁用,就无法保护您的资源。
攻击者总是会优先寻找容易利用的漏洞,甚至可能使用脚本来扫描常见的弱点。这就像小偷在街上挨个检查车门是否上锁,这比砸碎车窗要容易得多。黑客可能会惊讶地发现常见的安全防御措施处于非活动状态。一旦发生这种情况,他们很快就会利用这一漏洞。
其次,在部署了良好的安全措施后又将其禁用,会产生一种虚假的安全感。如果管理员不知道有人禁用了这些防御措施,他们可能会误以为自己能够抵御常见的威胁。
以攻击者如何利用被禁用的安全功能为例,考虑 AWS S3 的“阻止公共访问”安全功能。通过 Amazon S3 的“阻止公共访问”,账户管理员和存储桶所有者可以轻松设置集中控制,以限制对 Amazon S3 资源的公共访问。然而,一些管理员在访问 S3 存储桶遇到问题时,为了尽快完成任务,决定将其设为公开。如果他们忘记重新启用该安全功能,攻击者将能够完全访问存储在该 S3 存储桶中的信息,这不仅会导致信息泄露,还会因数据传输费用而产生额外成本。
让我们对比一些真实世界的代码;看看这些 CloudFormation 代码片段:
存在漏洞:
CorporateBucket:
Type: AWS::S3::Bucket
Properties:
PublicAccessBlockConfiguration:
BlockPublicAcls: false
BlockPublicPolicy: false
IgnorePublicAcls: false
RestrictPublicBuckets: false
VersioningConfiguration:
Status: Enabled
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: "AES256"
安全:
CorporateBucket:
Type: AWS::S3::Bucket
Properties:
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
VersioningConfiguration:
Status: Enabled
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: "AES256"
防止安全功能被禁用
防止因禁用安全功能而对组织造成负面影响,既是政策问题,也是实践问题。组织应制定明确的政策,规定仅在特定情况下方可禁用安全功能。若因排查问题或更新应用而需暂时禁用功能,必须进行记录。相关工作完成后,应及时检查并确保这些功能已完全恢复启用。
如果为了简化操作必须永久禁用某项安全功能,则应为受影响的数据提供其他保护措施,以确保在失去默认保护的情况下,黑客无法获取这些数据。一旦必要的安全防护功能被禁用,攻击者迟早会发现这一“敞开的大门”并利用该漏洞。
深入学习,挑战自我:
查看 Secure Code Warrior 博客页面,深入了解此漏洞,并学习如何保护您的组织和客户免受其他安全缺陷和漏洞的侵害。
读完这篇文章,准备好查找并修复此漏洞了吗?欢迎前往Secure Code Warrior 平台参与 IaC 游戏化安全挑战,磨练并更新您的网络安全技能。
本系列每周发布,涵盖八大基础设施即代码(IaC)漏洞;欢迎下周继续关注!
在 AI 驱动的开发成果发布前实现有效治理
评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。
探索更多博客
获取有关安全编码、人工智能治理和软件风险管理的专家内容。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
在产品发布前确保 AI 驱动的开发安全
洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。



.avif)