三、攻击访问控制
从逻辑上讲,应用程序的核心安全机制——访问控制建立在验证和会话管理之上,如果应用程序的访问控制存在缺陷,攻击者往往能够很快的攻占这个应用程序。访问控制漏洞的概念其实很简单即应用程序允许攻击者执行或者访问某种攻击者不具备相应权限的功能或资源。常见的访问控制可以分为垂直访问控制、水平访问控制及多阶段访问控制(上下文相关访问控制),与其相应的访问控制漏洞为也垂直越权漏洞(普通用户可以访问或执行只有管理员才具有权限访问或执行的资源或功能),水平越权漏洞(某一用户可以访问或执行另一个用户才有权限访问或执行的资源或功能)及多阶段越权漏洞(某个操作可能需要多个步骤,比如银行转账,攻击者可能跳过前面步骤直接执行最后的步骤)。
常见的漏洞
- 有些功能根本就没有执行访问控制
- 基于标识符的功能
- 多阶段功能
- 静态文件
- 平台配置错误
- 访问控制方法不可靠
常见的攻击套路
在测试某一个应用程序的访问控制前摸清下面几个问题可以使我们的分析过程事半功倍:
1. 哪些资源属于用户特定的访问资源
2. 应用程序用户角色的划分
3. 管理员角色是否与普通用户使用的是同一个Web应用程序
4. 寻找那些可以有助于权限提升的功能和资源即攻击点或者待分析的点
5. 寻找任何标识符
- 不同用户账户进行测试
- 测试多阶段访问
- 通过有限访问权限进行测试
常见的防御模型
在为应用程序设计权限控制时开发者借鉴下述几条tips:
- 每个页面强制使用验证逻辑代码或者引用中央验证代码
- 对于静态文件的访问可以修改为将文件名作为参数传给动态文件
- 不要相信客户端传递过来的任何数据,像标识符或者一些重要参数可以存在服务器端的session中
- 对于重要的功能可以采用IP验证比如(仅允许localhost访问),尽管这种方法还是可以绕过,但是这最起码加大了攻击者的访问难度。
- 对于重要的功能执行多因子验证
完整的权限控制体系有以下几种:
- 编程控制
- 自主访问控制(DAC)
- 基于角色的访问控制(RBAC)
- 声明式访问控制
下一节:更新接口安全性测试之SQL注入