编码员征服安全基础设施即代码系列。遗漏的功能级访问控制

2020年5月11日发布
作者:马蒂亚斯-马杜,博士
案例研究

编码员征服安全基础设施即代码系列。遗漏的功能级访问控制

2020年5月11日发布
作者:马蒂亚斯-马杜,博士
查看资源
查看资源

现在是我们 "基础设施即代码 "系列的下一期,这些博客将把像你这样的开发人员在自己的组织内部署安全基础设施时的安全意识提高到一个全新的水平。

哦,对了......你在上一篇博客中的安全错误配置挑战中表现如何?如果你想现在就去解决一个缺失的功能级访问控制漏洞,请到平台上去。

上面的链接将带你到Kubernetes挑战,但一旦你进入该平台,使用下拉菜单选择Ansible、CloudFormation、Terraform或Docker。你可以选择)。)

今天部署的几乎每一个应用程序都有某种访问控制机制,检查用户是否有权限执行所要求的功能。在创建一个应用程序时,这几乎是良好的安全以及功能的基石。事实上,所有的网络应用都需要访问控制,以允许具有不同权限的用户使用该程序。

然而,当这些相同的访问控制验证功能没有在基础设施层面执行,或者配置错误时,就会出现问题。如果基础设施层面的访问控制不完善,就会使整个企业向黑客敞开大门,黑客可以利用这一漏洞作为他们的网关,进行未经授权的窥探或全面攻击。

事实上,利用缺失或错误配置的功能访问控制漏洞是非常容易的。攻击者甚至不需要太多技巧。他们只需要知道在支持应用程序的任何框架中,哪些命令可以执行功能。如果他们知道,这只是一个试验和错误的问题。他们可以不断地提交不应该被允许的请求,只要有一个成功,目标网站、应用程序、服务器,甚至整个网络都可能被暴露。

缺失的功能级访问控制漏洞是如何运作的?

有几种方法可以使功能级访问控制悄悄进入一个组织。例如,功能级访问可以留给应用程序,而不被底层基础设施所验证。或者,基础设施级别的访问控制可能被错误地配置。在某些情况下,管理员认为非授权用户不知道如何进入只有高级用户才能看到的基础设施资源,并使用 "隐蔽的安全 "模式,这很少奏效。

对于一个隐蔽性安全的例子,以下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的游戏化安全挑战,以保持你的所有网络安全技能得到磨练和更新。

敬请期待下一章!

查看资源
查看资源

作者

马蒂亚斯-马杜博士

马蒂亚斯是一名研究员和开发人员,拥有超过15年的软件安全实践经验。他曾为Fortify Software和他自己的公司Sensei Security等公司开发解决方案。在他的职业生涯中,马蒂亚斯领导了多个应用安全研究项目,并将其转化为商业产品,他拥有超过10项专利。当他离开办公桌时,Matias曾担任高级应用安全培训courses ,并定期在全球会议上发言,包括RSA会议、黑帽、DefCon、BSIMM、OWASP AppSec和BruCon。

马蒂亚斯拥有根特大学的计算机工程博士学位,在那里他研究了通过程序混淆来隐藏应用程序的内部工作的应用安全。

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

编码员征服安全基础设施即代码系列。遗漏的功能级访问控制

发布于 2024 年 1 月 22 日
作者:马蒂亚斯-马杜,博士

现在是我们 "基础设施即代码 "系列的下一期,这些博客将把像你这样的开发人员在自己的组织内部署安全基础设施时的安全意识提高到一个全新的水平。

哦,对了......你在上一篇博客中的安全错误配置挑战中表现如何?如果你想现在就去解决一个缺失的功能级访问控制漏洞,请到平台上去。

上面的链接将带你到Kubernetes挑战,但一旦你进入该平台,使用下拉菜单选择Ansible、CloudFormation、Terraform或Docker。你可以选择)。)

今天部署的几乎每一个应用程序都有某种访问控制机制,检查用户是否有权限执行所要求的功能。在创建一个应用程序时,这几乎是良好的安全以及功能的基石。事实上,所有的网络应用都需要访问控制,以允许具有不同权限的用户使用该程序。

然而,当这些相同的访问控制验证功能没有在基础设施层面执行,或者配置错误时,就会出现问题。如果基础设施层面的访问控制不完善,就会使整个企业向黑客敞开大门,黑客可以利用这一漏洞作为他们的网关,进行未经授权的窥探或全面攻击。

事实上,利用缺失或错误配置的功能访问控制漏洞是非常容易的。攻击者甚至不需要太多技巧。他们只需要知道在支持应用程序的任何框架中,哪些命令可以执行功能。如果他们知道,这只是一个试验和错误的问题。他们可以不断地提交不应该被允许的请求,只要有一个成功,目标网站、应用程序、服务器,甚至整个网络都可能被暴露。

缺失的功能级访问控制漏洞是如何运作的?

有几种方法可以使功能级访问控制悄悄进入一个组织。例如,功能级访问可以留给应用程序,而不被底层基础设施所验证。或者,基础设施级别的访问控制可能被错误地配置。在某些情况下,管理员认为非授权用户不知道如何进入只有高级用户才能看到的基础设施资源,并使用 "隐蔽的安全 "模式,这很少奏效。

对于一个隐蔽性安全的例子,以下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的游戏化安全挑战,以保持你的所有网络安全技能得到磨练和更新。

敬请期待下一章!

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。