短信身份验证的安全风险
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
短信身份验证的安全风险
一、前言
本文对短信身份验证的安全风险,进行了总结,并结合自己以往的一些测试经验进行补充。
二、涉及到的安全风险
1、账户接管
这个是短信身份验证最严重的安全风险,攻击者可以窃取任意用户的账户,甚至是事先不知道用户的手机号码
2、用户模拟
与上面的类似,但是这个的风险取决于具体的服务。通常,如果可以进行模拟,由于确认机制相同,因此也有可能窃取已注册的帐户。
3、短信轰炸
短信轰炸可以针对客户或任何其他人。易受攻击的Web应用程序的身份验证界面用于发送消息。对于Web服务本身,轰炸可能导致客户忠诚度和声誉受损。
4、资源枯竭
这里是指,web接口为了发送短信,需要连接到短信服务的提供商,而后者会对每条消息进行收费,因此,短信轰炸期间,短信验证码接口的账户余额可被消耗殆尽。
三、测试人员该如何寻找
1、验证码发送次数限制
这种机质可能会引起用户无法正常登陆,或者无法完成身份验证。
2、验证码发送次数限制绕过
•例如发送一定数量的验证码址后,这里假定10次,提示验证码发送次数上限,但是点击发送还是可以继续发送验证码。而且后续发送的验证码和第十的验证码一样(这里感谢manba师傅在某次分享中提到的思路)
•针对发送次数前端验证,可以修改前端进行绕过。
•针对发送次数服务端验证,可以尝试在手机号码后面加上空格来进行绕过。
3、错误次数限制
这个是短信验证码爆破的最常见的安全风险,目前大多数短信验证码都是4-6位纯数字,最多的请求次数位100万,这针对于现代w eb服务来说并不算多。
4、针对错误次数限制绕过
•针对错误次数在cookie里面进行限制,我们可以尝试删除cookie中的某个参数,达到绕过错误次数限制
•针对错误次数前端验证,可以修改前端错误次数来进行绕过。
•针对错误次数服务端验证,可以尝试在手机号码后面加上空格来进行绕过。
5、验证码生效时间限制
在某些时候,错误次数不受限制,但是验证码生效时间很短,比如三分钟生效时间,三分钟内发送100万个请求还是很难的。但是这里验证码生效时间在代码实现上根本没有限制。因为应用程序在发送验证码的时候发送了相同的验证码
显然,开发人员认为,如果没有输入之前的验证码,那么验证码就还算是安全的,可以不用再次生成。因此我们可以在2.5到3分钟之间再次发送请求,接受验证码,即可继续爆破。
6、相同的验证码用于不同的动作
比如注册用户处的验证码次数不受限制,而且他的验证码可以用来进行另一项操作,比如用户登陆。我们可以先在用户登陆处让应用程序发送一个验证码,然后给注册用户接受验证码的api处发送验证码,当验证码正确的时候,程序会返回“该用户已注册”,然后我们在使用此验证码进行登陆,来入侵任何用户的账户。
7、不安全的随机数
验证码本身必须是随机的不可预测的。如果验证码可预测(例如取决于Unix时间的当前秒)则任何用户都可以被入侵
我们发现的错误之一是,导致此漏洞的原因不在于验证码,而在于发送验证码时候会给每个验证码分配一个全局标识符,当给任何用户发送验证码的时候该标识符都会递增。