#1 楼
银行和银行雇员的比喻您打电话给银行要求一个新的银行帐户,进行约会-随便什么。您和银行以某种方式确保您是您的身份,而银行实际上就是银行。这是TLS流程,可确保您与银行之间的连接安全,并且我们假设此操作已正确处理。
剧中的角色
银行:Web服务器
银行员工:该服务器的OpenSSL服务
您(银行抢劫犯):机器人从服务器上获取的所有信息
保持联系-心跳
银行员工接听您的电话。您要求一些信息。员工说要等一分钟,然后禁用麦克风。他可以听到你,你不能听到他。那就安静了。需很长时间。您开始怀疑他是否挂断了电话。所以你说“你好?”指示员工回声您说的任何内容,并回复“你好”。这是检查是否仍然存在连接的心跳。
现在有了这个特殊的银行职员,您需要先问一下要使用多少个单词,然后再询问该职员是否仍然在线。因此,您不必说“ hello”,而是要说“ one:hello”或“ two:hello there”。现在,员工知道他可以通过重复这两个(第一个)单词来答复,然后可以继续按您的要求进行工作。这是心跳协议。
问题-伤心欲绝-不检查返回的内容
好吧,你很无聊,开玩笑。您说“千:你好”。员工不会检查您是否只说了一个字(打招呼),而是先打“打招呼”再回答他说的,想过的或记忆中的下一个999个字,然后再放麦克风。这是导致问题的错误。
那999个单词无关。其中大多数将无用,有关天气,对咖啡的要求,午餐约会的要求等。其中一些可能是有关银行或其他客户的重要信息。运送黄金,客户要带来100万美元,进入银行的密码或保险箱等。另外,您可以一遍又一遍地执行此请求-员工不会抱怨,而且没有其他人会注意到发生了什么。
有一个限制。您将仅从该一位银行员工那里获得信息,并且仅获得他所谈论或考虑的内容。其他员工不受影响。您看不到他的书桌上或rolodex中的物品。 (类比:仅内存(RAM)中的数据有风险;硬盘中未读入内存的数据以及来自其他程序和进程的数据是安全的。)
这样做不会知道您将获得什么信息,但是反复进行很长时间后,您将获得足够的信息,最终可以在没有人注意的情况下闯入。您可以在下班后进入银行,打开保险箱等。这是所涉及的风险。
解决方案-检查请求并更新代码
如果员工想一会儿,他只会用一个字回答,然后禁用麦克风,这样您就无法再听到他正在讨论。通过进行此检查,您将保持联系并知道该员工没有挂断电话,但不再听到任何随机信息。实际上,员工需要有关回显内容的新说明。通过更新到最新版本的OpenSSL可以解决此问题。
银行将不得不更新进入银行的安全密钥和保险箱,因为尚不清楚有人是否拥有旧密码。
评论
我想说的是,即使是一个小学生也能理解...。该死,我只能投票一次...
–地牢猎人
2014年4月10日17:52
重要的一句话是“有些可能是有关银行或其他客户的信息”。如果该员工是多任务处理人员,并且要处理来自许多人的查询,那么他可能会告诉您他们的数据,并且以相同的方式告诉他们您的数据。不幸的是,您不知道他在对谁以及他可能将您的数据提供给谁的信息。
–安德鲁·利奇(Andrew Leach)
2014年4月15日在6:21
#2 楼
XKCD的这个怎么样?我找到的最“非技术性”的解释。
评论
我既是技术人员,又是视觉人员。我可以说这是对Heartbleed的最好解释:简洁却包含任何人必须知道的所有内容。
–李凯文
2014年4月17日下午4:36
#3 楼
我将不得不使用一些技术术语,但是将尝试使它们降至最低并对其进行描述。TLS和加密的基本介绍
您(客户端)转到使用加密(地址以
https://
开头)的网站(称为服务器)进行加密,因此您和另一端的网站都无法知道您正在发送或接收的消息的内容。因此,当您的邮件在Internet上的计算机之间传输时,它们会被加密-它们称为传输层安全性(TLS),它是一种加密协议。一种实现TLS的库是OpenSSL(TLS是SSL的较新名称,但两者的意图相同-加密Internet上的网络流量)。 什么是心跳-受损的TLS功能?
要建立TLS连接,需要进行相对昂贵的协商(这需要时间)。客户端和服务器之间必须相互交换一些消息,然后它们才能相互信任并安全地来回发送加密的数据。为了获得快速响应的体验(并最大程度地减少服务器负载),您希望在可能的情况下很少执行此协商,而不是在每个请求之前都进行(因为您通常会在几分钟之内通过现代交互式网站执行数百个请求)。事情变得复杂,互联网上的数据包经常丢失或损坏。服务器可能会被太多的请求所淹没,并且需要丢弃其TLS连接的末端。否则客户端可能已关闭其浏览器窗口,因此服务器无需继续存储其加密连接的末尾。
因此,在2012年,在OpenSSL中实施了一项提案(称为“心跳”),以在客户端和服务器之间发送“保持活动”消息,以减少两端仍在使用连接时的协商次数。客户端定期问网络服务器“您还在吗?”和Web服务器(如果仍然存在),答复以告知是否仍然存在,或者将来的请求是否需要新的TLS协商。
Heartbeat Extension的工作方式
客户端发送心跳消息,该消息由客户端选择的有效负载以及包含有效负载大小的简短标头组成。例如,您可以发送大小为
18
且文本为This is my payload
的心跳请求(尽管通常它将是随机选择的数据)。 Web服务器收到该请求,将有效负载的内容保存到Web服务器的内存中,并保存客户端告诉它的有效负载18
的大小。然后服务器发送“保持活动”响应返回到客户端,该库从存储有效负载的位置开始读取内存的接下来的
18
个字符,并将其发送回客户端(由其检查是否收到了正确的数据),然后连接保持生命。 OpenSSL中的Heartbleed缺陷
致命的缺陷(已被称为Heartbleed)是OpenSSL库从未检查Heartbeat有效负载大小是否与要发送的实际负载长度相对应。无论有效负载的真实大小如何,都允许用户输入最大65535(64 KB)的数字。如果攻击者发送的心跳请求说大小为
65535
,但是有效负载只有18个字节长,则易受攻击的服务器将在内存中仅存储18个字节。但是,响应将从存储的18个字节开始,然后继续将下一个64KB内存中的数据发送回客户端。这些数据可能是用户名和密码,私钥,用户名,HTML页面,随机垃圾,甚至是网络服务器用来建立其身份的私有机密。 (在1.0.1g及更高版本中实现的OpenSSL修复程序本质上是按照客户端的指示对有效负载大小执行健全性检查。)攻击可以重复多次,并且通常会发现每次都在Web服务器的内存的不同部分。对于典型的Web服务器配置,可以以不可检测的方式匿名进行攻击。通常,只有在为网页提供服务时才记录IP地址,但是这种攻击可能会在提供任何网页之前在易受攻击的版本的协商过程的早期发生。
客户端攻击
它还有一个反向版本,其中连接到恶意TLS服务器的用户将信任从恶意服务器发送的保持活动请求,该服务器谎称其保持活动有效负载的大小。这将导致Web浏览器最多泄漏64KB的信息到Web服务器。 (当然,要获取有用的信息会更加困难,并且无法匿名完成,必须由客户端选择转到该网页来启动。但是,如果您使用受影响的版本。)
补救措施
使用OpenSSL的客户端和服务器的补救方法是对其进行更新。运行使用易受攻击的OpenSSL库的Web服务器的系统管理员需要撤消其秘密TLS密钥并生成新的TLS密钥(并使长期存在的会话令牌无效)。客户应在可能已泄漏的受影响网站上更改其密码。对于客户,lastpass发布了一个令人难以置信的检查工具,用于测试站点是否(1)当前易受攻击,(2)先前经过测试易受攻击,或者(3)可能易受攻击(使用unix / linux网络服务器和TLS,可能表明已使用OpenSSL(最初在unix / linux系统上使用),可以帮助确定是否需要在给定的网站上更新密码。
SSH不是TLS,因此SSH密钥是安全的
SSH(代表安全外壳)是UNIX和Linux计算机上的常用工具,允许用户远程登录到计算机并发出通过加密网络传输的命令。 SSH是与TLS完全不同的协议(答案说是SSL,但这只是TLS的旧名称-这些术语通常可以互换使用)。即使OpenSSH(最常见的SSH实现)和OpenSSL具有相似的名称,但由于Heartbleed攻击,您的SSH密钥也不易受到攻击。
只有进行TLS加密的进程中的内存才可以通过Heartbleed攻击泄漏。 (进程是应用程序正在运行的实例的计算术语。)现代操作系统实现了进程隔离,可以防止进程读取或写入分配给同一系统上其他进程的内存。因此,与xkcd.com/1353相反,您不必担心计算机的所有内存都受到损害,而只需担心Web服务器进程(或反向形式的Web浏览器)的内存。其他进程(ssh,sshd,ssh-agent)使用的诸如SSH密钥之类的秘密不会被泄露,因为您也在Web服务器中使用了TLS。
为了完整起见,我应该提到此漏洞应该影响所有可能使用OpenSSL库执行TLS的事物,而这不仅限于Web服务器。例如,FTPS服务器(而不是SFTP),电子邮件服务器,数据库服务器可能都容易受到漏洞攻击,具体取决于配置。编写易受攻击的代码而不验证有效负载大小的同一个人是TLS Heartbeat扩展的同一作者(在RFC 6520中进行了描述)。请注意,该协议未指定“心跳”响应的最大大小(同时指定了最小大小),但允许该长度为任意长度,并让有效负载大小由两个字节的标头描述(允许其最大达到65535,而不是仅仅255个(带有1个字节的标头),该标头仅会暴露255个字节以下的Web服务器进程的RAM)。老实说,我想不出任何合理的理由要求心跳有效载荷长于16个字节(128位),如果您想成为超级偏执狂,则可以将其设置为32个字节(256位)。由于这些限制,泄漏很多可用信息的可能性很小。
很好奇的是,易受攻击的代码可追溯到2011年除夕之夜,这似乎很可能使某些事情无法通过,或者由于假期而受到较少的审查。
评论
感谢您的出色解释,并明确指出SSH不受影响。最后的阴谋曲折-锦上添花!
– SPRBRN
14年4月10日在10:42
-1:这是对上述问题的可怕回答。非技术娴熟的用户没有机会听,更不用说理解其中的10%。
–迈克尔·伯格沃德(Michael Borgwardt)
2014年4月11日10:57
@MichaelBorgwardt可能是正确的,但是对于那些有技术但对网络技术一无所知的人来说,那是极好的
–Richard Tingle
2014年4月11日,12:57
是的,这是对Heartbleed的一个很好的解释,但不是针对非专业人员。
–轨道轻赛
14年4月13日在19:19
这应该是公认的答案,非常深入而且内容丰富……地狱,我11岁的女儿读了它,明白了他在说什么……
–爱媛
14年4月14日在15:34
#4 楼
用非常简单的英语说:攻击者说他们正在发送一个大小为“ x”的数据包,并要求服务器将其发送回去,但实际上是发送了一个更小的数据包。 OpenSSL库信任攻击者,将小的实际数据包作为答复的开始发回,然后从内存中获取数据以将答复填写为预期的大小。这可以是服务器最近处理的任何数据,并且通常包含敏感信息。评论
用更简单的术语来说,不可信的输入被认为是可信的。
–椭圆视图
2014年4月10日15:29
@Elipticalview哦,是的,“小鲍比桌子”,我们叫他。
–科尔·约翰逊(Cole Johnson)
2014年4月11日下午0:46
#5 楼
此示例对话框-也许您既是字符,又是让他们问您的问题:Q1:您最喜欢的颜色是什么(1个字)
A1:蓝色
问题2:您最后一次去哪里度假(2个字)
A2:去法国
问题3:您开什么车(1000个字)
A3:沃克斯豪尔·阿斯特拉。芝士汉堡。明天我要去伦敦。我喜欢蛋糕。哦,松鼠。我的密码是1234。我喜欢小鸡。太空人昨晚我吃了意大利面。 BUD WEIS EEEEERRRR。等等等等等等
最后一块主要是垃圾,但是里面可能有一些好东西。
评论
那真的是我的思路...担心或什么!
–富有的布拉德肖
14年4月15日在16:39
第三个问题应该是Q3而不是Q2吗?
– daviewales
2014年4月19日在12:51
#6 楼
这是一种尝试,几乎完全不使用行话。 -pocus,并且您俩都得到一个秘密密钥(例如一个很长的随机密码),可以使用该密钥彼此发送加密消息。每次重做整个轨迹非常昂贵,因此网站和浏览器仅使用相同的键进行一段时间。由于该网站不想保留每个访问者曾经使用过的每个密钥的列表,因此发明了一种称为心跳的协议。只要您仍在浏览,浏览器就会不时地向网站发送一条消息,说HEARTBEAT,这表示“我还在这里,请紧握我的钥匙”。该网站回复了“建议”的内容。如果该网站一段时间未收到您的任何心跳声,则可能是您已转到其他网站并扔掉了为新空间腾出空间的钥匙。实际上,心跳确实可以还有一件事。您可以将任何您喜欢的文本与它们一起发送,网站将使用完全相同的文本进行回复。为什么这样做的方式对我来说还不太清楚,我想这是为了让您的浏览器可以检查是否发生了有趣的事情(例如错误的文本返回或文本以错误的顺序返回),并让您知道有人
因此,您的浏览器会不时发送诸如“ HEARTBEAT,带有5个字母的文字,HELLO”之类的消息,然后网站会回复“建议5个字母,HELLO”。文本几乎可以是任何东西,例如当前日期和时间。您可以根据需要发送一首诗。
令人毛骨悚然的错误是,如果您发送诸如“ HEARTBEAT,1000个字母,CHEESE”之类的消息,则如果网站使用名为OpenSSL的程序进行加密,则会出现严重错误。而且,OpenSSL是最常用的用于在互联网上进行加密的程序。它应该做的是注意CHEESE有6个字母,而不是1000个字母,并且抱怨。相反,它将读取您的消息并将其写入到其内存中的某个位置。然后,它会回复“建议那1000个字母,...”,并从它存储您的CHEESE的任何位置开始从其内存中读出接下来的1000个字母。因此,您可以听到它内存中接下来的994个字母是什么,这实际上可以是任何东西。这可能是网站的秘密密钥。这可能是一首诗。可能是其他客户的密码和信用卡详细信息。可能是一只猫的照片。它是完全随机的,但是每次您发送这样的HEARTBEAT消息时,您都会看到网站内存中不同的随机部分,因此,如果您只是经常重复您的HEARTBEAT,那么您迟早会遇到一些有趣的事情。 br />
可能发生的最糟糕的情况是,您找回了网站的主密钥,这些密钥通常在新访客进入该站点时用于启动场所。如果这样做,从理论上讲,您可以阅读每个人在站点上所做的一切,就好像根本没有加密一样。每当有人登录时,您都会清楚地看到他们的密码。那不是一件好事。
评论
如果攻击者从Web服务器窃取了“主密钥”,他们仍然必须a)捕获往返Web服务器的所有流量,或b)进行中间人攻击,将所有流量传递给他们而是拥有自己的“代理”服务器,以便能够阅读每个人在站点上所做的一切。从最终用户到Web服务器(m-i-t-m或真实服务器)仍将进行加密,并且除了窃取了“主密钥”的攻击者之外,所有人之间的用户通信都是安全的。
– MattBianco
2014年4月10日在11:11
确实如此(尽管我没有在文本中提及它,但也有+1理由使用完美的前向保密性)。对于原始问题中提到的目标受众,我需要认真考虑如何在这种情况下解释mitm攻击。
–user16214
2014年4月10日在11:52
之所以这样做,是为了让您清楚地表明他们已经确认了您的心跳。您已经为他们提供了一些独特的有效负载,它们可以将这些负载还给您,但是您无法从其他任何来源获悉,您可以肯定地说连接仍然有效。
– corsiKa
14年4月16日在21:52
@MattBianco除非他们实际上已经窃取了纯文本root用户名和密码,否则在这种情况下,他们只需要使用ssh即可,服务器就是他们的。
– corsiKa
14年4月16日在21:54
@corsiKa,他们将如何窃取root密码?为什么root完全可以使用ssh和密码身份验证登录?那真是愚蠢!
– MattBianco
2014年4月17日12:16
#7 楼
我将使用一两个三个技术术语,即“心跳”,“错误”和“网络服务器”。我希望这不会吓到您的非技术朋友。在许多地方,都有相应的规定要问“嘿,你在听吗?你能告诉我我刚才说的吗?”在不同的情况下,这种技术有很多不同的名称,有时甚至在主流媒体中出现-“ echo”是一种,“ ping”是另一种,并且在广泛使用的软件中存在严重的错误。是“心跳”。这种特殊的“心跳”方案实际上并未在许多应用程序中使用,但是由于总体思路如此有用,因此许多计算机都允许使用这种方法。错误:取决于“我刚刚告诉你什么?”有人问,它可以被欺骗去尝试重复比对方实际发送的内容更多的内容,并用网络服务器碰巧知道的随机内容填充其余内容。通过以一种棘手的方式询问,可以使具有以下错误的Web服务器告诉他们几乎所有的信息,包括用户密码和(来自处理此类信息的Web服务器的)敏感数据,例如信用卡号,电子邮件内容等。不要止步于此,甚至其他计算机可能用来冒充这些Web服务器的秘密也受到威胁。这不仅限于Web服务器,而且任何使用Internet的人都可以与之联系。但是,计算机安全人员现在正忙于处理可能会受到影响的许多计算机和许多不同的软件。
评论
这很好,但是我会说:“当我回答“我刚刚告诉你的最后一千件事是什么?”这个问题时在只说了1件事之后,它粗心地回答了那件事和它正在考虑的999件事。
– AShelly
2014年4月10日在21:18
当然。麻烦的是,如果我尝试包括所有这些详细信息,在我不知道它之前,我将先尝试解释有关位和字节以及十六进制计数(为什么是999?为什么不是0xFFFF?)...
–金字塔
14年4月10日在21:51
是的,但没有描述无效的长度请求,似乎每个无辜的心跳都会泄漏数据,而不仅仅是恶意数据。这似乎是一个很大的区别,但并不是太技术性。 (如果需要,请省略具体数字。)
– AShelly
2014年4月11日15:07
@AShelly我已经编辑了答案,以表明并不是每个心跳都会泄漏数据,尽管仍然不在谈论数字。当然,现在我想知道您最初的主张是否会更好!
–金字塔
14年4月11日在16:27
#8 楼
当您访问使用“ https”的网页时,您与Web服务器之间的连接将被加密。该保护层称为SSL或TLS。此实现的基础组件具有安全性问题-导致为网页提供服务的服务器“泄漏数据”(即向攻击者披露内存内容)。此数据的泄漏方式有一些限制,但它非常严重,可能会在易受攻击的服务器上公开各种数据。来自易受攻击的服务器的数据泄漏,还显示了如何防止数据泄漏:
https://www.youtube.com/watch?v=UjkK22VBzjA
#9 楼
新的类比:想象您要打电话给该银行,询问其某个办事处是否已营业。您得到一台在线机器(臭名昭著的“英语,请按1”夫人),它询问您要了解多少银行,以及哪些银行。然后,您说您想要65,000家银行的营业时间,但只提供单个银行的代码。该机器认为它需要提供65,000家银行的时间,但是由于您只给出1个银行代码,因此它将用它能找到的任何东西填充其余的代码:随机帐户的银行对帐单,信用卡号和代码,钥匙图片为了安全起见,经理当时与他的医生进行了讨论,...并没有意识到其他数据无关紧要,并且您应该只为1家银行提供营业时间。
旧答案:
想象一下您的银行有一个系统,您可以在其中发送安全请求以获取借记卡的当前密码,然后系统返回一个密码和一个银行卡号。该系统会进行更新,您可以在其中发送要重置的卡列表。
您发送了65535张借记卡列表的重置请求,但只能传递1张卡号。您的银行不会只退还那张单张卡片或抛出错误,反而会从其他随机用户那里退回65,534张其他卡片的现有代码。
评论
如果您不满意,请至少说明原因,以便我可以根据需要进行编辑。我个人认为这是一个相似的概念:您向服务器发送格式错误的请求,服务器将不应该发送的数据发送回去。
– Nzall
2014年4月10日上午11:28
不是我的不赞成,但您的答案与解释发生的事情并不接近。也许这个答案对您的祖母有用,但这是不同的听众,即使要求提供非技术性答案。
– SPRBRN
2014年4月10日上午11:40
问题是“我想向我的非技术朋友解释什么是Heartbleed”。 OP希望为不擅长计算机的人提供非技术性的解释。在这种情况下,仅通过解释概念就不会走那么远。您需要类比。我可以使用相同的规模和相同的风险为受影响的用户创建的最好的类比之一是使用银行帐户数据。我意识到对于普通观众来说这是远远不够的,但是我认为它对于不知道SSL,心跳或内存是什么的人更合适。
– Nzall
2014年4月10日上午11:45
好,请阅读Jimbob的答案。然后修复您的。假设请求是由人而不是计算机处理的。处理此问题的银行员工不会发送这64k卡的代码,但会发送他正在处理的所有内容,例如经理的注释,电话交谈,笑话等(但仅适用于该64k)。该人处理的任何事情。通过一遍又一遍地执行此操作,您可以了解正在发生的事情,程序如何工作,特别是什么安全程序,并由此可以假装自己是该银行的员工。
– SPRBRN
2014-4-10 11:50
您的示例的另一个问题是,它与实际请求有关,而心跳只是打给银行的电话,以查看它是否已打开。
– SPRBRN
2014年4月10日上午11:58
#10 楼
想象一下您从未读过的书,然后又不知道内容,因为书已关闭,令人流血的错误,只是随机打开页面并能够从书中读取文本的一种方式。提取足够的信息后,您就可以复制该书并将其放在庇护所中,而无需任何人注意。该书可以是您的计算机或服务器。
那是我给非技术人员的最简单的解释。用电子锁关闭一本书,该书就是您的个人日记。您是唯一拥有钥匙的人,因此您也是唯一能够读取和写入钥匙的人。 2秒。
通过这样做,您将能够阅读全部内容,并最终在以后对其进行修改。
#11 楼
就是这样。您正沿着街道行走,经过银行的入口,在他出门时遇到一名自闭症专家。他看起来像个好人,但您却不是,您知道您可以将他用于邪恶的目的,因为您已经看了足够多的电影,了解到专家可以保留和重复大量数据,并且通常都很谨慎,也是。
所以,你问他时间。他告诉你时间,但禁不住继续讲话。他会告诉您在他在那里时耳目一新的每个银行帐号和密码。
这些信息现在由您掌握。您所要做的只是要求时间,因为凭借他的病情,这位智者无法阻止自己告诉您更多的信息。他没有意识到的是,由于花了点时间来解决您的邪恶目的,既然您知道可能发生的事情,您就要求的也超出了预期。
。
评论
-1不解释如何获取信息
–user36976
14年4月13日在19:27
@Nick:这是个比喻。没有技术细节。按照要求。如果您需要技术细节,则可以在Internet上找到它们。
–轨道轻赛
14年4月14日在6:07
评论
Heartbleed使攻击者可以匿名下载服务器的随机内存。这意味着他们可以获得未加密的密码和保护您帐户的低级加密密钥……更不用说攻击者可能能够访问网站的任何部分(或您发布到该网站的数据)您可以让他们观看youtube.com/watch?v=rE5dW3BTpn4
最简单的解释方法:xkcd.com/1354
我喜欢MaciejCegłowski在Pinboard博客上所做的解释:blog.pinboard.in/2014/04/heartbleed_and_pinboard
与最近5万个Windows未检查的缓冲区长度攻击相同,这仅证明了它不仅仅是Windows。