TranslateProject/translated/The Debian OpenSSL Bug- Backdoor or Security Accident.md

62 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Debian OpenSSL Bug - 后门还是安全事故?
======================================================
周一Ed 写了篇文章《软件透明度》[1],主旨是如果软件开发的过程是透明的,那么软件对恶意的后门(以及无心的安全漏洞)就更具抵抗性。
软件透明的因素包括公开源代码,可以读取或为一个项目的追踪议题做出贡献,以及参与内部开发讨论。他提到一种情况,在这儿我想详细讨论一下:
2008年Debian项目一个用于web服务器的很流行的linux发行版宣称[2]Debian中OpenSSL[3]的伪随机数生成器遭到破解,已经不安全了。
首先了解一些背景信息伪随机数生成器PRNG就是一个程序假定代号为F。给定一个随机种子s则会得到一个长的比特流F(s),看起来像个随机数。如果我和你都使用同样的种子s两个人会得到同样的比特流。但是如果我随机选择一个s也不告诉你s是什么
你根本不能够推测F(s)的结果如你所知F(s)也是随机的。OpenSSL中的PRNG试图从系统中抓取不可预测的信息"熵",比如当前进程ID
或者很有可能是不同的内存内容比如由其它一些进程控制或可能控制的未初始化的内存等等。把这些东西转换成种子s就会得到随机比特流F(s)。
2006年为了解决一个用于查找软件内存存取bug的工具[5]的警告问题[4]一名Debian维护者决定注释掉[6]OpenSSL PRNG里的两行代码[7]。
但是这两行代码非常重要它们负责抓取几乎所有的不可预测的熵以作为OpenSSL PRNG的种子。没有这些代码PRNG只有总共32,767个选择可作为种子s因而也只有这么多的F(s)供选择。
这样一来很多依赖于OpenSSL随机数生成器的程序其实并没有它们以为的那么多的随机选择。比如一个这样的程序要为SSL安全网络浏览和SSH安全远程登录生成秘钥。严格来说这些秘钥必须是随机的如果你可以猜到我的秘钥
你就可以破解我使用该秘钥保护的任何东西。这意味着你有能力读取加密的通讯信息,登录到远程服务器[8],或者伪造看起来似乎是真实的信息[9]。
这个漏洞是2006年第一次引入而且进入到Ubuntu中[10](另一个流行的linux发行版广泛应用于网络服务器)。漏洞影响到数以千计的服务器而且
存在了很长一段时间[11],因为只是给受影响的服务器打补丁还不足以解决问题,必须替换掉任何在漏洞存在情况下生成的秘钥。
顺便说一句,为伪随机数生成器寻找熵是个著名[12]的难题[13]。事实上,在今天来看要解决这个问题依然是个巨大的挑战。随机错误难以检测,
因为当你盯着输出看时,每次运行程序结果都不一样,就像随机的一样。弱随机性很难发现,但是它可以使(貌似)安全的加密系统失效。
不过Debian中的那个漏洞很醒目被发现后在安全社区[15]引起了很多嘲笑[16]。
于是有人问,这是个后门,故意设置的吗?似乎不大可能。做出这个更改的代码维护者 [Kurt Roeckx][17]后来成为Debian项目的主管。这意味着他是个可靠的家伙
不是为了插入漏洞而由NSA伪造出来的身份。想进入Debian项目组的核心需要做出巨大的努力那真是出了名的难进。
这样看来,错误根本不是有意为之,而是一系列失误导致的,而且后果严重。
漏洞确实是在一个透明的环境下发生的。所做的任何一件事都是公开的。但是漏洞还是引入了,而且长时间未被注意到。部分原因在于,透明引起了很多混乱,导致本应发现这个显而易见的漏洞的人们也都没太在意。
另外,也因为漏洞本身太过微妙,一个随意的观察者很难发现修改带来的影响。
这是否意味着软件透明没什么帮助? 我可不这么认为。许多人都赞同透明软件要比不透明软件更安全。但是这也并不表示漏洞不会产生,或者认为有其他人都看着呢而我们自己就可以掉以轻心。
至少,多年以后,透明可以让我们回顾,究竟是什么导致了某个漏洞--本文例子中,就是工程上的纰漏,而非人为破坏。
---
via: https://freedom-to-tinker.com/blog/kroll/software-transparency-debian-openssl-bug/
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
译者:[l3b2w1](https://github.com/l3b2w1) 校对:[jasminepeng](https://github.com/jasminepeng)
[1]:https://freedom-to-tinker.com/blog/felten/software-transparency/
[2]:http://www.debian.org/security/2008/dsa-1571
[3]:https://www.openssl.org/
[4]:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=363516
[5]:http://valgrind.org/
[6]:http://marc.info/?l=openssl-dev&m=114651085826293&w=2
[7]:http://svn.debian.org/viewsvn/pkg-openssl/openssl/trunk/rand/md_rand.c?rev=141&view=diff&r1=141&r2=140&p1=openssl/trunk/rand/md_rand.c&p2=/openssl/trunk/rand/md_rand.c
[8]:http://www.exploit-db.com/exploits/5622/
[9]:http://plog.sesse.net/blog/tech/2008-05-14-17-21_some_maths.html
[10]:http://www.ubuntu.com/usn/usn-612-1/
[11]:http://cseweb.ucsd.edu/~hovav/dist/debiankey.pdf
[12]:http://xkcd.com/221/
[13]:http://dilbert.com/strips/comic/2001-10-25/
[14]:https://factorable.net/weakkeys12.extended.pdf
[15]:http://www.links.org/?p=327
[16]:http://www.xkcd.com/424/
[17]:http://www.roeckx.be/journal/
[18]:http://lists.debian.org/debian-devel-announce/2009/02/msg00009.html
[19]:http://research.swtch.com/openssl