DBMS_RANDOM是否存在安全隐患?

7
我们的数据库团队希望撤销PUBLIC对DBMS_RANDOM的执行权限,以解决安全问题。如果您在谷歌上搜索,一些安全专家认为该软件包很危险,但未说明原因。Ingram和Shaul的书“Practical Oracle Security”指出:“在使用DBMS_RANDOM生成加密密钥的环境中授予PUBLIC访问权限可能导致加密数据的泄漏......”。Oracle文档表示,“DBMS_RANDOM不适用于密码学。”...并且...“DBMS_CRYPTO.RANDOMBYTES返回一个包含加密安全伪随机字节序列的RAW值,可用于生成用于加密密钥的随机材料。”因此,DMBS_RANDOM似乎适用于生成伪随机数(只要不使用它制造密码)。为什么这对于PUBLIC来说太危险了呢?
编辑:刚发现一个新的source,声称

DBMS_RANDOM: 允许加密数据,无需安全管理加密密钥。

这也是无意义的,不是吗?


2
这对我来说有点反常。如果他们使用dbms_random作为加密密钥,那么他们应该解决这个问题,而不是撤销对dbms_random的授权。除了“安全问题”之外,他们还给出了其他原因吗? - tbone
1
不,他们没有。我找到了另一个来源:“...列出了默认分配给PUBLIC角色的最危险的包...”DBMS_RANDOM:该包可用于加密存储的数据。通常,大多数用户不应具有加密数据的权限,因为如果密钥未安全生成、存储和管理,则加密数据可能无法恢复等。http://blog.opensecurityresearch.com/2012/03/top-10-oracle-steps-to-secure-oracle.html 这没有意义,是吗? - wolφi
1个回答

5
不应该将DBMS_RANDOM授予公共用户,当用于加密密钥生成时的原因是攻击者可以使用它来确定种子值和/或密钥生成中的模式,这可能会导致泄露加密数据。虽然这不是一种简单的攻击方式,但对于拥有足够处理能力的人来说是可能的。
DBMS_RANDOM不应用于加密,因为它过于可预测。对于加密密钥生成,只应使用安全的随机函数。这些函数通过测量像白噪声等的东西并产生相应的值来尝试尽可能地获得随机性。

3
有趣。所以只有在我们将DBMS_RANDOM用于加密时(忽略反对该做法的建议),它才会成为安全风险?否则,我认为它是完全安全的。 - Jeffrey Kemp
@JeffreyKemp 是的,你说得对。很多人忽略了(或者不知道)不要将它用于加密的建议,所以这可能会给他们带来问题。 - Freedom_Ben
@Freedom_Ben 如果种子改变了,执行包并不能帮助找到种子。如果种子是通过文档记录的默认方法计算出来的,执行也没有帮助。撤销操作如何使数据库更安全? - wolφi
@Freedom_Ben 感谢您的耐心等待!对我来说仍然不清楚,因为在情况1中,“密钥生成器更改种子”,您可以随意运行dbms_random,而不会获得有关如何设置种子的任何知识,对吗?而在情况2中,“使用默认种子”,您甚至不需要运行一次dbms_random就可以识别出模式,因为它已经被充分记录了,对吗? - wolφi
2
有趣的是,一些超级黑客曾经使用过这种攻击方式来在拉斯维加斯的视频扑克中作弊。他们购买了一台机器,将数值通过它进行了数百万次的运算,直到找到了种子。该种子被机器用于生成玩家的牌。通过这样做,他们可以预测接下来会出现什么牌,因此他们知道何时该放弃,何时该大赌特赢。由于所有机器都使用相同的种子,他们知道每台机器接下来会出现什么。非常酷的故事 :-) - Freedom_Ben
显示剩余10条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接