2016 年谷歌开源了这些超酷炫的项目

原文链接: http://top.jobbole.com/35954/

开放源代码软件让 Google 能够无需重新发明轮子就能够快速有效地进行开发,也让我们能够集中注意力来解决新问题。我们知道,支持开源,就是站在了巨人的肩膀上,所以 Google 员工能够轻松地将他们在内部工作的项目作为开放源代码发布。

我们已经发布了超过2000万行的开源代码,包括 Android,Angular,Chromium,Kubernetes 和 TensorFlow 等项目。 我们的版本还包括许多您可能不熟悉的项目,例如 Cartographer,Omnitone 和 Yeoman。

回顾我们在 2016 年开源的项目,有很多令人兴奋的事情。 我们发布了很多开源软件、硬件和数据集,来看看今年的一些版本。

 

负载均衡系统 Seesaw

Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的。

Seesaw发布的博客中这样写道:“我们需要能够处理单播(unicast)和任播(anycast)虚拟 IP (VIPs) 流量,使用 NAT 和 DSR (也被称为 DR) 执行负载均衡,执行针对后端的健康检查。特别是,我们需要一个容易管理的平台,可以自动部署配置的变化。在评估了一些包括现有的开源项目的平台之后,我们没能找出一个能够满足我们所有需求的平台,所以我们决定自己着手开发一个可靠和可伸缩的负载均衡平台。”

它让我们提高了服务可用性并降低了管理开销。我们很高兴能够把它分享出来,希望其他企业也能够从中受益。

 

供应商安全评估调查问卷 VSAQ

VSAQ (Vendor Security Assessment Questionnaire,供应商安全评估调查问卷)是一种能够自适应式评估多种供应商安全和隐私防护策略的评估调查问卷。

我们每年对数百家供应商的安全性进行评估,因此开发了 VSAQ 来自动化大部分初始信息的收集。许多供应商发现我们的问卷直观灵活,所以我们决定分享出来。 VSAQ 框架包括四个可扩展的问卷模板,涵盖Web应用程序,隐私程序,基础设施以及物理和数据中心安全。

http://static.cnbetacdn.com/article/2016/0309/baa75ec0cfcb2de.png

 

Nest开源的Thread协议 OpenThread

Nest 开源的 OpenThread 是基于其 Thread 协议实现的,通过 6LoWPAN 标准连接的智能家居网络。OpenThread 的开发由 ARM,微软,高通,德州仪器和其他主要供应商支持。

OpenThread 是 Nest 主要负责的,而不是 Thread Group。通过 OpenThread,Nest 希望将Nest 产品中所用的技术在更多供应商和制造商中广泛采用,以加速智能产品家居网络产品的开发进展。随着越来越多的供应商运用 Thread,制造商可以有机会选择一个成熟的网络技术,而不需要创建它们自己的产品,消费者将会有越来越多安全可靠的相关产品可以选择。

 

创作艺术和谱写曲子的机器智能 Magenta

我们可以使用机器学习创造引人注目的艺术和音乐吗?Magenta 可以帮你实现,它是 Google Brain 团队建立的一个基于 TensorFlow 的项目,目的是提高音乐和艺术生成的机器智能的艺术水平,并建立一个艺术家,程序员和机器学习研究者的协作社区。

点这里听听谷歌人工智能的第一首歌曲

 

普通耳机实现 VR 中的 3D 全景音效 Omnitone

虚拟现实(VR)并不像没有空间音频一样沉浸,而且许多VR开发都是在专有平台上进行的。 Omnitone 是一个开放的图书馆,由 Chrome 小组成员为浏览器带来空间音频。Omnitone 基于标准的 Web Audio API,提供身临其境的体验,可以与 WebVR 等项目一起使用。

原理图:

Google发布Omnitone ,为VR音频制作带来了什么改变?

 

实验记录应用 Science Journal

今天的智能手机有很多传感器,可以告诉我们周围的很多有趣的事情。通过这款应用,你可以利用你手机中的各种传感器来测量您的环境,如光和声音,因此您可以绘制您的数据,记录您的实验,并组织您的问题和想法。让手机成为一个强大的研究实验室。

我们推出了 Science Journal 是为了帮助教育工作者、学生和公民科学家利用这些传感器。

 

ROS 系统支持的 SLAM 库 Cartographer

Cartographer 是一个利用ROS系统支持的 2D 和 3D SLAM(simultaneous localization and mapping)库。 这个库库组合来自各种传感器的数据来计算定位和地图环境。

SLAM 是众多自动驾驶平台的重要组件,比如自动驾驶汽车、仓库中的自动叉车、扫地机器人、UAVs 等。在产业界和学术界常见的传感器配置上,Cartographer 能实时建立全局一致的地图。

文章部分内容编译自:opensource.com

copyright template of MIT type

####################### MIT License #######################
# Copyright (c) 2015 Simon Huang
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
###########################################################

如何阻止下一次心脏出血漏洞

转载自: http://blog.idf.cn/2014/07/how-to-prevent-the-next-heartbleed/#vulnerability-economics

原文:How to Prevent the next Heartbleed.docx

翻译:赵阳

一、引言

基于OpenSSL的心脏出血漏洞被认为是CVE-2014-0160的严重问题,OpenSSL被广泛的应用于SSL和TLS插件上。本文用对心脏出血漏洞的解释来说明这个漏洞是怎么被利用的。

本文中研究了抗心脏出血漏洞及其相似漏洞的专用工具和技术。我首先通过简单的测试来分析为什么很多的工具和技术不能发现这些漏洞,这样可以使我们更能了解到为什么之前的技术不能发现这些漏洞。我还要概括总结要点来减少这些的问题。本文不介绍如何编写安全软件,你可以从我的书《Secure Programming for Linux and Unix HOWTO》或是其他的著作中学习到这点,本文中认为您能开发软件。

我的目的是为了帮助防止类似漏洞的出现,从而提高安全软件的开发能力。正如Orson Scott Card’s Ender’s Game中的虚幻人物Mazer Rackham所说的“这里没有老师,只有敌人…只有在敌人那里你才能了解到自己的弱点。”让我们来了解这些漏洞,然后可以避免相似的漏洞再次出现。

二、为什么这个漏洞不能更早的被发现?

这个OpenSSL漏洞是由一个很熟悉的问题引起的,这个关键的问题就是缓冲区读溢出,由于不正确的输入导致。这些都是很常见的问题,很多的工具是专门用来查找这方面的问题,会使用很多工具对OpenSSL进行定期检查。

Kupsch和Miller专门查找了心脏出血漏洞,在这个漏洞被发现之前,使用了很多的方法也没有发现这个漏洞,虽然很多人和工具都用来查找类似的漏洞。他们进一步认识到“心脏出血漏洞对当前的辅助软件提出了重大的挑战,而且我们不知道是否有工具能在这个漏洞被发现之前被使用。”我会强调一些其它的问题和我自己的一些观点。

2.1 静态分析

在没有执行这个程序时的静态分析。

最常用来寻找漏洞的静态分析工具是source code weakness analyzers,source code security analyzers, static application security testing,static analysis code scanners 和 code weakness analysis tools。每个源代码分析工具是通过使用类型匹配的方法来寻找漏洞的。有很多的报告可以评估这些工具。

然而,在之前的时间里使用静态分析工具没有发现这个漏洞:

1、Coverity:Coverity没能在心脏出血漏洞公布之前发现这个漏洞。他们正在通过努力来提高他们的工具的质量,从而在将来能够发现相似的漏洞,使用了一些有趣的新启发方法。

2、HP/Fortify: HP/Fortify已经公布了一些心脏出血漏洞的描述,但是我没有任何的证明能说明他们的静态分析工具在漏洞公布前就发现了这个漏洞,在漏洞被公布后,他们确实是更改了他们的动态测试软件包,但是和之前的不同。在专门讨论这个问题时,他们没有证据让我相信他们的工具真的在心脏出血漏洞被公布之前就发现了这个漏洞。

3、Klocwork: Klocwork在正常的配置下没有能够侦测到这个漏洞。

4、Grammatech: Grammatech 的CodeSonar同样没有侦测到这个漏洞。他们也是通过实验来提升能力,以便在以后能够发现相似的漏洞。

最主要的争议就是这些工具都不能保证能够发现所有的漏洞,甚至不能保证发现特定类型的漏洞。很糟糕的是这些术语很混乱,所以我们首先要搞清这些术语的意思。

本文中在分析软件时,使用的工具不能找到所有的漏洞,但是我找到了这个分析软件的不足。在以前的文章中,很多人使用unsound来描述那些不能找到所有漏洞的来查找漏洞的工具。例如Bessey等人在分析Coverity的静态分析工具,并且说:“像PREfix产品,我们也使用unsound。”我们的产品并没有证明说这是没有错误的,而是尽我们的能力来发现这些问题。这项研究工作中存在很大的争议,虽然它几乎已经成为商业软件和研究项目的实际工具基础。一个unsound术语会导致混乱,因为人们使用program checkers,它使用术语unsound来代替不同的意思。在一个博客上解释了为什么相同术语会有两种相互矛盾意思。“大多数的program checkers来证明定律的程序。特别情况下,主要的目的是在某个方面来证明程序的正确性。一个定律的证明是来证明这个定律的正确与否…人民在程序检查过程中习惯了使用这种做法,所以他们没有考虑bug的存在。但是一个bug的发现者不是要证明这个程序是不对的,而是用来证明有bug存在,使得他们报告了发现的bugs,它们就都变成了真正的bug,如果没有错误,将会忽略bug,因为他们不能证明是否正确。”

本文中我使用了NIST SAMATE SATE V Ockham Sound Analysis标准来消除混乱,在NIST SAMATE用语中,工具是不能发现所有漏洞的,从而证明程序是不完备的。下面来说明NIST是怎么区分程序的可靠性和完整性:“一个网站的代码可能会出问题,一个有bug的网站会有一系列问题,这就是说一些输入会导致问题。一个没有bug的网站不会出现一些列问题,就是说它是安全的或是没有漏洞的…这些可以从一个网站的报告中得知。或者说,一个网站有特殊的问题或是一个网站没有问题…可靠就意味着每一个发现都是正确的。没有必要使用工具产生每个网站的报告;这是完整的。”

为什么那么多的源代码分析工具是不完整的?首先,大多数的程序语言不是很容易能被分析的。其次,大多数的软件使用静态分析工具来分析也是很不简单的。最后,完整的分析工具要求更多的人来应用在程序上。相反,不完整的分析工具能够立刻应用到程序上。他们成功的使用启发的方法来鉴定漏洞和在有限的时间里来完善分析。但是,这里会有重要的警告:不完整的代码分析工具常常会漏掉漏洞。

心脏出血漏洞是一个鲜明的使用不完全的启发方法不能发现的重要漏洞的例子,不能发现这个重要漏洞的最主要原因就是OpenSSL代码很复杂;多个层次的间接寻址和超出了工具的分析能力,从而不能发现漏洞。局限性和深层次存在的原因是C, C++和Objective-C都很难使用静态分析;像指针更难使用静态管理。这并不是意味着静态分析工具就是没用的,静态分析工具能够测试软件在大量的输入后的表现,工具的启发原理会限制错误报告的出现次数。但是更重要的是不完整的静态分析工具使用了启发原理后,在分析大的漏洞时会出现错误。

2.2 动态分析

动态方法就是使用特定的输入来运行一个程序并试着发现漏洞。

动态分析局限性是它不能使用时间表来测试任何程序。如在一个琐碎的程序中加入了64bit的整数,会有2128种可能的输入,测试这些输入就要使用13.5十万亿亿年的时间。甚至大规模的并行计算也不能解决这个问题。现实中的程序要比这复杂的多,因此动态方法不能体现一个程序的安全性;他们只能显示在测试中存在漏洞。

但是这并是意味着动态方法就是没有用的。动态方法在提升安全性上是很有用的,但是要了解到他们的局限。

让我们来分析我们广泛使用的两种方法,但是不能发现心脏出血漏洞: mostly-positive测试和fuzzers。

2.2.1 mostly-positive自动测试套件

一个方法是开发一个强大的自动化测试套件。Eric S. Raymond和一些其他人在研究心脏出血漏洞时,他的表述为:“我认为很多人都认为这个测试套件不能很好的工作…我以前学到了尽量去推进传统方法来完成你不能达到的程度。”我同意他的观点,一个好的自动化测试套件是很强大的,特别是应用于非安全性缺陷时。如果你没有或是开发一个,就完全的停止,我们表示同意。

但是,测试套件能否发现心脏出血漏洞要依靠你是怎么开发的这个套件。很多的开发人员都开发了测试套件,这个套件主要是我说的“mostly-positive”测试套件,它可能不能发现心脏出血漏洞。后面我将会讨论negative测试,这种测试方法可能会有作用,但是我们要知道为什么一般的测试方法不能做到。

很多的开发者和组织者专门测试了正确的输入时会发生什么。当你这样思考时就更有意义;一般的使用者都会抱怨在正确的输入时是否会没有正确的输出,并且大多数的使用者不会测试在不正确的输入时程序会有什么结果。如果你的目的是很快的分辨出问题,在大多数的情况下,在正确的输入时人们会努力控制能够预测的错误条件。很多的开发人员不能思考到当入侵者发送精心设计的输入来利用程序时会发生什么。

我会使用mostly-positive测试套件的方法来测试在正确的输入时会发生什么。不幸运的是,在很大程度上,今天的软件入侵测试套件都是mostly-positive。都在关注开发mostly-positive测试套件的测试。

1、Test-driven development(TTD)是一个软件开发过程,“开发者写了一个自动测试工具来提升和增加新的功能,之后使用最少数量的代码来通过测试,和最终生成新的代码的接受标准。”通常情况下这些测试是用描述一个新功能要做什么,而不是他们不能做什么。

2、当很多的标准链接在一起,交互式测试就会决定他们是否能够链接和分享数据。交互式测试能够很好的帮助开发者来提高一个协议标准。但是其他的实施方法也能遵守这个规则,其他的实施方法不能够完成“什么不发生”的测试。

mostly-positive测试实际上对于安全软件来说是没有用的。mostly-positive测试一般不能测试正确的事物。对于心脏出血攻击和其他的攻击,攻击者发送数据用不是平时用的格式。TTD和交互式测试都是好工具…但是你需要加强他们来改善安全软件。

代码覆盖工具对漏洞的发现没有任何的帮助。一个开发者可能会运行代码覆盖工具来看下哪些程序没有被测试,之后增加测试来达到大部分的代码被测试。当测试套件测试了80%-90%的代码时,很多人会很高兴;一般很少会达到100%的覆盖。测试覆盖工具有某种安全价值,例如,他们有时能够侦测到等待出发者的恶意软件,他们也能够核查是否有特别的程序能够正确的运行。但是使用典型的代码覆盖工具测试到100%的覆盖,不能对抗心脏出血漏洞。心脏出血漏洞缺少恰当的输入验证。基本上,一个代码覆盖工具不能注意到丢失的代码;只能注意到没有测试的代码。

我要说在OpenSSL里也不会有例外出现,又如在苹果的iOS设备上运行SSL/TLS得到了错误的结果时,也能通过mostly-positive来证实它的测试。在这个漏洞中,SSL/TLS库接受了有效的证明。然而,没有人验证这个库能拒绝某些无用的验证。如果你只是测试是否有效的数据会产生有效的结果,你就不能发现安全漏洞,因为大多数的攻击都是在基于程序没有准备好的时候输入。

如果你开发的套件能使用我在下面描述的方法,你能够通过一个好的测试套件来发现这个漏洞。首先,让我们来研究fuzzing。

2.2.2 Fuzzers 和fuzz测试

Fuzz测试是一个随机输入,之后发送到程序测试去看是否出现不渴望的过程。进行fuzz测试的软件叫Fuzzers。

Fuzz测试同传统的测试不同,在传统的测试过程中,你会有一个给定的输入组,并且你知道每个输入对应的输出情况。传统测试会随着测试数据的增加而变得更复杂,因为你要预测渴望的输出结果。决定输出想要的输出结果是一个Oracle机制。使用一个Oracle的数据作为输入的问题被叫做Oracle problem。

Fuzz测试处理不同的Oracle problem,因为它只是在试图侦探能使程序崩溃的问题。这就是使它在Fuzz测试中输入更多的测试数据,即使输出测试更不准确。Fuzzing测试方法是1988年Barton Miller在University of Wisconsin开发的。在http://pages.cs.wisc.edu/~bart/fuzz/上有更多的有关fuzz测试的信息。

Fuzzers经常用来发现安全漏洞,因为他们能够测试大量不可想象的输入。特别是,Fuzzers常用来发现输入验证的问题,心脏出血漏洞就是在输入验证错误的基础上产生的。但是典型的Fuzzers不能发现心脏出血漏洞,因为:

1、心脏出血漏洞是由于缓冲区读入溢出,而不是缓冲区写入溢出的漏洞。大多数的Fuzzers只是发送大量的数据和寻找程序的崩溃。但是,当缓冲区写入溢出常常会导致崩溃,缓冲区写入溢出在正常的环境里是不会崩溃的。在Fuzzing过程中,甚至会使用一些对策来解决写入溢出,而不是读入溢出,如canary-based保护方法和非执行堆栈。可靠性不是很大的问题,因为存在方法是出入溢出导致崩溃,或使用其他的测试工具来测试…这会给我们带来第二个问题。

2、OpenSSL包括它的内存分配路径,并且除非使用特别的调试方法,不然我们会经常使用他们。更糟糕的是这些特别的方法不能正常工作。特别是,OpenSSL使用它自身的应用程序管理缓存来提高性能时,而不是简单的依靠内存管理路径。这种应用程序管理缓存可以阻止许多典型的缓存例程,包括测试工具如electric fence、valgrind和address sanitizer。这就意味着使用fuzz测试来测试缓存的路径问题时,测试会忽略一些特殊的情况。

因为加密技术能在很大程度上减少fuzz测试的无效性,除非fuzzer有密码和专门用来袭击的密码库。有一些fuzzing不能在OpenSSL和一些密码库下严格执行的推测应该是正确的,然而,没有什么能阻止密码被fuzzers获取。除此之外,心脏出血漏洞甚至在没有密码的情况下被发现。因此,就是在读出溢出和OpenSSL使用自身的内存缓存分配路径的联合使用时,使fuzzing变的无效。

三、用什么来对抗类似心脏出血的漏洞?

这里有部分在先前可以对抗心脏出血漏洞的软件和工具,我会特别的介绍一些好用并且免费的自由开源、源代码软件。

首先是一些说明:

不要只用一种工具或一种技术来开发安全软件。开发安全软件要集合很多的方法,最开始要知道怎么开发安全软件。大多数的组织最初是使用简洁清晰的方法来开发安全软件,启用和注意编辑器的警告标志,使用源代码弱点分析工具,让多人进行研究,运行fuzzers,使用大量的自动入侵工具套件。如果你只是使用一种技术,你只能对抗上一次攻击而不是这次。例如,会大量的忽略掉警告标志,即使是警告标志不能发现心脏出血。那就是说,当攻击成功时,最重要的是怎么完善软件,攻击者可能如使用一样的方法来入侵软件。更好的改进也能对抗其他的攻击。

这不存在一种类型的工具和技术的列表,不同的工具有不同的用途。可以在[BAH2009] [NIST]上了解更多关于各个类型的工具和技术。我创建了这个特别的列表,但是我要尽量清楚我的意思。

先前没有一个明确和完整的用来发现心脏出血漏洞的工具和技术的列表,我很想做一个,我希望得到更好的建议。

以上是一些说明,先前是什么在对抗这个漏洞的,为了完成这个,我已经大致的完成了这个列表,用最简单的方式介绍他们。这是最粗略的,会有一些问题;欢迎来改进。使用更多的方法来对抗其他类似漏洞,不只是心脏出血。使用动态和静态分析法来识别在括号里的副标题。

3.1 使用negative测试(动态分析)

negative测试会得到错误的结果。例如,对于一个设置了密码的系统来说,在知道有效的用户名和密码时,要通过很多次的回归测试才能登录成果。negative测试会显示很多无用的用户名和密码,其他的无效的输入会阻止用户登录。

通过negative测试方法创建了一系列的使用错误输入的测试。我指的是每个类型的输入,因为不能测试每一个输入,在动态测试中能得到解释。在回归测试工件中要包含无效数值来测试每一个输入,每个状态/协议转换,每个使用说明书等等。这就会立刻发现心脏出血漏洞,因为心脏出血漏洞包含一个不正确数据的长数值。这也会发现其他类似CVE-2014-1266的错误,如在苹果iOS上使用SSL/TLS会得到的错误。在CVE-2014-1266中,iOS存在接受无效认证的问题。很多的测试中存在有效的认证…但是,没有足够的测试来测试无效的认证。

在大多数情况下只有negative测试对安全还有点用途,之前,我注意到重要的是如何创建测试套件。对于阅读本文来说是明显的,特别是,当我怀疑Eric S. Raymond在讨论测试的优势时使用这些类型的测试。但是这对于软件的开发者来说是明显的,大多数的开发者和组织者都是在使用mostly-positive test套件。很多的开发者很难像攻击者一样的思考,只是错误的通过广泛的测试不可能发现的原因。

通过negative测试的就是起初的半自动的过程,您可以开发出可以执行计算机可处理的规范,并生成大量测试结果的工具…之后看看是否可以控制它。

另一个使用negative测试的重要条件就是是否有一个标准,可能合作开发一个独立的普通测试工件作为FLOSS项目。之后可以通过快速测试所有当前和以后要执行的方法,并且阻止使用者遇到问题。我强烈的推荐使用SSL/TLS协议开发一般目的测试工件;不然会减少效果,这会增加应用的安全性。单独的应用也需要使用附加测试来补充单一测试,但是一般的大测试套件是很有用的。

软件测试是一个完整的领域。存在着不同类型的测试方法和测试范围标准。我只能在本文中总结测试。更一般的信息可以看下Paul Ammann and Jeff Offutt 的Introduction to Software Testing。但是要理解这个:只用使用有效的输入来测试来发现这多的问题,如心脏出血漏洞。

我不知道在整个negative测试中依靠什么,或是其他什么单独的技术,对于安全来说。动态的方法很自然,在真实输入空间只能测试一个微不足道的部分。但是这种方法很容易发现安全漏洞。

3.2 地址核对和标准内存分配在fuzzing

不幸运的是一般的fuzz测试方法在这种情况下是不能很好使用,但是我们可以学习简单的过程。如果可以使fuzzing对一系列的地址进行有效果的、容易的核对和使用。这种类型的工具能侦测到在执行过程中读溢出和加写溢出,并且常常发现其他的存储问题。

许多的工具能够完成对地址的核对;每一种工具都有两面性。但是,如果你没有使用其他的什么工具,我强烈的建议你尝试下address sanitizer。

address sanitizer简单有效;它只是一个在LLVM/clang和gcc中建立的附加的标志。address sanitizer没有什么神奇的;它只是擅长侦测缓冲区的读写溢出问题,释放后使用或是双重释放。它也能侦测到use-after-return和存储泄漏。它不能发现所有的存储问题,但是这是一个很好的工具。它的表现超出平均的73%,使用2x-4x的存储。这种表现一般和测试环境是无关,在侦测这些问题时它很少被提到,在测试过程中Chromium和Firefox网页浏览器都使用的address sanitizer。要了解更多可以去看USENIX 2012或是address sanitizer网页。

还有其他的工具能够侦测内存的使用和分配地址的问题。很多人使用guard pages来检测读和写在缓存。Valgrind被广泛使用和广受欢迎;valgrind在检测内存时能发现很多的问题包括在堆栈中读溢出。另一个广泛使用的工具是electric fence。在运行不同的fuzzer时可以使用不同的工具。

一般情况下,使用fuzz测试时你必须打开你能打开的所有的探测设备。第一个fuzzer侦测时使用这种机制“没有改变的程序崩溃或是死掉?”并且很多的fuzzer还只能做这个。你必须要加强程序的访问,并且要开发尽可能多的访问。你可以增加额外的核对来确保中间和最终程序语句的正确。要不是心脏出血漏洞的出现,你至少应该打开无效的内存访问探测器,如address sanitizer。

许多的工具包括address sanitizer和基于程序的guard page,要求这些程序具有测试正常分配和释放内存的能力。特别是,程序没有必要使用符合分派准测的机制。至少,这个程序应该可以轻松地使用正常分配方法用于fuzz测试。

一个相对的方法是concolic测试,CREST就是一个基于C的concolic测试的自动测试过程工具。但是CREST目前只能用于象征性为线性整数的运算,所以它能在这种情况下工作。更一般的是现在的concolic测试工具不可能发现心脏出血漏洞。如果哪个人说他确认concolic测试发现了心脏出血漏洞,请让我知道。

大家一直都在为fuzzers是否比negative测试复杂而争论不休,但是这只是我的推理。negative测试的一个优点是它很容易入手;假设你已经有了一个测试套件,你就可以开始negative测试。更重要的是negative测试能快速给出一个模糊导致问题的答案,他们要求计算能力很少的开发者使用每一种方法来获得重复测试套件。相反,fuzz测试要求更好的计算能力和对结果的解释;计算能力不算什么,这会影响到对开发者的反馈速度。一个潜在的更快negative测试的反馈能够是开发者更快的实现检测和修复;今天最大的问题就是开发者的时间,而不是计算时间;一个最好的机制能减少开发过程的复杂度。你也可以在某个特定的协议下,使用negative测试套件;你能够在每个测试设备和实施方法中轻松的重新使用测试套件。当然,这不存在什么冲突;最好使用fuzz测试和negative测试两种方法。

3.3 编辑内存分配标准和使用address guard或是sanitizer

如果在对抗来自潜在的漏洞攻击,在未知的环境里你现在就要使用一个程序怎么办呢?

一个方法就是使用侦测在分配的内存的最后区域来实现读的机制,但是使用这种方法你不能改变测试怎么运行;这个观点就是你实际上用的在一个分配要求下的多重分配机制。

存在运行时间侦测漏洞的多种机制;这就是一些例子:

1、Address sanitizer。你要重复调试一个程序时可以使用它。在LLVM/clang和gcc编辑器上Address sanitizer就是一个标志,这相对与C程序的软件简单的多,这占了平均运行的73%,和2x-4x的存储。这不是你想只能手机上做的,很多繁忙的网站不欢迎这些。现在的计算机比过去的有更好的能力和存储,一些环境中就会被接受…这就是你能够立刻对抗未知攻击的可能性。Address sanitizer在侦测一长系列潜在问题上很有作用,包括大量无效的缓冲区访问。Address sanitize不是在所有的编辑器里都无效;这要在其他的如C, C++, 和Objective-C编辑器中来添加它。

2、Intel Memory Protection Extensions。MPX新增了叫边界寄存器的寄存器来控制指针的边界,使用新的指令来运行和使用边界。MPX使用Skylake架构,但是在2014年这些CPU不能和公众见面。这要更长的时间被广泛的得到使用,那不能组成non-Intel系统。

3、内存分配保护页面。一些系统内存分配能够在分配一个用来组织读和写的内存后,添加一个未定的保护页面。这些能否会禁止和阻止心脏出血漏洞,这些取决于它是如何实施的。OpenBSD的malloc的实施支持保护界面。在OpenBSD中,G选项会导致“使用保护页面后的每个页面分配到的数据大小过大,这些会导致访问错误。”这会与P选项进行组合来移动一个页面内的分配。OpenBSD机制可以启动特定的程序,甚至是特定的默认情况下,在整个系统中启动,这样就可以在更多的环境下得到保护。OpenBSD的malloc机制有一个弱点:即使开启G和P两个启动项,少量的分配不会立刻完成保护页面。如果OpenBSD的保护界面机制能够在较少量的分配后立刻插入一个保护页面,我认为会更好,即使这可能会对速度和内存大小有很大的影响。但是即使是这样,开启G和P就意味着所有大于半页的分配会立刻跟随一个保护页面,并且分配一个半页或是更少将会泄漏半页。这就会明显的减少泄漏规模,相比于原来心脏出血漏洞攻击时泄露的64K。内存分配必须要对齐,所以保护页面可能泄漏一些字节的信息,这就取决于如何实施的。我怀疑Address sanitizer要比增加保护页面的分配快,但是添加保护页面不要求更多的程序来进行重新编译,这就是它的优势。不幸运的是GUN的libc中malloc不能有附加的这些功能。

当然,这种方法假设你有一个能启动(1)的内存保护机制和(2)内存保护机制也会在这种机制下工作。很多的机制可以对抗缓存写溢出,不是缓存读溢出,心脏出血漏洞就利用了读溢出。例如:GUN的libc中的malloc()可以选择MALLOC_CHECK_。这就是防止写溢出的方法,但是我不认为它能对抗类似心脏出血的读溢出。同样,Dmalloc’s fence-post检测“在程序从这个区域中读取时不能注意到,只有在写入时才会有通知。”我觉得GUN的libc和一些类似的运行过程中也要增加类似OpenBSD的malloc的保护页面机制,从而对抗读溢出。

这是一个可以减少伤害的方法,而不是一个消除个问题的办法。从安全的角度来看这种方法把缺少保密变成了缺少实用。然而在很多的情况下这是一个很好的协议。一旦受到攻击,这个方法就会使问题变成可视化的,一旦问题可视化后就变的很好改正了。

这个方法很容易和honeypot或honeynet联系在一起。在honeypot或honeynet系统上设置这些硬化的方法。如果攻击者试图破坏软件,这个软件不会崩溃,并且会记录下攻击者的重要日志和追踪记录。Forensics就会侦测到一些专门利用一日0攻击。我认为通过一些日志记录结合入侵侦测系统来进行追踪;在硬化密码库中发生了崩溃,就会特意的记录下。这就会使普遍的侦测利用一日0攻击更加的容易。分布核心基础设施组织和在互联网上其他组织都可以建立这些类保护我们。

虽然这种方法并不能完全解决这个问题,但是他能提供一个有力的缓解功能。一些发行者或组织可能需要在特定情况下使用这些措施,或至少使这些措施变得更容易。

修改代码不会很复杂,并且重新编译也是很简单的。不过,在很多的设备上性能的欠佳都体现的很显著,可能是你失去了硬件后的性能。特别是在使用Address sanitizer时,你会失去一半的速度。因此,我指望使用这种复杂的解决方法,就要考虑到硬件的消耗。在很多的情况下,会影响到运行,在智能手机上就会降低运行速度和电池的寿命,对于当前流行的服务器的话,也会减慢反应速度和增加电量的消耗。如果将来的CPU能支持Address sanitizer,对速度的影响就会显著的降低了。我希望CPU制造商能考虑下这点。

3.4 关注各个领域的手动检测验证

漏洞的代码是人为审查的,显然只有一个人来审查是不行的。

然而,大量的工作就要有专门的人来检查每个领域,为确保得到有效的验证,有时会在计算机安全中得到一个不好的名字。我怀疑的原因之一就是有时候,那些部署清单的人在做什么,之后也不能很好的利用它。但是出色的飞行员经常使用仪表盘,他们知道是做什么的。如果补丁是他们使用清单上工具后的唯一成果,“必须证明每一个不可信的数据字段进行验证,”之后这个漏洞被反击。

列入人为检查/审计的一部分,和一些简单的方法不同。然而,这确实要就检测人能了解所有的补丁,它不能依靠以前的代码来得到帮助。

3.5 对文件包括注解系统的配置源代码的弱点分析

传统的源代码弱点分析是找不到心脏出血漏洞,因为他们使用的是通用的启发式方法,代码复杂,在这种情况下不能很好的起到作用。它总是你能看到的最简洁的代码,但是基于你要完成的任务总是会有一些复杂性,真实情况下人类是不能达到完美的简约。Coverity公司正在开发一些新的,他们认为能够检测到心脏出血漏洞的启发方法…并且对他们是有好处的。至少有一个人已经使用了类似的启发方式。事实上,我希望所有的代码分析工具都能得到改善,从而发现他们以前不能发现的漏洞。但通用的启发方式在某个特定的时间点只能达到这个程度,你能做的更好吗?

回答是肯定的,它叫做为上下文配置的源代码弱点分析工具。基本思想是,你开始使用一个恶源代码弱点分析工具,之后你在提供更多的你要分析的程序的信息。这种方法比仅仅运行源代码弱点分析工具需要更多的时间,而这些额外的信息通常要和一个特定的工具联系在一起。然而,提供你需要的程序的信息,源代码弱点分析工具可以能更好的工作。

Klocwork已经表示这种方法对心脏出血漏洞是很有效的。

现在让我们来谈谈注释系统。在很多的地方来为静态分析工具提供这种额外的信息。一个常用的方法就是对程序添加额外的注释机制,在修改程序时会使用他们。这些注解可能在更改的代码中进行添加,添加在注释中,或是加在单独的文件里。使用C的工具或是注解包括Microsoft’s SAL、splint、Deputy、Oink/CQual++、cqual、和Frama-C ANSI/ISO C。你可以很容易得出添加这些信息确实是一个不同的技术。

认真的使用这些额外的注解来对抗漏洞就要有很大的工作量,如果从现存的代码来说。对于C来说存在许多不同的不兼容的注释系统。对于他们来说是没有什么标准的,这会进一步的阻碍他们的使用。毕竟,它需要添加注释和这些注释会把你锁到一个特定的工具中;Microsoft SAL会有更多的问题,没有FLOSS的应用和这只能在Windows上使用。我认为如果针对每个主要的编程语言包括C在内,任何一种单一被广泛接受的标准注释符号,注释系统将会更加广泛的应用。当没有这么个符号时,像C语言等语言就会很难得到那样一个协议。Peter Gutmann已经写了一些他的经历。

但是,注解系统是由一些好处的,注解系统能够发现简单的漏洞,不用在转变成不同的语言。他们也很少去转变成不同的语言,当然,这并不冲突;你可以切换语言,使用一种新的语言在注释系统中。

3.6 实现100%的分支覆盖率

或许有另一种方法可以发现心脏出血漏洞,实现100%的分支覆盖率。如前面所述,在一个缺失特定程序的中输入有效的验证码时,分支测试是不检测到的。但是分支覆盖可以在不同的实现方法中检测未经验证的分支程序。努力实现一个测试套件,让多个实现全覆盖分支大大增加了丢失了验证码和遗漏了异常处理时被检测到的可能性。更强的测试覆盖措施也会工作的很好,如修改条件/判定语句。

这个测试套件必须要包含多个应用,实现100%的分支覆盖。更重要的是,有不同的实现方式,效果更好。最终,用一个特别的方法来发现漏洞。此外,这种方法比其他的方法更难发现安全漏洞。可能是因为在相同的路径下输入不同的数值,但是只有小部分可以引起问题。如果在测试中其他的一种方法实施了特定的组件和实现了潜在的缺失验证码的代码,它也只能有作用。我从来没有在其他的文献中见过这个特定的方法;人们通常讨论一个执行分支的覆盖。不过,会注意到这种方法不仅可以提高能力,也能发现特殊的漏洞。

实现100%的分支覆盖率比彻底的negative测试更加复杂,这是因为如果你有个很差的测试套件,它会花费大量的时间来从一个错误的分支转向,来弄清楚怎么激发它。错过的分支往往是很难触发的在特定错误的处理系统中,或是对无法验证“不会发生”的分支作防御性设计。此外,这个套件变得更强大能够实现100%的覆盖;很多的组织不能尝试增加一个单一的方法来使分支覆盖到100%,不关心100%的分支覆盖。

这就存在一个问题:这不能很好的反击心脏出血漏洞,因为在很大程度上取决于所有的配置扩展或是注解以及怎么使用。在另一方面,它们不取决于完全冲击的正确输入;静态分析工具可以同时检测大量的问题。

3.7 攻击运行认定

软件开发人员积极的插入和开启运行认定。有人猜测这是对心脏出血的反击,所以我将在这里研究下这中可能性。

软件开发人员可以断言各种价值关系和状态必须是正确的。这些断言可以在运行时停留。几乎所有的语言都会有一种内置的判断机制,有些语言会有一些内置的先进机制的前置条件,后置条件和不变量。在某些情况下,这些语言可以优化一些判句,会留下一些在优化过程中不能优化的问题,一个注解系统可以用静态来实现,一部分可以用动态实现;我先前对注释系统的静态应用的评论。

暂时增强系统逻辑断言是一个更为先进的使用暂时断句的研究方法。你可以在http://www.cl.cam. ac.uk/research/security/ctsrd/tesla/.网站上发现更多的信息。

不用怀疑断句可以有一个极好的机制来用于检测无效状态,无效状态有时是一个最弱的指标。

然而,这中方法在涉及到对抗心脏出血漏洞时确实有些不足。不论是原开发商或是检查的人意识到检查请求报文的长度值是很重要的;因为没有使用长度检查,开发者是不能添加判据来检查它。这是一个在进行negative测试时的问题,但是negative测试可以通过分割这些要开放的功能的代码来简单的实现,很容易证明所有的数据字段都在进行检查,所以我感觉negative测试会更有可能发现存在漏洞的类型。因此,虽然积极的注释可以很有效的对抗漏洞,在某种程度上它会在特定的情况下工作。

我把这种方法看作是一个较为复杂的选择。使用这种方法可以检测到心脏出血漏洞,需要积极使用判据。增加这些判据要使用大量的开发时间和提高运行的成本。

3.8 更安全的语言

心脏出血漏洞产生的原因是C语言不包含有任何的内部检测或是方法来对抗缓冲区不当的限制。不恰当的限制会导致灾难性的问题,所以几乎所有其他的编程语言都会自动对抗不正当的限制。

如果在一个给定的程序中的漏洞可以造成灾难性的影响,那么选择它的程序语言时更应该减少漏洞存在的可能性。越是灾难性的影响,就越要有更好的表现。大多数的程序语言提供对其他危险漏洞的保护措施,如不恰当的限制保护。某些程序语言有更小的可能性出现被误用和不正确使用的结构。理想情况下,一种语言将会阻止所有漏洞。通用的语言都不能阻止所有的漏洞,但是它是编程者争取的一个目标。没有“绝对安全”的程序语言;它是一个继续发展的事物,一些语言提供了更多的对策。

3.8.1 危险语言和为什么使用他们

最广泛使用的与安全有关的软件有C,C + +和Objective-C。所有的这些语言都没有提供缓冲区的访问限制,实际上,它要通过努力来限制缓冲区读和写溢出的出现。对缓冲区访问的不恰当的限制会被广泛使用类型的灾难性的影响漏洞。使用或是转变成其他的语言将会消除缓冲区的漏洞,包括心脏出血漏洞。C语言更是这样,因为它缺乏很多可以避免缓冲区出现问题的高级结构。大多数语言也可以防止内存释放错误,可能会导致安全漏洞,以及一些语言也会被设计成对抗其他漏洞。其中在现在系统中有很多漏洞的原因之一是C、C++、和Objective-C语言的过度使用。实际上,有人提出禁止在安全性敏感的代码中使用这些语言。

C、C++、和Objective-C语言的广泛使用是有原因的。在TIOBE编程区域指数来衡量的编程语言的流行,2014年4月占到了使用人数的前四。这些原因包括更高的性能和界面简单,大型的存储,更好的表现,熟悉性。此外,把语言转变成大型程序是需要很大的努力。让我们来看看原因。

3.8.2 替代产品的运行速度和内存性能

一个经常被引用的问题是使用C,C++,和Objective-C比其他的程序的运行速度快。此外,当要和硬件连接时,其他语言就会缺乏最底层的机制。如果你要很快的速度,你可以直接连接,语言列表中的运行时间会更短。运行速度直接决定着移动设备和服务器领域。基准游戏中速度分析程序是使用不同的语言编写的。“程序语言编程的大致等级”中说到,发送数据和不同语言的包是根据他们的大致速度来实现。没有完美的基准,它始终是一个最好的衡量绩效的具体方法。不过,我更喜欢数字的大致猜测,这个数据即足够代表开始。如果性能是你要追求的,你不想使用汇编语言,可以考虑下下面的分析:

Fortran。Fortran的应用表现经常要比其他的语言好,尤其是在数值计算上。但是,我不清楚很多人会把很多的代码转变成更原始的编程语言。特别是据我所知,即使是现代Fortran也没有和低级的硬件的接口的标准机制。

Ada。Ada用于真实时间系统的应用,因此,它会有更好的性能,包括访问底层的组件。Ada可以用于对抗错误,在编译时表现的最好,它的语法是专门用于对付错误的,Ada一定能对抗缓冲区的心脏出血漏洞。很多人都不喜欢像Ada一样的语言,因为Ada要很严格的静态类型检查,但是这中检查是发现缺陷的关键机制之一。Ada一般广泛的应用在像航空铁路等这些高保障的地方。

ATS。这不是一种众所周知的广泛使用的编程语言,但是它确实非常成功的应用在特定的基准测试套件上。我要指出ATS不在最近使用的程序列表上。

还有很多其他的编程语言,特别当你愿意放弃由基准确定的速度时。例如Go的性能就很好。Rust是另一种你可以考虑的程序语言。Java在当前的JITs上有很合理的表现,一旦它运行起来,但是这有个一个特别的启动时间。其他的语言在基准下也很有用,如Scala,Free Pascal,Lisp SBCL,Haskell, C# on Mono, F# on Mono, and OCaml。不论是D编程语言还是Nimrod语言都列出了相应的标杆。但是使用他们时也要考虑到效率问题。

当然,如果速度不是关键,很多的软件都能被使用。一个研究表明,用.NET, Java, ASP, PHP, Cold Fusion和Perl来编写的程序中的静态漏洞没有统计学上差异。所有这语言要比C,C++或是Objective-C安全。因此所有人都可以防止缓存溢出的问题。

这有太多的编程语言可以使用,我就在这多说了点。我的目的不是列出说所有可以替代的编程语言,而是让人们知道是有替代的存在。

性能不单单是速度,还有内存的管理。在移动设备上尤为重要。C, C++和Objective-C没有自动垃圾收集器,但是其他的语言有这个功能。开发人员如果不考虑内存管理时,他们考虑的是效率,但是在很多的环境下是不现实的。Drew Crawford对移动设备的发展做了很长时间的研究,他指出“如果你需要至少6倍的内存,自动垃圾收集工作会很管用,但是如果这里少于4倍的内存,会减少效率。”iOS基于人工操作的大多数事情的文化,并且试图让编译器做一些简单的东西。Android基于他们努力不在实践中应用垃圾收集器工作,但是不论哪种方式,当他们编写移动应用程序时,每个人都花了很多时间考虑内存管理。内存是不可以替代的。OS X Mountain Lion v10.8中废弃了自动垃圾收集器,在以后的版本中会把它删除。都推荐使用自动引用算法。不是像OS X和iOS一样。这就是人们选择C, C++,和Objective-C的原因。

C, C++, 和 Objective-C编写的程序比其他的语言的运行性能好吗?回答就是语言就被设计成这样。特别是C语言编写的程序能够快速的运行并且使用很少的内存;C语言中指出C的关键是“相信程序员”,“许多操作被定义为如何在目标机器的硬件上使用它”。另外,C的模型是透明的,所以C或是C++开发人员可以使用它,通常评估一个结构。当然,现实会有很大的差距;大量优化的编译器和运行时间要比一般的情况下有更好的性能。

很多的开发者选择C, C++,或是Objective-C来简化其他组件的接口。许多工具都有C的接口,大多数语言的基础设施都可以通过C语言的库。然而,许多其他的编程语言都有C的接口,两种方法为C路径和其他系统通过接口来调用。因此,这并不重要,重要的理由是选择哪种语言。

当使用C, C++,和Objective-C的开发人员使用这些语言时可以减少使用库的危险。最新的C标准还增加了一些安全功能,尤其是那些对字符段的处理。C标准仍然错误的提供易于使用动态调整大小函数的asprintf()或是类似的函数。但是很多现在的系统使用asprintf()。C语言也可以使用GString类型的glib库,strlcpy/strlcat提供,或是其他解决问题中的一个。C++程序可以使用std::string或是它的类似内容。类似,Objective-C具有NSString和NSMutableString类。但是这些设施只能在一定程度上降低风险;即使使用了这些设备犯了错误。

你可以用什么语言来写不安全软件。例如,SQL注入的漏洞是另一个普通弱点,而这可能使用每种语言。然而,大多数语言提供的易于使用,和避免发生问题的机制。我要很小心的使用这个机制…但是对C, Java,和其他语言来说的。

有些语言通常是通过计数器缓冲区溢出,让你暂时停止保护逃逸机制。这些逃逸机制很容易发现和与精心写的代码隔离开来。他们把不安全的隔离成很小的部分,从而降低风险。在很多情况下,你可以重新实现内存缓冲区高速缓存;你可以启动一些漏洞即使缓冲区存在保护时。但是这种重新实现是明显的,在很多的语言中,人们必须要努力避免缓冲区溢出问题。与其相反的是,在C, C++, 和 Objective-C里,你必须做一些附加的工作来避免这种问题。

创建安全软件时,也会遇到一些附加的挑战。我知道没有办法安全的擦除Java里的数据。这是因为Java里没有.NET的SecureString的功能;由于内存分配和垃圾收集器怎么实现多次拷贝,Java的结构是在结束在内存中。这不是Java的特点,很难安全擦除数据在多种语言中。但是Java中,它可以比较容易通过建立一个小的非Java模块来擦除一些数值;该程序的其余部分仍然受到保护不会出现缓冲溢出。此外,利用额外的内存拷贝需要访问大量的程序和运行环境。安全擦除往往是一个有用的减少损伤的措施。相比之下,缓冲区溢出有时候可以直接减少可以利用的连接,有时只要通过网络连接。一般情况下,缓冲区溢出要比大多数其他语言带来的问题更危险。

这很难使用C, C++, 和 Objective-C来编写安全软件。大多数的语言都可以内嵌和防止缓冲区溢出保护…但是C, C++, 和Objective-C例外。另一方面,他们使用这种原因。

开始运行每一个新的安全相关程序,就要仔细的考虑下程序语言。选择一个更安全的语言是很有必要的,这样就可以去除潜在的安全漏洞,其中包括缓冲区溢出的心脏出血漏洞。另外,计算机变得更加强大,在很多情况下可以进行交易一些性能。更重要的是,在开始编写新的程序时,使用另外一种编程语言就几乎变成了零成本。我相信用不太安全的语言时,和重写代码需要花费很多努力。但是,使用几乎任何不是C, C++,或是Objective-C,至少会消除缓冲区溢出和缓冲区溢出漏洞会有很大的影响。

我已经确定了更安全的语言作为一个更复杂的方法,因为切换一个不常用的程序,用不同的语言来实现安全是要花费很多的时间的。

3.8 完全静态分析器

一个完全的静态分析器可以被称为声音静态分析器,用来发现某个特定的漏洞。创建这些类型的工具就是在调整C语言。然而,程序有时不得不限制他们使用的架构,并且开发人员必须提供附加的注解资料。因为这些工具集中发现一切问题,他们往往会报告不存在漏洞,这就必须要分析决定是否真的存在漏洞。但是,如果它应对所有的漏洞,权衡是很有必要的。

3.9 完全认为的核对

一个完全彻底不独立的人为软件检查,主要集中在确保安全性和发现漏洞,这是发现漏洞的最佳方式。这些评论又被称为审核,在展示时,这个软件是很脆弱的。

它的观念是通过人为审核要比通过工具的启发式技术来查找漏洞更直观。更重要是实验数据证实了这一点。例如,Kupsch和Miller发现使用第一原理弱点评估方式的人为审计分析一个示例程序比使用Coverity Prevent和Fortify Source Code Analyzer更全面。人为审核也会出现意外,但是这样的评估会做的相当不错。在Kupsch实验室,FPVA人为检查发现了15个严重的安全漏洞;Fortify发现了6个,Coverity发现了1个,既不是自动化工具发现也不是由人的审查发现。

但是人工核查的缺点也是显而易见的:这需要努力和专业知识来做这样的审核,改变也要审核。人为审查不适合用于所有的软件,甚至当它在面临很复杂的情况时。

请注意,这种审核和以前的可以接受的典型的、简单的回顾是不同的。心脏出血漏洞是试图避免漏洞开发人员发现的,被另一个审核接受。然而,补丁的审核通常是是功能的改善和寻找安全漏洞的过程,所以很容易让他们错过漏洞。正如前面提到的,人为审查每个补丁来要求每个领域的有效认证,要抓住这点…但是现在代码的存在,只是审核新的补丁是不够的。试图在这一点上单独审查每一份文件的补丁可能是不符合成本效应的。此外,补丁的审核可能错过重要问题。一个单独的审核关注整个系统的漏洞是很有效的。

这种审核确实可以发现。事实上,在心脏出血漏洞被发现的同时,TrueCrypt的一个重要组成部分的安全审查发布了。

在很多情况下软件应该进行修改和简化,在审查之前。我认为对于OpenSSL是尤其重要的。那些复杂的程序都很难为工具和人为的评估。OpenSSL使用的复杂结构,这就让它很难被人和机器发现。

3.10格式化方法

但是如果你真的想在某种程度上肯定什么是这个程序要做的?存在着一系列的方法叫做“格式化方法”,这要比上面列出的技术方法更有信心。格式化的方法包括使用“严格的数学技术和工具来规范、设计和验证软件和硬件系统。”由于使用格式化方法是有困难的,他们更可能是在目前的小程序和模块上,是绝对可以使用格式化方法的。此外,如果你真的想要拥有很高的信任程序,格式化的方法仍然是实现这一信心的唯一途径。

这有很多方面可以使用格式化方法。有些人只用格式化的方法来创建规范,不会使用格式化的方法来多做什么。有些人可能会想的多一点,证明有关规范的一些声明或是改进的规范走向更具体的模型。这些方法都不会发现心脏出血漏洞。对于心脏出血漏洞来说,格式化方法要创造关于代码的证明,在源代码和可执行代码水平上,这就是我最关心的。

在关于有关代码注释的系统的实践证明,值得一提的是,注解系统通常可以在各种不同的方式来使用简化的证明。为了了解更多的信息,请参见我有关注释系统的评论。

如果你对更多的感兴趣,特别是支持格式化的FLOSS工具,请参阅从我的类的格式化方法来开发安全的软件。一个有趣的格式化方法工具套件是Toccata,它结合了Frama-C和Why3,以及许多自动化和互助工具。通过组合这些不同的工具来证明程序的正确,在比以前使用更少的努力。更重要的是,他们可以处理C的大量子集;而最正规的方法是不能做到的。SPARK 2014就是基于Ada的,但是可以让你证明相关程序的声明,以及他们最近和Toccata联系在了一起。

正式验证程序的实例中有seL4,CompCert C,cakeML,Tokeneer和iFACTS。

四、前提条件

很多的技术有重要的先决条件;让我们来讨论下。

4.1 在没有特别要求时内存分配

许多静态技术可以对抗心脏出血漏洞的缺陷,包括使用人工核查来对抗,因为OpenSSL的代码很复杂。代码只有简单了才能安全。

许多安全软件开发者首先使用“软件质量”工具来检测特别复杂的结构,然后简化这些结构,这就是安全软件的产生过程。理想的静态分析方法由于代码复杂和变得困难,实用工具来检测这些代码的复杂性,简化他们,在使用静态分析方法就变得很有效。我认为他们是对的,但是我没有发现可以支持他们的数据。因此,这似乎是一个合理的想法,但是我很希望有人最终将创建并发布一些科学研究来支持和反驳这个假设。

在任何情况下,简化的代码是超过运行工具软件的。这是一种心态,应该要有不断的努力来简化代码,不然增加运行能力就会增加软件的复杂性。代码的重构要使它变的更简单和清晰,不是不断的增加新的功能。我们的目标是代码是对的,而不是代码很复杂我们看不出问题。

过于复杂的代码通常会导致安全漏洞。2006年Debian意外事件通过修改软件来消除valgrind警告来打破OpenSSL的随机数生成器。但是,修改软件的人并不真正的了解它。那个人要求帮助,但是OpenSSL的代码复杂就很难使人找到改变后的漏洞。Cox通过研究发生并得到了以下的结论:“尽量不写偷懒的代码,写井井有条的代码。你会不可避免的写一些偷懒没有组织的代码。如果有人问到这这个问题,就把它作为代码不够好的标志。重新把它变得更简单和容易理解。”

LibreSSL的开发者使用了OpenSSL代码和专心用来简化代码。LibreSSL-一个OpenSSL的变版,介绍OpenSSL代码库的一些问题。他们正在做许多的明智的事,如去掉代码支持过时的VAX VMS系统。然而,他们删除了人们关心的代码。例如,他们去除美国政府使用的FIPS 140-2的认证,这同时也受到了许多民营企业的支持。在使代码变得简单和使代码在很多的环境中都有效之间存在着冲突,最简单的代码不能实现什么。很显然,许多程序可以变得比现在简单。

4.2 简化应用程序接口

虽然这稍微的超出了本文的范围,一个相关的问题就是应用程序接口一般情况下都比较复杂。

大多数加密库和数据传输库都是很复杂的,他们通常呈现给开发者一个“困惑矩阵的选项和设置”,因此,大量的应用程序和高层次的库使用不正确的库来进行加密,导致了系统的漏洞。大都数的问题在浏览器中工作中出现,但是他们在其他的代码上仍然是一个问题。想要了解更多的信息,请看“最危险的代码世界:在非浏览器软件中验证SSL证书。”

尽管这在SSL/TLS的使用中是一个技术而不是一个漏洞,但是他们是无关的。加密程序库是创建的复杂接口的一个组件,所以,它仍然是一个故障组件,简化代码。

一个相关问题是底层库和建立在API加密库的系统的很难使用。C忽略了像asprintf和reallocarray等功能。因此,程序员必须要解决这些漏洞,但是他们的解决方法常常会出现bug,这些bug会导致漏洞。

4.3 分配和释放内存

安全的程序必须正常的分配和释放内存,没有特别的分配系统和内存缓存系统。至少,它应该很容易禁用和测试它们来确保禁用了他们的程序。一些技术会减轻心脏出血漏洞的出现,因为OpenSSL的内存分配方式。

基本问题是OpenSSL包括未分配的内存的应用程序特定的缓存空间。目的就是要加快分配在相同数量的重复指令。在默认情况下,OpenSSL正常分配内存,但是在内存区域没有被使用时是不会解除分配的,在很多情况下,把该区域变成未使用的区域变成空闲的,来使它可以立刻重启。这个缓存列表颠覆了一些操作系统和C的运行的一些的机制,因为他们并不是总得到通知在内存不使用时。

Theo de Raadt提到:“几年前我们增加利用措施到libc malloc和mmap,这样一来更多的bugs就会暴露出来。这种存储器会导致死机,甚至是核心的崩溃。分析这些bug,之后永久的维护系统。其他的调试工具也会达到这个目的。在很大的程度上说,这基本就没有性能上的损失。但是在那个时候OpenSSL添加了malloc & free的封装,使库存在缓存中。因为一些平台的性能下降,甚至如果你建立防护技术引入malloc() 和free(),这就无效了。在所有平台上,由于选项是默认的,并且Ted的测试表明你不能关掉它。因为他们没有测试它的年龄。所以后来的bug显示了在该层的内存的泄漏内容。如果内存通过free得到了恰当的返回,这就可能被munmap捕捉到,并激发保护程序的崩溃而不是泄漏你的密码。”

似乎有很多在什么地方出来问题的困惑和OpenSSL的内存分配方法,Chris Rohlf取得了一些有益的验证。我觉得这些验证是很重要的,因为我们必须先用理解这个问题在我们修护它之前。特别是Rohlf指出OpenSSL使用的是标准的malloc() C内存分配方式,当它需要一个全新的内存块时。问题是一旦一个内存块被分配,OpenSSL自身还在自身的管理存储器。Rohlf也指出在很多的环境下是与空闲列表是无关的;一个空闲列表把不同的内存分配在了一起,但是许多典型的内存分配系统也提出了不同的内存分配。然而,Rohlf的典型的内存分配的应用来做同样的事是绝对正确的,关键是OpenSSL的实现阻碍了各种缓解措施。关于OpenSSL的内存分配系统有另一个问题,但是我们首先要介绍下一些基本知识。

一般的方法就是处理一些内存的分配和释放特例,我们的想法就是缓存和重新对某些对象和缓存器在他们没有被使用时,这中方法可以显著的提高性能。这种方法的具体例子包括专门处理共同的内存分配的大小,或是用未使用的高速缓存来重新使用对象和内存器。有一些具体的技术来做这些,包括创建一个对象池和一个slab分配器。Glib库包括一个称为记忆切片的机制,提高内存的分配性能。许多图形用户界面和程序在使用这些方法时,是没有安全感的。

事实证明,一些方法可以不用解决一些检测工具如address sanitizer和使用保护页系统。特别是使用fuzz测试的问题,如果这些工具不被禁用,则fuzz测试就会变得没有效果了。的确,fuzz测试可能不能检测到许多超出范围的读操作,在使用这些方法时。

关于OpenSSL的报告指出OpenSSL的使用是自我管理的一个交大的内存区域的方法然后在进一步细化。这是一个使用slab分配器或是储存器切片时要发生的。使用这个方法就是想要提高性能,在这些情况下使用address sanitizer和保护页系统来抑制检测完全的读溢出。旧的版本称这要发生什么。但是我已经钻研了更多的OpenSSL代码,而这似乎并没有在OpenSSL中的真实性。这对于心脏出血漏洞来说是个好消息。尽管如此,这些类型的分配方案是比较常见的,而且我知道没有人说道这些方法的风险。

安全性软件必须要避免使用内存缓存系统,尤其是那些与一种分配机制联合在一起形成一个分配请求。如果不是这样的话,他们至少提供一个简单的证据机制来禁用它们,并要使用该机制作为其回归测试套件的一部分。OpenSSL有一个禁用机制,但是不再被使用,并且在任何情况下很少有人能了解这种机制,它可以禁用安全分析工具的很多工程。

我们还需要修改我们的教育材料,是开发人员和测试人员都知道内存缓存系统会严重妨碍安全分析。在我的演讲中我已经提出了一些材料来开发安全软件,其他人员也一样需要。

从长远来看,这或许应该是使用C的标准接口在freelists缓存/ slab分配器。如果有标准的接口,你们工具可以很容易的修改和自动调解他们。

4.4 使用标准的FLOSS许可证

这是我的推测,我相信如果OpenSSL使用标准的推广的许可证来进行代码审核会有更多的贡献发生。OpenSSL使用的奇怪的变量许可证是GPL和LGPL。因为GPL是一个最常见的FLOSS许可证。在很多情况下这种不相容性是通过围绕一个许可证漏洞的,或是使用许可证除了在软件中通过使用OpenSSL。不过这个诡异的证书意味着很多人更喜欢GPL或LGPL会情不自禁的禁止或是审核OpenSSL。一些人喜欢限制较少的许可证,这些也有很少的帮助,这不是一个标准的证书。

我确实有一些证据表明非标准证书是一个问题。一个完全独立的软件包GnuTLS在最初是专门创建的。因此使用标准GPL许可证的软件能够轻易的使用SSL/TLS。OpenSSL的LibreSSL转变成了2-clause BSD许可证,当他们写了新的代码,相比与OpenSSL许可证。

在很长的一段时间了,广泛的使用FLOSS证书对FLOSS项目来说是很重要的。1999年Bruce Perens指出:“如果使用这里被列出的一个,就不用写新的许可证了。”后来Open Source Initiative创建了License Proliferation Project,指出许多许可证“和其他开源代码的许可证是不兼容的,严重的限制了开发人员的方法,开发人员仅仅是扩大开源软件的创新方式。”一个重要结果是OSI直接列出了开源代码许可证的页面,只是Popular Licenses,这是“流行,广泛使用,或是强大的社区。”

大多数的FLOSS是基于GPL, LGPL, MIT/X, Revised BSD,BSD 2-Clause或是Apache 2.0 licenses。我建议限制FLOSS程序的许可证列表。你可以添加一些;在OSI的流行许可名单包括更多。然而,这里的问题是OpenSSL许可证根本就不是一个公共无可证。更重要的是它是一个广泛使用的不兼容的许可证的非标准证书。如果可能的话,最好用一般通用的许可证代替。

五、什么会减少心脏出血漏洞的影响?

什么能减少心脏出血漏洞的影响或是完全消除?毕竟当漏洞出现,你想减少影响。下面有一些方法。

5.1 一旦标准内存分配器被替代,启用内存分配器的防御。

许多系统包括减少损坏的内存分配机制,有的有时可以发现问题。这不能对抗问题,但是能够减少影响,例如:

一个常见的方法就是内存在分配和释放时零出,这就意味着如果数据显示,这不太可能是有趣的事。

在2014.4.29,David Wagner提出了一个有趣的选择:“使用一个特定的内存分配器,它能够给每个对象一个随机的地址。在一个64位系统上,会有一个48位的地址空间,这一切都在离分配对象远的地方,这个心脏出血漏洞不会透露任何其他对象的信息。这可以被纳入标准内存分配器。注明:我不主张这么做,我不是说这是最好的防御,我只是回应你的要求想法来阻止它。”

OpenBSD的malloc支持保护页,如前所述。特别是它的G和P选项可以减少和防止信息的泄漏。不幸的是很多的流行malloc不包括这个功能。

5.2 覆盖了你他们一起做的关键信息

关键信息包括密码和私有加密密钥。可以肯定这不是被优化掉的,大多数的编译器将会消除这种覆盖,如果你不能避免的话。

5.3 使用默认的加密方法来做完美的安全

一个加密系统有完善的保密,当它的非确定性生成器生成一个随机的公钥。当PFS启用,当一些密码暴露时,信息不一定会暴露。因为没有用于所有信息没有单一的密码值。

5.4 使用权限分离来达到分离关键密码的作用

它可以帮助从其余的代码中分离加密代码出来,于是即使余下的程序被覆盖,它也不能直接访问私密的密码。

这就会使用到基本的安全原则上,程序要提供最大限度的私密权利对于他们的工作。这些方法可以通过减少漏洞,如密钥等关键信息的软件的数量,从而减少漏洞的数量和影响。不过,我要列出一个减少风险的方法,不是作为一个完整的对错。某个地方的代码必须有提供访问权限的数据,并且这些代码可能有漏洞。这里有些其他的注意事项:

David Wagner指出了这一点,并且进一步解释说:“RSA私钥可能已经被移动到另一个单独的过程,只有运行私有密码代码就会转移到这个过程。在Intel系统中,OpenSSL可以使用采用SGX来运行所有的加密计算在独立的沙盒执行环境下。这被认为是在软件加密模块下的,如虚拟TPM,虚拟HSM等。SGX提供了分离关键代码的硬件支持,但是可以使用其他的机制来代替SGX,像进程隔离或是沙箱。有很多的学术著作上保持这加密代码分离的方法,以及一些考虑到了OpenSSL的特别性。” Rutkowska2013里有关于SGX的介绍,在Brumley里有应用OpenSSL的权限分离的讨论。

Peter Neumann指出在硬件的基础上,沙箱和fine-grained访问控制也会提供强有力的机制来限制权限,从而控制心脏出血漏洞。

一个学生在我的开发安全软件的课上建议内存在服务器上隔离每个用户。这是一个很有趣的想法。

5.5 修复SSL/TLS证书的基础设施,尤其是对证书的吊销。

完整的SSL/TLS的基础设施有很多的问题,包括不值得信任的根证书权限,不良的审核证书和严重损坏的证书吊销过程。作为一个关联点,Qualsys SSL实验室发布了SSL威胁模型。

在目前而言,让我们特别关注证书吊销的过程,在对心脏出血漏洞的回应时,这是被特别的关注的。心脏出血漏洞使人们有可能为攻击者遗漏私密为他们的证书,这是很糟糕的。理论上,漏洞网址可以部署新的证书和撤销旧的证书来解决私密的曝光。不幸的是,今天的证书吊销机制在根本上没有被打破,少数人会很重视这个问题。因此,今天的攻击者往往会导致网页浏览器来接受他们的证书被撤销。有一个迫切的需要推动这方面的工作,远远超过目前可以使用的机制,更好的创造安全标准,并实现它们爱默认情况下无处不在。我认为应该有一个确定推动X509 OCSP的必备,但解决方法会证明这是我们需要的。

这是一个很复杂的区域,我会总结这些问题,这里有几个证书撤销的机制,和使用他们的问题:

证书吊销列表。证书吊销列表是一个吊销证书的大文件。这是最原始的撤销做法。当时的想法是一个程序会下载并检查证书吊销列表在接受证书之前。但是证书吊销列表尚未缩减到今天网络的要求,今天的证书吊销列表是很大的,要频繁的下载更新来保持目前的列表,使他们越来越不和实际。人们已经逐渐远离证书吊销列表,如Firefox 24变成了自动更新证书吊销列表和用户导入证书吊销列表的接口。

在线证书协议。在这个方法中,程序可以与服务器连接来请求特定证书的状态。在线证书协议应该比证书吊销列表需要更少的网络宽度,接近实时的状态检查。然而,在线证书协议创造了巨大的体积和证书发送机构的响应时间要求,因为他们现在必须提供对应所有客户端在一个真实的时间。在线证书协议也要创建了一个严重的隐私问题:它会导致客户透露给CA,它与客户正在联系。另外,不论在线证书协议和证书吊销列表有一个根本性的问题:如果你不能找到答案会出现什么?在实践中,实现线证书协议和证书吊销列表的系统都默认软件连接失败,也就是说,他们接受证书,在他们没有找到其他的东西。但是软故障使得整个方法没有用,因为攻击者往往可以干扰或去掉这些要求。硬故障时可以正常的工作,和其他人说它也可以为他们工作。然而,切换到硬件故障确实有其自身的严重问题。这个附加的检查减慢了到安全网站的连接,并且很多用户对这个额外的时间很敏感。在线证书协议服务器的故障是很常见的,在连接到网络受到制约的地方时你要暂时不用这个,如果硬故障被广泛使用,之后攻击者可以通过短暂的在线证书协议服务器连接来禁止HTTPS。攻击者甚至可以使用在线证书协议封装,包括已经吊销证书的在线证书协议响应,挫败了Langley2014a和Langley2014b的检查。

在线证书协议封装。在线证书协议封装试图通过让证书者来查询在线证书协议服务器,不是最终的用户和得到一个签名的时间的反应,是在有效的时间里解决在线证书协议的问题。当客户端随后访问这个网站时,他们会从该网站获得证书和一个附加的封装时间。如果没有收到封装响应,那么客户端可以回退到另一个方法,如标准的在线证书协议。这不是广泛部署的在线证书协议和证书吊销列表,但是一些网络服务器和网络浏览器都支持在线证书协议装订。然而在线证书协议封装本身仍然容易受到攻击过滤;在很多情况下,攻击者可以去除装订的响应,并阻止客户端获得在线证书协议服务器。在这种情况下,在浏览器中的正常的软失效过程中导致整个系统失效。

证书吊销列表设置。证书吊销列表设置是建立在网络浏览器的短暂的证书吊销列表。例如Chrome浏览器开发人员编译了一天列表,他们认为是“高价值吊销”和使用Chrome的自动更新机制,使这个列表推送到Chrome的安装。Adam Langley,一个谷歌的专家,提倡使用证书吊销列表设置机制,而不是证书吊销列表和在线证书协议。我同意证书吊销列表设置可能是有用的,当一个网络浏览器强行撤销广泛使用的网站证书。但是总体而言,我认为证书吊销列表设置正在从根本上被打破。一个证书吊销列表设置就是一个不完全的黑名单。Langley指出,一个证书吊销列表设置是不完全的,也没有达到足以应付大量的撤销…希望使用证书吊销列表设置,那样我们就能够把撤销的变成重要的和行政的并推动重要的…可悲是,这没有发生。Gibson有一个正确的观点,他指出“互联网证书吊销列表列举出超过两百万撤销和不信任的证书。不过Chrome的证书吊销列表设置目前列出了约24000的吊销证书。两百万中另一种隐式的别Chrome信任。”证书颁发机构安理会已经强烈反对证书吊销列表设置机制作为唯一的证书撤销机制:“心脏出血漏洞是完美典范为什么撤销的是很重要的,即使没有确定的关键妥协。没有人可以肯定的说,他们的服务器的私密被攻击了。大多数撤销正在进行证书吊销列表为“商业原因”,而不是提到证书吊销列表设置。这里很清楚的认为证书吊销列表设置只是一个简单的吊销证书的黑名单。”其他浏览器也有类似的黑名单,而这些可以有效的时间。但是他们不能替代在线证书协议的检查…即使撤销在线证书协议的检查不是100%的准确的。它仍然可以保护用户的比例…关闭撤销检查对每个人来说都是没有保护的。只是要清楚,我不认为证书吊销列表或是在线证书协议运行的良好,我同意证书吊销列表设置可以有一定的效果,尤其是当有一个特定的高调网站证书被曝光。然而,像心脏出血漏洞是不同的,在心脏出血漏洞中,如果他们的私有密钥时网页不能确认被排除了,所以他们需要撤销他们只是确定的…而且由于OpenSSL被广泛的使用,这会硬性到很多的网站。证书吊销列表设置不能解决心脏出血漏洞的问题。

必备的HTTP头文件。Firefox计划实施一个新的必备HTTP头文件,知道像X.509 OCSP等更好的机制必须封装起来便的可用。这只是增加了一个新的HTTP头文件作为一个HTTPS的连接请求的一部分。如果这个新的头文件是有服务器提供的并且支持浏览器,浏览器将会需要一个封装在线证书协议在该域以及子域。再次,如果这是客户端第一次被访问攻击者就可以颠覆这个了,因为攻击者仍然可以伪造初始连接。有些人混淆了用X.509 OCSP主封装HTTP头文件的方法,他们不是一样的。

短暂的证书。一种解决方案是部署只能持续很短时间的证书,如,几天而不是年为单位。从理论上讲这就要在今天工作;到期时间是有效测试证书的基础。不过这可能不是扩展,许多系统假设证书的有效期是很长的时间,并且额外的CA的工作可能很容易犯错误。许多的用户使用过期的证书并且忽略了他们的警告。最后,许多机制可以对抗其他证书的问题通过假设的证书很少的改变,所以这些修复能够增加漏洞。

X.509 OCSP 必备的封装。在这种方法中,该证书具有一个标记,表示该用户端必须要接接OCSP封装,然后OCSP封装被广泛使用。这是一个附加的OCSP封装,但是它可以防止攻击者筛选OCSP封装,因为客户知道什么是错误的。请注意这不只是封装OCSP,这不是一个必要的封装HTTP头文件,人们有时会混淆这些不同的方法。不像必须封装的HTTP头文件的方法,攻击者无法轻易筛选出这一点,因为证书本身指出需要封装。这中方法对短寿命的证书同样有效果,就不会有这些问题。Langley, CASC和其他的公司都推荐使用OCSP必备封装。然而虽然有必须的封装,这没有正式的规范并且这种扩展不被广泛使用。对于这个工作我们需要一个正式的规范,在服务器和浏览器中广泛的使用包括扩展的X.509证书包。

其他方法。还有其他的方法,尽量处理犯罪嫌疑人的证书,包括TACK和Mutually Endorsing CA结构。再次这些没有被广泛的使用和接受。

5.6 使软件容易更新

问题将会发生,组织者必须在必要的时候修复他们。如旧的Android 4.1.4就容易受到心脏出血漏洞的攻击。这是因为Google虽然很快的修复了这个版本,但是手机的制造商很慢的更新手机,手机运行商通常会推迟更新的时间。也到了谈论制造商和运营商不能修复手机的问题,当有安全漏洞要修复时,运行商已经即时的出售了手机。同样,我认为通过FIPS 140-2验证过程需要改变,以便库中的漏洞被发现和更新。

5.7 存储散列的密码

当然,继续把散列的数值作为密码,而不是明文或是可逆值,如果要存储密码为明文或是可逆的值,你没有说服人的理由,你就不能使用。

5.8 一般问题:安全软件教育/培训和减少攻击者的攻击

我要提到各方面的改善可能会减少一般可利用的漏洞的数量,有时利用这些。这就包括安全软件教育/培训并且要减少攻击者的攻击。

很多的软件开发人员依然没有受过什么教育和培训来开发软件。然而,几乎所有的软件可以直接连接到网络上,或是可以通过一个网络接收数据。许多开发人员不知道如何设计软件来对抗攻击,一般的漏洞是什么,和如何正确的对抗。事实上,很多开发人员不知道安全软件和软件安全的区别。这些材料是可用的,我在一本书上写了如何开发安全软件,开发人员必须要学习和运用这些知识。

我们也需要减少经济效益的攻击,经济激励会使人们发现漏洞并要出售给攻击者。在很多情况下人们不会把漏洞告诉防御者,他们可以通过出售这些漏洞给攻击者来得到很多的钱。毕竟人们可以通过出售一个单一的漏洞来合理的挣到100万。赏金根本跟不上当时的情形,我们需要探讨如何减少这些诱惑。例如也许我们应该把漏洞信息卖给不是供应商和政府的人定罪。基本上对于漏洞信息的捐献:有意的消除经济引诱在一个特定的区域来获得一个更好的社会。我认为这不可能防止公民来告诉他的国家软件的漏洞;公民必须把这作为他们的职责。我觉得没有一个政府会禁止购买这些信息。但是额外的限制可能会减少人们积极寻找漏洞,不是修复而是利用他们。显然有一些人会做违法的事,但是有些人会避免做违法的事,这是因为他们怕被捉到。你并不需要停止所有可能,只是改变。也许有更好的办法,如果有的话,请提前说,在任何情况下,我们需要找到一个方法来做物质的工作和不是安全。

六、应用这些方法

正如我前面提到的,开发安全软件需要的工具和方法的结合。当有错误时,要弄清楚发生了什么,我们需要了解它们失败的原因,并要试图做的更好。

这不是一个很好的时机来使用加密库。这些库是很重要的,但是最近发现了很多的问题:

1、本文的重点是OpenSSL中的心脏出血漏洞。

2、苹果的iOS遇到了漏洞,这是一个简单的故障来检查无效的证书。这些漏洞可能已经通过各种机制,包括静态死代码检测器,测试覆盖工具,或是无效认证的否定测试。

3、GnuTLS也不能正确的认证证书,其次,似乎有可能检测到这个在代码公布之前,其中包括否定测试。

4、OpenSSL CCS的注入。其中一些精心制作的可能会导致密钥的成为弱项。Masashi Kikuchi已经分别描述了他是怎么发现这个漏洞的。他首先想到了使用Coq来证明使用的正确性。他专注于过度的CCS,然后检查如何验证代码转变条件。他发现OpenSSL不能验证失败的情况,并且发现了漏洞。

5、一个随机数生成器不能在OpenSSL运行,值得注意的是,可以通过它来检查这个错误,所有的基本工程测试已经掌握了这一点。

许多人依靠加密库但是评估这些要有专业的知识,美国政府已经建立了一套流程来评估加密模块,称为FIPS 140-2。我认为这是个好方法来广阔的评价这些很重要并且难评估的项目。

这有更重要的事情,虽然符合FIPS 140-2进程,但是不检查加密协议,包括SSL/TLS的实现。相反,当前的FIPS 140-2进程只能计算它在密码库内的算法和检测在密码模块内的方案。我没有说清楚这个旧版本的文本,我希望弄清这些事。作为实施指南的FIPS PUB 140-2和加密模块验证程序的有效性。“该加密模块可以实现在安防行业已知的各种协议。这些协议的例子是IKE, TLS, SSH, SRTP, SNMP和TPM,在NIST SP 800-135rev1列出来。FIPS 140-2以及其附件没有解决方案,只有在加密算法和方案被认可和允许时,这些在操作模式下使用。”

实际上,OpenSSL坚持使用FIPS 140-2认证,它修复了心脏出血漏洞由于使用了附加的技术。FIPS 140-2进程不能评估正常的OpenSSL代码,只是评估了叫OpenSSL FIPS对象模块的特别的软件模块。OpenSSL FIPS对象模块有一样的接口,并且从OpenSSL代码中衍生出来,但它还是一个单独的模块。开启“FIPS模式”来结束FIPS模块代码,而不是使用常规的OpenSSL代码来实现加密。因此OpenSSL FIPS对象模块可以保持其通过FIPS 140-2的认证,即修复心脏出血漏洞,这是因为FIPS 140-2进程不评估SSL/TLS协议,因为不符合FIPS某块的代码必须要修改。在其他方面不同的情况下发生的。通常情况下,任何的加密模块的改变都不能导致验证的损失,这就需要很长的时间和金钱来得到一个新的验证。亏损的危险就是一个反常的激励:加密模块的开发人员有一个强烈的动机来区分问题。如果这是正确的,我可以肯定OpenSSL开发人员和FIPS的使用者和高兴。这就意味着心脏出血漏洞能够很快的得到修复在符合FIPS时,我确认在2014-05-09理解NIST。

因此通过设计FIPS 140-2进程中没有通过SSL/TLS来实现的包括加密协议在内,我觉得这公平来询问,但是,如果要注意保密协议。正确的评估加密协议需要相同类型的专业知识和其他的加密代码。很容易创建和运行一个大的测试套件来对抗如SSL/TLS的标准协议。这并不奇怪,验证过程没有发现随机数生成器的失败。我想通过FIPS 140-2进程至少是使用动态测试每一个支持加密随机数的生产器,从而确保他们是随机的,并且可以避免常见的错误。这将不花费很多和提供了一些信心,如果FIPS 140-2进程不能延长审查加密协议,那么事情应该建立来审查这些。一般情况下,我们需要重新测试FIPS 140-2来使它运行的更快更彻底。当前的进程使它很难更新库,如让一个人得到了关于安全和兼容性的结论。

没有测试过程中可以找到所有的问题,所以期待的完美是不合理的。不过,存在这新的技术来评估保密代码,这就会增加速度减少成本。更重要的是,我们都需要对攻击者的学习来增进当前评估过程来对抗容易忽略的漏洞。我的目标不是来毁掉现有的各种评估进程,评估是一项很难的任务。我的目标是要弄清楚做什么可以改善这些事情,因为加密是最重要的。

需要更严格和透明的程序来测试加密协议,一个要求对安全漏洞进行更新和公开的更新程序来防止复发。我能够很容易的看到FLOSS项目来创建一个更严格的测试套件,指的是通过密码库的使用和用户的关注程度。

我想我应该提一下FLOSS。有些人曾经试图宣称心脏出血漏洞在一个FLOSS不能创建好软件的证据。这没有意义,在专有软件中也发现了漏洞,在2013年,Coverity的扫描报告中发现“开源代码的质量优于专有的C/C++项目。”在现实中一些FLOSS程序是安全的,但是专有软件就不是很安全了。FLOSS有些潜在的安全优点,但是他们只是潜在的,你必须要检测特定的软件来确定它是否适合您的需要,包括它的安全性。

Eric S. Raymond把下面这叫做“Linus’ Law”:“使用一个足够大的β测试和联合的开发基础,几乎所有的问题很快的成型和修复就变得很明显了。”或是不正规的“只要你认真的寻找就会发现漏洞。”但是,这不意味着一些人想要。首先Raymond截然不同的发展FLOSS;他不是在谈论FLOSS和非FLOSS。其次,注意到更小心的措施需要“足够多的联合开发人员”基础;加密学使得得到一个大的开发者基础成为问题,并且非标准的OpenSSL证书有可能抑制了合作开发人员的数量。第三,注意这些文字“几乎每个问题都会很快的形成”,他从来没有声称发现了所有了问题,或是他们很快的被发现。最后,文中指出事实证明传统的方法在发现和对抗这些问题时不会奏效,虽然有很多的工具和方法来分析OpenSSL。相反,系统问题来发现类似的漏洞,因为不同的人使用类似的假设。好的消息是我们可以找到漏洞并且修复这些漏洞,因为漏洞的成因是公开讨论的。在大的设置中,本文代表了人们识别系统的问题来修复他们,从而类似的漏洞会很快的发现和修复。

本文着重关注如何应对技术。然而这里还有很多的非技术问题。Summer Maynard的“什么能让心脏出血可以教导OSS社区的市场营销”,这就展示了心脏出血是怎么被推销的。市场营销是很重要的;心脏出血是一个很糟糕的漏洞,好的营销加快的反应速度和降低了伤害。项目可以帮助关键的部件,这些有潜在问题的;核心的设施要数百万的美元来资助开源项目,这个项目是核心计算机功能的关键路径,这收心脏出血漏洞启发的。

七、范例

那么是不是有做的很好的例子?毕竟容易引起抱怨,但是如果没有人可以做的很好,那么这应该是不可能的。此外,如果没有可以复制的例子,就很难学习怎么做了。

我要求人们在可靠性和安全性方面来区分强大的FLOSS例子。当然,一个程序会有一个强劲的投入和不安全性。此外,即时是好的系统也偶尔会有问题的。这是一个很好的想法来看这些例子,因为很容易使用类似的方法在你在实际运行中。这有一些人们确定的项目:

OpenBSD。OpenBSD渴望成为安全领域的第1。他们由一个6-12人的队伍来进行安全审计:“我们不能找到很多的安全漏洞,因为我们正在找软件的基本问题,使用很长时间后人们才会发现安全问题,之后修复这些问题。在系统的任何领域都会发现漏洞。在我们审计中发现了在安全问题中新的类,而且往往这些较早审核的源代码需要重新设计时要考虑到这些漏洞。代码要经过多次的审核,并且由很多人使用不同的方法来审核,另一个安全的审核过程就是他们的积极性。在很多的条件下,我们发现对于开发的决心不是一个问题。在我们的审计过程中,我们发现了很多的问题,并且我们努力解决这些问题,即时没有得到证实。” 他们试图创建并实施对抗这些漏洞的新方法,包括strlcpy()/strlcat(),保护页面,和随机malloc()。他们还在“默认安全”下工作,同时进行全面的披露。

OpenSSH。OpenSSH是实现SSH协议和密钥连接的工具。OpenSSH是在OpenBSD项目的两个团队开发的。一个团队做基于OpenBSD的开发,其他的团队需要运行这个版本在许多操作系统上运行。OpenSSH使用的是OpenBSD的安全开发流程。OpenSSH的开发人员一直在努力降低OpenSSH被攻击的可能性。他们的方法有防御性程序,使用独立的库来减少复杂性,轻度的改变协议来减少攻击,特权分离,通过改变程序来最大化的缓解在操作系统的攻击。想要了解更多的OpenSSH的权限分离可以查阅Provos2003。

SQLite。SQLite是通过使用非常积极的测试方法来获得可靠性。该项目的代码行中超过了1000的测试代码和测试脚本。他们的作为包括三个独立开发的测试工具,异常测试,fuzz测试,回归测试,自动资源泄露测试,100%分支测试和MC/DC覆盖测试,数以百万的测试方案,广泛的使用assert()和运行时间检查,Valgrind分析,整数溢出检查,开发者清单。他们没有编译警告,在警告开启或是使用Clang静态分析工具。在2014.5.10,Peter Gutmann告诉我:“我一直使用SQLite完成我专业级软件开发,我谈论了怎么开发和测试它,在受到强烈的影响下。”

Postfix。我注意到Elaine R. Palmer和Bill Cheswick认为他们对安全和可靠性都全面的了解。Postfix的方法来开发安全软件重点在于存在一个非常有经验的团队,从头开始编写到安全,涉及到一组守护进程分别执行不同任务的集体结构。Postfix使用C和POSIX的安全子集,并结合创建安全的替代品的一个抽象层。例如,它有一个“vstring”创始人的帮助来缓解缓冲区溢出的攻击和“safe open”创始人来阻止竞赛条件。

GPSD。全球定位系统服务守护进程。这使用了大量的回归测试,使用多个工具的严格的静态测试和可以减少风险的构架方式。他们使用一个自定义的框架来拓展回归测试套件,包括使用诸如valgrind工具。他们的静态分析工具包括splint,cppcheck和Coverity;他们说道:“我们不知道没有比GPSD更强大的套件,包括全部的splint注解,并强烈怀疑没有存在。”或许更重要的是,他们的设计没有缺陷。Eric Raymond说到,“如果移动或是主机不是Windows,GPSD肯定可以运行,在世界上所有的智能手机的GPS监控,DARPA挑战一个重要的航海系统,从无人驾驶汽车开始,还有大多数的无人机和机器人,只有CVE和在十年内没有任何的漏洞。在几个月的时间内没有任何的缺陷报告,GPSD是使用传统C的基础,从而可以使你非常接近不用判断。我得到了疯狂的回归测试和常规的四个静态分析器。”

这当然不是一个完整的清单,他们中的漏洞会被发现的。尽管如此,它指向用来提高安全性和可靠性的项目,以及他们是如何工作的,让别人找到什么值得模仿。

八、结论和建议

有几种方法可以发现心脏出血漏洞,在这漏洞软件发布之前。这不是一个真对OpenSSL开发人员的,他们在一直的努力减少漏洞的数量,包括审计的人数和工具。相反,本文是来帮助改善的,OpenSSL和其他的项目可以通过改变他们如何开发和评估软件来阻止将来类似的漏洞发生。

我们已经学了一个重要的事情是许多的静态和动态分析方法使用在分析的项目中,也没有找到心脏出血漏洞。这就包括使用自动测试套件,fuzz测试方法,和典型的语句或是分支代码覆盖率的方法。几个源代码的弱点分析仪的开发人员正在改善他们的工具来检测非常类似心脏出血漏洞。我认为我们应该继续使用这些工具,但是和明显不够。想要打造安全软件项目还需要添加一下的一种方法:

1 彻底的negative测试(动态分析)

2 带地址检测和标准内存分配的fuzz(动态分析)

3 在标准内存分配器下编译和使用地址保护或是sanitizer(复合分析)

4 在各个领域内有验证是使用手动检测(静态分析)

5 上下文配置的源代码弱点分析仪,包括注释系统(静态分析)

6 100%分支覆盖率(复合分析)

7 入侵时间描述(动态分析)

8 更安全的语言(静态分析)

9 完全静态分析器(静态分析)

10 彻底的人工核实和检测(静态分析)

11 格式化方法(静态分析)

项目应该保证容易分析。例如简化代码,正常分配和释放内存,使用标准的FLOSS许可证书,这要具有广泛的兼容性。这将会是很好的使用一个编程语言,包括C,有被广泛接受的标准注释符号,从而使注释语言更容易被接受。象C语言是很难得到这样的协议的,但是我觉得要是能够使它标准化,他们就会更广泛的使用。

还有很多的方法可以减少心脏出血漏洞的影响:

1 一旦标准的内存分配器被取代,开启内存分配器的防御。在很多系统如Linux上的GNU malloc就没有这种机制,我们要首先进行添加。

2 覆盖关键信息在处理他们时。

3 使用完美的缺省的向前安全性的加密算法。

4 使用权限分离的临界加密用于其它的代码部分。

5 修复SSL/TLS的证书架构,尤其是默认证书的吊销过程。这就要协调一致的努力才能得到真正的解决方案中的规定,实施和部署;我们要从现在开始。

6 是软件升级变得简单。

7 零散的储存密码

8 一般的问题:安全软件培训和教育,降低攻击动机。

教学材料的改进和添加,特别是我们需要警告开发人员在内存缓存系统中的潜在的安全问题,在使用C,C++, 或是Objective-C;现在经常用的。当然真是的问题是开发人员学习使用安全软件,尽管几乎所有的程序都在受到攻击。

现在让我们来谈谈SSL/TLS的实现。在短时间内,我认为FLOSS项目的建立是建立在一个全面的SSL/TLS回归测试套件,使用以下的技术:

该套件要使用彻底的negative测试,它当然要有测试选项。

这将会是最好的,如果这个测试套件使用了很长的时间可以达到100%的分支覆盖,以为测试使用了多个实现方法,可以帮助检测缺失的错误输入和错误处理。

使用带地址检测和标准内存分配器的fuzz和传统的negative测试结合的方法会更好,fuzz测试可以发现许多的安全漏洞,但是传统的fuzz测试就很肤浅,并且测试效果有限,如果他们自然的应用密码协议。结合了fuzz测试和传统测试可以取得更大的进步,在协议上可以做到比单纯的fuzz测试更有效的测试。一个完全的测试工具应该可以测试到细微的错误状态。

像这样的测试套件可用多种实现方式协议来实现,但是我认为要使用SSL/TLS开始。最近,在很多的SSL/TLS的运行中发现了很多的漏洞,所有这些都可以通过negative测试来实现。如果任何加密库有漏洞,在其他保护下可以泄露数据。这个测试套件可以重启所有的SSL/TLS项目,在任何一个开发人员做出任何的改变,在他们在用户的电脑上显示很长时间以前消除他们。这个套件可以用于潜在的用户和政府,如果使用验证,可以提高供应商额外的测试来添加下一个版本。一个常见的测试套件将使我们更有信心在所有的SSL/TLS中,在开始点这些测试套件会很有用,在开始的地方便的很容易。它还有资金的优势;如果你不知道你是否支持OpenSSL,LibreSSL叉,或是其他的,这不重要-这个套件可以帮助大家。个别的项目要继续使用自己的测试套件,但是显然现在的测试套件是不够的。这也可以扩展到其他的加密协议,依赖一中技术来测试漏洞是不坏注意,包括创建一个共同的严格测试套件;我们要更多的套件才行。但是这可以说是一个好的开始。

更广泛的说,项目需要检查心脏出血的漏洞以及其他的漏洞,并且要确定他们是有效的。他们也需要检查一个项目,在这个项目做的很好时,来看使用寿命方法来复制。

这没有更好的办法。然而,这需要更重要的课程学习,要积极的使用套件才能是类似心脏出血漏洞不再发生。

九、参考文献

当前的URLs是2014.5.28。我已经把文本改成了规定的格式了,人们可以在打印版上发现重要的参考文献了。

[Ammann2008] Ammann, Paul and Jeff Offutt. Introduction to Software Testing. 2008. University Press. ISBN-13: 978-0521880381. ISBN-10: 0521880386. http://cs.gmu.edu/~offutt/softwaretest/

[Anderson2014] Anderson, Paul. Finding Heartbleed with CodeSonar. May 1, 2014. http://www.grammatech.com/blog/finding-heartbleed-with-codesonar

[Appel2014] Appel, Andrew W. Verification of a Cryptographic Primitive: SHA-256 http://www.cs.princeton.edu/~appel/papers/verif-sha.pdf

[Apple2013] Apple. Apple Automatic Reference Counting (ARC). “Transitioning to ARC Release Notes.” August 2013. https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

[ArcaneSentiment2014] Arcane Sentiment. A sound bug finder is an unsound correctness prover. 2014. http://arcanesentiment.blogspot.se/2014/04/a-sound-bug-finder-is-unsound.html

[BAH2009] Booz Allen Hamilton. Software Security Assessment Tools Review. March 2, 2009. http://samate.nist.gov/docs/NAVSEA-Tools-Paper-2009-03-02.pdf

[BenchmarksGame] Benchmarks Game. http://benchmarksgame.alioth.debian.org/u32/which-programs-are-fastest.php

[Bessey2010] Bessey, Al, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, and Dawson Engler. A Few Billion Lines of Code Later: Using Static Analysis to Find Bugs in the Real World. Communications of the ACM, Vol. 53 No. 2, Pages 66-75. 2010. http://cacm.acm.org/magazines/2010/2/69354-a-few-billion-lines-of-code-later/fulltext

[Brumley] Brumley, David and Dawn Song. Privtrans: Automatically Partitioning Programs for Privilege Separation. http://users.ece.cmu.edu/~dawnsong/papers/privtrans.pdf

[Butler] Butler, Ricky W. “What is Formal Methods?” http://shemesh.larc.nasa.gov/fm/fm-what.html

[Cassidy2014] Cassidy, Sean. Diagnosis of the OpenSSL Heartbleed Bug. 2014-04-07. http://blog.existentialize.com/diagnosis-of-the-openssl-heartbleed-bug.html

[CASC2014]. Certificate Authority Security Council (CASC). CASC Heartbleed Response. 2014-05-08. https://casecurity.org/2014/05/08/casc-heartbleed-response/

[Chou2014] Chou, Andy. “On Detecting Heartbleed with Static Analysis”. April 13, 2014. http://security.coverity.com/blog/2014/Apr/on-detecting-heartbleed-with-static-analysis.html

[Coverity2014] Coverity. 2013 Coverity Scan Report. 2014. http://softwareintegrity.coverity.com/register-for-scan-report-2013.html?cs=pr

[Cox2008] Cox, Russ. Lessons from the Debian/OpenSSL Fiasco. May 21, 2008. http://research.swtch.com/openssl

[Crawford2013]. Crawford, Drew. “Why mobile web apps are slow.” July 2013. http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/

[de Raadt] de Raadt, Theo. “Re: FYA: http://heartbleed.com/”. Newsgroup gmane.os.openbsd.misc. http://article.gmane.org/gmane.os.openbsd.misc/211963

[Georgiev2012]. Georgiev, Martin, Subodh Iyengar, Suman Jana, Rishita Anubhai, Dan Boneh, and Vitaly Shmatikov. “The most dangerous code in the world: validating SSL certificates in non-browser software”. ACM Conference on Computer and Communications Security. 2012. pp. 38-49.

[Gibson] Gibson, Steve. An Evaluation of the Effectiveness of Chrome’s CRLSets. 2014. https://www.grc.com/revocation/crlsets.htm

[Goodin2014a] Goodin, Dan. March 4, 2014. “Critical crypto bug leaves Linux, hundreds of apps open to eavesdropping”. Ars Technica. http://arstechnica.com/security/2014/03/critical-crypto-bug-leaves-linux-hundreds-of-apps-open-to-eavesdropping

[Goodin2014b]. Goodin, Dan. “How Heartbleed transformed HTTPS security into the stuff of absurdist theater: Certificate revocation checking in browsers is “useless,” crypto guru warns.” Ars Technica. 2014-04-21. http://arstechnica.com/security/2014/04/how-heartbleed-transformed-https-security-into-the-stuff-of-absurdist-theater/

[GNU-Licenses] GNU project. Various Licenses and Comments about Them. https://www.gnu.org/licenses/license-list.html#OpenSSL

[Goodin2011] Goodin, Dan. “How is SSL hopelessly broken? Let us count the ways: Blunders expose huge cracks in net’s trust foundation” The Register. 2011-04-11. http://www.theregister.co.uk/2011/04/11/state_of_ssl_analysis/

[Gutmann] Gutmann, Peter. Experiences with SAL/PREfast https://www.cs.auckland.ac.nz/~pgut001/pubs/sal.html

[Hatton2003]. Hatton, Les. “EC–, a measurement based safer subset of ISO C suitable for embedded system development.” 2003. Information and Software Technology, 47 (3) (2005), p. 181-187. http://www.leshatton.org/index_SA.html

[Hatton2005] Hatton, Les. Language subsetting in an industrial context: a comparison of MISRA C 1998 and MISRA C 2004. November 20, 2005. Information and Software Technology 49 (5), p. 475-482, May 2007. http://www.leshatton.org/index_SA.html

[Heartbleed.comHeartbleed.com web site.

[Hofer2010] Hofer, Thomas. Evaluating Static Source Code Analysis Tools 2010. http://infoscience.epfl.ch/record/153107/files/ESSCAT-report

[Hsu2008] Hsu, Yating, Guoqiang Shu, and David Lee. “A Model-based Approach to Security Flaw Detection of Network Protocol Implementations” http://www.ieee-icnp.org/2008/papers/Index12.pdf

[Jplus2014] Jplus. 2014. Approximate speed classes of programming languages. XKCD Forums. http://forums.xkcd.com/viewtopic.php?f=11&t=108685

[Junestam2014] Junestam, Andreas and Nicolas Guigo (iSECpartners). Open Crypto Audit Project: TrueCrypt: Security Assessment. Prepared for the Open Crypto Audit Project. 2014. https://opencryptoaudit.org/reports

[Kupsch2009] Kupsch, J. A. and Barton P. Miller. “Manual vs. automated vulnerability assessment: A case study”. The First International Workshop on Managing Insider Security Threats, West Lafayette. 2009. http://research.cs.wisc.edu/mist/papers/ManVsAutoVulnAssessment.pdf

[Kupsch2014-April] Kupsch, James A., and Barton P. Miller. “Why do Software Assurance Tools Have Problems Finding Bugs Like Heartbleed?” https://continuousassurance.org/swamp/SWAMP-Heartbleed-White-aper-22Apr2014.pdf

[Kupsch2014-May] Kupsch, James A., and Barton P. Miller. “Why do Software Assurance Tools Have Problems Finding Bugs Like Heartbleed?” https://continuousassurance.org/swamp/SWAMP-Heartbleed.pdf

[Langley2014a] Langley, Adam. No, don’t enable revocation checking. 2014-04-19. https://www.imperialviolet.org/2014/04/19/revchecking.html

[Langley2014b] Langley, Adam. Revocation still doesn’t work. 2014-04-29. https://www.imperialviolet.org/2014/04/29/revocationagain.html

[McLoughlin2004] Mark McLoughlin, Mark. June 22, 2004. https://people.gnome.org/~markmc/openssl-and-the-gpl.html

[Miller2005] Miller, Damien. “Secure Portability”. AUUG 2005. October 2005. http://www.openbsd.org/papers/portability.pdf or http://www.mindrot.org/~djm/auug2005/

[Miller2007] Miller, Damien. “Security measures in OpenSSH”. Proceedings of the AsiaBSDCon 2007, Usenix. March 2007. http://www.openbsd.org/papers/openssh-measures-asiabsdcon2007.pdf

[NIST] NIST (SAMATE project). Tool Survey. http://samate.nist.gov/index.php/Tool_Survey.html

[NIST-Sound] NIST. NIST SAMATE SATE V Ockham Sound Analysis Criteria. http://samate.nist.gov/SATE5OckhamCriteria.html

[Perens1999] Perens, Bruce. “The Open Source Definition” Open Sources: Voices from the Open Source Revolution 1st Edition. January 1999. 1-56592-582-3. http://oreilly.com/catalog/opensources/book/perens.html

[Provos2003] Provos, Niels, Markus Friedl, and Peter Honeyman. “Preventing privilege escalation”. Proceedings of the 12th USENIX Security Symposium. Pages 231-242. August 2003. https://www.usenix.org/events/sec03/tech/full_papers/provos_et_al/provos_et_al.pdf

[Raymond1999] Raymond, Eric. “The Cathedral and the Bazaar”. The Cathedral and the Bazaar. http://www.catb.org/esr/writings/cathedral-bazaar/ – note that Linus’ law is at http://www.catb.org/esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html

[Ritter2014] Ritter, Tom. iSEC Completes TrueCrypt Audit: Is TrueCrypt Audited Yet? Yes, in part! April 24, 2014. https://isecpartners.github.io/news/2014/04/14/iSEC-Completes-Truecrypt-Audit.html

[Rohlf2014] Rohlf, Chris. 2014-04-11. My heart is ok, but my eyes are bleeding. Leaf Security Research. http://blog.leafsr.com/2014/04/11/my-heart-is-ok-but-my-eyes-are-bleeding/

[Ruef2014] Ruef, Andrew. Using Static Analysis And Clang To Find Heartbleed. April 27, 2014. http://blog.trailofbits.com/2014/04/27/using-static-analysis-and-clang-to-find-heartbleed/

[Rutkowska2013] Rutkowska, Joanna. Thoughts on Intel’s upcoming Software Guard Extensions (Part 1). August 30, 2013. http://theinvisiblethings.blogspot.com/2013/08/thoughts-on-intels-upcoming-software.html

[Sarkar2014] Sarkar, Roy. “Saving you from Heartbleed”. April 16, 2014. http://www.klocwork.com/blog/software-security/saving-you-from-heartbleed/

[Schieferdecker2012] Schieferdecker, Ina, Jürgen Großmann, and Martin Schneider. Model-Based Fuzzing for Security Testing. 2012-04-21. http://www.spacios.eu/sectest2012/pdfs/SecTestICST_Schieferdecker.pdf

[Serebryany2012] Serebryany, Konstantin, Derek Bruening, Alexander Potapenko, and Dmitry Vyukov. “Address Sanitizer: A Fast Address Sanity Checker”. USENIX ATC 2012. https://www.usenix.org/system/files/conference/atc12/atc12-final39.pdf

[Shahriar2008] Shahriar, Hossain. Mutation-based testing of buffer overflows, SQL injections, and format string bugs. 2008. http://qspace.library.queensu.ca/handle/1974/1359

[Spinellis2012] Spinellis, Diomidis, Vassilios Karakoidas, and Panagiotis Louridas. “Comparative language fuzz testing: Programming languages vs. fat fingers.” PLATEAU 2012: 4th Annual International Workshop on Evaluation and Usability of Programming Languages and Tools – Systems, Programming, Languages and Applications: Software for Humanity (SPLASH 2012). ACM, October 2012. (doi:10.1145/2414721.2414727) http://www.dmst.aueb.gr/dds/pubs/conf/2012-PLATEAU-Fuzzer/pub/html/fuzzer.html

[Sutton2007] Sutton, Michael, Adam Greene, and Pedram Amini. Fuzzing: Brute Force Vulnerability Discovery. 2007. Addison-Wesley. ISBN 0-321-44611-9.

[Takanen2008] Takanen, Ari, Jared D. Demott, and Charles Miller. Fuzzing for Software Security Testing and Quality Assurance. 2008. Norwood, MA: Artech House. ISBN-13 978-1-69693-214-2.

[Ted] Ted. Analysis of openssl freelist reuse. http://www.tedunangst.com/flak/post/analysis-of-openssl-freelist-reuse

[Uberti] Uberti, Justin. Untitled blog post. https://plus.google.com/+JustinUberti/posts/Ah5Gwb9jF4q

[Wheeler2004] Wheeler, David A. Secure Programming for Linux and Unix HOWTO. 2004. http://www.dwheeler.com/secure-programs/

[Wheeler2013] Wheeler, David A. Vulnerability bidding wars and vulnerability economics. 2013-11-16. http://www.dwheeler.com/blog/2013/11/16/#vulnerability-economics

[XKCD] Munroe, Randall. “Heartbleed Explanation”. XKCD. http://xkcd.com/1354/

随时观看我的主页http://www.dwheeler.com,您可以看下的文章“为什么OSS/FS”看看页码,和我的书《如何开发安全程序》。

一如既往,这是我的个人意见,我的意见和政府,雇主的意见不同。像往常我的写作一样,我使用是逻辑大多数黑客和维基百科都是这样做的。

(全文完)

大和尚

                                                                                

                                                         >>>>>>>:               
                                                    :HNQ!!:::::!?$QM>           
                                                  $MC              :?M          
                                                 MC                 :7M         
                                                H7                   :HH        
                                               >M                     CM>       
                                               MM                     >M>       
                                               MC                    :!M>       
                                              NM>   :                :?M>       
                                              NH:OC$N     ON        ::QN!       
                                              M$ :!       :NMM?     CNNNO>      
                                              M?                   :!   7M      
                                              MQ     HC                :HO      
                                              OMO    $N!         :O77OMM!       
                    !!!                        !MQ!            :>$C             
                  >M!   N:                        HMMNMQCOHMMMNH                
                  M?     Q                         MO ?M?7>!>N                  
                  >M:   ?H                        CO  !N  ?QQ!?HH               
                    QMMM$C$N!                    7M   !H$Q!      $H             
                         $HCQM7>HM>            >N!M   !M          7Q            
        >>MNHHHHNMH>!       HM$?:  Q      >>>QH>  M   7$           $>           
      :M$7777777777CHMM:      H::  :$NM7>!::      H7  ON$$QQM$!    !M:          
     MM??777777777??C??NM     >$Q7:::  M7          NO :Q            NC          
    ON??????7???????????CM>       QQMNM$M!      H   C?  M           !M          
    MNMM$OC??????????????$N:       >M:  OC     :N    MN>N7          !M          
   7QOCO$HNMQ$C?CC??????CCOM        Q>  7?     :NO7!!M>NMC          :M          
   >NQMQ$OCOOOQHNMQC?????OC$Q       ?H       >HO!7QOCOH M           >M          
   7$????C$HHQOOOOONN????OOO$M!      $$   ?$MM  ?NMO  $C             !O         
    N????????CC$HNQMQ???COOOOCN      MO QMH$$$HH$$$QM!?N:             H         
    OMC???????????????COOOOOOOQ:     MQMMMQQ$$QHH$$$$$$$MQ:           MH        
     $MCCC????????CCOOOOOOOOO$O      MN:  MNNN  :MN$$QHMMQNMC>::::>OMM!         
       MMH$OOOOOOOOOOO$QHMMM$!     >N      7      OMN!  !HMN$MMMMMMHM:          
     >MH$O$NNNNMNNNNNH$O$$$$$NMM!  M7  Q:                  HN$>  $MMMC?         
    MQOOOOO$$$$$$$$$$$$$$$$$$$$$MM M!  C      :                       QN        
   7HO?OOOO$$$$$$$$$$$$$$$$$$OO$$MM$C  O      Q                        >N7      
   MOCOOOC?O$$C?O$$C?$$$CC$$O?C$OQM ?N7M:     OQ                        $N      
   QHOOOOO$$$$$$$$$$$$$$$$$$$$$OOQM    OMHQ$OC?OMHOC$QQQQNMMMMMMMMMMMMH$QM      
    OMMNNHQQQQ$$$$$$QQQQHNMMMMMMMQO                                             
           ?MMMMMMMMMMMMM

10种典型的溺爱形式

以下文字是yoyo班主任老师共享的,感觉条条入情入理,所以收藏起来日后与yoyo共享。

 

==========================================================

1.特殊待遇

孩子在家庭中的地位高人一等,处处特殊照顾,如吃“独食”,好的食品放在他面前供他一人享用;做“独生”,爷爷奶奶可以不过生日,孩子过生日得买大蛋糕,送礼物……这样的孩子自感特殊,习惯于高人一等,必然变得自私,没有同情心,不会关心他人。

2.过分注意

一家人时刻关照他,陪伴他。过年过节,亲戚朋友来了往往嘻笑逗引没完,有时候大人坐一圈把他围在中心,一再欢迎孩子表演节目,掌声不断。这样的孩子自认为自己是中心,确实变成“小太阳”了。家里人都要围着他转,并且一天到晚不得安宁,注意力极其分散,“人来疯”也特别严重,甚至客人来了闹得没法谈话。

3.轻易满足

孩子要什么就给什么。有的父母还给幼儿和小学生很多零花钱,孩子的满足就更轻易了。这种孩子必然养成不珍惜物品、讲究物质享受、浪费金钱和不体贴他人的坏性格,并且毫无忍耐和吃苦精神。

4.生活懒散

允许孩子饮食起居、玩耍学习没有规律,要怎样就怎样,睡懒觉,不吃饭,白天游游荡荡,晚上看电视到深夜等。这样的孩子长大后缺乏上进心、好奇心,做人得过且过,做事心猿意马,有始无终。

5.祈求央告

例如边哄边求孩子吃饭睡觉,答应给孩子讲3个故事才把饭吃完。孩子的心理是,你越央求他他越扭捏作态,不但不能明辨是非,培养不出责任心和落落大方的性格,而且教育的威信也丧失殆尽。

6.包办代替

我曾问一些妈妈,要不要求孩子劳动,有的竟说:“我疼都来不及,还忍心让孩子劳动?”也有的说:“叫”小东西”做事更麻烦,还不如我帮他做了。”所以三四岁的孩子还要喂饭,还不会穿衣,五六岁的孩子还不做任何家务事,不懂得劳动的愉快和帮助父母减轻负担的责任,这样包办下去,必然失去一个勤劳、善良、富有同情心的能干、上进的孩子。这决不是耸人听闻。

7.大惊小怪

本来“初生牛犊不怕虎”,孩子不怕水,不怕黑,不怕摔跤,不怕病痛。摔跤以后往往自己不声不响爬起来继续玩。后来为什么有的孩子胆小爱哭了呢?那往往是父母和祖父母造成的,孩子有病痛时表现惊慌失措,娇惯的最终结果是孩子不让父母离开一步。这些孩子就打下懦弱的烙印了。

8.剥夺独立

为了绝对安全,父母不让孩子走出家门,也不许他和别的小朋友玩。更有甚者,有的孩子成了“小尾巴”,时刻不能离开父母或老人一步,搂抱着睡,偎依着坐,驮在背上走;含在嘴里怕融化,吐出来怕飞走。这样的孩子会变得胆小无能,丧失自信,养成依赖心理,还往往成为“把门虎”,在家里横行霸道,到外面胆小如鼠,造成严重性格缺陷。

9.害怕哭闹

由于从小迁就孩子,孩子在不顺心时以哭闹、睡地、不吃饭来要挟父母。溺爱的父母就只好哄骗,投降,依从,迁就。害怕孩子哭闹的父母是无能的父母;打骂爸妈的孩子会变成无情的逆子,在性格中播下了自私、无情、任性和缺乏自制力的种子。

10.当面袒护

有时爸爸管孩子,妈妈护着:“不要太严了,他还小呢。”有的父母教孩子,奶奶会站出来说话:“你们不能要求太急,他大了自然会好;你们小的时候,还远远没有他好呢!”这样的孩子当然是“教不了”啦!因为他全无是非观念,而且时时有“保护伞”和“避难所”,其后果不仅孩子性格扭曲,有时还会造成家庭不睦。

以上的实例不是每个家庭全部都有的,但是一般家庭在各种溺爱中会占有几种,或各种都有轻度表现也是值得警惕的,我们要以科学的爱,来保护孩子的健康成长。

“溺”,词典上解释为“淹没”的意思。人被水淹没了叫“溺毙”,如果父母的爱流横溢泛滥起来,那也会“淹没”孩子的,这就是溺爱,是一种失去理智,直接摧残儿童身心健康的爱。

from : http://hi.baidu.com/yoyoe/item/40a71cf83cb87146922af277

回调

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础,因此,下面我们着重讨论回调机制在不同软件架构中的实现。
对于不同类型的语言(如结构化语言和对象语言)、平台(Win32、JDK)或构架(CORBA、DCOM、WebService),客户和服务的交互除了同步方式以外,都需要具备一定的异步通知机制,让服务方(或接口提供方)在某些情况下能够主动通知客户,而回调是实现异步的一个最简捷的途径。
对于一般的结构化语言,可以通过回调函数来实现回调。回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。
面向对象的语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象成为回调对象。对于象C++或Object Pascal这些兼容了过程特性的对象语言,不仅提供了回调对象、回调方法等特性,也能兼容过程语言的回调函数机制。
Windows平台的消息机制也可以看作是回调的一种应用,我们通过系统提供的接口注册消息处理函数(即回调函数),从而实现接收、处理消息的目的。由于Windows平台的API是用C语言来构建的,我们可以认为它也是回调函数的一个特例。
对于分布式组件代理体系CORBA,异步处理有多种方式,如回调、事件服务、通知服务等。事件服务和通知服务是CORBA用来处理异步消息的标准服务,他们主要负责消息的处理、派发、维护等工作。对一些简单的异步处理过程,我们可以通过回调机制来实现。

最值得看的经典电影(一生必看)

一生必看的经典电影
1、十佳科幻片:

1)星球大战系列:开创了一个电影神话。
2)异次元骇客(第十三层):应该说它比黑客帝国的构思更精妙。
3)超人:所有漫画类科幻电影的代表。
4)终结者(1、2):科幻电影经典中的经典。
5)12猴子:如此引人深思的科幻电影真不多见。
6)黑客帝国系列:引发了对现实和未来网络发展的思考,形成了一种黑客文化。
7)移魂都市(黑暗城市):风格另类的科幻片,结尾出人意表。
8)超时空接触:比较严肃地探讨外星文明问题的力作。
9)千钧一发:描写未来社会人的基因问题的惊险影片,内容和主题俱佳。
10)2001漫游太空:经典作品,以严肃的科学性和预见性著称。
2、 十佳剧情片:
1)肖申克的救赎(刺激1995):男人必看的励志影片。
2)教父(1、2):经典黑帮片,有此作品,其他同类一概低头。
3)美国往事:整个人生都在里面。
4)天堂电影院:每个男人的童年回忆,太经典了。
5)无主之城:人家怎么能拍出这么牛的电影!
6)活着:也许是中国目前最伟大的电影。
7)阿甘正传:教导所有的人要去宽容别人,傻就是福气。
8)勇敢的心:民族自尊的好教材,希望大家要爱中国。
9)楚门的世界:探讨人的价值和人性根本的奇思怪作。
10)音乐之声:音乐的力量、音乐的快乐!
11)辛德勒的名单:震撼人心的历史、充满感染力的摄影和杰出的演员

3、 十佳战争片:
1)拯救大兵瑞恩:最真实反映战争和人性的超级巨作。
2)猎杀红色十月:节奏和人物拿捏准确的潜艇影片代表作。
3)兵临城下:从独特的视角描写二战的巨片,演员表演到位。
4)大逃杀:归入战争片只因其太震撼、太残酷。
5)巴顿将军:全景式展示战争的代表作,演员表演出色。
6)u-571:效果出众的新型海战片,拍得很有特点。
7)全金属外壳:库布里克对战争的深刻反思,看过后使人对战争产生恐惧。
8)星际舰队:科幻性质的战争片,士兵的训练和战斗的描写很有煽动性和争
9)复仇:也是罗马尼亚的老电影,这部影片的枪战让人百看不厌。
10)三步杀人曲系列:干净利落的墨西哥风格枪战电影。
11)第一滴血(1):有内涵有力度有故事,是史泰龙为数不多的好片。

5 、十佳KB片:
1)夺命狂呼系列:校园KB片的代表作,对年轻人的胃口。
2)杀出个黎明:另类夸张的KB片,不吓人,反而很搞笑和另类。
3)活死人的黎明:活死人系列代表作,以恶心的僵尸著称。
4)驱魔人:画面阴郁,声效凄厉,晚上看真的噤若寒蝉!
5)见鬼:港式KB片代表,有KB,也有情感。
6)解剖(1、2):欧洲KB片的代表,内容奇怪前卫。
7)坏品味:指环王导演的早期作品,KB而搞笑。
8)异形系列:科幻类KB片经典,1、2、4都很精彩
9)咒怨:日式KB的代表,极其邪恶!
10)活跳尸:罕见的血腥的黑色幽默!

6 、十佳喜剧片 :
1)两杆大烟枪:在英式幽默和一团乱麻中寻找答案的乐趣
2)我为玛丽狂:美国厕所文化的代表,低俗但好玩。
3)反斗神鹰系列:美式无厘头动作喜剧。
4)大话西游(1、2):经典!
5)花田喜事:港式老喜剧片的代表,明星云集。
6)惊声尖笑系列:以模仿糟改其他影片取乐的新型喜剧片。
7)虎口脱险:欧式喜剧片经典作,百看不厌。
8)金鸡:近年少见的优秀香港电影,有很深的内涵。
9)面具:金凯瑞的成名作。
10)喜剧之王:周星弛最有内涵的电影
7 、十佳武侠片:
1)卧虎藏龙:“美”式武侠片的开山之作!
2)新龙门客栈:现在的武侠片制作模式都是照它来的。
3)黄飞鸿系列:捧红了李连杰啊!!!
4)醉拳:成龙代表作,功夫片黄金时代的作品。
5)少林寺三十六房:刘家辉的成名作,现在来看也趣味无穷。
6)少林寺:不用说了,真功夫的代表。
7)佐罗:法国剑侠片的代表,迷到很多mm。
8)笑傲江湖:对林青霞扮演的东方不败印象最深。
9)座头市:创新的日本剑侠片,很有特点。
10)杀死比尔:呵呵,新派东西方结合的功夫片来啦!!!!

8 、十佳动画片:
1)怪物公司:罕见的数码特技!动人有趣的创意!
2)冰冻星球:虽然卖座不是很好,但它的场景可是真的漂亮!
3)辛巴达航海记:巧妙结合手绘和3d技术的优秀作品。
4)怪物史莱克:健康的爱情观和幽默的故事!
5)寻找尼莫(海底总动员):融合温馨情感和尖端技术的动画经典。
6)千与千寻:宫岐峻颠峰之作!
7)最终幻想:3d人物数码化的先驱,技术出众。
8)吸血鬼猎人:日式风格的华丽吸血鬼大作。
9)盖娜:欧洲的动画大作,风格很怪异!
10)恐龙:不用说了,好看!
9 、十大QS片:
1)YANWU女郎:少见的描写夜总会无上装演员的作品,场面很精致!
2)卡里古拉:有史以来最“严肃”和宏伟的QS巨片!
3)罗曼史:探讨爱情冲突和仇恨的情色名作。
4)亲密:获得柏林金熊,在欧洲大型电影节获奖影片中首次出现KJ的场面!
5)巴黎野玫瑰:描写爱到极至的感情,可怕!
6)深喉:现代QS片的鼻祖!
7)悲情城市:法国QS片演员出演的反映丑恶社会的独立电影。
8)感官世界:大岛渚的惊世骇俗之作,以演员的真实ZUOAI场面闻名!
9)巴黎最后的探戈:怀念马龙白兰度,就看看这部片子吧!
10)丑闻:韩国QS作品。
10 、十佳惊悚片:
1)死神来临(1、2):构思巧妙,场景惊人。
2)黑暗降临:描写鬼怪传说的惊悚片,有些新意思。
3)沉默的羔羊:获得奥斯卡奖的惊悚片!
4)七宗罪:风格阴暗,让人时不时想逃!表演精致!
5)闪灵:可以尽情欣赏杰克尼科尔森的超凡演技。
6)第六感:此类影片代表作!!结尾精彩之极!
7)断头谷:蒂姆伯顿的惊悚KB大作,人头乱滚!
8)心慌方(1、2):加拿大导演的匪夷所思之作!!!
9)本能:不用说了,很色情!
10)医院风云:拉斯冯提尔导演的丹麦影片,吓的很多人不敢独自回家。

11、 十佳爱情片:
1)泰坦尼克:商业大作!
2)漂亮女人:现代版麻雀变凤凰!
3)罗马假日:奥黛丽赫本的经典。
4)金玉盟:淡淡的幽怨、一生的承诺!
5)卡萨布兰卡(北非谍影):经典老片。
6)毕业生:我们还能找到青春时代的纯洁爱情吗?
7)生命中不能承受之轻:以时代为背景的爱情名片,节奏缓慢。
8)保镖:轻松健康的爱情电影。
9)克莱默夫妇:对婚姻、儿女进行深入思考的伦理片。
10)阳光灿烂的日子:属于我们这些人的青春!

12、 十佳魔幻片:

1)狼族盟约:法式魔幻片,明星众多的大制作。
2)印第安纳琼斯(夺宝奇兵)三部曲:斯皮尔伯格和卢卡斯的强大组合!
3)倩女幽魂:中国鬼电影的里程碑!决不输于外国片!
4)魔戒三部曲:伟大的经典的真正的电影!!!
5)哈利波特系列:新魔幻电影的奇特分支。
6)魔幻屠龙(龙的心):感情真挚。
7)木乃伊:幽默和特技结合的娱乐片。
8)剪刀手爱德华:蒂姆伯顿最有想象力的作品。
9)小飞侠:崭新的适合儿童的幻想片。
10)大鱼:多看两遍吧,活着要善待自己啊!

第一滴血1234
速度与激情123
惊声尖笑1234   X战警   终结者
哈利•波特123  刀锋战士  死神来了   尖峰时刻   黑客帝国
小鬼当家123 虎胆龙威123  谍影重重123  的士速递  007
黑衣人透明人  非常小特务  大逃杀黑夜传说 国家宝藏 夺宝奇兵   非常人贩  超人  纳尼亚传奇   天外来菌   拳霸   蝙蝠侠怪物史莱克   碟中谍    星球大战    暗流   木乃伊    X档案   合伙人    教父   怪医    鬼娃回魂  牛仔裤的夏天      狂蟒之灾   蝴蝶效应       恐怖休息站头   师傅一体   王牌大贱谍   异形      蜘蛛侠加勒比海盗   异种    生化危机    电锯惊魂   魔戒   机械警察

先说欧美的本人强力推荐:
第一,那当然是《肖申克的救赎》(台湾翻译为刺激1995)
《越狱》的紧张情节就是建立在这部电影的基础上。如果不是遇到当年的《阿甘正传》它必然是奥斯卡最佳电影。

第二,《美国丽人》(1999年奥斯卡最佳电影)
整个片子色调晦涩,虽然不是黑白。
“世界如此之美,应该平静地去欣赏”,主人公莱斯特•伯纳姆(凯文•斯帕西饰)死前的最后一席话启发我们,用崭新视角去看待我们周围的世界,从我们深爱之人的缺点,到风中飘舞的塑料袋。如此颇具哲理的结局既让观众对莱斯特-伯纳姆的离开充满悲伤,也让我们对人生意义价值产生新的思考。
物质带给我们便利,同时也带来太多负担,又有多少人,可以真的放下。
一生忙忙碌碌,追求的到底是什么,想要的到底是什么结果。
人们都在撒谎,对生活撒谎,对除了自己的周围撒谎,最后,迷惑了自己。
人生的意义在于体验一切,挑战自己,当你身处逆境你仍然满载希望,积极向上,充满关爱,那对你来说,就没有逆境了。
请宽容,让自己幸福,不能带给别人幸福至少不要带去伤害。……
当然影片所要表达的内容实在太多太多了,一千个读者一千个汉姆雷特,请你自己感悟吧。

第三,《美丽心灵》(2001年奥斯卡最佳电影)
这个电影的名字太好了,看到影片的最后,我们自己总结,美丽心灵到底说的是谁呢?是约翰纳什的美丽妻子?还是长期帮助他的那位老同学?还是那个让一个“疯子”随心所欲的在校园生活的学校管理人员?是诺贝尔奖项委员会?是美国政府福利体制?是那些可爱的学生?是一切!!美丽心灵是你是我是生活,是世界。

第四,《老无所依》(去年的奥斯卡最佳电影)
这个电影一定要看两次,第一次看情节,看内容,看影片大概要表达的东西,然后看下专家的影评,再看一次细节的处理,感受影片表达的思想,感受影片的内涵。我最欣赏的这个电影的原因是,影片里面每一个长时间人与人的对话都包含了丰富的内涵和哲学道理,太强了。。。。。。

第五,《阿甘正传》(1995奥斯卡最佳影片,没错就是它在1995的奥斯卡最佳电影评选中干掉了《肖申克的救赎》)
这个影片我就不介绍了,随便一百N多的影评。

第六,《当幸福来敲门》(威尔斯密斯父子齐上阵)
当我们抱怨生活的不如意时,当我们觉得才华不被认可时,当我们觉得应该获得更好的工作时,当我们希望获得更多时,请你想想,我们付出了什么。
《当幸福来敲门》是一部奋斗与立志的影片,这部影片对与我们来说是什么呢?可以是风向标,可以是灯塔,也可以是指南针,更可以是希望!是梦想,是我们未来的行动与收获,是你我后半生的一切!!!

 
 

男人十大必看电影:

1、《阿甘正传》课程:执着

每次想起阿甘在美国东西海岸之间的奔跑,心里都会止不住的伤感,还有振奋。

你相信一个智障儿的成功吗?你相信这世上得到最多的人正是那些不计得失的
人吗?

阿甘不懂得他不能总跟着一个女人帮她打架,也不懂得一个成年人不该总把
妈妈的话挂在嘴边。阿甘什么都不知道,他只知道凭着直觉在路上不停地
跑,并且最终跑到了终点。另外,《阿甘正传》还会教给你一个男人必须
具备的一种素质——困境中的幽默感。

2、《东方不败》课程:才华

男人不应该不看武侠片,如果你只能看一部武侠电影,你会选择什么?我
想应该是《东方不败》。“满堂花醉三千客,一剑霜寒十四州”,剑客的
身姿随着剑在空气中的游走而起舞,翩若惊鸿,宛若游龙。金庸的《笑傲
江湖》讲的是对自由的追求,徐克、程小东、张叔平、李连杰等一干天才
用电影再现了金庸笔下这个瑰丽无比的武侠世界。沧海一声笑的曲子传唱
至今,成为我们一个幻想的凭籍,一个逃避现实的出口。

3、《美国往事》课程:人生

《美国往事》包含了一个男人在这个世界上所能遇到的一切。友情、爱情
、幻想、责任、冲突。它更像是一场让人不愿醒来的梦,当面条躺在床上
,在温暖的灯光和迷离的电话铃声中回到那些逝去了的岁月,这场梦便开
始了,直到最后,面条终于露出笑容,我们才回到自己的人生,去继续那
些不尽的故事。什么帮派,什么仇杀,原来都不重要,印象中只有一个毛
躁的少年,偷看一个美丽女孩儿跳舞;只有一个负罪的兄弟,每天早早地
上床睡觉;只有一个白发苍苍的老人,面对背叛了的友谊,语调平和,不
动声色。《美国往事》带着你作了一个3小时45分钟的梦。人生如梦,这也
许是惟一的感受。

4、《罗马假日》课程:爱情

也许《罗马假日》有点瞎浪漫的嫌疑,但奥黛丽?赫本的出现使它真的成了
一部童话。她就像是游历人间的天使,美丽得不染纤尘。记者吻过湿淋淋
的公主,然后看着她慢慢地走向自己的官邸。那一刻,你是否会在心里默
默地说“别走”?

在罗马的宫殿里,两个人站得那样近,也离得那样远。乔只能说:“你的
朋友绝不会让你失望。”而公主也只能这样回答:“罗马,当然是罗马。
”在人的一生里,即便只有这样一刻心灵的相通,也会少却多少遗憾!

5、《勇敢的心》课程:勇气

也许英雄并不是无所不能的神明,但英雄一定是无所畏惧的勇士。在你站在
霓虹闪烁的街头,当你面对卑鄙委琐的笑脸,你又想起了那个让你汗颜的华
莱士,这时你收起脸上惯带的笑容,默默地向梅尔?吉布森致敬,从来没有
这么庄重。因为他让我们明白,什么才是真正的英雄。“freedom!”华莱
士临死前的一声呐喊,把你的血也点燃了。

6、《辛德勒的名单》课程:责任

所谓责任,就是未必做得成却必须去做的事。对于辛德勒来说,救助落难的
犹太人是作为一个真正的人的责任。而把那段历史搬上银幕,则是斯皮尔
伯格作为一个犹太艺术家的责任。《辛德勒的名单》包含着对受难者的祭
奠,对拯救者的敬意,和对光明一定到来的信念。在影片放映后的一片赞
誉声中,斯皮尔伯格平静地把影片的全部收益捐给了美国的纳粹大屠杀纪
念馆。

7、《肖申克的救赎》课程:信念

“有一种鸟儿是永远也关不住的,因为它的每片羽翼上都沾满了自由的光辉
。”

一个人能够在15年痛苦的牢狱生活里,不放弃对自由的向往,这是一种怎
样的精神力量?所以他成功了,成功夺回了自由。《肖申克的救赎》中有
这样一句话:体制化是这样一种东西,一开始你排斥它,后来你习惯它,
直到最后你离不开它。想想看,我们的身体已经有多大一部分被体制化了?

8、《e.t》课程:童心

如果看《e.t》(外星人)时你流泪了,你不要害怕也不要惭愧,不管你
有多大的年纪。实际上,能够和孩子们一起为e.t的遭遇而悲喜,是一件
多么让人庆幸的事,这代表着我们还有一点童心未曾泯灭,代表着我们有
一些梦想还藏在心底。当长着一双孩子的眼睛的e.t用超能力让孩子们的
自行车飞上夜空,穿过那轮明月的时候,你是否感到了震憾?是否对自己
一些已经习惯了的东西产生了怀疑?

9、《现代启示录》课程:痛苦

战争是一种秩序的破坏,世界上最可悲最痛苦的事莫过于战争,最痛苦的战
争电影莫过于《现代启示录》。《现代启示录》讲的是人性的倒退,秩序的
破坏。但文明的进程却没有人能够阻挡。

10、《第七封印》课程:哲思

瑞典大师伯格曼代表作,在这部1957年完成的黑白影片中,伯格曼明确地提
出了“上帝是否存在”的疑问。我不敢说我看懂了《第七封印》,但如果要
我在临死之前看一部电影,我一定选择《第七封印》。

 
华语经典故事片:

《绿帽子》
【获奖情况】
纽约翠贝卡电影节最佳故事片奖
纽约翠贝卡电影节最佳摄制者新人奖
新加坡国际电影节银幕大奖入围
荷兰鹿特丹国际电影节参展影片

《颐和园》
获奖情况
《颐和园》入围第59届嘎纳电影节

《孔雀》
柏林国际电影节
银柏林熊-评审团大奖

《一半是海水,一半是火焰》
今年的新片,挺有内涵的

《鬼子来了》
获奖情况
2002年日本“每日电影奖”评奖中摘取最佳外语片大奖。
2000年5月21日,《鬼子来了》荣获第53届戛纳国际电影节评委会大奖。

《可可西里》
香港电影金像奖/Hong Kong Film Awards 2006 最佳亚洲电影 / Best Asian Film 获奖
东京国际电影节/Tokyo International Film Festival 2004 金奖 / Gold Award 提名
东京国际电影节/Tokyo International Film Festival 2004 特别评审团奖 / Special Jury Prize 获奖
台北金马影展/Taipei Golden Horse Film Festival 2004 最佳剧情片 / Best Picture 获奖 陆川
台北金马影展/Taipei Golden Horse Film Festival 2004 最佳剧情片 / Best Picture 提名
台北金马影展/Taipei Golden Horse Film Festival 2004 最佳导演 / Best Director 提名 陆川
台北金马影展/Taipei Golden Horse Film Festival 2004 最佳男主角 / Best Actor 提名 多布杰
台北金马影展/Taipei Golden Horse Film Festival 2004 最佳摄影 / Best Cinematography 获奖 曹郁

 

100部最值得看的经典电影(转帖)

1、最经典出场 《侏罗纪公园1》

公园园主哈默德与科学家阿兰、科学家艾丽驱车来到一个小山坡时,艾丽在看旁边的植物,阿兰突然打了个寒战,摘掉帽子和太阳镜,直勾勾地愣在那里,接着一把将艾丽的头拧过来,艾丽生气地说:“你这是干什么!”随后她看到了眼前的一切,瞠目结舌地摘下太阳镜站起身来。巨兽大吼一声后,镜头一直从脚推到它的头部,阿兰用手指着,结结巴巴地说:“那是……那是……那是只恐龙!”

2、最经典出场之二《危险人物》

梅尔.吉布森饰演的黑帮小人物刚从监狱里出来,他从乞丐的帽子里捡出一把纸钞;与一个绅士撞了个“满怀”,随手偷到了信用卡。在用信用卡换了行头和弄了把手枪后,他来到餐馆吃饭,服务生告诉他信用卡已经挂失,“再试一次。”他面无表情训斥着,用餐巾擦了擦嘴,抬屁股就走。

3、最经典出场之三《空中监狱》

片子中那个杀人狂的出场绝对让你过目不忘,他戴着面具,全身束缚,如同太空人,竟是被全副武装地警察硬生生“抬”了出来,这一出场就足够让你汗毛直起,冷汗直流,把主角凯奇都给盖了。

4、最意想不到的结尾《怪物史莱克》

公主最终变成了丑八怪,凶恶的火龙爱上了那头爱嚼勤的驴子,对好莱坞传统结局的彻底颠覆,这样的结局实在让人哭笑不得。

5、最让人失望的结尾《人工智能》

导演就像童话中扳玉米的熊一样,总是拾起这个丢下那个,仿佛前面有无数的创意,但是没有一个能够讲述完整。里面那个机器人舞男悲惨地连交代结局的机会都没有。

6、最危险的谋杀《超完美谋杀》

工业巨子迈克尔.道格拉斯为了报复不忠的妻子,说服了妻子的情人将妻子杀死。承诺收钱杀人的画家又雇杀手,却不料杀手失风。逃过一劫的妻子用手枪打死了丈夫。

7、最难的爱情智力游戏《天罗地网》

桀骜不逊的花花公子遭遇了女调查员的美貌与智慧,两人棋逢对手,爱情游戏如火如荼,“玩偷”与“调查”双双让道,女调查员放弃了酬金,皮尔斯.布里斯南在警方如临大敌的天罗地网下,不动声色将名画物归原主,又双双乘上爱情的飞机腾空而起。

8、最心碎的回家《烈日灼人》

离家出走10年的米迪亚终于回来了,可眼前的一切都已经物是人非,当年下令让他离开祖国的寇托付上校已经成为别墅的主人,当年深爱的姑娘已经成为上校的妻子,而更心碎的是他回来的目的是要逮捕上校,并执行枪决。

9、最具有诱惑力的“招生广告”《谈谈情跳跳舞》

役所广司所饰演的上班族每天乘坐地铁经过舞蹈学校时,都会看见一个美丽的身影忧郁地站在窗前,在凝视了多日后,终于抵挡不住诱惑,跳下地铁,朝舞蹈学校走去。

10、最木然的一张脸《毕业生》

影片一开头,在机场自动通道的达斯汀霍夫曼那张木然的脸,加上soundofsi-lence的音乐,“Istandalone,withoutbe-lieves.(我独自站立,不再相信)”

11、最不可错过的一秒钟《双面情人》

格温妮丝.帕尔特洛匆匆走下楼梯去赶乘地铁,就在这时一个小女孩挡住了去路,绕过小女孩或者小女孩被母亲抱走,就这一秒钟的相差,她的爱情际遇将完全改变。

12、最不可错过的会面《盗火线》

在一场疯狂的追捕之后,阿尔.帕西诺饰演的警官开车赶上罗伯特.德尼罗饰演的劫匪,却出其不意地邀他去喝一杯咖啡,两个对手像是老朋友一样在咖啡馆里对视而坐,漫不经心地“聊天”。

13、最令人向往的地方《肖申克的救赎》

“圣娜达卢”———墨西哥附近,太平洋中的一个小地方。“可知墨西哥人怎样形容太平洋吗?‘没有回忆的地方’,温暖而无回忆的地方,那将是我度过余生之地。”

14、最畅快的奔跑《燕尾蝶》

飞鸿从监狱里被释放出来在圆都街头奔跑,嘴里用中国话骂着:“莫名其妙!”“莫名其妙”这个成语在这个日本人的都市里释放出的巨大的轻松和自由的能量以及观看者能够体会到的飞鸿的死亡在慢慢迫近之间的落差让人喟叹。

15、最经典的扭屁股《低俗小说》

暗淡的背景、明亮的舞台、伴随着轻松的拉丁音乐,已经发福的特拉沃尔塔在那里卖命地舞动自己的水桶腰,依稀恢复了他过去“热舞王子”的模样。

16、最佳开场白《乱世佳人》

“岂有此理!战争、战争、又是战争!”赫思佳.奥哈拉(费雯莉饰)。这部伟大作品开场时赫思佳的那三声抱怨,已经预示着一出荡气回肠的史诗开幕了。

17、最佳结束语《沉默的羔羊》

“我真希望可以多聊一会儿,但我得和老朋友共进晚餐了。”汉尼伯尔.莱克特(安东尼奥.霍普金斯饰)。

18、最值得一听的电影《海上钢琴师》

配乐太美了,你甚至可以闭着眼听完整部影片,1900与爵士乐之王的钢琴对决是我见过最好、最有意思的音乐比赛,

19、最值得一看的电影《四月物语》

为了追寻高中时暗恋的学长山崎,北海道少女榆野卯月考上了远离家乡的武藏野大学,她一次次前往学长打工的书店,却迟迟不敢表白,镜头如同行云流水般明快,虽然故事零散,但每个镜头都宛如油画,实在赏心悦目。

20、最值得一闻的电影《理发师的男人》

安东尼爱上了理发店里的香味,后来他真的娶回了一个漂亮的理发师玛蒂尔达,两人沉浸在爱的世界里,沉浸在理发店醉人的香气中。直到有一天玛蒂尔达突然消逝,但那理发店的香气依然温柔地包围着。

21、最值得一尝的电影《饮食男女》

影片开头老爷子在厨房眼花缭乱的做菜,那刀工,那手法,就足够把你馋死,之后那一次比一次豪华的家庭宴会,各种菜肴花样百出,看得你直流口水。

22、最酷的一枪《夺宝骑兵》

印地安那.琼斯在突尼斯街道上搜寻,此时一个阿拉伯刀客突然冲出来,挥舞着他的弯刀。琼斯露出困惑而痛苦的表情,“我非这样不可吗?”话音刚落,抬手一枪就把对方撂倒了。

23、最酷的一刀《鳄鱼邓迪》

确切地说那是最酷的一把刀,当鳄鱼邓迪走在纽约中央大道上,有一个小贼企图用一把匕首打劫,这个澳大利亚人微微一笑:“那并不是真正的刀……”然后抽出自己狩猎的大刀,“这才是真正的刀!”

24、最缥缈的一掷《2001:太空漫游》

猿人将掌中的骨头一掷,竟投出了一艘宇宙飞船,转瞬间就跨越了人类历史长河。

25、最绝的一跳《百万美元大酒店》

在日出来临之前,汤姆来到酒店屋顶,在曙光降临时,汤姆开始向屋顶另一端狂奔,他似乎突然发现了什么,冲着楼外拼命挥手,接着如果跨出家门一般从容地跃出了楼顶……

26、最激动人心的一砸《飞越疯人院》

这一幕像一个宗教仪式:“疯子”之一——沉默寡言的印第安酋长搬起了疯人院的大理石水槽,用它砸破了疯人院的牢笼。

27、最及时的一个吻《骇客帝国》

“你不可能死掉,巫师说过我会爱上一个人,他就是救世主,你不可能死,因为———我爱你!”面对陷入昏迷中的尼欧(基努.里维斯),崔妮蒂(安妮.摩斯饰)俯身深深一吻,尼欧立即睁开了眼睛。

28、最激扬的鼓声《情迷六月花》

听听海地鼓,一边是人性的作战,一边是激越的鼓点,一格格闪回的镜头,最好是喝得半醺的时候看。

29、最好看的枪战《枪火》

两个狙击枪手间的对决。一个在楼顶,一个在楼下空地上隐蔽处,就这样一枪一枪地慢慢对射,每颗子弹都充满悬念。

30、最具有冲击力的唱段《夜奔》

“那是千军万马化作一滴男儿泪,那是暗夜孤身被弃置荒野的悲凉!”黄磊饰演留美的大提琴家少东,当他第一次听到林冲的“夜奔”,仿佛一下子被那声音击中了,从此再也不能摆脱。

31、最刺眼的镜头《鳗鱼》

那条鳗鱼被鱼叉狠狠地举起,在聚光灯下扭动身体的时候,心会随之一紧,感觉比所有的恐怖片都恐怖。

32、最难过的慢镜头《朋友》

当那个烟头在雨花中溅落的时候,你心中唯一的善良就被导演的残酷撕破了,鬼知道大哥杀人为什么总要以掉烟头作为信号。

33、最刺耳的铃声《美国往事》

从开头开始,电话铃声,电话铃声,简直让人心烦意乱的电话铃声。看着德尼罗经过火车站的外景,你不禁会对秩序混乱的早期工业化社会产生向往,而且忘记自己恰恰身处其中,并且经常咒骂。

34、最漂亮的远景《榴莲飘飘》

雪地上,秦燕一个人慢慢走着,远景拍出来的牡丹江的雪地给人一种那么熟悉但是又那么陌生的感觉。

35、最简洁的表白《邮差》

利用从诗人那里批发来的大量“二手货”,出生渔夫之家的邮差马里奥(西莫特洛希饰)最终赢得姑娘芳心,这至少说明两点,1、艺术天赋不高不要紧,关键在于以诚动人,能持之以恒。2、写情书、情诗什么的,一定要亲自送到人家手里,当心送信者横刀夺爱。

36、最独特的表白《运转手之恋》

出租车司机苏大全在与年轻美丽的女交警庄静文邂逅后,立即陷入情网,为了博取美人一笑,他从此开始不停地在她面前违章驾驶,最后为了在她心中留下深刻“印象”,他竟从作法医的母亲那里拿来个人头标本,放在后座上,让女交警误以为他是杀人犯,像这么独特的表白,难怪女交警无法抗拒了。

37、最伤感的表白《八月照相馆》

开照相馆的正源爱上了美丽的德琳,但他却身患重病,不久于人世,为了不让德琳知道,正源有意回避,直至死亡,而他的表白就是在照相馆中挂上德琳照片,让心爱人的笑永远刻在心上。“我知道爱情会褪色,就像老照片,而你却会在我心中永远美丽……”

38、最喜出望外的表白《我爱厨房》

一对恋人已经分离了若干年,大雨中陈小春饰演的男青年,浑身湿透,敲开了女孩的门:

男:“你好。”

女:“你好。”

男:“你最近好吗?”

女:“挺好的,你呢?听说你去国外了。”

男:“……你结婚了吗?”

女:“没有啊!”

男:(喜极而泣)“那,你干吗不请我进你家里坐?!”

39、最乐观的表白《阿呆与阿瓜》

为了追求自己的梦中情人,吉姆凯瑞饰演的阿呆历经波折,长途跋涉,却发现别人已经是有夫之妇,但他还是敢于询问自己是否有机会,对方回答就是回绝:“百万分之一。”可我们这位活宝竟满心欢喜地说到:“那就是说我还有门!”

40、最羞涩的表白《理智与情感》

一脸腼腆的休.格兰特对着爱玛.汤普森支支吾吾地说:“Howabout,howaboutyou’……”躲躲闪闪、犹犹疑疑、欲说还羞,让人家怎么才能明白,还好结果是令人满意的。

41、最肆无忌惮的表白《东成西就》

洪七公(张学友饰)像只蚱蜢一样飞来飞去、跳上跳下,对着“表妹”,无数声的“我爱你”就在广播体操般的运动中喊了出来。把爱情表白用这样肆无忌惮的方式表现,也只有香港贺岁片里用得出来,节日里看这样的片子最适合了,当心笑得肚子疼。

42、最淳朴的台词《失乐园》

凛子说:7岁时,在莲花田里迷了路,日落了,心里很害怕。

久木说:9岁时,让爸爸给我买了一副拳击手套,我高兴得戴着它睡着了。

凛子说:14岁时,第一次穿丝袜,脚在低腰皮鞋里感觉滑滑的。

久木说:17岁时,肯尼迪总统被暗杀,我在电视机旁呆住了。

凛子说:25岁相亲结婚。婚礼当日刚好遇上台风。

久木说:27岁长女出生。工作很忙,连医院也没有去。

凛子说:38岁那年夏天,我遇到了你,我们相爱了。

久木说:50岁,第一次为女人着迷。

凛子说:38岁的冬天……和你永远在一起,永远……

久木说:永远……

43、最暧昧的表白《阿飞正传》

慵懒的下午,阿飞对着苏丽珍说:“看着我的表一分钟…16号,4月16号,1960年4月16日三点之前的一分钟你跟我在一起,因为你,我会记得这一分钟。从现在开始我们就是一分钟的朋友,这是事实你改变不了,因为已经过去了。明天我会再来。”

44、最纯真的表白《杀手莱昂》

12岁的玛蒂达突然说:“莱昂,我想我是爱上你了,这是我的初恋,你知道吗?”

正是因为小女孩的这句表白,使孤僻的杀手莱昂最后决定用死来换取女孩未来的安定和幸福,莱昂因为玛蒂达变成了一个天使般的杀手。

45、最含蓄的表白《花样年华》

张曼玉听说梁朝伟病了,就叫人出去买芝麻糊,回家竟一下子烧了一大锅。爱意只在心中,张被邻居问起为何一个人烧这么多芝麻糊,却是硬找出理由搪塞。

46、最荡气回肠的复仇宣言《角斗士》

竞技场内,马西斯率领伙伴击败对手,国王考默德斯来到场内。

考默德斯:“你怎么敢背对着我?奴才!摘下面具,报上名字!”

马西斯转过身,拿下面具,无比坚定:“我叫马西斯.迪西默斯.梅里达斯,北方军司令,费莱克斯部队将军,先王马克斯.奥莱利斯的忠实奴仆,一个被谋杀的男孩的父亲,一个惨死屠刀之下的女子的丈夫,无论今生来世,此仇不报,誓不为人。”

47、最大胆的东方人的独白《侯鸟》

“每个人的身体都很寂莫,不是不说它就不寂寞了。”

现在很多中国家庭都时兴移民,这部片子讲述的也是移民家庭的问题。虽然它将性的伦理作为主题,不过在看过西方人的片子以后,我宁愿将它看作是讲述一个移民故事的电影,尤其是相比《刮痧》而言,它更加实在和沉稳。

48、最亲切的旁白《苏州河》

旁白:苏州河,一条〃沉淀了这个城市的繁华、往事、传说和所有的垃圾〃的河。

尽管娄烨在创作该片的时候看起来是十分自信的,不过那种通过摄像机进行的叙述方式和自以为是的旁白总让人想起过去的苏童的小说。不过,总体来说,在国产影片当中,《苏州河》属于比较成熟的那种,故事讲得不沉闷,旁白和对白也很适合喜欢王家卫的朋友们的口味,所谓一不小心成了“经典台词”。

49、最煽情的台词《蓝宇》

悍东:人死了,什么都完了。

蓝宇:没完,留下的记忆还没完呢!

在我看来,蓝宇的性别其实在片中是弱化的,如果你将他看作一个女人,你会觉得这是一本相当好的爱情片,有那么多台词。

50、最苦涩的笑话《活着》

一个作为反动权威的教授因为吃了7个包子差点撑死,葛优冷峻地评论道:”我听说,一个馒头浸水以后就涨成7个,那么7个就是七七四十九个,就是这么大———!”

51、恋爱女人最亮的眼神《生命的证据》

营救被绑架人质的谈判专家罗塞.克劳,被梅格.赖恩散发出的魅力吸引,破例以个人名义参与营救其被绑架的丈夫,最后关头不惜带领雇佣军出生入死。丈夫成功被营救了出来,梅格.赖恩给丈夫的眼神很是索然,但当她走向克劳时,那双闪闪发亮的眼睛,只有燃烧在火热恋爱中的女人才有。这样的眼神,应该是得益于银幕下两人真实恋情,而绝非能“演”的。

52、最危险的男女杀手之爱《普里奇家族的荣誉》

普里奇家族的杀手尼克尔森,与一名完美的职业女杀手邂逅相爱并结婚。在家族的荣誉对这段感情的压力下,尼克尔森奉命将妻子杀死。与此同时,女杀手正接受另一方的雇佣,要杀的目标正是尼克尔森。最后关头,尼克尔森手中的武器是把锋利的匕首,女杀手握的是手枪。枪法从不失误的女杀手在仅几米的近距离内数枪打飞,但尼克尔森的刀子却准确地将妻子的头颈死死地钉在了墙上。女杀手在生命的最后关头,手中的枪因爱情发生了动摇。

53、最美丽的“借腹生子”《心火》

妻子变成植物人的英国贵族找来苏菲玛索,要求借腹生子,但有个条件:孩子生下后,一切关系到此为止。然而,孩子出生后离去的苏菲玛索在7年之后,找到并应聘了自己孩子的家庭教师。不明事理的孩子在百般刁难了生母后,双方感情日深。孩子及父亲最终冲破世俗的阻力,接纳了苏菲玛索,血脉相连的三个人因为“借腹生子”走到了一起。

54、最不该发生的爱情《小偷》

1952年的前苏联,带着6岁儿子桑亚的母亲卡嘉在火车上遭遇高大英俊、风度翩翩的“军人”托杨。当爱的火焰在女人的心中熊熊燃烧时,她却发现托杨是一个专到陌生市镇与左邻右舍混熟后,将邻居席卷一空的惯偷。在爱情与道德间挣扎后,理智让卡嘉选择了离去。然而当火车在隆隆的轰鸣中慢慢启动时,这样的选择一瞬间变得不堪一击地轰然倒塌,女人放弃了远去的列车。站台上,警察将小偷捕获。卡嘉带着儿子,心中思念着狱中的小偷爱人,等待他的刑满释放。卡嘉因流产去世。6年后,12岁的桑亚找到出狱的托杨。桑亚用托杨6年前因入狱遗留在行李中的手枪,打死了母亲深爱的男人。

55、最绝望的爱情《不夜城》

在黎明到来的公路桥头,健一(金城武)赶上了夏美(山本未来),一把抱住她,接着开枪杀害了自己心爱的人,杀害了自己在枪领弹雨中都曾经保护的爱人,夏美最后的遗言是:“健一,下雪了!”在东京的午夜,一个生命化作雪花飘逝融化。

56、最刺激的爱情《杀死你的温柔》

犯罪心理专家阿利森柔弱娇美,一天在超级市场邂逅美男子乔西。被其无法抵挡的魅力深深迷惑,两人很快缠绵在一起。但同时,一系列恐怖的怪事在阿利森的生活里接连发生:应该装满牛奶的容器中倒出的却是鲜血;枯萎的花朵夹着恶语纸条送到府上……阿利森惊恐万状,但一切却毫无头绪。是陌生男人在制造恐怖?导演想探讨的是,看似紧密无间的男女其实彼此并不了解对方,结局出人意料。

57、最痛苦的爱情《远离拉斯维加斯》

这两个社会角色的爱情故事注定了以悲剧终结。好莱坞编剧班因为酗酒而自毁前程,意志消沉之下,他来到赌城拉斯维加斯,准备就此醉死他乡,不料偶然遇到了妓女莎拉。饱受剥削和虐待的莎拉在班身上找到了温情,班也从莎拉那里得到了心灵的慰籍。两颗空虚的心灵在灯红酒绿的背后发展出一段刻骨铭心的爱情。

58、最不可原谅的爱情《蝶恋花》

迈克尔(凯文.科斯特纳)从空军部队退役,在老朋友安东尼的豪宅内,与其妻子遭遇激情。面对老朋友及自己妻子的双重背叛,安东尼爆发了无可遏止的愤怒,开始了对通奸的情人无情野蛮的攻击……迈克尔死里逃生再找到安东尼报仇,此时,心爱的女人已被卖到妓院奄奄一息。

59、最摇摆不定的三角关系《激情交叉点》

建筑师文森特依然爱着已经和他分居的妻子和女儿,但又被情人———一个年轻靓丽的女记者深深吸引。文森特最终死于一场车祸,而其妻子在丈夫的口袋里,发现一封写给情人但还没有发出去的绝交信,信中极尽忏悔和歉意;而情人在家里的电话录音留言中,听到了一段感情真挚的求婚宣言。于是,两个女人带着各自情感上的满足,和对一个男人的怀念,在医院门前友好地分手。

60、开打爱情的最高价《不道德的交易》

一对原来亲密

60、开打爱情的最高价《不道德的交易》

一对原来亲密无间的夫妻,在经济陷入困境时,突然面临一个天降财运:一名富翁以100万美元为代价,换取与那位妻子共度一夜良宵,以验证“金钱能否换取爱情”。夫妇二人在一夜无眠的考虑后,认为爱情既然基础牢靠,那么“一夜”过后,两人关系不会受到影响。于是,在金钱的诱惑下,爱情向金钱缴械投降,但是“短暂的一夜”后,夫妇的感情陷入了漫长的黑暗中…

61、最刻骨铭心的爱情《廊桥遗梦》

虽然影片讲述的是一段关于一名中年农妇与飘泊摄影家的婚外情故事,但是农妇斯特里普最终还是选择了家庭责任,把这段刻骨铭心的的感情深深埋藏在了心里。

这是一场自我爱情与家庭责任的较量,“一生只有一次”的爱情被斯特里普演绎得入木三分,40多岁的农妇初遇摄影家,竟不能自已地有如一个怀春的少女。经过了放弃的绝望后,农妇重回平静如水的家庭。但再次从汽车玻璃窗看到一直无法忘怀的摄影家时,泪流满面的斯特里普从心底里发出了“我错了”的后悔声音,注定了其从此内心将不再平静。

62最经得起考验的爱情《西西里的美丽传说》

意大利西西里岛的小村落,丈夫远征沙场,美丽无比的玛莲娜遭到了村里所有男人的垂涎、女人的嫉妒,唯有13岁的少年雷纳多善意执地暗恋着她。雷纳多见证了那些玛莲娜因美丽而艰难的日子——丈夫阵亡消息传来,玛莲娜因生活所迫做了各式人等的情妇、因纳粹的入侵进了妓院、因遭到众女人的嫉妒仇恨被当街剥光衣服痛打……少年雷纳多也从天真走向了成熟。战争结束,断臂的丈夫从战场归来,听到了无数关于妻子的闲言碎语的丈夫,和经历了太多已显得憔悴却依然美丽的玛莲娜,还是坚定相依地重新走在了一起。

63最令人期待的约会《西雅图夜未眠》

素昧平生的两人相约在帝国大厦顶层,当帝国大厦出现红色的心时,安妮(梅格·瑞安)匆匆赶到帝国大厦,却与山姆(汤姆·汉克斯)父子俩擦肩而过,独自面对着寂静而空无一人的顶层。看到这里你肯定万分焦急,恨不得冲上去将山姆叫回,就让他们赶快见面吧!

64最不愿发生的约会《情枭的黎明》

卡里托(阿尔·帕西诺饰)因为贩毒被判入狱三十年,五年后,他提前出狱,并决定痛改前非,但“江湖中有一条路,踏上就不能回头,它就是不归路。”当他突破冲冲阻碍,逃过多次追杀后,终于和旧情人在车站会面时,黑暗中射出一颗子弹,卡里托倒在爱人的怀中,喃喃地说:“亲爱的,我尽力了。”

65最激动的少年约会《不一样的童年》

向往黑道生活的少年,爱上了一个黑人姑娘。黑道老大教导少年,去约会时,开车到来的姑娘,若是先帮你打开车门,说明她是个好姑娘,否则就说明她是个自私的人,别理她。少年如期赴约,黑姑娘停下车后,果然先侧过身伸手打开了驾坐边的另一扇门,这时,影片用慢镜头表现了这一令少年激动的约会。

66最佳单身男人《男人百分百》

他知道你心里的每一个念头,他明白你所希翼的每个愿望,他会安排好你的一切,当然梅尔·吉布森实在是有点累,可这样的男人谁不喜欢,不过前提是他真的是喜欢你,而不是逢场作戏。

67最佳单身女郎《布里奇斯琼斯单身日记》

这个30岁的英国单身女人浑身都是小毛病,她有点发福,自以为是,罗嗦罗嗦,在爱情上一直缺乏自信,但她的生活依然丰富多彩,光是她每天入睡前,从CD架上取下的那些唱片,就首首都是经典,仅从这一点,就说明这个爱异想天开的小女子可不简单。

68最惨的黑帮老大《心理治疗》

原本呼风唤雨,心狠手辣的黑帮老大保罗·维迪,在一场黑手党帮派的火拼后,却变得如同女人一般,吃不下睡不着,而且变得心肠特软,连看看电视剧都会触景生情,潸然泪下。可在弟兄们面前,他又不能有一点露馅,这样的老大真是不当也罢。

69淑女最大胆的选择《燃情岁月》

小弟带回的女友,在与一家人相处日深后,大胆地选择了内心孤僻、野性十足的二哥崔斯汀。一家人原先融洽的关系开始瓦解。与大哥的富有责任心相比,崔斯汀从一开始就对女人有了不作任何承诺的表示,女人毅然决然义无返顾,她的选择服从于自己内心的声音。

70最令人胸闷的女人《赌城风云》

赌场经理罗伯特·德尼洛事业如日中天,财源滚滚,娶回了莎郎·斯通。但德尼洛抱回了女人却没有得到爱情。这个美丽的女人没有因德尼洛的真心和财富安心,其内心却向着贩毒堕落的隐君子小混混,还用家里的巨款供小混混“吃软饭”。事情被德尼洛发现并对小混混情敌施以“教训”后,莎郎陷入了吸毒酗酒和歇斯底里的混乱之中……

71最有魅力的骗子牛仔《末路狂花》

两个寂寞的女人,有一天突发奇想,干出了一件惊人的事,不得已只能踏上了逃亡之路,一路狂奔。两人经历了种种遭遇,后面更是有紧追不舍的警察……仅出场15分钟的布拉德·彼特因该片而成名。彼特在片中是一个骗色劫财的牛仔,后来却成了女性之间的话题和幻想。年轻妇人都声称愿意邂逅这一场艳遇———成为这个牛仔的下一个受害者。

72最荒诞的“入侵者”《成为马尔科维奇》

如果有一天,你突然进入了一个名演员的身体,虽然身体是他的,可他的头脑却成了你的,他的一言一行全都听你的使唤,你从此成了名人,想办的事情变得一帆风顺,你想追求的女孩子也变成手到擒来,影片中最荒诞的是演员的妻子最后也进入了他的身体,而她竟然爱上了别的女人,还和那个女人上了床……

73最可爱的男演员《比利艾里奥特》

一个男孩突然“掉进”了女人堆。1984年,英国东北部的一个煤矿小镇上,少年比利整日沉浸在美妙的钢琴曲中,终于有一天他拿着父亲给他报名上拳击课的钱悄悄学起了芭蕾舞,舞蹈课上个子瘦高、一头短发、毫无舞蹈基础的小比利特别“突出”,那份尴尬而又执着的神情让人忍俊不止。

74最可爱的女演员《天使爱美丽》

谁能不幻想自己有一个雷锋一样而且张了一张孩子一样的面孔的女友。不管是男人还是女人。尤其是当她表现的面部表情居然如此丰富多彩,做的好事又是如此体贴入微,你能想象雷锋同志帮助盲人过马路,还向盲人描述路边行人的面孔和面包店里面包的香味吗?

75最狂热的冲浪爱好者《现代启示录》

空中轻骑队的中校基尔戈轰炸并占领了一个越南海滨小村,他竟突发奇想地让士兵在枪林弹雨中比赛冲浪,他塞给士兵一块冲浪板,大声命令:“不冲浪就去打仗,明白吗?我给你们掩护……”

76最倒霉的男演员《瘦身男女》

刘德华减肥成功以后恢复了那种俊朗的外貌,露出了花花公子一样的微笑。看到这里心就一酸,有些人毁就毁在太英俊的脸上了。

77最艰难的“走私犯”《醉马时刻》

在天寒地冻的两伊边界,当爸爸误触地雷身亡,年仅12岁的阿育成了家里的支柱,他唯一能做的,就是冒险往来国界走私货物**。只是在这条漫漫走私路上,处处有地雷、又有埋伏打劫、而且天寒地冻,冷到连运货的骡子,都得喝过酒才走得动。可阿育必须前进,因为身患癌症的侏儒哥哥只有几个月的寿命了……

78最残酷搞笑的死亡《拯救大兵雷恩》

一名士兵头上的钢盔中弹,子弹击中钢体的声音清脆悦耳。士兵脱下钢帽,看了看帽子上的弹孔,摸了摸自己幸免于难的头颅,还没有来得及庆幸,一颗子弹射进了他刚刚摸过的脑袋。

79最优美的死亡《漂流浴室》

如果你能够忍受并且欣赏雨季的话,那么你可能会领会导演金伎德乐趣———据说该片在威尼斯影展上放映的时候有人因为忍受不住压抑而晕倒。最后一幕徐倩死去的镜头,船中美丽的尸体被芦苇和水光辉映着,像极了前年《美国美人》那幅著名的玫瑰少女海报,却是水墨版的。

80黑道人物最体面的死亡《教父1》

老教父马龙白·兰度在与小孙子玩耍嬉戏时,安然睡去。银幕上的这一少见场景,结束了黑道中人被乱枪打死的死亡方式,成了黑道人物最体面最安详的死亡。

81最昂贵的“死亡”《珍珠港》

这次死的是一颗炸弹,在珍珠港昏天暗地的轰炸中,你的眼睛似乎突然被按到了一颗炸弹上,跟随着这颗炸弹向下方的美国战舰“亚利桑那”号冲去,跟随它撞击甲板,钻入舰身,接着和“眼球”爆炸。《珍珠港》花了2700万美元来作特效,有这样一枚炸弹就值了。

82最不明不白的死亡《天生杀人狂》

那个全程跟踪采访鸳鸯杀手的记者韦恩的死亡让我有点惋惜,他不过是多说了几句,就遭到了莫名的一枪。不用说,我是同情他的,他敬业得让我有点惭愧了,所以尽管我预计到他非死不可,但是当他被结果的时候我还是忍不住偷偷看看窗外:对面是夜晚中灯火辉煌的高楼和高楼里奋斗不息的男男女女。

83最强硬的死亡“惩罚”《教父2》

接替老教父马龙·白兰度的阿尔·帕西诺,发现了哥哥有吃里爬外行径,毅然决定大义灭亲。一个月黑风高的夜晚,面对死不认帐的哥哥,阿尔·帕西诺扔下“再说你没做,你在把我当傻瓜”后,以送他到拉斯维加斯为饵,在汽车上将其杀死。银幕上,留下了垂死的人蹬破汽车玻璃窗的难忘镜头。

84最酷的死亡《蜀山传》

张柏芝一手托腮,呆坐在悬崖上的姿态是不是很酷,不过最后她的脸像瓷器一样破裂的镜头让人觉得不大吉利:尤其是在出了飞车惨祸那档子事情后。

85最值得期待的续集《黑衣人2》

马年可以称为电影的续集年,《哈利·波特》还有好几本书没拍、《指环王》还有两部曲在拍摄,其实这些续集不管拍得如何,都已早早在影迷心中预定了位置,因此马年值得一看的倒是《黑衣人》的续集,黑衣、黑裤、黑色领带、黑色墨镜和黑色影子,威尔·史密斯和汤姆·李·琼斯两名干探的再次联手大战虫族外星人,实在让人兴奋。

86最差劲的续集《暗战2》

看郑伊健和林雪猜铜板是本片最可看的地方。事实上,走火入魔的猜铜板游戏似乎暗示着整部电影的基调。如果你是因为看了《暗战》而去购买暗战的续集,那么,你被宽恕了。不过显然杜琪峰太想超越第一集了,这样使得很多精心设计的较量看上去显得突兀,而且不近情理。

87最反讽的电影《猜火车》

《猜火车》讲述的是一群英国年轻人的故事,他们吸毒、破坏、无所事事。最后其中一个人开始皈依社会,他偷走了同伙购买毒品所得的钱。让人想起《发条橙》,一个人通过道德真正的堕落却赢得了社会的认同,不得不说是一种反讽。还有最后的结局,给我们描绘了青头皈依社会以后的种种生活,让人神往的小康生活,同样是我们追求的。

88最胆小的电影《涩谷24小时》

如果按照西方人的观点来拍“日本的高中女生中存在的援助交际”这样深刻的社会问题,肯定是残酷得不能让人直视。日本导演和西方导演最大的不同是他们从不把事情做绝,《涩谷24小时》的结局,总归还有一点人性的温暖,而不是像西片一样,将恶心巴拉的妖怪打败以后,最后却发现妖怪已经早早地在某个地方生了一个一脸淳朴但是注定会为续集中的人类带来灾难的小妖怪。

89最血腥的电影《角斗俱乐部》

该片充满漂亮的打斗和绚丽的爆炸,如果你具备随时随地可以暂时不动脑筋的习惯,那么你绝对可以得到乐趣,当然如果你是女生,那么光是布拉德·皮特一个人就足够了。当然你还能学习到肥皂居然可以用人身体上的油脂制造,而且还能够制造炸药。

90最恐怖的电影《大逃杀》

据说是这本片子带动了日本少年的暴力潮。片中林林总总的残杀手段给人的感觉是卑鄙和无耻,而不是快感和英雄主义,这是香港的蛊惑仔系列不能和他相提并论的。如果说孩子们还有希望的话,应该让他们看看这本片子。当然将本片作为科教片给商业工作者看也是经典的———他们将领会到诚信在生产关系和交换关系中的重要性。

91最耐看的青春片《坏孩子的天空》

很多人将它归类于简单的残酷青春片,不知道现在是不是叫“惨青”,不过我倒是觉得他给人不是简单的关于童年的回忆。两个问题少年的成长最后不可避免地又回到原点,让人不得不思索:奋斗的出路何在,虽然在淮海路上思考这样的问题有些不合时宜。

92最“粗制滥造”的卡通《地毯鼠在巴黎》

如果你看厌了迪斯尼制作精美,故事情节细致的卡通片,这部粗糙的片子一定会让你很不“舒服”,画面“粗制滥造”,角色毫无性格,对其他影片的大肆抄袭,但这部古怪无比的影片却偏偏能在美国获得超过1亿美元的票房,反正只有一个目的———把你逗乐。

93最“深奥”的卡通《唤醒人生》

因为你实在说不清它是一部奇特的卡通故事片,还是部复杂的哲理片,片中对白引用了包括柏拉图、亚里士多德、托马斯·曼等二十多名哲学家对人生的思考,没有一定的功底肯定不知所云,学哲学的肯定会喜欢它。

94最用心拍摄的电影《昆虫世界》

如果一部影片:光前期筹备就是十五年,设计器材又花了两年,最后餐风饮露拍摄了整整三年,而正式的成片只有1小时零4分钟,你说这是不是部好片子?这就是获得了第49届嘎纳电影节高等技术委员会大奖的影片《昆虫世界》。

95最有哲理的电影《钟无艳》

该片的确是节约成本的典范,宏大的历史被处理成了室内剧,连最难表现的战争场面也由皮影戏一带而过。让我对香港导演的佩服真是如同黄河泛滥一发不可收拾。不过,该片的确是小而精,几乎是有预谋有系统地如同教科书一样颠覆了传统的中国历史观,颠覆得比周星驰更加理性。

96最费解的影片《失忆》

这部片子根本就是剪辑错误,结尾放到了开头,开头扔到了结尾,整个故事就是倒着讲,接着每隔三五分钟进行一次闪回,其中又夹杂着若干条不同的故事线索,导演似乎为了让你看懂,还采取了黑白与彩色交互出现的方式,结果是让人更加云山雾罩,如果你没有足够的耐心,根本支撑不到最后,总之这片子实在看不明白。

97最“不负责任”的影片之一《U-571》

如果没有影片介绍,天知道这部片子是讲什么的,不禁让人想起《四个婚礼一个葬礼》中的经典笑话:“U2”是什么?U2?我当时认为他是潜水艇?

98最“不负责任”的影片之二《一一》

片名就两个字,还是用了汉字里可用的最少的笔划,如果说是“一生二、二生三、三生万物”,那就太深奥。

99最“不负责任”的影片之三《恐怖电影1、2》

这根本就不是什么恐怖电影,观众都是给笑死的,而不是给吓死的,这部片子又堪称最精彩的剽窃作品,以往的经典恐怖片的片断都被它拿来调侃了一番,可还真调侃得让人捧腹。

100最想看,看后还不明所以的电影《2046》

王家卫慢工出细活的功夫让人又爱又恨,一部《花样年华》掀起的复古浪潮,更高的是他还不忘在电影里面作广告,那闪闪生辉的“2046”的门号引得人对片子遐想联翩,可这王家卫的第一部科幻电影,确实迷幻得可以,演员换了一拨又一拨,开机消息听了无数次。好不容易公映了,却是睡着的比没看懂的多,没看懂的比看懂了的多。

那些年,用过的无节操微博工具

[核心提示] 随着微博的火热,专注于微博营销也成了一门行业,但外行人很难了解里面的实情,来看看都有哪些无节操的微博工具吧。

最近在做一些微博工具的功能的比较,然后收到一些用户的需求,觉得有些东西十分有趣。如果不是做这一行的事情,很难想象到还有这么多千奇百怪的想法和需求。所以就将它们记录下来。

所谓有需求就会有市场,有些工具摆的了台面,有些工具却不敢大肆宣传。某些工具有些企业虽然私下也使用过,但口中却尽量避而不谈。如果你是内行人,也许某种程度上你会理解这背后是运营人员和企业的迷惑和无可奈何。

1. 自动帮你不停的@目标人群

几乎每个微博用户都被这样@过吧。买粉,减肥药,衣服,论文之类的广告。只要自备僵尸微博多个,微博内容多条,当僵尸帐号发送原微博后,系统自动帮僵尸微博不断转发该微博,同时并不断@相关人群。它们就像打不死的小强,即使你频频举报它们,还是会不断受到这样的广告骚扰。

最近新浪的反垃圾开始发力了,已经找不到之前被@的微博了。不过在黑名单里还是可以看到那些垃圾账号,如上图。

2. 自动回复

与上面的功能相反,不但不是骚扰,还可能是粉丝乐见的。一般的微博用户会较少有这种需求,只有当有繁多的微博评论,且真实度很高,才会想用。比如名人的评论很多,想要装亲民,又没有时间一一回复。于是,自动回复工具产生。李开复先生也许就是这么做的。

开始当收到喜欢的人回复自己时,粉丝会开心不已,但很快就会被发现,只是有一个机器在自动回复而已。不知道这样的把戏会流行多久。

3. 指定某几个帐号,自动转发他们的微博

这个是什么情况呢,其实蛮好玩的。比如某些企业让他们的地方性微博转发总公司的发的微博,每条必转,当总公司的微博使用某个定时器发送后,这些地方性微博却苦巴巴地盯着,一条不落的转发,所以萌生了这个需求。这也是僵尸粉互转微博的一种方式。

4. 自动批量关注,自动解除关注

这个功能也很有意思,比如你的产品目标人群是20—30岁上海地区的女性用户。当设定好这些条件后,系统就帮助你开始自动关注这些帐号,限制自动关注 20 个,N 天以后,如果这些微博没有回粉你,系统会自动帮助你取消没有回粉你的微博。以此通过互粉的方式帮助用户快速增加一批有质量的粉丝。但由于新浪关注的人有限制,这只是权宜之计。

5. 企业积分制度

这是我真实感受的用户的一种需求,虽然以上的功能不是那么靠谱,但这个需求具有某种启发意义。企业为了鼓励员工转发,评论,甚至贡献企业微博的内容,希望能有一个积分系统,当员工与企业微博有了互动,便能增加积分,用积分可以得到一些额外福利等等。

为什么说它有启发性,是因为企业是在通过鼓励的方式希望提高微博的活跃度,但是也有一种弊端,当一个企业只剩内部员工自娱自乐时,这也失去了企业社交媒体的意义。

但是我们也可以这样想,如果每个人都可以创建鼓励制度,鼓励别人来与我互动,以此来得到某些奖励,是不是也是很 cool 的方法?

结语

以上只是市场上微博功能的鳳毛鳞角,企业为了增加微博的粉丝数和活跃度,可谓想尽奇招。一点一点慢慢累积粉丝难以满足企业的需求,运营人员为了完成指标不得不走偏门,用奇法。但这也只能是权宜之计,俗话说,过得了初一,过不了十五,这些日抛型的工具默默赚了一桶金后,得不偿失的还是企业用户。

除非特别声明,极客观察均为极客公园原创报道,转载请注明原文链接。
原文地址:http://www.geekpark.net/read/view/178221
标签: