自信是成功的一半:开发安全的程序正确的理念是成功的一半




  案例 #1
  味道闻起来很糟糕两个多月以来数十万加仑污水流到了澳大利亚公园、河流以及家旅馆地面上而无人知晓其原因水生动植物不断地死亡而且有条小河中水已经变黑了2000 年 4 月 23 日当警方逮捕了名男子时才解开了这个谜团这名男子直在使用计算机和无线电设备对管理污水和饮用水机器进行完全控制动机是什么呢?对其审讯口供表明他正试图获得份获利丰厚咨询合同以解决他所造成问题事实原本还要糟糕得多
  
  案例 #2
  有个小偷(只知道他叫“Maxus”)从在线音乐公司 CD Universe 偷了 35 万个信用卡号然后勒索 10 万美元赎金当 CD Universe 拒绝支付赎金时Maxus 就公开张贴了这些信用卡号 - 这损害了 CD Universe 顾客并使这些顾客有合理理由转而光顾其它商店
  
  案例 #3
  CIA 最近了解到奥萨马·本·拉登基地恐怖分子组织对网络恐怖活动有着“非常浓厚兴趣”这是人们先前所不相信链接到基地组织计算机都可以获得各种计算机“破解”工具旨在引起灾难性破坏
  
  它们正在攻击您 - 您准备好了吗?
  计算机攻击已成为个非常严重问题1997 年CERT/CC 报告发生了 2134 起计算机性事件并报告了 311 个截然区别性漏洞;到 2002 年所报告计算机安全性事件已上升至 82094 起而安全性漏洞则上升到 4129 个计算机安全性协会(Computer Security InstituteCSI)和旧金山联邦调查局(Federal Bureau of InvestigationFBI)计算机入侵小组于 2003 年调查了 503 家大型公司和政府机构发现其中有 92% 被调查者都报告受到过攻击这些被调查者中有 78% 确认他们因特网连接经常受到攻击并有 36% 确认他们内部系统经常受到攻击有 75% 被调查者承认他们受到了经济损失尽管只有 47% 被调查者可以确定他们损失具体数目;但这些可以确定具体数目组织损失超过了 2 亿美元
  
  攻击持续升温原因有许多计算机在不断地联网这使攻击者能比较容易地攻击世界范围内任何联网计算机而不会有什么风险计算机已经非常普及;它们现在控制着比较多具有价值东西(这使它们值得进行攻击)过去顾客十分愿意购买不安全软件Software所以根本没人愿意出钱开发安全软件Software
  
  电子世界现在是个危险程度更加高地方今天我们要求几乎所有应用都是安全应用例如实际上我们要求每个 Web 应用都是安全应用不可信用户可能向它们发送数据甚至那些显示或编辑本地文件应用(如字处理器)都必须受到保护有时用户将显示或编辑以电子邮件方式发送给他们数据
  
  如果您在开发软件Software那么您就是身处战场需要知道如何保护您自己遗憾大多数软件Software开发人员从未知晓如何编写安全应用
  
  本专栏将帮助您了解如何编写安全应用学校里很少会教这类信息其它地方也不太会讲授这主题如果您学习了本专栏那么您将能够保护您避免当前所用最常见攻击尽管我们主要讨论 Linux 操作系统(也称为 GNU/Linux)但是几乎所有内容都适用于任何类 UNIX 系统而且其中许多内容也适用于其它操作系统(象 Microsoft )
  
  对于这第篇文章我将先介绍些基础知识:安全性术语、改变您理念、自由/开放源码软件Software(Free-Libre/open source softwareFLOSS)影响以及确定安全性需求
  
  术语:这些词表示什么意思?
  每领域都有其自己术语而计算机安全性领域中术语则有些杂乱无章其中充斥着首字母缩写词和易混淆以下几个定义应该有所帮助:
  
  攻击者(attacker)(也称为非法闯入者)是这样人:他试图使或计算机做某些事情而这些事情是明确禁止做如为了获得或更改私有数据而闯入不属于他们计算机
  
  黑客(hacker)是计算机专家或计算机狂热者并非所有攻击者都是黑客 - 有些攻击者根本不了解计算机同样并非所有黑客都是攻击者 - 许多黑客编写保护您!媒体公司只关注那些攻击计算机系统黑客而往往忽视那些计算机保卫者所以有些人就使用术语“黑客”表示只进行攻击黑客但是如果您认为所有黑客都是攻击者那么您在理解许多安全性文章时会碰到很多麻烦所以我将使用这里指出定义
  
  缺陷(flaw)是或是安装思路方法中并不是所有缺陷都和安全性有关
  
  安全性漏洞(vulnerability)就是个缺陷它使有可能无法满足其安全性需求
  
  漏洞利用(exloit)是个揭示或利用安全性漏洞
  
  改变您理念
  在学习如何编写安全软件Software时遇到最大挑战是改变您对软件Software开发观点以下几点应该会有所帮助:
  
  偏执狂是种优点在自己进行调查研究的前不要相信任何事情不要想当然地以为您输入遵守您所依赖规则;去检验它不要忽略来自库报告;通常在遇到意想不到您需要终止正在进行处理不要以为您没有;限制您能够完成事情这样成为安全性缺陷可能性就会比较少
  
  测试通常无法发现安全性缺陷大多数测试思路方法都假定用户设法使用来帮助他们完成些工作因此测试假定用户将以某种“随机”或“有用”方式工作检查在“般”情况下或者在某些最大值下如何工作和此相反安全性缺陷通常只出现在使用极其古怪情况时传统测试完全不会检查这样有些开发人员会编写非常糟糕代码然后希望通过测试它来进行纠正这种思路方法根本不会产生安全代码您无法创建足够多测试来涵盖攻击者能做到所有稀奇古怪事情
  
  小玩意(象)和技术(象加密)是不够
  
  从过去失败确定和了解漏洞事实证明几乎所有软件Software安全性漏洞都是由相对较小组常见引起如果您了解了那些是什么 - 以及如何避免这样 - 您软件Software就会安全得多事实上本专栏将集中讨论如何避免以前出现常见这样您就不会犯同样
  
  FLOSS 会使我们安全吗?
  自由/开放源码软件Software是带有某种许可证这样许可证允许用户以任何目自由地运行自由地研究和修改以及自由地重新分发原始副本或修改过副本(而不必向以前开发人员支付版税)FLOSS 同义词包括开放源码软件Software(OSS)大写时是“自由软件Software(Free Software)”(FS)以及 OSS/FS“自由软件Software”和“开放源码软件Software”可在本文中互换使用但是推荐使用“FLOSS”它包含了这两个术语典型 FLOSS 都是由开发人员社区开发他们起工作并评审彼此工作Linux 内核是 FLOSSApache Web 和许多其它也是 FLOSS;FLOSS 正逐渐在许多市场特殊领域流行起来
  
  人们可以评审 FLOSS 源代码这样会如何影响安全性存在着激烈辩论由于受到大众所有可能详细审查所以 FLOSS 会更安全吗?或者FLOSS 是否会更不安全攻击者获得了更多信息 - 这会使得进行对攻击更容易吗?
  
  这些问题开始有了答案和象“FLOSS 总是比较安全”这样简单声明相比这些答案更为细致且更复杂确实有事实证明 FLOSS 能比具有专利权软件Software安全例如据报告 FLOSS OpenBSD 操作系统安全性漏洞比 Microsoft 少得多但是有个合理“反诉”:由于 Windows 用户比较多所以对 Windows 攻击就可能比较多这意味着更有可能发现 Windows 安全性漏洞这就是比较全部内容吗?很值得怀疑不过这也显示出作同等对比是多么困难
  
  个更佳举例是 Apache Web :它比 Microsoft 具有专利权 IIS Web 服务器流行得多但是 Apache 严重安全性漏洞却比 IIS 少请参阅我论文“Why OSS/FS? Look at the Numbers”(在参考资料中)获取有关 FLOSS 更多统计信息包括安全性统计信息
  
  还有点很清楚攻击者实际上并不需要源代码只要研究可获得所有 Microsoft Windows 漏洞利用就可以了!更重要如果攻击者需要源代码那么他们会使用反编译器来重新创建源代码这样重新创建源代码对攻击目而言足够了
  
  但是答案也并非就是“FLOSS 总是比较安全毕竟您可以将具有专利权许可证更改成 FLOSS而不更改其代码而它不会突然就变得更安全相反有几个原因看来是使 FLOSS 拥有良好安全性所必不可少:
  
  必须多人真正地评审代码有多种原因会减少进行评审可能性如用于特殊领域或很少用到产品(可能评审者很少)、开发人员很少、使用罕见计算机语言或实际上不是 FLOSS(如“共享源码”许可证)如果每次代码更改都由许多开发人员进行检查这通常有助于安全性
  
  至少某些开发和评审代码人必须知道如何编写安全个人可以帮助培训其他人但是您必须有个起点
  
  旦发现安全性漏洞需要快速地开展修补工作并将修补成果进行分发
  
  简而言的是否安全最重要原因是 - 不管它是 FLOSS 还是具有专利权 - 其开发人员是否知道如何编写安全
  
  如果您需要安全那么使用 FLOSS 就相当合理 - 但您需要以某种方式评估它以确定它对于您是否足够安全
  
  确定您安全性需求
  在您可以确定是否
Tags:  正确面对成功与挫折 正确对待成功与挫折 成功理念 自信是成功的一半

延伸阅读

最新评论

发表评论