博客

程序员征服安全:基础设施即代码系列——功能级访问控制缺失

May 11, 2020
Matias Madou 博士

我们的“基础设施即代码”系列博客又更新了。本系列旨在帮助像您一样的开发者在组织内部部署安全基础设施时,将安全意识提升到全新的高度。

顺便问一下……您在上一篇博客的安全配置错误挑战中表现如何?如果您现在就想挑战“缺失功能级访问控制”漏洞,请前往我们的平台:

(上述链接将带您进入 Kubernetes 挑战,但进入平台后,您也可以通过下拉菜单选择 Ansible、CloudFormation、Terraform 或 Docker。任君选择。)

如今部署的几乎每个应用程序都有某种访问控制机制,用于检查用户是否有权执行所请求的功能。这不仅是构建应用程序时实现良好安全性的基石,也是其功能性的核心。事实上,所有 Web 应用程序都需要访问控制,以便允许具有不同权限的用户使用程序。

然而,当这些用于访问控制的验证功能未在基础设施层面执行或配置错误时,问题就会随之而来。如果基础设施级的访问控制不够完善,整个企业都会向黑客敞开大门,他们可以利用这一漏洞进行未经授权的窥探,甚至发动全面攻击。

事实上,利用缺失或配置错误的功能访问控制漏洞非常简单。攻击者甚至不需要具备高超的技术,只需了解支持该应用程序的框架中哪些命令可以执行特定功能即可。一旦掌握,剩下的就只是反复尝试。他们可以不断提交本不应被允许的请求,一旦成功,目标网站、应用程序、服务器甚至整个网络都可能面临暴露的风险。

缺失功能级访问控制的攻击原理是什么?

功能级访问控制漏洞进入组织的方式有几种。例如,功能级访问权限可能仅留给应用程序处理,而未在底层基础设施中进行验证;或者,基础设施级的访问控制配置错误。在某些情况下,管理员会误以为未经授权的用户无法找到只有高权限用户才能访问的资源,这种“隐蔽式安全”模型往往收效甚微。

关于“隐蔽式安全”的一个例子,以下 URL 很可能容易受到攻击:

http://companywebsite.com/app/NormalUserHomepage

如果已通过身份验证的用户使用一种称为“强制 URL 浏览”的技术,他们可以尝试访问仅对管理员显示的页面。例如:

http://companywebsite.com/app/AdminPages

如果服务器端不存在验证机制,他们将直接看到管理页面(如果名称与请求匹配),并获得管理员在该页面上拥有的所有额外功能权限。如果服务器向攻击者返回“页面未找到”错误,他们只需不断尝试,直到猜出管理页面的名称为止。

对于攻击者而言,利用 缺失的功能级访问控制 的过程类似。他们不再尝试浏览未经授权的页面,而是直接发送功能请求。例如,他们可能会尝试创建一个拥有管理员权限的新用户。根据框架的不同,他们的请求可能如下所示:

POST/action/createuser name=hacker&pw=password&role=admin

如果不存在功能级访问控制,上述示例就会成功,一个新的管理员账户将被创建。一旦攻击者以新管理员身份登录,他们就拥有了该网络或服务器上任何其他管理员所具备的访问权限。

修复功能级访问控制缺失问题

由于攻击者极易利用功能级访问控制缺失的漏洞,因此发现、修复并预防此类问题至关重要。幸运的是,只要掌握相关知识并接受基础的“基础设施即代码安全培训”,这并非难事。

主要的保护措施在于基础设施层面实施基于角色的授权。切勿仅依赖应用程序来处理该功能。即使应用程序具备此功能,基础设施端的授权也能确保万无一失。理想情况下,授权应由集中式系统(例如 AWS IAM、Azure IAM 等)统一管理,并将其纳入组织流程,应用于每一个新应用。这些授权流程既可由框架本身提供,也可通过多种易用的外部模块实现。

最后,您的组织应秉持最小权限原则。所有操作和功能默认应处于拒绝状态,仅通过授权流程授予合法用户所需的权限。用户仅应获得执行特定功能所需的最小权限,且权限有效期应仅限于任务执行期间。

功能级访问控制缺失的后果可能是毁灭性的。但值得庆幸的是,通过在组织内建立良好的基础设施级授权实践,您可以轻松防患于未然。

准备好识别现实中的访问控制漏洞了吗?对比以下 Docker 代码片段,找出其中存在漏洞与安全的代码:


存在漏洞:

FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
   tar -xvf $FILENAME.tar.gz && \
   mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER root
EXPOSE 9104
ENTRYPOINT  [ "sh", "~/entrypoint.sh" ]
CMD  [ "/bin/mysqld_exporter" ]

安全:

FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
   tar -xvf $FILENAME.tar.gz && \
   mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER nobody
EXPOSE 9104
ENTRYPOINT  [ "sh", "~/entrypoint.sh" ]
CMD  [ "/bin/mysqld_exporter" ]

深入学习,挑战自我

查看 Secure Code Warrior 博客页面,深入了解此漏洞,并学习如何保护您的组织和客户免受其他安全缺陷和漏洞的侵害。

如果您之前错过了,可以在 Secure Code Warrior 平台上 尝试 IaC 游戏化安全挑战,以保持您的网络安全技能精进且与时俱进。

敬请期待下一章!

标语

在 AI 驱动的开发成果发布前实现有效治理

评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。

预约演示
资源库

探索更多博客

获取有关安全编码、人工智能治理和软件风险管理的专家内容。

浏览全部
案例研究
筛选标签
这是 div 块中的一段文本。

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.

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

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

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

统一的安全文化:Sage 如何打造其安全倡导者项目

了解 Sage 如何通过灵活且以关系为导向的方法提升安全性,成功培养了 200 多名安全倡导者,并实现了显著的风险降低。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

2026年网络安全意识月:理解人工智能安全对企业防御至关重要

目前,大多数顶级人工智能公司已公开呼吁全球放缓人工智能的发展速度,以便安全防护措施能够跟上步伐。然而事实是,严重的安全问题已经显现。随着人工智能实施带来的经济成本和风险不断累积,无数安全领导者和高管团队正处于紧迫的境地。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

赋能要素 8:打造项目品牌

成功的安全编码项目不仅需要优质的内容。赋能要素 8 展示了如何通过品牌化将参与过程转变为一种令人向往、以地位为驱动的体验。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

每一位员工现在都处于 AI 网络安全的最前线

企业技术格局正以一种鲜有人预料到的速度发生剧变,直到为时已晚。我们已正式跨越了从人工编写代码和基础辅助编程,进入“智能体开发生命周期”(ADLC)的时代。虽然自主 AI 智能体有望在多个职能领域实现前所未有的效率,但它们也带来了全新的安全和监管风险。

了解更多

在产品发布前确保 AI 驱动的开发安全

洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。

预约演示
未找到相关项目。