Synopsys 软件完整性小组高级安全策略师 Jonathan Knudsen 分享了如何减少智慧城市中的软件漏洞……
如今,我们生活在激动人心快速发展的时代。设备、网络和软件方面的技术进步使几年前还无法想象的应用和服务成为了可能。 5G网络的出现提高了网络的容量和速度,这将迎来一个充满可能性的新时代。
智慧城市就是其中一种可能性。
智慧城市只是意味着使用传感器收集信息和软件来解释信息并对其采取行动的城市空间。以下是我们在智慧城市中可能会发现的一些功能:
- 如果城市的停车位有传感器可以知道它们何时被使用,司机就可以使用应用程序找到可用的停车位并支付费用。
- 通过交通灯上的传感器和摄像头来监控交通,智慧城市可以根据实时条件优化交通流量。
- 支持网络的垃圾箱可以在需要清理时通知智慧城市管理部门,从而优化资源。
- 夜晚,当附近没有车辆或行人时,智慧城市可以通过调暗路灯来节省能源。
毫无疑问,网络、物联网 (IoT) 设备和软件的持续扩散将使我们无法想象的应用成为可能。同时,爆炸性的技术增长将使犯罪的规模和影响达到我们也无法想象的程度。
该怎么办?
我们如何确保未来的智慧城市不会受到损害?不幸的是,没有什么是绝对安全的。坏事总会发生;你能做的最好的事情就是降低坏事发生的可能性。例如,如果你去骑自行车,你就有跌倒和头部严重受伤的风险。如果你在骑行期间佩戴头盔,则严重头部受伤的风险会降低。
智慧城市也不例外。其目的不是防止事故的,坏事肯定会发生——至少是系统故障或恶意攻击。但这并不意味着我们不能以最小化这种风险的方式设计和建设智慧城市。
智慧城市带来的大部分风险将来自软件。软件运行在作为智慧城市的眼睛和耳朵的物联网设备上;软件在聚合和协调这些设备的系统上运行;软件将根据数据和用户行为做出决策并采取行动;软件将处理金融交易和记录保存;软件将用于未来智慧城市的每一个角落。事实上,软件已经无处不在,但它只会在未来变得更加普遍。
此外,几乎所有的软件都是建立在其他软件之上的。开源软件组件被用作构建新软件的构建块。应用程序和系统最终是一个复杂的软件组件堆叠,一个令人眼花缭乱的复杂结构。
从近期的新闻报道可以看出软件的风险有多大。勒索软件攻击、系统故障、妥协和数据泄露已经司空见惯。
值得庆幸的是,创建更好、更安全的软件的过程已经众所周知:它是一个安全开发生命周期(SDLC 或 SDLC),其中安全性是开发的每个阶段的一部分。威胁建模等设计时分析有助于将安全性融入系统本身的结构中,而贯穿实施和测试阶段的各种类型的安全测试有助于识别可以在软件发布之前修复的弱点。对软件供应链的持续监控有助于确保在出现新的供应链漏洞时能够迅速发布应用程序更新。
同样重要的是要注意,应用程序团队通常更关注功能而不是安全性。在各种紧急项目的赶工中,他们可能会忽略或推迟安全问题。许多软件供应商通常对于系统故障问题非常不负责任,下游消费者错误地认为他们的供应商已经承担了安全责任。
而且,非常不幸的是,软件安全性难以量化。理想情况下,我们希望软件具有安全评分或等级。例如,在智慧城市的情况下,我们会要求所有软件都具有特定的最低安全系数。因此,我们需要对智能道路或紧急服务等关键系统更高的要求。
虽然相应的评分系统仍然是一个难以实现的梦想,但我们可以观察到的是软件是如何构建的。供应商是否使用了 SDLC?他们是否进行必要的安全流程操作,例如威胁模型和安全测试结果?
最近 NCSC 关于“互联场所”(例如智慧城市)的指南是朝着正确方向迈出的一步。认识到安全性必须成为任何软件系统的一部分很重要,但对其进行量化将很困难。政府可以推荐指导方针;如何执行?同样,应用程序和设备的购买者如何知道他们希望使用的产品的风险降低了多少?
提高构建者和购买者的软件安全意识是构建更安全、更具弹性的软件基础设施的第一个重要步骤。构建者需要在应用程序开发的每个阶段都包含安全性,从设计到实施、测试和维护。静态代码分析、软件组合分析和模糊测试等自动化工具可以帮助在开发周期中清除更多漏洞,从而产生更具弹性、更安全的产品。
买家需要意识到他们购买的产品的安全性至关重要。他们需要了解软件是如何创建的,并根据他们如何构建产品以及他们如何处理安全和风险来评估供应商和产品。
构建未来基础设施(例如智慧城市)的最佳方式是睁大眼睛并充分了解如何将风险降至最低。