Authentication 将模式识别应用于恶意尝试的用户身份验证

Authentication 将模式识别应用于恶意尝试的用户身份验证,authentication,login,machine-learning,pattern-recognition,Authentication,Login,Machine Learning,Pattern Recognition,为了加强身份验证机制(web),我想记录每次尝试的用户指纹,并应用模式识别来区分恶意尝试。例如,如果用户总是从欧洲计算机登录,并且有来自中国的尝试,则用户将被阻止,直到用户确认(例如,通过电子邮件)允许从中国登录 我在大学的课程中对模式识别有着非常非常少的了解。然而,我回忆不起足够的时间来开始开发这项服务。我知道的是,你应该看看这些不同的功能: 浏览器代理字符串,导致: 操作系统 浏览器供应商 IP地址,导致: 位置 登录时间戳 尝试次数(失败)(会话内,或总数) 您搜索模式,任何异常尝

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

我在大学的课程中对模式识别有着非常非常少的了解。然而,我回忆不起足够的时间来开始开发这项服务。我知道的是,你应该看看这些不同的功能:

  • 浏览器代理字符串,导致:
    • 操作系统
    • 浏览器供应商
  • IP地址,导致:
    • 位置
  • 登录时间戳
  • 尝试次数(失败)(会话内,或总数)
  • 您搜索模式,任何异常尝试都会被标记,因为它不遵循平均模式。您可能会应用一个阈值,因此如果用户在夜间登录或拥有一台新电脑,它仍然可以工作

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


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

    您要做的就是所谓的异常检测-这是一个很好的开始。首先,您可能希望尝试群集:

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

    作为一方,你可以走很长的路而不必学习。我的直觉是登录的位置和失败尝试的次数将让你大部分的方式。一个简单的if-else可能就足够了。

    首先,您似乎已经知道要阻止的模式。第二,你提到的特征是非常基本的,并且在它们可能表达的假设中是有限的;他们怎么能生产出令人惊讶的东西,而不是你本可以想到自己的东西呢?第三,您似乎没有恶意和非恶意登录尝试的数据集可供训练。总之,我不确定机器学习是否真的是你想要的。我同意Junuxx提出的所有观点,除了“你似乎没有恶意和非恶意登录尝试的数据集可供训练”。如果你要进行监督分类,你只需要有标签的数据。只是一个想法:将这4个点(用户代理,ip…)转换成一个数字,这样每个登录都有一个代表我们拥有的“登录类型”的数字。为每个用户存储这些数字,并使用它们来查看新登录有多不同。@Junuxx+mbatchkarov您为我触发了监督与非监督的线索。我认为不需要“机器学习”,而需要无监督的模式识别。机器学习可以产生有趣的特性,但为了保持简单,我可以选择自己的特性。我说的对吗?这听起来已经很好了,我将看看如何对多个功能进行聚类并计算到配置文件的距离。现在理论又回来了,我只需要弄清楚如何在实践中处理这个问题。