描述
产品使用随机数或不足值的安全上下文依赖于不可预测的数字。
扩展描述
当产品生成可预测的值在一个上下文要求不可预测性,有可能对攻击者猜测未来将生成的值,并使用这个想冒充另一个用户或访问敏感信息。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然 |
类型 |
ID |
的名字 |
ChildOf |
支柱——一个弱点是最抽象类型的弱点和代表一个主题类/基地/变体相关弱点。支柱是不同于一个类别作为支柱技术上仍然是一种弱点,描述了一个错误,而一个类别代表一个共同特征用于组相关的东西。 |
693年 |
保护机制失败 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
331年 |
熵不足 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
334年 |
小空间的随机值 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
335年 |
不正确的使用伪随机数生成器的种子(PRNG) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
338年 |
使用密码地弱伪随机数生成器(PRNG) |
ParentOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
340年 |
一代的可预测的数字或标识符 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
344年 |
在动态变化的环境中使用不变的价值 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
1204年 |
代的弱初始化向量(IV) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
1241年 |
使用随机数发生器的可预测的算法 |
CanPrecede |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
804年 |
可推测的验证码 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关视图”架构概念”(cwe - 1008)
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1013年 |
加密数据 |
背景细节
电脑是确定性机器,因此无法产生真正的随机性。伪随机数生成器(prng)近似随机性算法,从一粒种子开始,后续的计算值。有两种类型的prng:统计和加密。统计prng提供有用的统计特性,但其输出是可以预见的,并且形成一个简单的复制数字流,不适合使用在安全的情况下取决于生成的值是不可预测的。加密prng解决这个问题通过生成输出更难以预测。密码安全的价值,它必须是不可能的或高度不可能对攻击者区分它和一个真正的随机值。
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 |
请注意 |
架构和设计 |
|
实现 |
实现:造成这一弱点在建筑安全策略的实施。 |
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
保密 其他
|
当一个保护机制依赖于随机值来限制对敏感资源的访问,如会话ID或生成密钥的种子,然后可以访问受保护资源猜测ID或关键。 |
|
访问控制 其他
|
如果产品依赖于独特,unguessable ID来标识资源,攻击者可以猜一个ID属于另一个用户的一个资源。攻击者可以读取资源或pre-create资源与相同的ID,以防止合法程序正确的资源发送给目标用户。例如,一个产品可能维持会话信息在文件的名字是基于用户名。攻击者可以pre-create这对受害者的用户文件,然后设置权限,应用程序不能生成会话的受害者,防止受害者使用应用程序。 |
|
访问控制
|
当一个授权或身份验证机制依赖于随机值来限制访问限制功能,如会话ID或生成密钥的种子,那么攻击者可能通过猜测ID或访问限制功能键。 |
|
利用的可能性
示范例子
示例1
这段代码试图随机生成唯一标识用户的会话。
函数generateSessionID(美元userID) {
将srand ($ userID); 返回rand (); }
因为PRNG的种子总是用户的ID,会话ID将永远是相同的。攻击者可能因此预测任何用户的会话ID和劫持会话。
这个示例还展示一个小种子空间(cwe - 339)。
示例2
下面的代码使用一个统计PRNG创建一个URL的收据仍然活跃一段时间后购买。
GenerateReceiptURL字符串(字符串baseUrl) {
随机随机ranGen = new (); ranGen。setSeed((新日期()).getTime ()); 返回(baseUrl + ranGen.nextInt (400000000) + " . html "); }
这段代码使用Random.nextInt()函数来生成“独特”的收据页面生成的标识符。因为Random.nextInt()是一个统计PRNG,攻击者很容易猜它生成的字符串。尽管底层接收系统的设计也是错误的,这将是更安全的,如果使用一个随机数生成器,没有产生可预见的收据标识符,例如加密PRNG。
观察到的例子
参考 |
描述 |
|
云应用程序在Kubernetes生成随机数发生器使用弱密码基于部署时间。 |
|
加密产品使用rand()库函数来生成一个复苏的关键,使其更容易进行强力攻击。 |
|
随机数发生器可以反复生成相同的值。 |
|
Web应用程序生成可预测的会话id,允许会话劫持。 |
|
密码恢复工具生成一个相对少量的随机密码,简化蛮力攻击。 |
|
与种子密钥创建基于系统时间。 |
|
核函数没有一个好的熵源刚刚启动。 |
|
博客软件使用硬编码的盐在计算密码散列。 |
|
公告牌应用程序使用不够随机名称上传文件,允许其他用户访问私人文件。 |
|
手持设备使用可预测的TCP序列号,允许欺骗或劫持的TCP连接。 |
|
Web管理控制台生成会话id基于登录时间,使其更容易进行会话劫持。 |
|
SSL图书馆使用弱随机数发生器,只有产生65536独特的钥匙。 |
|
链:精度不足导致额外的零比特分配,减少熵的API函数产生随机数。 |
|
|
|
验证码的实现没有产生足够的不同的图像,允许绕过使用数据库的所有可能的校验和。 |
|
DNS客户机使用可预测的DNS事务id,允许DNS欺骗。 |
|
应用程序生成的密码是基于一天的时间。 |
潜在的缓解措施
阶段:体系结构和设计
使用严格的审查算法是目前被认为是强大的由该领域的专家,并选择适当长度的种子经过良好测试的实现。
一般来说,如果一个伪随机数发生器不是广告作为密码安全,那么它可能是一个统计PRNG和不应该在安全敏感的环境中使用。
伪随机数发生器可以产生可预测的数字如果知道发电机和种子可以猜到了。一个256位的种子是一个好的起点生产一个足够“随机”的数字。
|
实施阶段:
根据需要考虑PRNG补种本身从高质量的伪随机输出源,如硬件设备。 |
测试阶段:
使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。 |
阶段:体系结构和设计;需求
使用产品或模块符合FIPS 140 - 2 ( ref - 267)避免明显的熵问题。咨询FIPS 140 - 2附件C(“通过随机数生成器”)。 |
测试阶段:
使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。 |
弱点Ordinalities
Ordinality |
描述 |
主 |
(其他弱点的弱点存在独立的) |
检测方法
黑盒
使用监控工具,检查软件的流程与操作系统交互和网络。这种技术的情况很有用的源代码不可用,如果软件并不是由你,或者如果你想验证构建阶段并没有引入任何新的弱点。例子包括调试器直接附加到正在运行的进程;系统调用跟踪实用程序,如桁架(Solaris)和strace (Linux);系统活动监视器如FileMon、RegMon、过程监控、和其他的Sysinternals工具(Windows);嗅探器和协议分析,监控网络流量。
把监控过程,寻找库函数表明随机性时使用。多次运行流程,看看种子的变化。寻找访问的设备或相关资源,通常用于强(或弱)随机性,比如/dev/urandom Linux。寻找库或系统调用访问可预测的进程id和系统时间等信息。
|
自动静态分析——二进制或字节码
根据飙升,以下检测技术可能是有用的:
-
字节码的弱点分析,包括反汇编程序+源代码弱点分析
-
二进制弱点分析,包括反汇编程序+源代码弱点分析
|
人工静态分析——二进制或字节码
根据飙升,以下检测技术可能是有用的:
|
动态分析与人工解释结果
根据飙升,以下检测技术可能是有用的:
|
人工静态分析源代码
根据飙升,以下检测技术可能是有用的:
-
关注人工抽查,手动分析来源
-
手工源代码审查(不检查)
|
自动静态分析源代码
根据飙升,以下检测技术可能是有用的:
-
源代码缺陷分析仪
-
Context-configured源代码分析器
|
体系结构或设计审查
根据飙升,以下检测技术可能是有用的:
|
功能区域
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
254年 |
7 pk -安全特性 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
723年 |
OWASP十大2004类别A2 -破碎的访问控制 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
747年 |
CERT C安全编码标准(2008)第14章-杂项(MSC) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
753年 |
2009年前25 -多孔防御 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
808年 |
2010年处于25 -弱点 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
861年 |
CERT甲骨文安全Java编码标准(2011)第18章-杂项(MSC) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
867年 |
2011年处于25 -弱点 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
883年 |
CERT c++安全编码部分49 -杂项(MSC) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
905年 |
SFP主要集群:可预测性 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1003年 |
弱点简化映射的漏洞发布 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1152年 |
SEI CERT甲骨文Java安全编码标准,指南49。杂项(MSC) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1169年 |
SEI CERT 14 C编码标准指导方针。并发性(CON) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1170年 |
SEI CERT 48 C编码标准指导方针。杂项(MSC) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1346年 |
OWASP十大2021类别A02:2021 -密码失败 |
笔记
的关系
这可以主要其他许多缺点比如密码错误,身份验证错误,符号链接后,信息泄露等。
维护
CWE 4.3, cwe - 330CWE加密及其后代正在接受调查的团队识别缺陷相关的随机性和不可预测性,以及随机性和加密原语之间的关系。这种“子树分析”可能导致现有条目的添加或弃用;重组的关系在某些观点,如研究视图( cwe - 1000);更一致的术语;和/或重大修改相关条目。
维护
CWE 4.5,相关术语随机性,熵,和可预测性可以相差很大。在开发人员和其他社区,使用“随机性”。然而,在密码学,“熵”是不同的,通常隐含的测量。没有常用的定义,甚至在标准文件和加密文件。CWE的未来版本将试图定义这些术语,如果有必要,区分他们的方式适合不同的社区,但不会减少可用性CWE的映射,理解,或者其他场景。
分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
千鸟 |
|
|
随机性和可预测性 |
7有害的王国 |
|
|
不安全的随机性 |
OWASP十大2004 |
A2 |
CWE更具体 |
破碎的访问控制 |
CERT C安全编码 |
CON33-C |
不精确的 |
使用库函数时避免竞态条件 |
CERT C安全编码 |
MSC30-C |
CWE更抽象 |
不要使用兰德()函数生成伪随机数 |
CERT C安全编码 |
MSC32-C |
CWE更抽象 |
适当的伪随机数生成器的种子 |
WASC |
11 |
|
蛮力 |
WASC |
18 |
|
凭证/会话预测 |
CERT甲骨文安全Java编码标准(2011) |
MSC02-J |
|
产生强烈的随机数 |
引用
|
[ref - 207]约翰Viega和Gary McGraw。“构建安全软件:如何避免安全问题的正确方式”。1版。addison - wesley。2002年。 |
|
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪20:弱随机数。”Page 299. McGraw-Hill. 2010. |
|