你曾经可靠的手机突然死机,键盘全部罢工,电话无法拨打或接听,短信也无法收发,甚至你想正常关机都不行。无奈之下,你取下电池强行关机,但重新开机后手机再次死机。这显然不是普通故障。几个小时后,你发现不止你的手机这样,还有上百万人跟你一样,手机突然无故死机。
这是我们遭受到一场大规模硬件攻击之后可能发生的情况。这场攻击的根源在于越来越复杂的集成电路,它们正是人们日常依赖的各种设备的核心部件。现代集成电路已经非常复杂,任何一个工程师团队都不足以了解他们设计电路中的所有部分。因此,集成电路的研发工作现在都由世界各地的团队共同完成,每个团队只负责整个设计的一部分,在印刷电路板之前,才把各部分设计集成起来。电路复杂性也决定了根本不可能用穷举法来测试它。芯片中的任何一个编码缺陷往往都会潜伏很长的时间,直至被一些触发条件(如特定的数据或时间)激活——这有点像木马病毒,它们在发作前会一直安全地存储在硬件中。
硬件攻击的物理本质使得它的潜在危害远胜病毒及其他恶意软件。软件病毒可在机器之间传播,但从理论上说,我们可从任何受感染的系统中彻底清除它们。然而计算机在遭受硬件攻击后是无法修复的,至少目前还不行,除非更换硬件。
修复系统的恶意硬件非常困难,让信息安全专家夜不能寐。所有使用微处理器的设备,甚至可以说所有的电子设备,都很脆弱。集成电路在现代通信系统及全球电力供应系统里处于核心地位,在飞机上负责襟翼的定位,在汽车防抱死刹车系统(ABS)中负责调节制动力,在银行保险库和ATM机上负责安全授权,在股票市场负责交易运作。集成电路还是武装部队使用的几乎所有关键系统的核心。可以想象,一起精心策划的硬件攻击,能够让金融系统停滞,或是让军队或政府的关键部门瘫痪。
由于硬件木马在激活之前可以隐藏很多年,它们也许、甚至非常可能已被植入硬件缺陷中了。虽然到目前为止尚未证实有大规模硬件攻击发生,但是这类攻击是不可避免的。
从基于软件的网络攻击中我们可以看得非常清楚,即使很少一部分人不怀好意地使用黑客技术,都会造成巨大的危害。因此,我们需要考虑的问题不是硬件攻击是否会发生,而是攻击将采用何种方式?攻击步骤是什么?而是最重要的问题或许是,如何检测并阻止攻击,或者至少降低攻击带来的损失?
模块化
现代芯片可按功能划分成不同模块,模块本身以及模块间通信的安全,决定着芯片的成败。
简单来讲,集成电路,也就是我们常说的芯片,是一种刻蚀在半导体晶片(通常是硅)上的电路。现代芯片非常小,最大也就几平方厘米,但可容纳数十亿个晶体管。由于现代芯片拥有如此高的复杂性,一些可能被木马利用的漏洞也存在其中。
根据功能不同,现代芯片可划分成若干个子单元,称之为模块(block)。以手机处理器为例,有的模块用于存储相机拍摄的视频,有的用于把视频压缩成MPEG文件,有的可将MPEG文件转换成可无线传输的格式。模块间的数据通过系统总线(system bus)传输,后者就像是连接芯片不同部分的高速公路。
当一家公司着手设计新款芯片时,首先要规划出芯片所需的功能模块。其中一些模块是自主设计的,要么从零开始设计,要么对自家早期产品加以改进。其他一些功能模块,比如通过天线接收数据的模块,则可以从专门开发特定功能的第三方那里获得使用许可。
从第三方那里获取的模块并不是一块块实际的晶片,因为制造集成电路的目的就是要把所有功能模块印刷到同一块晶片上。相反,那些模块是以数据文件的形式提供的,其中完整地描述了模块被刻蚀到硅片上的方法。这样的文件可以包含数千条指令,人们要想读懂其中的内容几乎是不可能的。模块供应商通常还会向购买者提供一些软件,模块买家可以用它来模拟该模块在不同情况下的使用效果。在芯片开始印制之前,设计公司还会将所有模块集成在一起,建立模型并使用计算机进行仿真测试,以保证芯片能够按照设计初衷正常工作。只有模型通过这一系列测试,公司才会开始漫长而且耗资巨大的实体芯片制造。
这样的设计流程还是会留下漏洞。由于流氓硬件(即存在漏洞的电路)需要特定的触发条件来激活,芯片制造商不得不对模型进行尽可能全面的触发测试,以保证硬件是“干净”的。这一点完全不可能做到,因为宇宙中可能的触发方式无穷无尽。触发分为两种:一种叫内部触发,前面手机的例子中基于时间的触发就属于这一种;另一种则是外部触发,例如接收包括特定字符串的文本信息或电子邮件。即使设计公司竭尽所能进行测试,也只能覆盖所有可能输入中非常小的一部分。在实际测试中,只要模块能按预期工作,制造商一般就认为它们功能正常。
信任问题
一款芯片的设计通常由来自不同地区的多个团队合作完成,只要有个别内鬼,设计出的芯片便非常不安全。
集成电路设计开始出现的时候,没有人会考虑到黑客。这是因为早期设计都是由一个团队独立完成的,团队人数不多,所有成员都朝着同一个目标努力。由于这种组织方法安全性较高,设计者制定了开放协议,假设芯片的不同部分都会按预期工作。(这段历史与互联网初期的情况有些相似,一个小型的学术团体创建了开放的平台,并假设每个使用者都会表现良好。但随着互联网的增长,这个假设已经不再成立了。)
然而在当今世界,即便单个大规模集成电路的设计流程就可能涉及几百甚至几千名来自多个大洲不同地区的开发人员。设计过程分为不同的开发阶段,设计的不同部分被存储在许多不同的实体平台上,并在多方之间反复交换。美国的制造商首先设计任务分配到下属的独立分支机构,这些分支机构又可能采用来自美国、欧洲以及印度等地区的第三方供应商的设计,制造商最终将下属分支机构的工作合并统一,然后在中国的工厂生产芯片。这样的全球化协作网络,近年来已经成为了一个无可更改的事实。相比以前生产制造全由单一企业完成的时代,现在的方式虽然节省了成本,提高了效率,但是也使安全问题更为复杂。老虎到大规模集成电路设计难度大、涉及人员多,未被授权的外部人员在系统没有发现的情况下获得访问权限并破坏设计工作的风险便永远无法排除。
内部人员故意破坏设计工作的可能性很小,但也并不意味着风险不存在。尽管绝大多数设计人员都致力于开发最高质量的产品,但跟其他类型的安全问题一样,只要有内部人员从事恶意破坏活动,即使只是个别人,也会造成很非常严重的后果。
理想状态下,只要让存在攻击意图的人没有机会插手集成电路的设计和制造,就可以保证硬件攻击永远不会发生。这是美国国防部高级研究项目局(DARPA)可信集成电路项目(Trust in Integrated Circuits program)一直想要实现的策略。DARPA正在设计一种流程,用来确保设计制造链中的所有步骤都处在安全环境下,由值得信任的公司和人员完成。(此外,DARPA还资助了另一项研究,旨在找到芯片测试的新方法,以保证美国武器系统中的芯片在使用之前得到充分测试)。然而在现实世界中,设计过程中采取的任何安全措施都做不到尽善尽美。
硬件设计者还应该设计专门的电路,以便在攻击真的发生时,能够识别攻击并作出应对,就像芯片中的警察一样。尽管一个社区肯定应该采取任何合理措施,来避免潜在犯罪行为的发生,但任何一个负责任的社区都应该认识到,无论他们如何目标明确并且执行彻底,也无法做到百分之百杜绝犯罪的效果。所以,不管是对芯片里的警察还是真正的警察而言,关键是要拥有在犯罪活动发生时进行快速合理响应的能力。
安全芯片
与普通芯片相比,安全芯片额外增加了负责维持芯片正常运行的电路,但这也有可能让芯片变慢。
能够有效检测攻击并做出应对的集成电路,称作安全芯片。这类芯片通常拥有适量的额外电路,专门设计用来寻找可能预示攻击的行为。一旦检测到疑似攻击,安全芯片将会识别攻击类型,并采取措施将损害降至最低。
在文章开头所举的例子里,手机频繁死机可能就是手机芯片中一个模块发生故障的结果。模块通过系统总线与其他所有模块发生互动。而这条总线又有一个总线仲裁器(bus arbiter),就像一位交警,决定什么信息在什么时候可以通过总线。然而交警的比喻并不十分恰当,交警可以决定什么时候让车流通行,什么时候让车流停下,总线仲裁器却没有这么大的权限。它能授权一个模块通过总线发送信息,却不能叫停,于是这个模块便可以无限期霸占总线——这种设计源于很久以前那个“模块总是能正常工作”的假设,问题也就随之而来。
在典型的芯片系统中,模块会根据自身需要保留访问系统总线的权限,完成通信后便退出总线。总线仲裁器一旦监测到总线空闲,就会将访问总线的权限分配给其他模块。但是,如果某个模块无限期地控制总线,芯片中的其他数据就无法传输,从而造成整个系统崩溃。
相反,安全芯片会不间断地执行检测,以保证不同模块间的通信不受干扰。如果安全芯片检测到某个模块独占总线,就会将它作为恶意模块隔离起来。接着,安全芯片可以启用存储在芯片上的可编程逻辑硬件(programmable logic hardware),替代被隔离模块的功能。这个过程很可能拖慢系统的整体运行速度,但至少可以保证设备平稳运行。
不过,公开的攻击可能不是最致命的,隐蔽的攻击带来的威胁往往更大。在一轮隐蔽的攻击中,设备表面运行正常,背后却在从事恶意活动。以手机为例,恶意硬件很有可能秘密地将该手机收到和发送的所有短信内容传送给第三方。没有防备心的人根本不会觉察,因而攻击可以一直持续下去。
安全芯片可以针对这类攻击,建立起严密而重要的保护。它们会不间断地监测进出芯片的数据的流量和类型,并将这些数据流与期望的数据流进行统计比较。任何异常都会被安全芯片标记为疑似数据泄漏,继而向用户报警,或者自行阻止这些数据流。
除了采取措施抵消木马攻击对自身运行的影响之外,集成电路还能将遭受的攻击类型通知附近的其他设备,让其他设备有可能针对这类攻击采取有效的防范措施,避免它的发生,或者至少将损失降到最低。现在几乎所有电子系统都具备一定的网络通信能力,因此这类预警并非天方夜谭。比方说,如果一个正在遭受攻击的电路可以识别初始触发条件,它就能提醒其他电路屏蔽这些信息。
这些描述的种种策略,只有在负责芯片安全的部分电路自身是安全且可信的前提下,才能行之有效。这有点像是个循环论证——换句话说,让电路安全的唯一方法就是确保电路安全,前一个电路指的是整个芯片,后一个指的是负责芯片安全的电路。不过后一个电路只是正规芯片中很小的一部分,它们可以由芯片制造商自主设计,确保只有极度可靠的人才拥有访问权限。
下一步工作
与软件一样,硬件领域的攻防大战势必是一场全方位的较量。
在政府、研究学者以及工商界的共同推动下,互联网安全已取得巨大进展。但对芯片安全来说,情况并非如此。芯片安全的现状与15年前的互联网大致相似:虽然安全问题越来越得到重视,但是业界尚未制定出完善的防御策略,付诸实施的就更少了。
一套能够全面综合地防御硬件木马攻击的方法,需要在多个层面采取措施。以DARPA的项目为例,这些策略的目的在于确保有危害的硬件绝对不会被制造出来,这算是一个好的开始。但最重要的是,我们必须开始履行安全设计规范,比如采用本文中提到的一些方法,在攻击发生时能够作出主动防御。这些防御手段不会平白无故地出现。和其他领域一样,芯片安全也需要花费大量时间、金钱以及人力。备选安全策略非常丰富,这意味着我们需要在安全保障的有效性和实施方案的成本之间做出取舍。幸运的是,即使花费较少资金,也可以提供有效的安全保障。
安全芯片中包含了少量额外的逻辑电路。我在美国加利福尼亚大学洛杉矶分校的研究小组经过研究发现,额外的电路通常会使这类芯片的体积增加几个百分点。而且,为了确保功能模块正常运行,还需要额外增加一些步骤,这些步骤可能会占用核心功能任务专用的时钟周期,因而芯片的运行速度也会受到影响。然而,我们也发现,芯片速度降低的幅度相对来说并不明显,而且,如果使用处于休眠状态的逻辑和功能模块进行安全检测,有些情况下甚至完全不会影响芯片速度。
跟软件业走过的历程一样,硬件安全保护领域必然会展开一场“军备竞赛”,这需要研究人员开拓创新,以应对不断升级的攻击手段。然而,由于新型芯片不可能像软件那样能够随时在互联网上下载补丁来修复安全漏洞,所以在现代电路设计过程中,我们可以通过适当的方法在芯片中添加若干可重构的部件。在硬件黑客发起攻击时,这些部件可以自动替换掉那些因攻击而失去正常功能的硬件。这就是所谓的弹性设计,它是我们最好的防御手段。
即使硬件攻击不可避免,也并不意味着它们就一定能够奏效。
请 登录 发表评论