这次讲一下登录认证机制中最常见的口令爆破漏洞
口令爆破
口令爆破其实就是攻击者对用户口令进行穷举尝试。在用户登录界面,攻击者通过遍历生成口令或者加载口令字典,进行多次登录尝试,直至把用户口令穷举出来,成功登录
因为一般能被成功猜测出的用户口令都是弱口令,所以口令爆破也称弱口令漏洞
口令破解的漏洞原理其实很简单,即网站未对用户登录认证的请求频率和次数进行限制,使得攻击者可以无数次地进行遍历口令登录。从理论上讲,只要加载的字典范围足够大,尝试的次数足够多,攻击者可以把任意用户的口令穷举出来
防护手段
防御口令爆破的方法很简单,我们对认证请求频率和失败次数进行限制,使攻击者不能无代价地进行口令尝试。如果攻击者进行口令爆破所需要付出的成本,高出其可接纳的范围,那么在一定程度上,我们达到了安全
同前面注册页面的用户枚举漏洞讨论的一般,我们可以通过增加验证码机制来辨别人和机器,从而限制自动化工具在认证请求处的使用,进而达到限制认证请求频率的效果
而对认证失败次数进行限制的方案又可分两种。一是把认证失败次数记录在数据库中和用户数据相关联的,这样可对单个用户的失败次数进行限制。当一个具体用户的口令错误次数达到某个值时,对其进行认证限制。如,在一段时间内不允许该用户再次进行登录尝试,或者直接永久冻结
另一种则是把认证失败的次数记录到 Session 中,如此可限制单个客户端上请求的认证失败的次数(基于 Cookie 判断)。当某个客户端上发起的认证请求(不管是不是同一个用户的登录尝试)失败次数到达某个值时(在一个 Session 有效期内),对该客户端上发起的认证请求进行限制
如下代码所示,
def login(request):
if request.session.get('is_login', None):