安全问题和答案通常使用在恢复遗忘的密码,或用于加强密码机制,也叫“秘密”问答(参见测试弱密码修改和重置功能 (OTG-AUTHN-009))。
他们通常在用户创建时候生成,需要用户选择一些预设的问题,并提供大致的答案。他们允许用户生成自己问题和答案对。两种方法都有不安全性。理想来说,安全问题应该是只有用户知晓的答案,不可能被其他人猜到或发现。这只是说起来容易。
安全问答依赖于答案的秘密性。问题和答案应该选择只有账户主人才知道的答案。然而,尽管许多答案可能不被公开,网站提供的大多数问题都是伪私密性的。
预生成的问题:
大部分预生成的问题都是非常自然简单的,可能导致不安全的答案。比如:
自生成的问题:
用户自己生成的问题导致的问题是他们可能生成非常不安全的问题,甚至根本上无视了安全问题的出发点。下面有一些真实世界的例子来说明这一点:
测试脆弱的预生成问题:
尝试在创建新用户的安全问答或者跟随“忘记密码”过程中的一系列安全问题。尝试生成尽可能多的问题来发现他们问的安全问题的类型。如果有任何安全问题可以被分类与上面描述的类别中,那么他们可能存在漏洞(猜测,暴力破解,存在在社交媒体中等等)。
测试脆弱的自生成问题:
尝试在创建新账户或配置账户密码恢复设置中创建安全问题。如果系统允许用户生成他们自己的安全问题,那么可能存在不安全的漏洞。如果系统采用了用户自己生成的安全问题,并用于忘记密码功能中,而且用户名可以被枚举(参见测试账户枚举 (OTG-IDENT-004)),那么攻击者可能能轻易枚举一系列自生成的问题。通过这个办法可以期待找到一些不安全的问题和答案。
测试可暴力破解的问题:
使用在 测试账户锁定机制(OTG-AUTHN-003) 描述的方法来确定一系列不正确的安全问题答案是否会触发锁定机制。
首先考虑的是尝试利用安全问题的地方是查看需要回答多少问题。大部分应用程序只需要用户问答单个问题,有些重要的系统需要用户回答两个或更多的问题。
接着评估安全问题的强度。他们的答案能否通过简单的google搜索或使用社会工程学技巧获得?作为一个渗透测试人员,这里有一个手把手的攻略来利用安全问题模式:
成功利用和绕过脆弱的安全问题模式的关键是发现一个或一系列的问题,这些问题使攻击者有机会轻易找到答案。如果不能完全确定问题的答案,总是寻找那些能带来很好的统计几率猜到正确答案的问题。最后,安全问题模式的强度取决于最脆弱的问题。