wait's〔三生石畔〕 善良人在追求中纵然迷惘,却终将意识到有一条正途。—— 歌德
业务安全之短信安全
发表于: | 分类: 安全测试 | 评论:0 | 阅读: 820

在现在的项目系统中,短信的利用越来越广泛,如用户注册、登录、活动报名、消息提示等,短信的不严格使用常常让攻击者有机可趁。

1、短信的安全隐患

在短信不合理的使用中容易存在以下问题。

(1)未对短信发送次数进行限制造成短信轰炸。

由于没有对短信发送进行合理的次数限制,攻击者会随意多次发送短信,从而对短信接收人构成骚扰。

(2)短信验证码在多次尝试失败后未进行失效处理。
通过短信进行登录、密码重置后,如果没有对短信验证码进行失效处理而被攻击者利用,会大大提高系统被暴力破解的概率。

(3)短信验证码有效期过长。
如果短信验证码的有效期过长,如在一分钟之后未进行失效处理,可能会导致其他人看到用户的验证码后冒用——更改密码或注册登录。

(4)服务端对验证码的校验只校验有效性,未校验其与手机号的对应关系。
如果没有严格校验对应关系,就会造成任意登录、注册、密码找回等一系列的安全问题,系统的鉴权机制会变得形同虚设。

(5)短信验证码过短,很容易进行枚举。
通过短信验证码进行登录、密码重置,如短信验证码只有4位、一分钟有效期、每个验证码尝试3次失效,攻击者会通过一万个有效的手机号,轮询获取验证码,并且对每个手机号的验证码进行3次猜测,由于4位验证码每一次猜对的概率是万分之一,但是使用大量手机号即可猜到多个用户验证码,从而登录其他人的账号。

(6)在发送短信验证码之前没有进行人机识别。
没有进行人机识别会导致恶意攻击者可随意调用短信发送接口,对手机号码进行遍历随意发送短信,从而对用户产生短信骚扰,导致短信资源被消耗,给企业造成经济损失。

(7)短信内容用户可控。
如果发送的短信内容包含用户可控内容,即用户可以随意更改短信内容,或者在短信内容中可插入自定义内容,会导致被攻击者利用而随意定义短信内容,并用于发送广告和非法言论,会给企业造成不可估量的损失,如企业形象和名誉损失。

2、短信安全策略

要避免以上问题,一定要在使用验证码的过程中遵循以下原则。

(1)在短信发送前必须进行人机识别,例如增加图形验证码校验,这样可以有效地增加攻击者通过直接调用接口进行发送短信的成本。

(2)将针对来源IP和手机号频率限制,单个IP针对大量手机号调用进行次数限制,防止攻击者使用同一个IP进行批量发送,这样可以增加攻击者的接口调用成本。

(3)单个手机号在一定时间段内进行次数限制,降低手机号被破解的可能性,尽可能地增加攻击者的时间成本。

(4)将手机验证码设置得尽量长和尽量复杂,如尽量使用6~9位英文和数字混合的验证码,不使用4位数字短信验证码,以降低被破解成功的概率。

(5)手机和验证码对应关系存放在redis或数据库中,每个验证码尝试三次或一次失败后从redis或数据库中删除,以降低被撞库成功的可能性。

(6)验证码有效期为60秒,在同一时间段内生效的验证码有且只有一个,增加攻击者的猜测成本,以降低破解成功的概率。

(7)防止短信内容被用户控制,避免被攻击者利用,避免给企业造成损失。

添加新评论

TOP