从空气炸锅到车联网 看嵌入式系统的开发安全

攻防
2年前

iot-army.gif

  描写流氓AI、流氓机器人和骑到主人头上的家用电器的流行文化作品简直不要太多。科幻小说、滑稽剧和架空幻想作品就喜欢这些题材,但随着物联网和联网设备的普及,我们需要认真谈论下网络安全问题了。

  我们的生活中到处都是软件,很容易就忘记了我们到底有多依赖这些代码去干活,为我们提供如此之多的创新和便利。

  与基于Web的软件、API和移动设备非常类似,一旦被攻击者发现,嵌入式系统中的脆弱代码就可为其所利用。

  虽然不太可能经由网络攻击驱使烤面包机大军奴役人类(尽管特斯拉机器人有点令人担忧),但恶意网络事件却仍然有可能发生。我们的某些汽车、飞机和医疗设备也依赖复杂的嵌入式系统代码执行关键任务,这些东西遭到入侵也是有可能危及生命的。

  无论是其他类型的软件还是嵌入式系统代码,开发人员总是第一批接触的人,从创建阶段伊始就经手了。也与其他任何类型的软件一样,开发过程可能是产品上线前未检测到的常见阴险漏洞的滋生温床。

  开发人员不是安全专家,任何公司都不应该期待他们把安全专家的事儿也做了,但可以给开发人员配备更强大的武器库,让他们能够应对与自身相关的那类威胁。嵌入式系统通常用C和C++语言编写。由于技术需要保持增长和变化,嵌入式系统的使用越来越频繁,专门对开发人员进行此类环境中所用工具的安全培训,是应对网络攻击的重要防御策略。

爆炸的空气炸锅、任性的汽车……我们真的直面危险?

  尽管有一些围绕安全开发最佳实践的标准和监管规定来保证我们的安全,但我们仍需朝着全方位的软件安全迈出更精准、更有意义的步伐。设想有人入侵空气炸锅可能导致的问题似乎有些杞人忧天,但恶意黑客以远程代码执行(RCE)攻击的形式将温度调高到危险程度的事情确确实实发生了,代码漏洞导致车辆遭他人接管的情况也不是没有出现过。

  汽车相当复杂,载有多个嵌入式系统,每个嵌入式系统都有各自负责的微功能;从自动雨刷器到引擎到刹车等等。与WI-Fi、蓝牙和GPS等不断增加的通信技术栈交织在一起,联网车辆就是个暴露在多种攻击渠道面前的复杂数字基础设施。预计到2023年,全球将有7630万辆联网汽车在路面上飞驰,这意味着我们得为真正的安全奠定坚实的防御基础。

  汽车行业软件可靠性协会(MISRA)是对抗嵌入式系统威胁的重要组织,已制定出多项指南促进嵌入式系统环境中的代码安全、可移植性和可靠性。这些指南锚定了企业在其嵌入式系统项目中必须争取达到的标准。

  然而,要创建和执行符合这一黄金标准的代码,嵌入式系统工程师需要能够熟练掌握工具,更不用说安全意识了。

为什么嵌入式系统安全技能提升如此具体?

  按今天的标准来看,C和C++编程语言已经过时了,但仍然应用广泛。这两种编程语言构成了嵌入式系统代码库的功能核心,而嵌入式C/C++作为联网设备的一部分在现代世界持续闪耀。

  尽管这些编程语言的历史可谓相当“悠久”,且都很容易出现注入缺陷和缓冲区溢出等常见问题,但对于开发人员来说,要想真正成功地缓解嵌入式系统中的安全漏洞,就必须亲手处理模拟他们工作环境的代码。普通安全实践中的通用C语言编程培训效果,完全比不上专门花时间在嵌入式C语言环境中修炼那么有效和牢固。

  现代车辆中有十几个到一百多个嵌入式系统,开发人员必须接受有针对性的培训,了解需要查找什么,以及如何在IDE中进行修复。

每个人都有责任从一开始就保护嵌入式系统

  很多企业的现状是,开发速度重于安全,至少在开发人员的职责方面是这样的。开发人员产出安全代码的能力几乎不在考核之列,而快速开发出强悍功能却是成功的标志。软件需求只会不断增加,但这种速度胜过安全的文化已经让我们在与漏洞的战斗中失了先机,随后而来的就是无穷无尽的网络攻击。

  如果开发人员没有接受培训,那这个锅就不应该由他们来背,而是应用安全团队应该有人向开发部门推荐合适的可用(更不用说可评估了)技能提升计划来帮助堵上这一漏洞。安全需在软件开发项目伊始就成为首要考虑因素,每个人(尤其是开发人员)都需要在其中发挥自己的作用。

动手处理嵌入式系统安全问题

  缓冲区溢出、注入缺陷和业务逻辑漏洞等都是嵌入式系统开发中的常见陷阱。如果深藏在单个车辆或设备的微控制器迷宫中,这些问题可能引发巨大的安全灾难。

  缓冲区溢出漏洞尤为普遍,如果想要深入了解攻击者如何利用这一漏洞入侵前述空气炸锅(可致远程代码执行),不妨查阅关于CVE-2020-28592的报告。

  在真正的嵌入式C/C++代码中动手处理缓冲区溢出漏洞,可以试试这个挑战,是否可以定位、识别和修复可导致此类潜在错误的糟糕编码模式:点击查看



参考阅读

TCP/IP为何成为物联网的威胁

不同行业的物联网设备及其安全防护方法

[调研]API和Web安全越来越难