下载本文的PDF版本 PDF

您必须信任谁?

如果您想完成任何事情,就必须要有一定的信任。


托马斯·沃德洛


在他的小说《钻石时代》7中,作家尼尔·斯蒂芬森描述了一个构建的社会(称为“氏族”),这个社会建立在对同胞成员的极端信任之上。成员资格要求的一部分是,每个成员不时地被要求承担某些任务,以加强这种信任。例如,一个氏族成员可能会被告知在特定的时间去悬崖顶上的某个地点,在那里他会发现带有脚踝安全带的蹦极绳。绳子的另一端消失在灌木丛中。在指定的时间,他要将安全带系在脚踝上,然后从悬崖上跳下去。他必须相信,被指派将蹦极绳的另一端固定在一棵粗壮树上的不知名的氏族成员确实完成了他的工作;否则,他将坠落身亡。第三个成员秘密地观察,以确保前两个人不会以任何方式交流,仅仅依靠信任来避免悲剧发生。

您信任谁,您信任他们什么,以及您在多大程度上信任他们,是当今互联网以及您技术生活的方方面面的核心。

硬件信任

在20世纪60年代的登月竞赛中,阿波罗计划面临着前所未有的问题:引导两艘载人航天器在月球轨道上交会。4 由于与月球之间的无线电传输存在光速延迟,来自地面计算机的制导会产生不可接受的延迟,无法接近实时,这将危及任务和宇航员的生命。更好的解决方案是在飞船上进行计算,以尽量减少滞后时间,帮助飞行员确定如何使两艘航天器交会。

当时,计算机体积庞大,重达数吨。为了构建足够小巧轻便,可以与阿波罗指挥舱和登月舱一起飞行的计算机系统,NASA工程师希望转向新开发的集成电路芯片。问题是:即使对于地面使用,这些早期芯片的可靠性也不是特别高,更不用说用于任务关键型航天器飞行硬件了。

在微处理器之前的20世纪60年代,计算机系统是由单个组件组装而成的。起初,这些是单个晶体管,但随着芯片的出现,组件可以变成门电路和触发器、寄存器和算术逻辑单元。但是,所有这些芯片都不可靠——尤其是在太空飞行条件下(但不仅限于此),在太空飞行条件下,压力、温度、振动、辐射以及高低重力的极端情况增加了潜在的问题。

芯片的可靠性可以得到发展,但即使是单个芯片的可靠性的完善也需要大量的研发投入以及大批量的采购。开发构建飞行级计算机系统所需的整套可靠芯片似乎甚至超出了NASA的资源范围。

NASA的解决方案简单、巧妙,并且利用了计算机逻辑的微妙之处。NASA没有试图完善数十种芯片类型,而是选择了一种单一的芯片设计,每个芯片包含两个3输入或非门。布尔逻辑告诉我们,所有逻辑功能都可以由或非门构建而成。通过发挥布尔逻辑的优势,飞行计算机被设计为仅使用这种单一类型的芯片。大量的专用地面设备也使用相同的芯片进行设计,因此,即使是质量低于飞行级的芯片也可以得到有效利用。这种做法确保了对一种芯片的大批量采购,这使得NASA和芯片制造商都值得投入大量资源来完善该芯片的可靠性。凭借一种可靠的芯片作为飞行计算机的基础,没有一次阿波罗任务遭受过哪怕一次计算机组件故障。

航天飞机更进一步。作为最早的电传操纵飞行航空电子系统之一,在当时此类系统尚不被充分信任的情况下,它使用了五台计算机来对飞行控制动作进行投票。四台计算机运行相同的软件;第五台计算机运行由不同供应商编写但规格相同的软件,以防止主软件包中出现错误。如果其中一台主计算机与其他三台计算机和第五台计算机意见不一致,则可以将其隔离并忽略。该系统在硬件和软件方面都是分层且冗余的。

硬件可能会因多种原因而发生故障,包括测试不足、设计缺陷、组件故障、电源问题、接地环路、接口电压不匹配、外部感应的电涌以及维护中的人为错误。它也可能因HT(硬件木马)9而变得不可靠,在HT中,设备被设计或修改为以有利于木马设计者而不是硬件购买者或操作员的方式运行。检测硬件木马可能非常困难,而如果发现HT,反向工程其意图则更加困难。

软件信任

技术专家倾向于偏爱技术解决方案。如果存在问题,那么也许可以购买或构建一个盒子或一段软件来解决它。这通常可以很好地解决物理、逻辑或常规组织的问题。文件服务器保存文件;备份服务器备份它们。原子钟测量时间;路由器在网络之间移动数据包。

同样的规律性并不适用于安全。至关重要的是要记住,安全是关于人的,而不是技术。许多人行为端正,但有些人会犯错误,有些人会撒谎、欺骗和偷窃——有时是为了自己的利润或优势;有时是为了证明系统的漏洞。人们导致他们的技术以类似的方式为他们服务。

C 编程语言和 Unix 操作系统共同发明人肯·汤普森在 1984 年以一种令人难忘的方式10证明了这个问题。他创建了一个 C 程序片段,该片段会将木马代码引入由 C 编译器编译的程序中。例如,在编译接受登录密码的程序时,您可以添加代码,使程序接受合法密码或创建木马的人员知道的特殊后门密码。即使在今天,这仍然是一种常见的策略,通常可以通过源代码分析来检测到。

汤普森更进一步。由于 C 编译器是用 C 编程语言编写的,因此他使用了类似的技术将木马应用于 C 编译器源代码本身。当编译 C 编译器时,生成的二进制程序可以像以前一样用于编译其他程序;但是,当使用来自干净、未受损源代码的新编译器编译接受登录密码的程序时,后门密码木马代码会被插入到二进制文件中,即使使用的原始源代码完全干净。源代码分析不会显示木马,因为它比登录程序位于工具链的更低层。

然后,他继续指出,这种技术甚至可以应用于更低的级别,即汇编器、加载器或硬件微代码级别。

汤普森的寓意是:“你不能信任你没有完全自己创建的代码。(尤其是来自雇用像我这样的人的公司的代码)。”

网络信任

在18世纪后期,一位名叫克劳德·查佩3的法国人发明了一种视觉电报,它使用间隔10到15公里的信号塔。借助望远镜,每个站点都可以看到相邻的塔楼,并将它们的信号位置中继到目的地。

在一个长途通信通过马匹传递信件的世界里,查佩的电报是一个奇迹。巴黎的信号在几分钟后就被位于里尔的第一个站点接收到(大约相距218公里或136英里)。网络很快扩展到布雷斯特、土伦、斯特拉斯堡,甚至后来的英吉利海峡。

信号位置在密码本中定义,允许发送各种消息。精心制作的密码本为常用符号提供了易于识别的信号模式,以及纠错代码,即使在传输或接收过程中出现错误,也能使正确的消息出现。

查佩网络持续使用了60多年。一旦长距离绝缘电线的技术使这项发明变得实用,电力电报网络就取代了它。

然而,就我们的目的而言,查佩网络最有趣的方面出现在1836年,当时人们发现股票市场信息正在通过网络传递,隐藏在其他消息中,通过我们现在可能称之为隐写术的方式。信号员受雇在各种客户的消息中引入某些错误。由于纠错代码,消息完整地到达,但如果有人私下知道传输的原始符号,则引入的错误包含一条消息,该消息在买卖股票时提供了优势。

一个网络看起来可能是值得信任的,但仍然可能被用于其预期用途以外的目的。

即使是时间也可以被利用。在2013年,一种名为 NTP 放大攻击的网络攻击利用互联网上的网络时间协议服务器进行了分布式拒绝服务攻击。通过欺骗请求者的 IP 地址,可以将越来越大的数据包流瞄准目标,淹没目标响应 TCP/IP 请求的能力。

探索信任

这是一个可以尝试的实验。在各种混合用途的社区散步,每个社区都有各种住宅和商业场所,如餐馆、咖啡馆、五金店和美发店。白天散步,午餐前后各一次。晚上散步,在夜间活动的高峰期。深夜散步,在大多数地方都关门之后。每次外出时,都要让自己处于安全心态。也就是说:用小偷的眼睛看,注意你所看到的。

例如,在白天,在繁忙的路边咖啡馆,人们是否通过将自己的物品放在桌子上,然后走进室内点餐来预订户外桌位?他们是否使用杂货袋来这样做?他们的汽车和房屋钥匙?他们的钱包?

深夜,那些桌椅是堆放在室外还是室内?它们是否被链子锁在一起?链子是轻便的还是结实的?社区里的房屋是否有从街上可见的门廊家具或草坪工具?它们是否被锁起来了?

你是否看到住宅的窗户上有栅栏?所有窗户上都有,还是只有后巷的窗户上有?晚上是否有物品存放在草坪上、车棚里或门廊外?家里的汽车是否停在外面?车窗是否打开?它们是否有方向盘锁?

你是否看到装卸货台,例如杂货店后面的装卸货台,门是开着的,但没有人可见?

在一个有夜总会的地区,你是否看到人们在深夜醉醺醺地走在街上?

孩子们是否在没有监护人的情况下步行去上学?

邮递员或送货服务人员是否将包裹无人看管地放在房屋的前门旁?报纸和杂志捆是否在报摊开门前被放在报摊前?

你可以通过这种方式了解很多关于社区的信息。如果你正在购买房地产,这尤其是一个有趣的练习。这些观察结果以及更多其他观察结果,是人们对其邻居和社区的隐含信任程度的标志。人们自己可能甚至没有想到这些事情。他们可能会将东西放在门廊上,也许是偶然的,但什么坏事也没有发生,所以如果再次发生,他们就不会担心。过了一段时间,这变成了他们甚至没有注意到的事情。

互联网上的信任

在现实社区中散步,如果你愿意接受,你可以收集很多信息。在互联网上,情况可能大相径庭。想象一下一个办公室,里面有一台电脑,艾伯特早上使用,贝蒂下午使用。每个人都有不同的帐户,并在下班时注销。艾伯特和贝蒂在同一个物理位置工作,并且来自同一个 IP 地址,但他们可能在互联网上有非常不同的体验,这取决于他们做什么。

将其扩展到托管许多公司的数据中心。每个公司的服务器可能只相隔几英尺,但他们体验互联网的方式,以及互联网体验他们的方式,可能会大相径庭。服务器之间的物理距离无关紧要。重要的是它们由什么硬件组成、在其上运行的操作系统、应用服务器软件以及所有这些东西的配置数据,以及支持和维护它们所需的所有实用程序和辅助软件。用户的质量和数量以及管理员也至关重要。

心脏出血漏洞

在 2014 年春季,开源软件包 OpenSSL 中的一个漏洞广为人知。该漏洞现在被称为“心脏出血”(Heartbleed)(http://heartbleed.com),它已经存在一段时间了,并且可能已被某些人所知,但 OpenSSL 软件包中问题的全面披露直到最近才引起公众的注意。OpenSSL 曾被许多专家审查过,并且在此之前一直是互联网生态系统中广泛使用且值得信赖的一部分。截至撰写本文时,没有证据表明除 OpenSSL 贡献者的编程错误外,还有其他任何原因。

在心脏出血漏洞公开的前一天早上,很少有人熟悉 OpenSSL,他们几乎没有对它提供的功能进行深思熟虑。那些了解它的人通常对其抱有很高的信任度。到一天结束时,这一切都改变了。系统管理员和各种规模的公司都在争先恐后地控制问题。在短短几天内,这个鲜为人知的专业软件成为了新闻周期的头条,陌生人——也许坐在户外咖啡馆的桌子旁,用他们的房屋和汽车钥匙预订了座位——正在用他们可能讨论其他灾难的语气讨论它。

系统管理员

互联网上一切正常运行的核心是系统管理员。有时他们是技术精湛的专家,有时是低薪且训练不足的人员,有时是身份已知或未知的志愿者。他们经常长时间、不被赏识地工作,解决幕后问题或那些过于明显的问题。他们对系统的访问权限超出了普通用户的范围。

其中一位系统管理员为 NSA(国家安全局)工作。他的名字是爱德华·斯诺登。您现在可能比您曾经期望了解的任何系统管理员(即使您自己就是系统管理员)了解更多关于他的信息。

另一个不太熟悉的名字是特里·查尔兹5,11,他是旧金山市的网络管理员,于 2008 年因拒绝透露该市 FiberWAN 网络的管理密码而被捕。该网络构成了许多城市服务的核心。据报道,查尔兹是一位资质很高且经过认证的网络工程师,他自己设计和实施了该市的大部分网络,他对该网络非常具有占有欲——也许太具有占有欲了,因为他成为了该网络的唯一管理员,声称不信任他的同事的能力。他允许自己全年 24/7 全天候待命,而不是将访问权限委托给那些他认为不够资格的人。

在与一位希望在查尔兹不情愿的情况下审核网络的新老板发生争吵后,该市的首席信息官要求查尔兹提供 FiberWAN 的管理凭据。查尔兹拒绝了,这导致他被捕。即使在他被捕后,查尔兹也不愿提供对网络的管理访问权限。最终,他让步了,并将访问凭据交给了旧金山市市长,结束了僵局。

他的主管声称他疯了,想破坏网络。查尔兹声称他不想将敏感的访问凭据提供给可能破坏“他的”网络的不合格人员。

2010 年,查尔兹被判犯有重罪网络篡改罪,并被判处四年监禁和 150 万美元的赔偿金,以赔偿该市在重新获得网络控制权方面产生的费用。上诉法院维持了原判。

查尔兹是一个狂热分子,为了自己的利益而抓得太紧,还是一个高度负责的网络管理员,他不允许他认为不称职的人员管理他的网络?请考虑以下问题

* 类似的事情会在您的企业中发生吗?您如何知道这个问题正在发展,它成为严重问题之前

* 您有哪些保障措施来防止像这样的单点权力集中?

* 如果您的组织发现自己处于这种情况,您会怎么做?

您必须信任谁?

有些人梦想回归自然,与人类的其余部分隔离生活。他们想建造自己的小屋,种植或饲养自己的食物,并完全依靠他们用自己的双手和一把值得信赖的斧头建造的基础设施生活。但是谁制造了那把斧头?即使你可以用当地材料制作一把手工削制的燧石斧,它也远非“值得信赖”,而且你用燧石斧可以砍伐的木材量与用现代钢斧可以砍伐的木材量相比,简直是小巫见大巫。因此,如果你带着一把现代斧头走进森林,你真的能说你独立于世界吗?

如果您在互联网上工作,或者为互联网提供某些服务,您也会遇到类似的问题。如果您打算提供现代且有用的网络服务,您就无法编写所有代码。网络堆栈、磁盘驱动程序、Web 服务器、调度程序、中断处理程序、操作系统、编译器、软件开发环境以及运行即使是简单的 Web 服务器所需的所有其他层都是多年发展而来的。完全从规范重新发明它,而不在此过程中使用任何其他人的代码,对于胆小的人来说不是一项任务。更重要的是,即使您编写了所有代码,您也无法完全信任它。在您能够服务单个数据包(更不用说简单的网页)之前,您将永远在测试和修复错误。

您也无法构建运行该服务的所有硬件。构建即使是简单的晶体管所需的工具层级也令人望而生畏,更不用说构建微处理器所需的更高层级了。您也无法构建自己的互联网来托管它。您必须信任提供该服务所需的一些基础设施。但是哪些部分呢?

您需要信任多少?

要确定您的信任需要延伸多远,请首先评估您的服务以及泄露的后果。任何有趣的服务都会为其用户提供一些价值。许多服务为其提供商提供一些价值。您的服务的价值是什么?这种价值可能如何受到损害?

一旦您掌握了这些问题,您就可以开始考虑提供此类服务所需的最低组件和服务,以及您必须信任哪些组件。

编写您自己的软件可能是此练习的一部分,但请考虑,由此获得的大部分安全性都来自所谓的“通过模糊处理实现安全性”。攻击会失败,因为攻击者不了解您构建的代码——或者有些人这样认为。如果您选择将模糊处理作为一种策略,那么您就是在押注没有人会对攻击您的服务表现出兴趣,您的程序员比其他人更擅长以新颖的方式编写模糊代码,并且即使代码是模糊的,它仍然足够安全,以至于决心突破它的人会被阻止。历史表明,这些不是好的赌注。

其他人都在信任谁?

一个更好的方法可能是调查该领域,看看处于类似地位的其他人都在做什么。毕竟,如果您的竞争对手中的大多数人都信任某个特定的软件包是安全的,那么如果它失败了,你们都处于相同的境地。当然,存在变量,因为任何软件,即使是最好的软件,如果安装或配置不当,也可能不可靠。而且您的竞争对手可能会犯错。

这种方法的一个变体是找出您的所有竞争对手希望他们可以使用哪些软件。迁移到他们现在使用的软件可能会让您在您使其投入运营时落后一代。另一方面,迁移到领先一代可能会让您面临尚未检测到的缺陷。技巧在于明智地选择。

这些服务的安全性是如何评估的?

无论您选择什么组件或服务,都要考虑它们是如何经过信任度测试的。考虑以下归因于 19 世纪荷兰语言学家和密码学家奥古斯特·柯克霍夫的原则

* 系统即使不是理论上牢不可破,也应该在实践中牢不可破。

* 系统的设计不应要求保密,并且系统设计的泄露不应给通信者带来不便。

柯克霍夫谈论的是密码系统中的密码设计,但他在此处列出的两个原则可以应用于许多安全问题。

在考虑贵企业的组件时,它们是否符合柯克霍夫的原则?如果它们似乎符合,谁说的它们符合?这是开源软件最强有力的理由之一。如果做得好,开源代码的质量和安全性可以与专有代码相媲美。2

对于您希望订阅的服务,请考虑它们被审计的频率和彻底程度,以及谁进行审计。服务提供商是否发布结果?他们是否允许潜在客户查看结果?结果是否显示了他们的缺陷并描述了它们是如何修复或补救的,还是仅仅给出了总体上的赞许?

首先考虑坏情况

传奇人物弗雷德·布鲁克斯,《人月神话》1的作者,曾说过一句名言:“所有程序员都是乐观主义者。” 布鲁克斯的意思是指程序员倾向于认为他们可以比实际完成项目所需的时间更快地完成项目。但正如 自己的 Kode Vicious 经常指出的那样,这里也存在安全隐患。开发人员通常首先编写他们希望工作的案例代码,如果时间足够,则稍后(如果有可能)再填写错误处理代码。

但是,当您担心安全问题时,颠倒这些操作的顺序就非常有意义了。例如,如果您的应用程序需要加密证书才能运行,那么安全程序员应该首先考虑的问题之一是如何撤销和替换该证书。从这个角度选择证书供应商可能与通常的标准(几乎总是强调成本)截然不同。从一开始就构建敏捷基础设施,使加密证书的更换变得直接、容易且对最终用户的影响最小,这为最大限度地减少对任何一个供应商的信任指明了方向。

开发一种易于更换证书的基础设施引出了下一个有趣的问题:您如何知道何时更换坏证书?也许这个问题可以反过来问:更换证书的成本有多高:在金钱、精力和客户不满方面?如果可以廉价、快速、轻松且无需客户注意地完成,那么也许应该经常这样做,以防万一。如果做得好,那么频繁的证书更改将有助于限制任何损害的范围,即使问题最初没有被注意到。

但是这里有恶龙!有些人可能会阅读上一段,并认为例如每周过期的证书消除了监控基础设施是否存在问题的需要,或者撤销坏证书的需要。远非如此!所有这些步骤都是必要的。安全是一个既用皮带又用背带的世界。

一个受到良好监控以应对已知威胁的基础设施是信任等式的另一部分。如果您确信您的基础设施和人员将使您意识到某些类型的问题(或潜在问题),那么您可以制定并实践处理这些问题的程序。

这涵盖了前国防部长唐纳德·拉姆斯菲尔德6所说的“已知的未知数”,但“未知的未知数”呢?多年来,心脏出血漏洞就是其中之一。OpenSSL 中的缺陷存在并且可以被那些知道它并知道如何利用它的人利用。截至撰写本文时,我们尚不确定是否有人利用了它,但如果有人这样做,该缺陷的性质是,利用几乎不会留下任何痕迹,因此很难确定。

在提供网络服务时,需要注意两种主要的“未知的未知数”。第一种是您不知道的未知数,但其他人可能知道并已公开披露或讨论过的未知数。让我们称它们为“可发现的未知数”。您现在不知道它们,但您可以从经验或他人的经验中了解它们。

可发现的未知数是可发现的,前提是您努力去发现它们。务实的方法是创建您自己的“情报服务”。如果您愿意使用它们,互联网上到处都是安全资源。它也充满了关于安全问题的误导、夸大和自我主义。诀窍在于学习哪些资源是黄金,哪些是愚人金。这需要实践,可悲的是,通常以大小错误的代价为代价。

一个谨慎、积极主动的组织拥有专门用于获取和培养安全资源的人员和预算。这些资源包括评估可能的网站并定期阅读它们的人员;信息服务订阅;安全组织会员资格;会议旅行;以及良好人脉的普遍培养。它还包括为处于类似情况的其他组织提供帮助,如果可能,成为开源世界的良好公民和参与者。如果您帮助您的朋友,他们通常会在您需要时帮助您。

第二种未知数可以称为“意外的未知数”。您不知道它们是什么,您甚至不确定它们是否存在,因此您没有专门关注它们。但是,您可以通过观察网络的行为来大致关注它们。如果您有一种方法来了解网络的基线行为、系统或应用程序,那么您可以将该基线与系统现在正在执行的操作进行比较。这可能包括监视服务器是否存在意外进程、关键软件的意外校验和、在不寻常位置创建的文件、意外负载变化、意外网络或磁盘活动、执行特权程序的失败尝试或超出常规的成功尝试。对于网络,您可能会查找不寻常的协议、意外的源或目标 IP 地址或异常高或低的流量配置文件。您越能描述您的系统应该做什么,您就越容易检测到它何时在做其他事情。

检测到异常是一回事,但跟进您检测到的内容至少同样重要。在互联网的早期,克利夫·斯托尔8,当时是加利福尼亚州劳伦斯伯克利实验室的研究生,注意到他管理的一些计算机系统上存在 75 美分的会计错误。许多人可能会忽略它,但它足以让他追踪它。这项调查一步一步地导致发现了一名名叫马库斯·赫斯的攻击者,他被逮捕、审判并被判犯有间谍罪和向苏联克格勃出售情报罪。

意外的未知数可能会通过反应性手段被发现(如果它们可以被发现的话)。必须注意、追踪和解释异常情况。必须阅读和理解日志。但是,针对已知攻击的防御也可以防止来自未知攻击的意外情况。最大限度地减少网络的“攻击面”也最大限度地减少了攻击者进行破坏的机会。网络的分区和常规流量模式的密切表征可以帮助检测到异常情况。

您可以做什么?

在商业、学术或工业计算环境中,如何管理信任问题?

从业人员可以做的最重要的事情是放弃这项任务将永远完成的想法。没有可以购买的设备、没有可以安装的软件,也没有可以实施的协议可以作为满足您所有信任和安全要求的通用答案。永远不会有您完成它并可以继续做其他事情的时候。

安全是一个过程。这是一门武术,您可以通过学习、思考和不断练习来学习应用它。如果您不定期进行训练和练习,您就会对它感到生疏,并且当您需要它时它将无法为您服务。即使您确实成为了这方面的专家,攻击者有时也可能会压倒您。但是,您越擅长这个过程,能够伤害您的对手数量就越少,他们造成的损害就越小,您恢复的速度就越快。

以下是一些您可以努力的基本领域。

了解您信任谁以及您信任他们做什么

虽然“信任网络”是一个被过度使用的短语,但它描述了您正在构建的内容。像任何复杂的构造一样,您应该有一个计划、图表或其他形式的枚举,说明支持您的企业需要哪些信任机制。以下实体可能会出现在这样的计划中:数据中心提供商(电力、空调、局域网);电信链路供应商;硬件供应商;付费软件供应商;开源软件提供商;加密证书供应商;时间源供应商;系统管理员;数据库管理员;应用程序管理员;应用程序程序员;应用程序设计师;和安全工程师。

当然,里程可能会有所不同,并且可能还有更多实体。无论您生成的列表中有什么,都为每个条目执行以下练习

• 确定此实体信任谁来完成工作以及谁信任此实体。

• 估计如果此实体未能正确完成工作,后果会怎样。

• 估计如果此实体是一个试图以某种方式危害企业的不良行为者(未经授权提取信息、拒绝服务、向您的客户或您自己提供错误信息等),后果会怎样。

• 评估每个后果的严重程度。

知道如果任何这些实体失去您的信任您会怎么做

既然您已经收集了企业可能受到影响的各种方式,并按严重程度进行了排序,那么您可以弄清楚您将对每个项目做什么。这可以像您感到舒适的那样简单或复杂,但请记住,您正在创建操作手册的关键部分,因此,如果您的计划在这些情况发生时无法转化为行动,它们将不会有太大价值。

以下是一些可能需要的后果和行动示例

• 发现一个关键的开源软件包存在严重的错误,必须替换为更新的、已修复错误的版本;替换为具有相同 API 的不同软件包;替换为具有不同 API 的不同软件包;或在开发出修复程序之前进行缓解。您的计划应该是处理任何这些情况的良好指南。

• 一位关键的系统管理员一直在向潜在不友好的第三方提供网络访问权限。您必须:确定丢失信息的范围(或者您的信息是否被修改?);确定是否有任何系统被后门访问破坏;确定系统管理员下的哪些其他系统可能受到影响;并找出处理人事问题的最佳方法(例如,解雇、调动或法律诉讼)。

• 关键数据中心因灾难或攻击而无法使用。您必须:转移到备用后备位置;或临时搭建一个备用数据中心。

练习、练习、再练习

制定计划非常好,但如果它放在布满灰尘的文件柜中,或者更糟糕的是,放在您正在计划应对的情况导致无法使用的机器的存储卷上,那么它对任何人都没有帮助。即使计划随时可用,在危机期间第一次执行计划也是确保计划无法正常运行的好方法。

确保您的计划可操作的最佳方法是练习。这意味着每个计划都需要有一种模拟原因和评估结果的方法。有时,这可能像关闭冗余服务器并验证服务是否继续一样容易。其他问题则更难模拟。即使是桌面演练,人们只是谈论需要什么,也比从不练习您的应急计划要好。

实践也可以采取常规操作的形式。例如,Heartbleed 漏洞事件曾要求许多服务提供商吊销并重新颁发证书。如果这对您的企业来说是一项关键的恢复操作,那么请想办法将此程序纳入您的日常业务流程中,例如每月吊销并重新颁发一次证书。

其他操作也可以从实践中获益,例如从备份中恢复文件;重建重要的服务器;将操作转移到备份数据中心;或验证备用电源的可用性以及您切换到备用电源的能力。

设置捕鼠器

防御攻击者(或墨菲定律)最重要的一步是意识到您遇到了问题。如果您了解您的信任关系——谁被信任做什么,谁不被信任——那么观察对这些关系的违反情况将非常有启发意义。每次违规都可能属于以下类别之一:

• 未记录但合法的信任关系。例如,这可能是系统管理员在执行分配的工作,但在构建信任地图时,这项工作被不恰当地忽略了。

• 潜在合理但未考虑到的潜在信任关系,必须对其进行评估,并添加到信任地图中或明确禁止——例如,系统管理员执行未分配但必要的工作以保持系统运行。

• 不合理或非法的使用。

了解是哪种情况的唯一方法是调查每一种情况,并相应地修改您的信任地图。与所有此类事情一样,必须定期测试捕鼠器,以查看它们是否仍然有效。

审查您的关键人员

通常,信任系统管理员的形式是管理层对系统管理员说“这是所有事情的钥匙”,然后或多或少地盲目信任这些钥匙不会被滥用。或者,引用科幻小说作家罗伯特·海因莱因的话:“令人惊讶的是,成熟的智慧与过于疲惫有多么相似。” 这种盲目的信任是在自找麻烦。

另一方面,密切跟踪系统管理员并强迫他们为他们希望执行的每个特权操作请求许可,这可能会阻碍组织的运作。系统管理员和许可授予者都很容易对此感到厌倦,组织将退回到盲目信任。

在两个危险的礁石之间航行的好方法是雇用优秀的人才并善待他们。几乎同样重要的是与他们沟通,以加强组织的安全和信任目标。如果他们知道必须做什么和不应该做什么,并且至少在一般原则上,为什么这些约束是好的,那么他们在危机时刻采取适当行动的可能性就更大。

记录他们的行为。让其他人定期审查这些日志

优秀的人会犯错误,有时甚至会误入歧途。一名普通的非特权(在安全意义上)员工应该对工作场所的隐私抱有合理的期望,但系统管理员应该知道,当他们执行敏感任务或访问敏感资源时,他们正在被监视。此外,系统管理员在执行极其敏感的任务时,应至少有一名具有同等或更高权限的人员在场。这样,其他人可以证明所采取的行动是必要且合理的。

在可能的情况下,记录系统管理员使用其特权所做的事情,并让第三方定期审查这些日志中的异常情况。第三方应与系统管理员或其他被授予可信访问权限的员工保持足够的距离,以使个人或职业关系不会模糊日志的解释。

调查您怀疑的事情,并根据您的发现采取行动。提前让您的受信任人员知道您将这样做。让他们知道,如果信任被违反,他们的责任职位使他们成为名单上的首要嫌疑人。

最大限度地减少您的漏洞窗口

一旦您知道可能存在漏洞的方式,就制定计划来最大限度地减少和缓解这些漏洞。如果您可以关闭漏洞,那就关闭它。如果您无法关闭它,那么限制可以通过该漏洞完成的操作。如果您无法限制可以完成的操作,那么限制谁可以执行它以及何时可以利用它。如果您无法限制任何事情,那么至少要衡量是否正在发生利用行为。您可能没有完美的解决方案,但是您对潜在问题施加的限制越多,它成为真正问题的可能性就越小。

分层安全

在信任方面,您不应依赖任何一个实体来保证安全。这被称为“纵深防御”。例如,如果您可以拥有多个加密层,每个加密层都以不同的方式实现(例如,一个依赖于 OpenSSL,另一个使用不同的软件包),那么单个漏洞不会让您完全暴露。

这是审视您企业的每个组件并询问:如果这些组件被破坏会怎样?的一个很好的理由。

练习敏捷性

如果某个组件被破坏,您将如何更换它,以及用什么更换?切换需要多长时间?理论在这里不起作用。您需要准备好切换软件包、供应商或硬件,以便充分安全。例如,您的采购部门为新许可证削减文书工作需要多长时间?获得采购订单签字需要多长时间?供应商交货需要多长时间?

这不是您可以做一次就认为自己准备就绪的工作。您需要定期重新审视所有组件,并随着情况的变化为每个组件执行此类分析。

像攻击者一样看待您的网络

了解您网络的“竣工”配置,而不仅仅是“指定”配置。请记住,竣工配置每天都在变化。这意味着您必须有人来测量网络,并有工具来检查它。每个组件提供哪些网络服务?这些服务是必需的吗?它们是否仅在需要它们的地方可用?所有组件都已完全修补吗?它们是否已进行检测和报告攻击尝试的工具?有人阅读日志吗?攻击发生到有人注意到攻击的最长时间间隔是多少?是否有任何事件(例如节假日)可能导致攻击被忽视的时间延长?

互联网上充斥着免费或廉价的安全分析软件。这些是攻击者和防御者经常使用的工具。通过使用与攻击者相同的工具来审视您的网络,可以学到一些东西。

跟踪安全问题并确认它们得到修复

如果您发现问题,如何跟踪它?谁负责将其放入跟踪系统,将其交给可以修复它的人,并将其修复?您如何衡量问题是否存在?在应用修复程序后,您是否再次测量以确保它有效?

开发您自己的安全情报资源

您的组织是否有人员跟踪用于潜在安全问题的技术?他们多久检查一次?当他们报告问题时,他们会被倾听吗?

您依赖的任何设备、软件、供应商或人员都应定期进行研究。高质量的以安全为中心的网站是存在的,但它们通常被那些推销产品或散布虚假信息的网站所包围和淹没。让员工获得区分好坏的专业知识是非常有价值的。

为重大问题做好计划

如果您运营一个联网企业,无论您提供公共、私有还是内部服务套件,您都会发现受信任的服务迟早会让您失望。反反复复。您如何应对这些信任失败将成为贵公司声誉的重要组成部分。如果您明智地选择您的供应商、合作伙伴和组件,认真计划应对麻烦的措施,并在时机到来时根据您的计划采取行动,那么从长远来看,您将比那些将危机计划归为“运气”的人做得更好。

结论

信任问题并非新鲜事。如果说有什么的东西,那就是对事物可以被信任的错误印象,因为很多新事物似乎是值得信赖的。这有时是一种令人欣慰的错觉,但终究是一种错觉。要构建任何有价值的东西,您都必须将信任寄托在某些人、产品和服务上。明智地建立这种信任是一项最好通过时间学习的技能。一路走来,错误将层出不穷。为您的错误和他人的错误做好计划对于信任至关重要。

通常情况下,采取符合良好信任标准的措施并为其增加价值——通过审计、在其之上分层或添加到开源中——比完全自主开发更好、更快、更安全。准备好对您选择的组件、您将它们包含在内的系统以及构建和维护该系统的人员保持警惕。始终为麻烦做好计划,因为麻烦肯定会降临到您身上。

如果您想有所作为,就必须有一定的信任,但您不能让自己变得自满。托马斯·杰斐逊说过:“永恒的警惕是自由的代价。” 这也是安全的代价。

致谢

感谢 的 Jim Maurer 请求撰写本文,并感谢 George Neville-Neil 提醒我弗雷德里克·布鲁克斯的名言。特别感谢我的妻子 Yuki 和我的孩子们,感谢他们在我写作时忍受我的抱怨。

参考文献

1. Brooks Jr., F. P. 1975. 《人月神话》。Addison-Wesley。

2. Coverity。2013 年。Coverity 扫描报告首次发现开源软件质量超过专有代码;http://www.coverity.com/press-releases/coverity-scan-report-finds-open -source-software-quality-outpaces-proprietary-code-for-the-first-time/

3. Dilhac, J.-M. Claude Chappe 电报——十八世纪的光学电信网络:7;http://www.ieeeghn.org/wiki/images/1/17/Dilhac.pdf

4. Hall, E. C. 1996. 登月之旅:阿波罗制导计算机的历史。Reston, VA:AIAA。

5. McMillan, R. 2008. IT 管理员锁定了旧金山的网络。《PCWorld》;http://www.pcworld.com/article/148469/article.html

6. Rumsfeld, D. 2002 年。新闻发布会(2 月 12 日);http://www.c-span.org/video/?168646-1/DefenseDepartmentBriefing102

7. Stephenson, N. 1995. 《钻石时代》。Bantam Spectra。

8. Stoll, C. 1989. 《杜鹃蛋》。Doubleday。

9. Tehranipoor, M., Koushanfar, F. 2010. 硬件木马分类和检测综述。IEEE;http://trust-hub.org/resources/36/download/trojansurvey.pdf

10. Thompson, K. 1984. 对信任信任的反思。《 通讯》,27 (8);http://cm.bell-labs.com/who/ken/trust.html

11. Venizia, P. 2008. 理清 Terry Childs 案件中的事实。《CIO》;http://www.cio.com.au/article/255165/sorting_facts_terry_childs_case/?pf=1

喜欢还是讨厌?请告诉我们

[email protected]

Thomas Wadlow 是旧金山的一位网络和计算机安全顾问。他喜欢那里的许多咖啡馆,但从不使用钥匙来占用户外餐桌。

© 2014 1542-7730/14/0500 $10.00

acmqueue

最初发表于 Queue vol. 12, no. 5
数字图书馆 中评论本文





更多相关文章

郭金楠、Peter Pietzuch、Andrew Paverd、Kapil Vaswani - 使用机密联邦学习实现可信赖的 AI
安全性、隐私性、问责制、透明度和公平性原则是现代 AI 法规的基石。经典的 FL 设计非常强调安全性和隐私性,但以牺牲透明度和问责制为代价。CFL 通过将 FL 与 TEE 和承诺相结合,弥补了这一差距。此外,CFL 还带来了其他理想的安全属性,例如基于代码的访问控制、模型机密性以及推理期间的模型保护。机密计算(如机密容器和机密 GPU)的最新进展意味着,现有的 FL 框架可以无缝扩展以支持 CFL,且开销较低。


Raluca Ada Popa - 机密计算还是密码计算?
通过 MPC/同态加密与硬件 enclave 进行安全计算,在部署、安全性和性能方面存在权衡。关于性能,这在很大程度上取决于您想到的工作负载。对于简单的工作负载(如简单求和、低阶多项式或简单的机器学习任务),这两种方法都可以在实践中使用,但对于复杂计算(如复杂的 SQL 分析或训练大型机器学习模型),目前只有硬件 enclave 方法在许多实际部署场景中足够实用。


Matthew A. Johnson、Stavros Volos、Ken Gordon、Sean T. Allen、Christoph M. Wintersteiger、Sylvan Clebsch、John Starks、Manuel Costa - 机密容器组
此处提供的实验表明,Parma(在 Azure 容器实例上驱动机密容器的架构)增加的额外性能开销不到底层 TEE 增加的开销的百分之一。重要的是,Parma 确保了容器组所有可达状态的安全不变性,这根植于证明报告中。这允许外部第三方与容器安全地通信,从而实现广泛的容器化工作流程,这些工作流程需要对安全数据进行机密访问。公司获得了在云中运行最机密工作流程的优势,而无需在其安全要求上妥协。


Charles Garcia-Tobin、Mark Knight - 利用 Arm CCA 提升安全性
机密计算具有巨大的潜力,可以通过将监管系统从 TCB 中移除,从而减小 TCB 的大小、攻击面和安全架构师必须考虑的攻击向量,来提高通用计算平台的安全性。机密计算需要在平台硬件和软件方面进行创新,但这些创新有可能增强对计算的信任,尤其是在由第三方拥有或控制的设备上。机密计算的早期消费者将需要自行决定他们选择信任的平台。





© 保留所有权利。

© . All rights reserved.