4.4.3-测试弱锁定机制-程序员宅基地

技术标签: 4.4 认证测试  web安全  

测试弱锁定机制

ID
WSTG-ATHN-03

总结

帐户锁定机制用于缓解暴力攻击。使用锁定机制可以击败的一些攻击:

  • 登录密码或用户名猜测攻击。
  • 对任何 2FA 功能或安全问题进行代码猜测。

帐户锁定机制需要在保护帐户免受未经授权的访问和保护用户不被拒绝授权访问之间取得平衡。帐户通常在 3 到 5 次尝试失败后被锁定,并且只能在预定的时间段后通过自助解锁机制或管理员干预解锁。

尽管进行暴力攻击很容易,但成功攻击的结果是危险的,因为攻击者将拥有对用户帐户的完全访问权限,以及他们可以访问的所有功能和服务。

测试目标

  • 评估帐户锁定机制缓解暴力密码猜测的能力。
  • 评估解锁机制对未经授权的帐户解锁的抵抗力。

如何测试

锁定机制

要测试锁定机制的强度,您需要访问您愿意或负担得起锁定的帐户。如果只有一个帐户可用于登录 Web 应用程序,请在测试计划结束时执行此测试,以避免因被锁定而浪费测试时间。

若要评估帐户锁定机制缓解暴力密码猜测的能力,请尝试多次使用不正确的密码进行无效登录,然后使用正确的密码验证帐户是否已被锁定。示例测试可能如下所示:

  1. 尝试使用错误的密码登录 3 次。
  2. 使用正确的密码成功登录,从而表明锁定机制在 3 次不正确的身份验证尝试后不会触发。
  3. 尝试使用错误的密码登录 4 次。
  4. 使用正确的密码成功登录,从而表明在 4 次不正确的身份验证尝试后不会触发锁定机制。
  5. 尝试使用错误的密码登录 5 次。
  6. 尝试使用正确的密码登录。应用程序返回“您的帐户已锁定”,从而确认该帐户在 5 次不正确的身份验证尝试后被锁定。
  7. 5 分钟后尝试使用正确的密码登录。应用程序返回“您的帐户已锁定”,从而显示锁定机制不会在 5 分钟后自动解锁。
  8. 10 分钟后尝试使用正确的密码登录。应用程序返回“您的帐户已锁定”,从而显示锁定机制不会在 10 分钟后自动解锁。
  9. 15 分钟后使用正确的密码成功登录,从而表明锁定机制在 10 到 15 分钟后自动解锁。

CAPTCHA 可能会阻碍暴力攻击,但它们可能有其自身的一系列弱点,不应取代锁定机制。如果实施不当,可能会绕过 CAPTCHA 机制。CAPTCHA 缺陷包括:

容易击败的挑战,例如算术或有限的问题集。

  1. CAPTCHA 检查 HTTP 响应代码,而不是响应成功。
  2. CAPTCHA 服务器端逻辑默认为成功求解。
  3. CAPTCHA 质询结果永远不会在服务器端进行验证。
  4. CAPTCHA 输入字段或参数被手动处理,并且未正确验证或转义。

要评估 CAPTCHA 的有效性,请执行以下操作:

  1. 评估 CAPTCHA 挑战,并尝试根据难度自动提供解决方案。
  2. 尝试在不通过正常 UI 机制解决 CAPTCHA 的情况下提交请求。
  3. 尝试提交请求时故意验证码质询失败。
  4. 在使用测试代理(请求直接在服务器端提交)时,尝试在不解决 CAPTCHA 的情况下提交请求(假设某些默认值可能由客户端代码等传递)。
  5. 尝试使用常见的注入有效负载或特殊字符序列对 CAPTCHA 数据入口点(如果存在)进行模糊处理。
  6. 检查 CAPTCHA 的解决方案是否可能是图像的替代文本、文件名或关联隐藏字段中的值。
  7. 尝试重新提交先前确定的已知良好响应。
  8. 检查清除 Cookie 是否会导致 CAPTCHA 被绕过(例如,如果 CAPTCHA 仅在多次失败后显示)。
  9. 如果验证码是多步骤过程的一部分,请尝试直接访问或完成验证码之外的步骤(例如,如果验证码是登录过程的第一步,请尝试简单地提交第二步 [用户名和密码])。
  10. 检查可能未强制执行 CAPTCHA 的替代方法,例如旨在促进移动应用访问的 API 端点。

对可能需要锁定机制的每个可能的功能重复此过程。

解锁机制

要评估解锁机制对未经授权的帐户解锁的抵抗力,请启动解锁机制并查找弱点。典型的解锁机制可能涉及秘密问题或通过电子邮件发送的解锁链接。解锁链接应是唯一的一次性链接,以阻止攻击者猜测或重放链接并批量执行暴力攻击。

请注意,解锁机制只能用于解锁帐户。它与密码恢复机制不同,但可以遵循相同的安全实践。

修复

根据风险级别应用帐户解锁机制。从最低到最高保证的顺序:

  1. 基于时间的锁定和解锁。
  2. 自助解锁(向注册的电子邮件地址发送解锁电子邮件)。
  3. 手动管理员解锁。
  4. 使用正确的用户标识手动解锁管理员。

实施帐户锁定机制时要考虑的因素:

  1. 对应用程序进行暴力破解密码猜测的风险是什么?
  2. 验证码是否足以降低这种风险?
  3. 是否使用了客户端锁定机制(例如 JavaScript)?(如果是这样,请禁用要测试的客户端代码。
  4. 锁定前登录尝试失败的次数。如果锁定阈值太低,则有效用户可能经常被锁定。如果锁定阈值过高,则攻击者在锁定帐户之前可以尝试暴力破解帐户的次数就越多。根据应用程序的用途,5 到 10 次不成功的尝试范围是典型的锁定阈值。
  5. 如何解锁帐户?
    1. 由管理员手动操作:这是最安全的锁定方法,但可能会给用户带来不便,占用管理员的“宝贵”时间。
      1. 请注意,管理员还应该有一个恢复方法,以防他的帐户被锁定。
      2. 如果攻击者的目标是锁定 Web 应用程序所有用户的帐户,则此解锁机制可能会导致拒绝服务攻击。
    2. 一段时间后:锁定持续时间是多久?这足以保护应用程序吗?例如,5 到 30 分钟的锁定持续时间可能是缓解暴力攻击和给有效用户带来不便之间的一个很好的折衷方案。
    3. 通过自助服务机制:如前所述,这种自助服务机制必须足够安全,以避免攻击者自己解锁帐户。

引用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44232452/article/details/133898582

智能推荐

Spring @Autowired注入为 null 的原因总结_spring autowired null-程序员宅基地

文章浏览阅读3.3w次,点赞13次,收藏37次。原因配置缺失,比如为开启注解扫描驱动、注入组件为注册;使用 new 关键字创建的对象不受spring容器管理,无法注入;注入静态变量, 静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入。静态注入的三种方式在一些工具类中可能会依赖 service 层的对象,一般情况下工具类都是使用静态方法,对应的成员变量也需要声明为静态的,此时如果直接使用 @..._spring autowired null

红队眼中的防守弱点_红队 漏洞总是修复不好-程序员宅基地

文章浏览阅读207次。通过对政府、央企、银行、证券、民生、运营商、互联网等行业的红队实战工作,发现各行业安全防护具备如下特点。一、 资产混乱、隔离策略不严格除了大型银行之外,很多行业对自身资产情况比较混乱,没有严格的访问控制(ACL)策略,且办公网和互联网之间大部分相通,可以直接使远程控制程序上线。除了大型银行与互联网行业外,其他很多行业在DMZ区和办公网之间不做或很少做隔离,网络区域划分也不严格,给了红队很多可乘之机。此外,几乎所有行业的下级单位和上级单位的业务网都可以互通。而除了大型银行之外,其他很多行业的办公网也大_红队 漏洞总是修复不好

matlab编程控制舵机,船舶航向控制器设计(MATLAB,附仿真程序)-程序员宅基地

文章浏览阅读1.1k次。船舶航向控制器设计(MATLAB,附仿真程序)(课题申报表,任务书,开题报告,中期检查表,外文翻译,论文15400字,仿真程序,答辩PPT)摘 要本文对反向递推(Backstepping)设计方法在非线性船舶航向控制器中的应用进行了研究。Backstepping设计方法是近几年兴起的一种基于Lyapunov稳定性理论的比较先进的非线性控制方法。因此,本文首先对目前常见的非线性控制方法进行了概述,简..._舵机模型matlab程序

营销系统优惠券模板设计_优惠劵表结构设置-程序员宅基地

文章浏览阅读819次。目录券模板基础信息定义优惠券类型优惠券门槛优惠券面值/折扣率,折扣金额上限有效期自定义使用限定使用时间限定可用商品限定可用门店限定券模板设计类似于商品SKU,定义了一个券模板后,发券操作可以基于同一个券模板实现发放同一种优惠券给多个不同的用户。券模板基础信息定义一张优惠券的基础信息,例如常规的名称,类型,面值等等。下面罗列一些有逻辑含义的字段。优惠券类型立减券: 无门槛或有门槛的满减券,达到使用门槛后可以立减指定金额。 折扣券:按商品价格减免指_优惠劵表结构设置

(深度学习快速入门)人工智能、机器学习和深度学习总体概述_人工智能与深度学习 简明教程-程序员宅基地

文章浏览阅读3k次,点赞15次,收藏67次。线性回归:线性回归假设输出变量是若干输入变量的线性组合,并根据这一关系求解线性组合中的最优系数。具体来说,线性回归的作用是求得一组参数wi,i=0.1.,,,.nwi​,i=0.1.,,,.n,使预测输出可以表示为以这组参数为权重的实例属性的线性组合,引入常量x0=1x_{0}=1x0​=1,线性回归试图学习的模型就是当实例只有一个属性时,输入和输出之间的关系就是二维平面上的一条直线;_人工智能与深度学习 简明教程

python读取串口速度跟不上_串口读取数据很慢,怎么解决-程序员宅基地

文章浏览阅读1.9k次。byte[] reb = new byte[0x400];reb = myCom.Read(0x400);就是这个读取串口数据的函数public byte[] Read(int NumBytes){byte[] lpBuffer = new byte[NumBytes];if (this.hComm == -1){throw new ApplicationException("串口没有打开");}..._python读取串口速度跟不上

随便推点

Shiro与Spring结合时报Configuration error: No realms have been configured! One or more realms must be……_configuration error: no realms have been configure-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏7次。最近在跟着网上的教学视频学习Shiro安全框架,使用Shiro可以方便的做验证、授权等,其中在谈到使用多realm做验证,授权时,报了个缺少realm配置的错误。Configuration error: No realms have been configured! One or more realms must be present to execute an authorization o..._configuration error: no realms have been configured! one or more realms must

疟原虫感染治疗癌症,灵感竟然来源于地图-程序员宅基地

文章浏览阅读909次。2月9日,央视一套《新闻30分》节目向全球宣布了陈小平科学研究团队的重大发明《疟原虫感染免疫疗法治疗晚期癌症》。“疟原虫可成为抗癌生力军”迅速占据新闻热搜榜,引发民众热议。为何引发疟疾带来痛苦的疟原虫可以抗癌?这背后有什么样的故事?1985年,在陈小平教授还在中山医科大学读研究生的时候,有一天老师讲疟疾的流行病学时,挂出一张地图,与下图很像——疟疾主要流行在非洲、赤道附近,可以理解为:蚊子多的...

PAT乙级C语言1005 继续(3n+1)思想_pat1005继续 c语言-程序员宅基地

文章浏览阅读95次。#include<stdio.h>void da(int*b,int r);int main(){ //输入数据 int n; scanf("%d",&n); int a[999]; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } //记录重复的数的下标 int t=0; int b[999]; int p; for(int i=0;i<n;i++){ p=a[i]; for(int._pat1005继续 c语言

【啃书】《智能优化算法及其MATLAB实例》例5.1蚁群算法求解TSP问题_蚁群算法 约束优化 matlab-程序员宅基地

文章浏览阅读905次,点赞3次,收藏13次。文章目录问题描述仿真过程matlab源码问题描述仿真过程matlab源码%20201012lu注:该matlab代码成功在matlabR2019a运行%%%%%%%%%%%%%%%%%%%%蚁群算法解决TSP问题%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear all; %清除所有变量close all; _蚁群算法 约束优化 matlab

WPF页面切换之Page与Window_wpf window page-程序员宅基地

文章浏览阅读2.3k次。先从基础背景知识说起:一、Page与Window介绍1.应用程序GUI的所有内容都是包含在Window中的,想要显示东西?必须先创建一个Window或者一个Window的子类;2.Window下面可以直接写内容,写布局,但是这些内容和布局写完后只能是固定的、不可变的,这里是不可变是指Window的内容不会发生变化了,因为元素和布局是写死的了;3.在Window下面插入Frame作为容器,再用该Frame包含你的某个Page(***注意:所有的Page都需要容器包含,否则无法进行页面之间的跳转和导航!_wpf window page

C++抽象数据类型(ADT)表示和实现--链队列(Queue)_c++数据结构adt怎么写-程序员宅基地

文章浏览阅读1.5k次。先放上ADT的解释和预定义常量。抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。以下是队列的抽象数据类型定义。_c++数据结构adt怎么写