安全|产品角度-授权和访问控制

207 阅读6分钟

当个人员工经过 SSO 登录后,就可以访问对应的数据了,但是这个数据不是所有的数据,比如访问个人的私密信息时:

image.png

授权威胁

典型的授权风险包括:

  • 未授权访问(就是根本没有授权机制)。
  • 平行越权、垂直越权
  • 交叉越权:同时有平行越权和垂直越权的风险
  • 诱导授权,隐私保护不力或用户自主授权模式太宽松,导致用户很容易被误导或诱导,轻易授权给第三方应用,交出自己的个人隐私数据。
  • 职责未分离,将不同的管理权限授给同一人;比如一个人不仅是系统管理员也是审计人员

平行越权

image.png 一个用户可以访问另一个用户的个人数据

垂直越权

image.png 低权限角色的用户获得高权限用户的所具备的权限。

比如 黑客只是简单的修改 Cookie 中的配置 isAdmin=true 就可以得到高级用户的权限

诱导授权

比如之前你在下载 APP 的时候,会让你默认勾选对应的权益,才可以下载。其实如果是从非法的渠道上下载,这个APP 可能会获取用户的一些基本信息。作为用户必须谨慎下载。

2018年3月,纽约时报和英国卫报曝光美国某知名社交网络巨头F公司超过5000万用户信息泄漏(关系链、住址等)并被滥用,调查发现是被另一家做数据分析的咨询公司通过诱导授权的方式获取了用户的授权,收集了用户及其关系链好友的行为模式、性格特征、价值观取向、成长经历等数据,并用于在2016年美国总统大选中为某总统候选人助选(向目标受众推送广告),影响了很多选民的选票。

从法律合规的角度来看,主要问题之一在于没有获得用户显示的同意,包括两个关键动作:1)选择框,即默认不能勾选,应由用户主动勾选;2)用户点击同意

授权的一般方式

用户A 不仅可以访问 用户B 的私密信息,这就相当于数据泄露,破坏了数据的机密性。那么我们该如何去更好的设置权限,并达到对应的访问控制呢?

基于属性授权(ABAC)

在规则明确的情况下

  1. 应用系统可以不用建立授权表
  2. 将这种规则纳入访问控制模块,通过比对属性
  • 如相册应用中,判断用户能否访问指定的照片,就是看当前用户是不是这张照片的所有者.(平行越权)
if(user == thePhoto.owner){执行}
  • 允许用户的好友查看其发表的内容,拒绝非好友的访问.
if(user in thePhoto.owner.friends) {执行}

适用场景: 主要是在代码中进行维护,适用于明确的规则下

基于角色授权

image.png

  1. 应用系统中先建立相应的角色(可以用群组)
  2. 将具体的用户ID或账号体系的群组纳入这个角色
  3. 如果用户角色发生变化,不再属于某角色,则对应的权限就失效了

如 GitLab 上,可以将员工根据部门组成一个群组,现在有 developer 角色,将整个群组或者单个人的授予 developer 角色。如果有一个员工离职了,则可以将员工退出这个群组,或者修改员工的角色 为 guest。

适用场景: 适用于三权分立中的严格职责分离

基于任务授权

image.png

比如我们打电话给 10086 求助,会生成一个工单,客户服务部的员工为了验证客户身份,更好的服务客户,就可以获取该工单上用户的信息。

基于 ACL 授权

ACL 就是访问控制列表,类似于 路由器上的mac 列表,ACL的主体可以是用户,也可以是群组。

适用场景: 适用于简单的应用下,只需要文件进行维护。

动态授权

  • 参数控制:比如将访问控制措施落地在接入网关上,在接入网关上启用WAF模块功能。当检测到攻击特征,网关的WAF模块会通知网关拦截。
  • 频率或总量控制:例如只允许一分钟内访问5次、在60分钟内请求次数不能超过300次等,防止敏感数据被批量查询导出。
  • 行为控制:基于大数据或行为分析建模,得出信誉度,决定是否允许访问,可疑的行为记录下来继续观察,如防止黑产账号的访问。
  • 业务规则:如免费用户只能使用30天等

授权原则

  1. 无论是基于属性、角色、任务授权从安全意义上,默认权限越小越好(甚至没有任何权限),满足基本的需要即可。例如,在隐私保护越来越重要的今天,用户的个人信息应默认只能用户自己访问;新员工默认只能访问基本的办公系统。

  2. 不要只是简单的修改 ID 或者是 cookie 中的配置 isAdmin 就可以得到对应的权限

总结

应用内建立授权模块(首选)

背景:要访问的资源是用户自己的数据,或者用户与数据所有者有关系

image.png

  1. 如果当前用户访问的资源是自己的,按规则放行
  2. 如果当前用户访问的资源不是自己的,则到授权表中检查是否存在对应的授权记录,如属于特定的允许访问的角色,如审批人员、客服人员,则在授权表指定的范围内受控地访问,包括只读权限、只能读取少量指定的资源等。
  3. 如属于特定的允许访问的角色,如审批人员、客服人员,则在授权表指定的范围内受控地访问,包括只读权限、只能读取少量指定的资源等。

使用外部权限管理系统

背景:要访问的资源不是用户自己的数据,或者跟用户自身没有关系

image.png

比如某种功能的使用权限,典型的场景是用URL地址进行区分,除了可以使用应用内的授权表之外,还可以使用应用外的权限管理系统。

业务的应用管理员,可以到权限管理系统去配置接入,以及设置授权表。