用户认证模块安全设计

  • A+
所属分类:网络安全文章
腾讯云网站解决方案帮您轻松应对建站成本高/网络不稳定/安全漏洞多/单点部署无冗余等常见问题,满足电商/直播/教育等日均PV1-100万的网站部署需求。


成都、重庆区云产品3折特惠,全新机型计算提速,最高睿频可达3.7GHz

用户认证模块安全设计

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 注册风险

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

SQLi
XSS
批量注册
有效用户名猜解
注册流程跳跃
弱密码注册
中间人攻击
GET 请求提交参数

2.4 登录风险

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

SQLi
XSS
暴力破解
扫号
撞库
详细的报错信息(用户名猜解)
用户名枚举
中间人攻击
GET 请求提交参数
用户名猜解是可以猜用户名,如中国常用名 Top 500;用户名枚举是指有固定顺序的用户名,如工卡号。

2.5 密码找回风险

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

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

2.6 会话管理风险

常见风险如下:

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

2.7 个人资料管理风险

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

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

2.8 权限控制风险

2 种:

水平越权(同权限的不同用户)
垂直越权(不同权限的不同用户,如管理员和普通用户)
发现越权的方式,常见修改需改用户 ID 类的数值,另外可以测试2个用户不同的 UUID,使用其他用户的 UUID 测试越权行为。

3 认证模块安全措施

3.1 通用安全措施

认证功能使用加密通讯,禁用不安全的方法和协议(TLS 1.1 以上);
设置一致的密码强度验证功能,告警用户设置弱密码或者连续 n 次内使用的相同密码;
密码加盐哈希保存,不在数据库存储明文密码;
密码设置更新周期。

3.2 图形验证码加固

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

图形验证码加固方法

字体扭曲
字体粘连
字体镂空
字体混用
主体干扰线
背景色干扰
背景字母干扰
计算验证码
逻辑验证码
交互型验证码

滑块
选择图形
2 次验证

语音验证

3.3 短信验证码加固

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

使用图形验证码,防止接口滥用
限制发送频率
限制发送次数,可以限制一定时间段的总次数
短信验证码长度和有效期控制

3.4 安全注册流程设计

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

首先验证注册用户邮箱,确认用户可用的邮箱地址;
验证用户手机号,验证用户邮箱和手机号的过程可以在用户账号发生异常时进行告警提示
验证完邮箱和手机号后,接着实际注册信息,如设置用户名、密码等
最后一步填写个人其他信息,如性别、生日等信息。
如果需要进行实名认证,可以在认证完手机号之后进行,需要填写身份证信息和上传身份证照片,或者调用实名认证接口实现。这种多阶段的注册流程,需要在每一步骤都验证之前用户提交的信息是否有被篡改。

这么设计有几个好处:

使用邮箱和手机号验证能防止自动化注册;
用户注册完后就能获取注册用户有效联系方式,如果系统设计了账号异常检测功能,检测到账号异常后可以直接给用户发送告警;
登录可以使用邮箱或手机号方式,防止遗忘帐户名。
安全注册流程可以在源头上防止“薅羊毛”的攻击,可以结合安全情报直接屏蔽一部分手机号的注册。

3.5 登录安全

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

用户名、密码、(验证码)登录,考虑到用户体验,可以在用户输入密码几次错误后再启用验证码;
手机号、手机验证码登录;
用户名、密码、手机验证码登录
用户名、密码、证书登录
根据实际安全需求选择合适的登录方式。

可以实施的安全措施:

设置用户业务认证登录策略,限定失败登录次数(按账户、IP、设备)、锁定时间、解锁方式
在异常登录行为发生后,可以支持用户主动通过其他方式(如电话)冻结账号功能
如果是移动设备,使用自定义的随机键盘,启用移动 OS 的防截图功能;
设置用户业务认证登录失败提醒策略,当用户登录失败超过限定次数时发送短信
设置用户不在常用登录地址的提请功能
提醒用户在不同终端登录的情况
根据业务重要情况,可以增加登录提醒功能

3.6 密码找回安全

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

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

3.7 会话管理安全

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

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

3.8 个人资料管理安全

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

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

3.9 权限管理

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

3.10 日志

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

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

4 Oauth 2.0 认证和风险

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

CE安全网

发表评论

您必须登录才能发表评论!