1 用户认证模块功能介绍

1.1 注册

就是在系统里创建一个新账号,目前常见的方式用户名注册、邮箱注册、手机号中注册,因国情的原因,部分系统在注册过程需做实名验证,一般注册的最后一步是补充个人信息。另外有些系统在用户注册完后需要管理员审核,完成审核一步才算正式注册完成。

部分系统在注册之前会提示使用协议,同意协议才能进行注册。

1.2 登录

已注册用户进入系统的认证过程,可能是输入用户名和密码,输入用户名密码、密码和验证码的过程。

1.3 密码找回

通过验证邮箱和手机号的方式找回密码,早期的应用一般通过验证问题找回密码,验证问题容易忘,现在很少用了。

1.4 会话控制

HTTP 是无状态的协议,成功登录后系统跟浏览器生成一个同样的会话字符串,用于判断当前请求是否来自已登录的那个用户,用户退出后需要注销当前会话。

1.5 权限控制

一般系统存在管理员、普通用户、业务员账户、审计账户等不同权限的账户,在系统设计阶段有权限矩阵实现控制,分为水平权限和垂直权限。

1.6 日志

账户的登录情况进行记录,通常包含时间、登录账户名、源IP、登录结果。

1.7 账户注销

《信息安全技术 个人信息安全规范》推出后,要求系统有注销账户的功能,删除账户相关的所有信息。

2 用户认证模块风险

在用户认证模块有几个通用的安全措施,实施不当可导致安全措施失效的风险

2.1 图形验证码

简单的图形验证码完全不安全,一般的图像 OCR 识别,可以识别大部分的字母和数字,现在 AI 的图像识别技术基本可以达到 99% 以上的识别率,目前成本也比较低,另外有人工的打码平台可以处理一些复杂的验证码。图形验证码的风险一般有:

2.2 短信验证码

强认证的三个因素:知道什么,有什么,是什么。短信验证码属于有什么的范围,结合密码(知道什么),实现强认证。短信验证码通过短信接口/网关实现,有一定的成本,在实际实现上跟图形验证码有些不同,短信验证码发风险:

2.3 注册风险

注册过程通常是多步骤过程,涉及用户的输入验证以及注册过程的逻辑安全问题。常见风险:

2.4 登录风险

登录过程比较简单,登录涉到未使用加密传输导致的中间人攻击、拦截流量等攻击,会泄露登录信息。常见漏洞:

用户名猜解是可以猜用户名,如中国常用名 Top 500;用户名枚举是指有固定顺序的用户名,如工卡号。

2.5 密码找回风险

有4种找回密码的方式以及相关风险:

  1. 使用“记住问题”找回;
    • 问题泄露,问题容易猜出
    • 社会工程学攻击
  2. 使用邮箱找回;
    • 找回邮箱无验证,可以向任意邮箱发送验证
    • 邮箱直接发送明文原密码(后台明文存密码)
    • 邮箱修改密码链接可以修改用户 ID、登录账号等信息(直接明文或做了简单编码或哈希)
    • 越权修改其他用户密码
  3. 使用手机号找回;
    • 手机验证码爆破
    • 短信接口滥用
    • 未验证手机号有效性
    • 越权修改其他用户密码
  4. 客服找回
    • 社工

2.6 会话管理风险

常见风险如下:

  1. 登录前后会话不变
  2. 会话有效时间超长,2小时以上,看业务情况
  3. 修改密码不清除会话
  4. 退出登录状态后,服务端不销毁会话
  5. Cookie 注入
  6. Cookie 未设置安全属性

2.7 个人资料管理风险

个人资料管理的页面,一般都有修改个人资料(如:修改住址、邮箱、手机号等)的功能,常见风险有:

  1. SQLi
  2. 存储型 XSS
  3. 上传漏洞
  4. 越权查看和修改其他用户资料

2.8 权限控制风险

2 种:

发现越权的方式,常见修改需改用户 ID 类的数值,另外可以测试2个用户不同的 UUID,使用其他用户的 UUID 测试越权行为。

3 认证模块安全措施

3.1 通用安全措施

3.2 图形验证码加固

图形验证码是常见和成本最低的防护措施,可用于防登录爆破、防自动化爬虫、防

3.3 短信验证码加固

考虑短信验证码的风险,短信验证码通常是使用短信接口实现,关于 API 的防护策略可以通用。短信验证码防护措施主要有:

3.4 安全注册流程设计

注册根据实际业务情况进行设计,要避免上面说的注册风险,又要满足业务的需求,考虑国内的应用有实名制的需求,可以在注册过程加入实名验证的流程。
举个注册过程的例子:

  1. 首先验证注册用户邮箱,确认用户可用的邮箱地址;
  2. 验证用户手机号,验证用户邮箱和手机号的过程可以在用户账号发生异常时进行告警提示
  3. 验证完邮箱和手机号后,接着实际注册信息,如设置用户名、密码等
  4. 最后一步填写个人其他信息,如性别、生日等信息。

如果需要进行实名认证,可以在认证完手机号之后进行,需要填写身份证信息和上传身份证照片,或者调用实名认证接口实现。这种多阶段的注册流程,需要在每一步骤都验证之前用户提交的信息是否有被篡改。

这么设计有几个好处:

安全注册流程可以在源头上防止“薅羊毛”的攻击,可以结合安全情报直接屏蔽一部分手机号的注册。

3.5 登录安全

根据业务重要程度可以设置 4 种登录方式:

根据实际安全需求选择合适的登录方式。

可以实施的安全措施:

3.6 密码找回安全

主要有 2 种方式找回密码,通过邮箱和通过手机号,最早还有通过验证问题找回的,现在应用比较少用了。通过邮箱找回,找回的链接不要出现跟身份相关的信息,包括一些编码问题。通过手机号找回,主要防止爆破。

验证完邮箱或手机号后,需要重新设置密码,判断邮箱或手机号跟账号的关联性,身份使用后台的数据,只从前端获取用户修改的密码,也可以通过提醒功能通知用户账户密码做了变更。

3.7 会话管理安全

会话管理有主要防御前面说的风险:

  1. 根据实际业务需求确定是否允许同一账户同时有不同的会话;
  2. 账户在修改密码后销毁当前全部跟这个账户关联的会话;
  3. 账户超时时间的设置;
  4. 退出登录后,服务端立即销毁会话;
  5. 设置 Cookie 的 http only 属性;
  6. 检查 Cookie 参数输入。

3.8 个人资料管理安全

对用户输入的资料进行严格控制,如身份证号、电话号、邮箱等位置使用严格的正则表达式匹配实现;对用户输入的字符串进行检查,对输出的字符进行净化;根据会话返回用户个人资料信息,防止越权;采用防止上传漏洞的防御措施等。

这部分用户输入或修改的内容较多,很常见出现 XSS 漏洞和上传漏洞,,记住所有用户的输入都不可信,采取必要的防护措施。

3.9 权限管理

在设计阶段做好权限表,权限管理完全由后台实现,不从用户获取任何关于权限控制的参数。

3.10 日志

应配置日志功能,对用户登录和退出活动进行记录,登录日志内容至少包括用户登录使用的账号,使用的 IP 地址,登录时间,以及远程登录时, 登录是否成功;
对用户的重要操作进行记录,如修改密码、找回密码、修改通讯方式等;
可以对用户的重要业务操作进行记录。

可以通过对日志的自动审计发现各种违规和异常行为,如连续失败的登录、异常地点或 IP 的登录、非常规时间的登录等。

4 Oauth 2.0 认证和风险

严格参考 Oauth 2.0 的要求不会有安全问题,有安全问题的都是接收用户输入的参数。

源链接

Hacking more

...