【问题标题】:Is standard Java immune to memcpy security flaws like the recent open ssl heartbeat flaw? [closed]标准 Java 是否对 memcpy 安全漏洞(例如最近的 open ssl heartbeat 漏洞)免疫? [关闭]
【发布时间】:2014-04-08 18:31:21
【问题描述】:

最近,openssl 库被发现存在严重缺陷,使攻击者能够读取高达 64KB 的内存。

http://blog.existentialize.com/diagnosis-of-the-openssl-heartbleed-bug.html

原因似乎是由于使用了 memcpy 而没有交叉检查攻击者提供的输入的大小。

如果我们假设标准库(不调用 C),Java 对这些类型的安全漏洞免疫吗?

为了更具体地说明安全漏洞的类型,我指的不是信任用户输入,而是特别是有限的内存访问。

【问题讨论】:

  • 定义“免疫”?我会说比 C 更安全。没有错误免费软件这样的东西。此外,操作系统可能会受到损害。 Java 不是灵丹妙药。
  • 不,但我并没有声称软件没有错误,而是如果它对特定类别的错误免疫。在这个例子中我可能很极端,Linux 显然对 Windows 可执行病毒免疫,因为它甚至无法运行它们。
  • 参见stackoverflow.com/tour中的“获取实用、详细问题的答案”部分
  • 免疫?不。更安全几个数量级,哦,是的!

标签: java c security heartbleed-bug


【解决方案1】:

Java 更安全,因为它不使用指针算法,不进行边界检查,并且(通常)不允许访问任意内存块(请参阅 sun.misc.Unsafe !)。

但是,原则上,如果根据不受信任的客户端提供的偏移量从数组、ByteBuffer 等中读取和写入字节,则可能会出现类似的问题。问题大大减少了,因为只能攻击该数组(或类似容器)范围内的数据,而不是任意相邻对象中的数据。

即使使用Unsafe,通常也会是,呃,安全,因为人们倾向于使用它来分配和访问一组非常特定的性能关键对象,而不是整个应用程序(包括加密密钥、密码、等)。

根本问题是信任用户输入,这可能发生在任何语言和各种上下文中,例如SQL 注入。

【讨论】:

  • java.misc.Unsafe 位暗示问题的答案是直接的“否”。
  • 不,Java 不能免疫 ;-)。然而,Unsafe 非常奇特,人们必须故意选择使用这种奇特的(未记录的!)功能来定义不安全的内存区域,而不是通过正常使用该语言而偶然发生。
  • 我发布了一个不涉及java.misc.Unsafe的变体。
  • 是的,这很好!
  • 那个太阳.misc.Unsafe!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 2017-11-24
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多