我正在寻找一种有效的方法来识别帐户暴力破解。我的日志数据库包含身份验证日志条目。每个条目都有:
- 时间戳
- 用户名
- IP地址
- 登录尝试结果(成功/失败)
我想生成一份报告,指出哪些登录受到了攻击。被攻击定义为:在 N 分钟(例如 10 分钟)内从同一 IP 地址未成功登录尝试后未成功登录尝试。测试用例是:
- 用户/IP 组合尝试两次登录失败,第三次成功登录(无攻击)
- 用户/IP 组合尝试登录失败两次,第三次成功,而同一用户,但不同的 ip 尝试登录失败(攻击第二个用户/IP 组合)
我可以想象一个使用 O(n*log(N)) 解决方案的解决方案:一个游标遍历每条记录,然后使用另一个游标查找以后的记录以确定活动。相当低效。
DB 无所谓:SQL、MySQL、nosql 等,因为数据可以轻松转换。