中文 英语

心脏出血和物联网

如果你认为互联网安全很复杂,那就等着物联网开始运转吧。

受欢迎程度

Heartbleed不是一首乡村和西部歌曲,但许多人希望它是。这是一个编程故障,可能会对看似安全的数据造成灾难性和广泛的损害。

据估计,“心脏出血”代码中的漏洞使黑客能够在不被发现的情况下收集包括密码在内的个人数据,时间长达两年。究竟有多少数据被泄露,以及总损失将是多少,仍在评估中,但媒体炒作表明,这是巨大的。此外,人们不得不怀疑这个故障是否与最近塔吉特和其他组织的数据泄露有关。幸运的是,修复已经发布,但每个人都可能需要一段时间才能将其应用到自己的系统中。

这种“bug”(没有更好的术语)之所以如此危险,是因为它不是某种超复杂的、自我变形的、门萨级的巨型病毒。事实上,它根本不是病毒或bug。它只是利用了OpenSSL某些版本的“心脏出血”部分中被忽视的编程错误。

在这种情况下,代码漏洞允许互联网上的任何人读取运行易受攻击的OpenSSL软件版本的系统的内存。据卡巴斯基拉丁美洲实验室研究中心负责人德米特里·别斯图热夫(Dmitry Bestuzhev)介绍,解决方法非常简单,包含在OpenSSL 1.0.1g版本中。

“然而,”Bestuzhev说,“如果一些企业无法升级到补丁版本的OpenSSL,系统管理员可以使用-DOPENSSL_NO_HEARTBEATS密钥重新编译OpenSSL的库和二进制文件。这两种方法都可以暂时解决问题。”

将此推断到未来的智能对象,它们将使用与今天的硬件相同的互联网协议和平台,这意味着它们也会存在同样的漏洞。由于物联网将拥有数量级更多的对象和巨大不同的智能水平,允许访问内存位置和允许更改读/写内存位置代码的编码错误尤其危险。

不幸的是,根据别斯图热夫的说法,由于没有完美的编程,它们总是可能以这样或那样的形式存在。而且真的没有具体的中和策略,比如可以用来对抗病毒的那种。通常,这些类型的编码异常会在代码、程序、操作系统等公开之后出现,因为它不是在编译或测试期间引发标志的错误或错误代码类型。

然而,在开发过程中有一些方法可以缓解这些问题。据别斯图热夫说,当被问及如何将这种编码错误最小化时,尤其是当无数新对象继承了某种程度的智能时,他回答说:“关键在于渗透测试和审计。然而,这些过程需要时间和人力资源,而且总是有成本相关,这是底线……仅仅依靠善意是不够的。资源需要分配给基金和必要的工作人员来完成这项工作。当意识到这一点并付诸实施时,我们可能会减少像Heartbleed这样的问题。然而,重要的是要注意,‘更少’并不意味着‘根本没有’。”

深入一点- OpenSSL 101
SSL代表安全套接字层,它是为运行UNIX的服务器处理加密和身份验证的层。“开放”部分指的是可以免费获得、不受限制地访问的UNIX源代码,世界上大多数服务器都在UNIX源代码上运行。这在UNIX世界中非常常见,几乎所有的代码和项目都可以免费提供给任何人——程序员和黑客都可以。因此,理解UNIX操作系统的人很容易了解代码的功能。

OpenSSL是在互联网上保持个人信息隐私的一种非常流行的方法。数以百万计的网站使用OpenSSL来保护您的用户名、密码、信用卡信息和其他私人数据。然而,测试表明,一个人可以完全匿名地访问这些数据,没有迹象表明它曾经被访问过。在这条路线的某个地方,这应该是一个警钟,但显然,它只是在雷达下溜走了,直到它被利用。

术语heartbleed,在OpenSSL中是两个服务器准备建立安全连接时发生的握手的别名(在这个节点上,有人可能会说这似乎有点难题)。这也是两台计算机用来确保它们仍然在线的验证过程。验证的过程是这样的:

每次在主机和客户端之间交换数据时,都会设置一个“心脏出血”例程。部分原因是,在传输之前,要进行验证检查,以确保服务器正在侦听,并且客户端是有效的。如果返回验证,则发送心脏出血数据。这个过程会重复,直到所有的事务数据都发送出去;事务完成,连接终止。但是,如果在交易过程中,其中一台计算机被关闭、爆炸、发生地震或其他危机导致传输中断,则心脏出血失去同步,并指示另一台计算机终止交易。这是为了防止打开的连接在事务失败时处于在线状态,从而受到攻击。实际上,这个过程相当简单,多年来一直是公认的做法,每天在全球数百万台计算机上执行数百万次。

代码说话
在这个快速讨论中,启动心脏出血、提取数据、传输数据并验证交易的实际Linux代码不是必需的,但如果你对此感兴趣,请访问以下URL:
http://blog.existentialize.com/diagnosis-of-the-openssl-heartbleed-bug.html/

事实证明,所有这一切的根源代码都很简短。它是:memcpy(bp, pl, payload);这行代码是合法的,如果不受干扰,它会准确地完成它应该做的事情。问题是代码可以通过改变有效负载数据而被“愚弄”。事实证明,通过编程设计,pb位置是存放敏感数据的位置。

定义变量

  • “memcpy”是一条指令,它告诉计算机将数据从一个内存位置复制到另一个内存位置
  • “pb”是服务计算机上将复制客户端数据的位置。
  • “pl”是来自客户端计算机的数据,作为heartbleed事务的一部分发送。
  • “payload”是一个定义pl大小的数字。

而一般的概念是未使用的计算机内存是空的。实际上,它通常不是。一旦计算机启动并运行内存,读/写就是一个持续的事件。一般来说,内存总是充满了数据。它可能是旧数据,例如以前交易中的个人数据。它也可以是部分难以理解的数据,因为其中一些数据被覆盖了,或者只是一些完全断开连接的随机数据。但这毕竟是数据。为什么这样工作是因为它是不高效的计算机不断擦除内存当他们完成了。相反,它们只是设置一个标志,告诉操作系统当前在这个内存位置中的是旧数据,并且可以覆盖。但在计算机使用该内存之前,无论里面有什么都将保留。 And, in this case, it becomes the target data of hackers.

也就是说,一旦建立了心脏出血事务,从客户端pl获取的数据就会复制到主机位置pb中。Payload表示数据块为XX字节,即pl数据块的大小,并在主机上设置了一个保留空间,因此保留的内存块大小与pb完全相同。当代码执行时,它获取客户端pl位置中的数据并将其复制到主机pb位置。然后,它将数据从主机返回到客户端,作为心脏出血事务的一部分。

这是黑客获取敏感数据的地方。黑客与一台主机发起一个交易。这可能是一个合法的登录,也可能是一个被黑客攻击的登录。不管怎样,结果都是一样的。例如,黑客可能会将pl数据设置为零,并将有效载荷编号设置为,例如64 kb(它可以是限制内的任何值)。然后事务被启动,而不是pl数据逐个覆盖pb数据(记住,在合法的事务中,pb和pl块的大小是相同的),主机端没有任何内容被覆盖,返回的数据是主机pb内存块中的原始数据。

在某些情况下,正如前面所讨论的,它可能只是垃圾。在其他情况下,可能是前一个用户的数据,包括密码或信用卡数据。因此,如果策划了一次有组织的攻击,在现实中,入侵者可以挖掘数百万个剩余数据,即使其中大部分可能是胡言乱语,但其中一些是有价值的。

因此,通过外推,这些和类似类型的缺陷可以传递给物联网(物联网)对象编码。为了避免这种情况,随着互联网的发展,下一代互联网对象将必须具有更严格的编码意识和更高级别的自主防火墙。

进入物联网
看看编码如何影响新兴物联网的智能对象,会带来一些有趣的挑战。信息互联网上的物体与物联网上的物体之间的主要区别在于,今天的大多数物体都是人机交互设备。管理它们,无论以何种方式,都是通过人类控制完成的——有些是恒定的,有些是周期性的,但关键是今天,大多数设备在大多数时候都是由人类监控的。我们让他们做我们想做的事,如果出现安全漏洞,我们就用人类的智慧来解决。这并不是说这些安全漏洞无法摆脱我们,但我们迟早会发现它们。

物联网被设想为由相互连接的物体组成的网络。从办公用品到私人飞机,一切都将在网上展示。有些只是在小型蜂窝网络上进行报告和响应(例如,家里的picocells)。另一些则通过互联网进行复杂的双向交互通信。

这些物件的复杂程度会有很大差异。更简单的,如门窗NC/NO报警接点可能只是报告一个状态,只需要一个简单的低位控制器。另一方面,随着设备复杂程度的提高,像汽车这样的复杂物体将拥有复杂的mcu或mpu,可以与功能强大的多核高端智能设备和计算机处理器相媲美。由于对象的范围极其广泛,应用程序的范围也同样广泛,管理它们的安全性似乎是一个难以克服的挑战。

结论
别斯图热夫对未来方向的看法和许多互联网安全专家一样。他说,展望未来,“你不能相信任何东西,即使是在可信的连接上,因为一切都可能是脆弱的。”这充分说明了随着互联网的变化,该行业所面临的挑战。

他接着说:“所有的代码,甚至是开源的代码,都必须经过审核。”

“有时攻击的代价可能相对很低,但影响却非常高,比如心脏出血。”即使端点是最薄弱的阶段,也必须解决任何平台上所有可能被利用和数据泄露的层。”

最终,随着越来越多的物体开始集成智能,未来的物联网开始成型,这一点和无数其他现有和潜在的漏洞将创建一个比现有信息互联网复杂得多的安全模型。而这仅仅是个开始。



4评论

罗伯特Cragie 说:

一些评论:

“在这种情况下,代码漏洞允许互联网上的任何人读取运行易受攻击的OpenSSL软件版本的系统的内存。”

这并不像能够“读取系统的内存”那么简单。更好的说法是,它允许未经授权的读取系统内存中通常无法读取的部分。稍后你会解释的。

“推算到未来的智能物体,它们将使用与现在硬件相同的互联网协议和平台,这意味着它们也会存在同样的漏洞。由于物联网将拥有数量级更多的对象和巨大不同的智能水平,因此允许访问内存位置并允许更改读/写内存位置代码的编码错误尤其危险。”

它们可能使用相同的互联网协议和平台,但受限制更大的设备不太可能使用完全相同的平台,因为代码太大了。此外,许多系统会锁定可以使用的密码套件,并简单地拒绝协商早期弃用的密码套件。支持它们的代码根本不存在,从而减少了整个代码的数量。这在今天的Web上并不是一个真正的选项,尽管随着系统迁移到更安全的密码套件和弃用旧的密码套件,这种情况正在发生变化。

SSL代表安全套接字层,它是为运行UNIX的服务器处理加密和身份验证的层。

SSL/TLS是所有提供HTTPS数据(绿色挂锁)的服务器的协议。OpenSSL是用于为UNIX服务器提供此服务的最常用库,但它可以用于任何类型的服务器。当然还有其他SSL/TLS库可用,包括专有的和开源的。使用专有库并不能保证代码不太可能有错误。事实上,有人可能会说,随着越来越多的人关注开源,漏洞就会被更快地发现。任何人都可以自由地分析开源代码,如果人们真正关心安全问题,他们应该要么组建一个团队来分析代码,要么从提供商那里获得可以保证代码的替代方案,这将(如果存在的话)相应地花费高昂。这就是别斯图热夫的结论。

“开放”部分指的是免费提供、不受限制地访问UNIX源代码。”

没有所谓的“UNIX源代码”。代码是用C语言编写的,可以在任何操作系统上编译。

这在UNIX世界中非常普遍,几乎所有的代码和项目都可以免费提供给任何人——程序员和黑客都可以。因此,对于理解UNIX操作系统的人来说,很容易看到代码的功能。”

如上所述,这是一把双刃剑;它还允许更早地发现错误。

“OpenSSL是一种在互联网上保护个人信息隐私的非常流行的方法。数以百万计的网站使用OpenSSL来保护您的用户名、密码、信用卡信息和其他私人数据。”

SSL/TLS仅用于保护客户端和服务器之间传输的数据。它不是用来保护服务器上的数据。这一点应该说清楚。“心脏出血”漏洞确实允许访问内存中暂时包含这些信息的部分,但这并不等同于说OpenSSL保护了数据。

术语heartbleed,在OpenSSL中是两个服务器准备建立安全连接时发生的握手的别名(在这个节点上,有人可能会说这似乎有点难题)。这也是两台计算机用来确保它们仍然在线的验证过程。”

术语是“心跳”,在RFC 6520中有描述。“Heartbleed”是给这个漏洞取的一个具有讽刺意味的名字!Hello交换中的初始握手是能力交换,而不是实际的心跳交换。这只在进行身份验证之后发生。所以没有难题。

每次在主机和客户端之间交换数据时,都会设置一个“心脏出血”例程。部分原因是,在传输之前,要进行验证检查,以确保服务器正在侦听,并且客户端是有效的。如果返回验证,则发送心脏出血数据。这个过程会重复,直到所有的事务数据都发送出去;事务完成,连接终止。但是,如果在交易过程中,其中一台计算机被关闭、爆炸、发生地震或其他危机导致传输中断,则心脏出血失去同步,并指示另一台计算机终止交易。这是为了防止打开的连接在事务失败时处于在线状态,从而受到攻击。实际上,这个过程相当简单,多年来一直是公认的做法,每天在全球数百万台计算机上执行数百万次。”

心跳只是一个定期执行的保持活动的交换。如果任何一方离开,心跳交换将失败,连接将关闭。

“问题是,代码可以通过改变有效载荷数据而被‘愚弄’。”

这种欺骗实际上是通过在数据包中设置不一致的长度(即大得多,高达64K)来实现的,而实际的数据缓冲区的长度是被回显的。问题是没有检查这种不一致性。如果它已经被检查过,那么心跳就会像预期的那样工作,并且补丁确实会检查并在不一致的情况下丢弃数据包。这将导致代码盲目地接受该长度作为分析中的“有效负载”参数,从而读取发送的缓冲区以外的内容。这就是数据泄漏的原因——一个很好的老式缓冲区溢出。正如你所说的那样,额外的数据回读可能只是垃圾,但当然,大量的事务将揭示潜在的越来越多的数据,密钥通常可以很容易地发现,因为它们是随机数据。

他接着说,“所有的代码,即使是开源的,都必须经过审核。”

当然,这是解决问题的唯一积极的方法。是的,这将是昂贵的。在物联网中,关键是KISS。不要输入你不需要的代码。编写的代码要小。然后就归结为代码行数的问题。在1000行代码中出现错误的概率是在2000行代码中出现错误的50%。然而,我在这里谈论的是“功能性”代码行;有时有必要增加防御性编程的代码,这正是OpenSSL心跳代码中遗漏的内容。在这里,使用模式进行编码是有帮助的,因为可以围绕功能代码应用安全技术和框架。 The key is still to reduce the amount of functional code.

罗伯特Cragie 说:

当我往回读的时候,我注意到一个可能的误解:

这种欺骗实际上是通过在数据包中设置不一致的长度(即大得多,高达64K)来实现的,而实际的数据缓冲区的长度是被回显的。

我应该说的是:

这种欺骗实际上是通过设置数据包中的长度与要回显的数据缓冲区的实际长度不一致(即大得多,高达64K)来实现的。

为仓促发帖道歉。

国立 说:

我想这个动作应该叫“心跳”,而不是“心脏流血”。见"为什么叫心出血虫http://heartbleed.com/.(和Bestuzhev的修复设置DOPENSSL_NO_HEARTBEATS)。“Heartbleed”是该漏洞的具体名称。

URL 说:

[引用]…

[…]关于该主题的信息:www.es-frst.com/新利体育下载注册heartbleed-and-the-internet-of-things/[…]

留下回复


(注:此名称将公开显示)

Baidu