1、访问控制漏洞:应用程序允许攻击者执行某种攻击者没有资格执行的操作。各种漏之间的差异在于这个核心漏洞表现方式上的不同,以及检测他们所使用的技巧不同。
2、访问控制分类:
①垂直访问控制:允许各种类型的用户访问应用程序的不同功能。
②水平访问控制:允许用户访问一组相同类型的、内容极其广泛的资源。例如,邮件应用程序允许访问自己而非他人的电子邮件。
③上下文相关的访问控制:可确保基于应用程序当前的状态,将用户访问仅限于所允许的内容。例如,如果在某个过程中,用户需要完成多个阶段的操作,上下文相关的访问控制可以防止用户不按规定的顺序访问这些阶段。
3、如果用户能够访问他无权访问的功能或资源,说明访问控制存在缺陷。主要有三种类型的以访问控制为目标的攻击,分别与三种访问控制相对应。
①若一用户能执行某功能,但其他角色不行,此为垂直权限提升漏洞。
②若一用户能查看或修改其他用户不能查看或修改的资源,此为水平权限提升漏洞。
③若用户利用应用程序状态机中的漏洞获得关键资源的访问权限,此为业务逻辑漏洞。
1、应用程序通常实施如下访问控制:以管理员身份登录的用户在其他用户界面上看到一个该URL的连接,而其他用户看不到。
1、当应用程序使用一项功能访问某个特殊的资源时,被请求资源的标识符常常已请求参数的形式、在URL查询字符串或POST请求主体中提交给服务器。
2、例如用户访问某一资源时,访问URL
但如果访问控制存在漏洞,那么其他用户或攻击者只要知道此URL也可以访问该资源。
3、为了完善上一案例,当用户访问资源的时候不仅需要指定URL还需要给出该资源的一个标识符,即资源标识符。
1、应用程序的许多功能通过几个阶段执行,并在执行过程中由客户端向服务器发送多种请求。
2、许多应用程序常常会努力防止敏感功能被未授权访问,但由于误解了这种功能的使用方式,因而实施了不完善的访问功能。
1、大多数情况下,用户都是通过向在服务器上执行的动态页面发布请求来访问受保护的功能和资源,动态页面负责检查其请求权限是否允许来做决断。
2、有时客户端直接访问静态资源,比如URL/1.pdf。资源本身不具有检查权限功能
1、应用程序在服务器或平台层使用控件来控制访问,会根据角色限制URL访问,例如,一般用户不能访问URL/admin的路径。但如果配置平台级控件出错,这时可能导致未授权访问。
2、即使平台级规则拒绝POST/GET方法,应用程序有可能还易于受到攻击,因为某些其他方法底部还是由GET/POST实现的。例如HEAD方法。
1、基于参数的访问控制:一些此模型中,应用程序会在用户登录时决定角色和访问级别,并在登陆通过后通过隐藏字段、cookie或预先设定的查询字符串参数有客户端传送这些信息。应用程序在之后处理请求时读取这个请求参数,并为用户分配相应的访问级别。
2、基于Referer的访问控制:使用HTTPRdferer消息头做出访问控制决定。
3、基于位置的访问控制:许多公司都具有管理或业务要求,根据用户的地理位置限制对资源的访问。
1、测试应用程序的访问控制效率的最简单有效的方法是使用其他账户访问应用程序。
2、借助于工具对访问控制进行彻底测试
1、在多阶段过程中,要执行某个操作,用户通常需要以正确的顺序提出多个请求,应用程序则在用户提出请求的同时创建有关用户操作的状态。
1、若只有一个用户级账户可用于访问应用程序(或根本没有任何账户),这时,要测试访问控制的效率,还需要完成其他工作。其实无论在什么情况下,要执行全面彻底的测试,都需要完成其他工作。
2、一旦枚举出所有可访问的功能,就有必要测试应用程序是否正确划分每名用户访问资源的权限,如果应用程序允许用户访问一组内容广泛的想同类型的资源,则用户就有机会未授权访问其他资源。
1、如果应用程序使用直接访问服务器端API方法的请求,上述技巧可以确定这些方法中的任何访问控制漏洞。但还需要进行测试。
1、要避免的多种明显的缺陷
①不要认为用户不知道用于指定程序资源的URL或标识符就无法访问这些资源。
②不要信任任何用户提交的表示访问权限的参数。
③不要认为用户将按设定的顺序访问应用程序页面。
…
2、多层权限模型:与访问有关的问题不仅适用于Web应用程序,也适用于其他基础设施,特别是应用程序服务器、数据库和操作系统。采用深层次安全措施对上述每一层面执行访问控制,建立几层保护。可以强化未授权访问的防御。
1、访问控制缺陷可能以各种形式表现出来,造成其缺陷来源各异。突破访问控制有时简单有时困难。
1、一个应用程序可能通过使用HTTP Referer消息头实施访问控制,但它的正常行为并没有公开表露这一点。如何检测出这种缺陷?
答:选择一系列你有权访问的重要应用程序功能。通过提交经过修改的Referer消息头或不带该消息头的请求访问以上每一项功能。如果应用程序拒绝这些请求,则说明它很可能易于受到攻击。然后,尝试通过另一个不具有相关权限的用户提出相同的请求,但每次提交原始的Referer消息头。如果应用程序现在接受这些请求,则说明应用程序肯定易于受到攻击。
2、登录一个应用程序后,被重定向到以下URL:
https://wahh-app.com/MyAccount.php?uid=1241126841
应用程序似乎向MyAccount.php页面提交一个用户标识符。已知的唯一标识符是自己的标识符。如何测试应用程序是否使用这个参数以不安全的方式实施访问控制?
答:应测试以下测试(按效率排序):
(1)使用相同的语法格式将uid值修改为其他值。如果应用程序仍然返回你自己的账户资料,则说明应用程序可能不易于受到攻击。
(2)如果能够注册或以其他方式访问另一个用户账户,可以使用该账户登录以获得其他用户的uid值。然后使用自己的原始用户权限,并用这个新uid值替代自己的uid值;如果这时应用程序显示有关其他用户的敏感数据,则说明应用程序易于受到攻击。
(3)使用一段脚本从自己的uid获得数千个值,并确定(如果提交这些值)应用程序是否会返回任何其他用户的资料。
(4)使用一段脚本请求介于0和9999999999之间的随机uid值(在本示例中),并确定应用程序是否会返回任何其他用户的资料。
3、因特网上的一个Web应用程序通过检查用户的来源IP地址实施访问控制。为什么这种行为可能存在缺陷?
答:攻击者可以假冒其他用户的IP地址,虽然实际上要做到这一点可能极其困难。更重要的是,如果因特网上的多个终端用户位于同一Web代理服务器或NAT防火墙之后,则这些用户可能共享同一IP地址。
在这种情况下,要使基于IP的访问控制发挥效率,一种方法是将其作为深层防御措施,以确保尝试访问管理功能的用户位于组织的内部网络中。当然,那些功能还应由强大的身份验证和会话处理机制进行保护。
4、某应用程序的唯一用途是为公众提供可搜索的信息仓库。该应用程序并未使用任何验证或会话管理机制。该应用程序应执行何种访问控制?
答:该应用程序并未对访问权限进行任何水平或垂直划分,因此没有必要实施访问控制来区分不同的个体用户。
即使所有用户均属于同一类别,应用程序仍然需要限制用户可以执行的操作。一个强健的解决方案是应用最低权限原则,以确保应用程序体系架构中的所有用户角色具有运行应用程序所需的最小权限。例如,如果用户只需要对数据的读取访问权限,则应用程序应使用一个低权限账户(仅具有对相关表的只读权限)来访问数据库。
5、在浏览一个应用程序的过程中遇到几个应防止未授权访问的敏感资源,它们的文件扩展名为.xls。这种情况为何应立即引起注意?
答:这些文件为Excel电子表格,它们属于静态资源,应用程序无法对其实施任何访问控制(如通过动态脚本)。应用程序可能会通过其他方法(如Web服务器层)来保护这些资源,但通常情况下并非如此。应立即检查是否可以不经验证而访问这些资源。