关于本书
本书的目的是希望帮助嵌入式开发人员,提高产品的安全性和可靠性。虽然有些图书涉及了嵌入式系统安全,但内容的主题相当狭窄,几乎完全专注于硬件相关问题,或网络安全协议及其底层加密。相比之下,本书旨在实现一种全面的、系统层面的安全:硬件、平台软件(例如操作系统和系统管理程序)、软件开发流程、数据保护协议(网络和存储)以及加密。
虽然没有哪个标题能够实际涵盖嵌入式系统安全的每一个话题,但本书尝试解决构建当代嵌入式系统中主要与安全相关的组块。
读者会获得一种对关键系统软件和硬件问题的深刻理解,这些问题是设计安全嵌入式系统必须要考虑的。大多数嵌入式系统开发人员并不会去写他们自己的操作系统和网络协议,也不用设计他们自己的微处理器。因此,精通与这些平台组件安全相关的知识,对做出正确的嵌入式设计选择,特别是在某个特定操作环境下满足安全目标至关重要。
读者将学习一种有效地开发安全嵌入式软件的方法。除了合理地应用平台组件之外,嵌入式开发人员必须设计自己的软件,并且保证以最高可用安全级别的方式集成整个系统。因此,本书的一个重要目标是讨论用于开发安全软件行之有效的实用技术。我们也尝试拆穿这样的“神话”,即为了大大提升软件安全,不可能不投入与之相当的开发时间和成本。书中提出的方法源自行业标准和实际经验的结合。我们相信,嵌入式系统开发人员在这方面严重缺乏高质量的指导。我们的目标是填补这个空白。
读者对象本书主要面向参与嵌入式系统开发的工程专业人员。硬件、软件和系统工程师,以及架构师多多少少都会涉及嵌入式系统安全。
计算机安全最重要的原则之一是,若系统的最初设计未考虑计算机安全,则改造系统的?安全能力是困难且不明智的,而且常常在经济上或技术上都是不可行的。因此,为了提高嵌入式系统领域的安全性,唯一的希望是指导开发人员,必须学会像思考功能、内存占用和调试一样思考安全问题。
本书还为专业人士提供了一个重要的参考,即关于嵌入式系统的测试和质量保证。这些工程师必须学会测试安全强度,但这方面的挑战要比测试某个功能规范要困难得多。因为即使可能的话,完全列举潜在的安全威胁通常也是很困难的。安全测试需要巨大的创造力和决心。但是,质量控制工程师拥有很多工具可以解决这个问题,而且本书的一个重点是提供此工具箱相关的实用指导。
对于构建安全嵌入式系统的关注必须渗入到组织中。开发人员的培训必须包括阅读像本书一样的教材,参加有安全指导的技术会议,从项目的关键硬件和软件供应商得到的训练,以及经常性地接触相关的时事。因此,本书面向负责确保开发人员设计的安全性的管理团队。管理必须要了解嵌入式安全问题,而且必须成为这种培训的卖点。在汽车的示例中,本书提及的管理要负责单个组件,例如一个信息娱乐系统和这些组件的集成(例如,主要的一级供应商和汽车制造商),以及产品整体的集成。事实上,汽车、飞机、火车、工业控制系统,或任何其他类型的电子产品,都有着大量的嵌入式系统,负责制造这些产品的企业的副总裁、总经理和管理者将因阅读本书受益,并会放在书架上以供参考。
除了与安全相关的专业人士之外,本书也为对可靠性要求较高的嵌入式系统开发人员提供指导,这些系统包括生死攸关的医疗设备、航空电子设备和其他运输系统、通信系统,甚至像智能手机这样大容量、复杂的消费类设备。对于构建安全、可靠的嵌入式系统存在巨大的共性需求。
最后,本书中的很多安全概念,特别是软件开发实践,是与工程专业相关的,但是已经超出了嵌入式系统领域。例如,本书教导Web应用程序开发人员,不仅要关心脚本和数据库的漏洞,还要全面了解Web服务器可能对操作系统、其他应用程序以及底层的计算机硬件的安全的影响(反之亦然)。
相对资深的工程师和架构师阅读本书也有帮助。但对于入门级的程序员,以及大多数经验丰富却相对缺乏安全问题相关经验的开发人员,这本书对他们是相当有用的。甚至有大量安全背景和知识的工程师可能会发现,本书也有助于完善他们的“知识库”。
虽然本书并没有写成教科书的风格,但对于计算机科学或工程学科中教授或学习嵌入式系统的在校教师和学生也会有帮助。在全球技术学院中,嵌入式系统开发是一门极缺乏的学科,而且几乎没有嵌入式安全的指导。
?本书内容安排我们建议所有读者从头至尾按顺序阅读所有章节。对于那些时间紧迫的人,我们进行了以下梳理,根据工作职能对内容进行了主次之分。
第1章讨论了在嵌入式系统中提升安全性的发展趋势,接着介绍了威胁的基本定义以及对抗这些威胁所采取的保护策略。在本质上,我们采用了不同的安全和嵌入式系统观念,并且总结了它们在现代嵌入式系统中的交集。第1章还提供了在一些最激动人心、发展迅速而且重要的新型嵌入式系统技术领域中安全概念和指导的示例应用,包括智能手机、智能电网,并展望了嵌入式安全趋势。这一章强烈推荐给所有读者。
第2章全面地讨论了安全问题以及与平台软件相关的最佳推荐的应用,包括操作系统、超级管理程序和多重独立安全等级( MILS)架构。该章还讨论了与整个系统安全架构相关的关键安全问题和最佳推荐实践,以及对可用的硬件功能的影响,如MMU、IOMMU和虚拟化加速。该章对于工程师、架构师和技术经理最为重要。
第3章旨在最大限度地保证嵌入式软件的安全。关键性的原则和指导贯穿了整个章节,因此该章对于软件开发人员以及技术经理最为关键。
第4章概述了大多数重要的加密算法、密钥管理和美国政府面向嵌入式系统的相关指导。除了涵盖这些基本内容之外,我们还讨论了嵌入式系统环境下的加密概念以及特有的制约和要求。如果读者没有扎实的密码学基础,都应该阅读该章。即使当前项目没有用到加密功能,但是在将来的项目中也很有可能用到。加密和验证构成了所有数据保密与网络访问保护的基石。
第5章涵盖了最重要、最广泛的网络安全协议,例如IPSec和传输层安全(TLS)以及存储加密方法,并且强调了在资源有限的嵌入式系统中的实现问题。该章为专业人士在最新安全协议标准及其修订版本方面提供一种介绍或补充。该章核心目的之一是帮助开发人员为涉及安全的相关系统层(网络和存储)制定正确的决策。该章还包括了一些高级议题,例如网络时间信道,有兴趣的读者以此可以了解确保重要资源的机密性。
第6章提供了扩展案例的分析,这些都建立在前面章节内容的基础上并加以了应用。该章涵盖了少数新型应用和环境中的安全问题及示例性解决方案架构。第6章推荐给所有读者。
致谢感谢Guy Broadfoot,感谢他为第3章的模型驱动开发部分所做的贡献。
感谢Jack Ganssle,感谢他为本书写的序言以及他给出的审阅和反馈意见。
? 感谢Michael Barr,感谢他的审阅和反馈, 以及Netrino对《Embedded C CodingStandard》所做的贡献,第3章把该书当作一个案例分析进行了讨论。
感谢Thomas Cantrell、Jack Greenbaum、Dan Hettena和Philippa Hopcroft,感谢他们深思熟虑的审阅和反馈。
感谢Elsevier公司的编辑Tim Pitts和Charlotte Kent,感谢他们对整个项目的支持。
感谢本书的插图设计者Tamara Kleidermacher,他煞费苦心地为这本书制作了各种插图。
添加可视化手段以辅助技术讨论的能力相当关键,而且Tamara对于视觉风格和统一很有天分,大大改善了本书。
Mike要感谢他的儿子Dave,感谢他的邀请使其成为这项工作的合作者。
Mike要感谢Ellwood (Chip) McGrogan,正是他“教会了我所知道的密码学知识”。
David要感谢他的家人-Tamara、Hannah和Aaron-在编写本书的很多夜晚和周末,感谢他们一如既往的支持和非凡的耐心。
David要感谢他的哥哥Paul,作为自己一生的榜样,感谢他坚定不移的鼓励、支持和真诚的忠告。
David要感谢Dan O'Dowd和Mike Kleidermacher,感谢他们几十年来慷慨地分享和传递他们的知识与激情。
David要感谢美国格林希尔软件(Green Hill Software)公司曾经的和现在的员工,感谢他们多年来的支持。这个才华横溢的团队让整个世界变得更加美好,更加安全,与他们共事是我的荣耀。