2

为了加强身份验证机制(网络),我想为每次尝试记录用户指纹并应用模式识别来区分恶意尝试。例如,如果用户总是从欧洲计算机登录并且尝试从中国进行登录,则用户将被阻止,直到用户确认(例如通过电子邮件)允许从中国登录。

我在大学课程中对模式识别的了解非常非常少。但是,我想不起开始开发这项服务了。我所知道的是,您应该查看这些不同的功能:

  1. 浏览器代理字符串,产生:
    • 操作系统
    • 浏览器供应商
  2. IP地址,产生:
    • 地点
  3. 登录时间戳
  4. (失败的)尝试次数(在会话内,或总数)

您搜索模式并且任何非同寻常的尝试都会被标记,因为它不遵循平均模式。您可能会应用一个阈值,因此如果用户在晚上登录或拥有一台新 PC,它仍然可以工作。

还有一些要求:首先,必须实时检查尝试。如果凭据正常,您将无法在 2 分钟后阻止访问,但您后来发现该尝试可能是恶意的。此外,我们所有的应用程序都是用 PHP 编写的,但 PHP 可能太慢了。那时我更喜欢使用 Python,但随后还需要绑定到 Python。

所以问题是:从哪里开始?实现这一目标的最佳方法是什么?我可以将所有数据记录在像 Redis 这样的密钥存储或像 Mongo 这样的基于文档的存储中。我将如何设计一项服务,允许针对大量已知的其他尝试验证具有某些功能的新尝试?并及时返回尝试是否与平均值匹配,例如 250 毫秒。

4

1 回答 1

2

您想要做的称为异常检测 -维基百科是一个很好的起点。作为第一次尝试,您可能想尝试集群:

  • 您将需要一个数据集。好消息是集群是无监督的,因此您不必将大量登录尝试标记为常规或恶意。
  • 对于给定的用户,保留他们过去 N 次登录的历史记录(大哥警告!)以及这些登录的功能。您列出的功能是一个好的开始,但您可以考虑更多。
  • 应用聚类算法来估计平均登录情况。对于每次新尝试,您都可以计算与平均值的距离,并确定它是否看起来是恶意的。

另一方面,你可以在不学习的情况下走很长的路。我的直觉是登录的位置,失败的尝试次数将使您大部分时间到达那里。一个简单的 if-else 可能就足够了。

于 2013-02-11T10:17:07.773 回答