Python探索性数据分析(EDA)暴力密码猜测攻击网站登录异常检测策略

探索性数据分析(EDA)

探索性数据分析 (EDA) 分析和调查数据集并总结其主要特征,通常采用数据可视化方法。 它有助于确定如何最好地操纵数据源以获得所需的答案,从而更容易发现模式、发现异常、检验假设或检查假设。

EDA 主要用于查看在正式建模或假设检验任务之外可以揭示哪些数据,并提供对数据集变量及其之间关系的更好理解。 它还可以帮助确定您正在考虑用于数据分析的统计技术是否合适。

您可以使用 EDA 工具执行的特定统计功能和技术包括:

  • 聚类和降维技术,有助于创建包含许多变量的高维数据的图形显示。
  • 原始数据集中每个字段的单变量可视化,带有汇总统计。
  • 双变量可视化和汇总统计,可让您评估数据集中每个变量与您正在查看的目标变量之间的关系。
  • 多变量可视化,用于映射和理解数据中不同字段之间的交互。
  • K-means 聚类是无监督学习中的一种聚类方法,其中数据点被分配到 K 个组中,即聚类的数量,基于与每个组质心的距离。 最接近特定质心的数据点将聚集在同一类别下。 K-means 聚类通常用于市场分割、模式识别和图像压缩。
  • 预测模型,例如线性回归,使用统计数据和数据来预测结果。

本文要点:

  1. 模拟登录尝试,创建我们的数据集
  2. 执行探索性数据分析,了解模拟数据
  3. 使用规则和基准进行异常检测

模拟登录

为了运行模拟,我们将构建一个 Python 包来模拟需要正确用户名和密码的登录过程(无需任何额外的身份验证措施,例如双因素身份验证)和一个可以在命令行上运行的脚本。

模拟器对网站的有效用户做出以下假设:

  • 依据泊松过程,有效用户以每小时频率访问,具体取决于星期几和一天中的时间。 泊松过程将每单位时间(我们的模拟将使用一小时)的访问建模为具有均值 λ (lambda) 的泊松分布。 访问间隔时间呈指数分布,均值为 1/ λ。
  • 有效用户从 1-3 个 IP 地址进行连接,这些地址由 4 个以句点分隔的 [0, 255] 范围内的随机整数组成。 两个有效用户共享一个 IP 地址是有可能的,尽管可能性极小。
  • 有效用户在输入凭据时不太可能犯很多错误。
  • 黑客试图通过仅测试几个用户名密码组合来避免帐户锁定,而不是全面的字典攻击。
  • 由于黑客不想造成拒绝服务,因此他们限制了攻击的数量,并且一次只进行一次尝试。
  • 黑客知道系统中存在的帐户数量,并且对用户名的格式有一个很好的了解。 他们会选择尝试猜测所有 133 个用户名,或者其中的一部分。
  • 每次攻击都是独立的,这意味着每次攻击都有一个黑客在执行,并且黑客不会多次攻击。
  • 黑客不会分享有关哪些用户名-密码组合正确的信息。

用户模拟登陆Python包

import ipaddress
import itertools
import json
import random
import string
def make_user_base(out_file):
    """Generate a user base and save it to a file."""
    with open(out_file, 'w') as user_base:
        for first, last in itertools.product(
            string.ascii_lowercase,
            ['smith', 'jones', 'kim', 'lopez', 'brown']
        ): # makes 130 accounts
            user_base.write(first + last + '\n')
        # adds 3 more accounts
        for account in ['admin', 'master', 'dba']:
            user_base.write(account + '\n')
...
def read_user_ips(file):
    """Read in the JSON file of the user-IP address mapping."""
    with open(file, 'r') as file:
        return json.loads(file.read())

我们的模拟使用了许多不同的分布,因此了解它们的样子会很有帮助。 以下子图显示了我们使用的每个分布的示例。 请注意,泊松分布的绘制方式不同。 这是因为泊松分布是离散的。 出于这个原因,我们经常使用它来模拟事件出现 - 在这里,我们用它来模拟尝试登录的用户的出现。离散分布具有概率质量函数 (PMF) 而不是概率密度函数 (PDF):

从命令行模拟

使用探索性数据分析

分析的数据:

  • 调查尝试和失败中的任何峰值
  • 检查失败原因是用户名不正确的情况
  • 查看每个 IP 地址的故障率
  • 查找尝试使用许多不同用户名登录的 IP 地址

基于规则的异常检测

进行 EDA 之后,我们对如何解决这个问题有了一个想法。在这里,对其进行了简化,我们希望找到尝试次数过多且成功率低以及尝试使用更多的唯一用户名登录的 IP 地址(异常)。 为此,我们将采用基于阈值的规则作为我们首次涉足异常检测。

Tukey fence | Z-score

源代码

详情参阅 - 亚图跨际

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值