测试弱安全问题答案
ID |
---|
WSTG-ATHN-08 |
总结
安全问题和答案通常称为“秘密”问题和答案,通常用于恢复忘记的密码(请参阅测试弱密码更改或重置功能,或作为密码之上的额外安全性)。
它们通常在创建帐户时生成,要求用户从一些预先生成的问题中进行选择并提供适当的答案。它们可能允许用户生成自己的问题和答案对。这两种方法都容易产生不安全感。理想情况下,安全问题应该生成只有用户知道的答案,而其他任何人都无法猜测或发现。这比听起来更难。
安全问题和答案依赖于答案的保密性。应选择问题和答案,以便只有帐户持有人知道答案。然而,尽管很多答案可能不为人所知,但网站实施的大多数问题都宣传了伪私密的答案。
预先生成的问题
大多数预先生成的问题本质上都相当简单,可能导致不安全的答案。例如:
- 用户的家人或密友可能会知道答案,例如“你母亲的婚前姓氏是什么?”,“你的出生日期是什么?”
- 答案可能很容易猜到,例如“你最喜欢的颜色是什么?”,“你最喜欢的棒球队是什么?”
- 答案可能是暴力破解的,例如“你最喜欢的高中老师的名字是什么?”——答案可能在一些易于下载的流行名字列表中,因此可以编写简单的暴力攻击脚本。
- 答案可能是公开发现的,例如“你最喜欢的电影是什么?”——答案可以很容易地在用户的社交媒体个人资料页面上找到。
自行生成的问题
让用户生成自己的问题的问题在于,它允许他们生成非常不安全的问题,甚至绕过首先提出安全问题的全部意义。以下是一些真实世界的例子来说明这一点:
- “什么是1+1?”
- “你的用户名是什么?”
- “我的密码是S3curIty!”
测试目标
- 确定问题的复杂性和直截了当的程度。
- 评估可能的用户答案和暴力破解功能。
如何测试
测试弱预生成问题
尝试通过创建新帐户或按照“我不记得密码”流程获取安全问题列表。尝试生成尽可能多的问题,以很好地了解所提出的安全问题的类型。如果任何安全问题属于上述类别,则它们很容易受到攻击(猜测、暴力破解、社交媒体上可用等)。
测试弱自生成问题
尝试通过创建新帐户或配置现有帐户的密码恢复属性来创建安全问题。如果系统允许用户生成自己的安全问题,则很容易创建不安全的问题。如果系统在忘记密码功能期间使用自行生成的安全问题,并且可以枚举用户名(请参阅测试帐户枚举和可猜测的用户帐户,则测试人员应该很容易枚举一些自行生成的问题。应该期望使用这种方法找到几个弱的自我生成问题。
测试暴力破解答案
使用测试弱锁定机制中描述的方法,确定是否有许多错误提供的安全答案触发了锁定机制。
尝试利用安全问题时,首先要考虑的是需要回答的问题数量。大多数应用程序只需要用户回答一个问题,而一些关键应用程序可能需要用户回答两个甚至更多问题。
下一步是评估安全问题的强度。答案可以通过简单的谷歌搜索或社会工程攻击获得吗?作为渗透测试人员,以下是利用安全问题方案的分步演练:
-
应用程序是否允许最终用户选择需要回答的问题?如果是这样,请重点关注以下问题:
- 一个“公开”的答案;例如,可以通过简单的搜索引擎查询找到的东西。
- 事实答案,例如“第一所学校”或其他可以查找的事实。
- 很少有可能的答案,例如“你的第一辆车是什么型号的”。这些问题将向攻击者提供一个可能的答案的简短列表,并且根据统计数据,攻击者可以将答案从最有可能到最不可能的顺序排列。
-
如果可能的话,确定你有多少猜测。
- 密码重置是否允许无限次尝试?
- X 个错误答案后是否有锁定期?请记住,锁定系统本身可能是一个安全问题,因为攻击者可以利用它来对合法用户发起拒绝服务。
- 根据以上几点的分析选择合适的问题,并进行研究以确定最可能的答案。
成功利用和绕过弱安全问题方案的关键是找到一个问题或一组问题,从而有可能轻松找到答案。如果您完全不确定任何答案,请始终寻找可以为您提供最大统计机会猜出正确答案的问题。归根结底,安全问题方案的强性取决于最弱的问题。