具有更大挑战性的安全软件开发

安防与国防   作者:Jeff Shepard,为贸泽电子撰写 时间:2021-11-04来源:电子产品世界

各种类型应用中连接设备数量的持续爆炸性增长加大了开发安全软件的重要性。每个设备都面临不同的风险,因此,必须为每个新项目详细评估软件安全要求。云计算的广泛使用也催生了新的攻击媒介,使软件安全变得越来越复杂和难以实现。零信任已成为软件安全的新口头禅。

1635991015596948.png

图片来源:Gorodenkoff/Shutterstock.com

安全软件的开发始终是一个巨大挑战,而且从来都不是一项能够完美完成的任务。在开发安全软件的开始,需要了解您要保护的对象、尽量避开的对象、以及各种攻击的潜在影响。威胁的不断变化意味着在项目开始时通常无法完全确定安全要求,在开发过程中,可能会出现多次更改。一旦系统或设备投入使用,各种网络威胁和威胁媒介也会不断演变。面对不断变化的威胁,越来越多地使用无线更新和补丁来维护安全性。

不幸的是,软件漏洞是一种永远存在的动态风险(图 1)。因此,必须确保您的代码安全且受到相应保护,不安全的应用会导致黑客入侵,它们可以直接控制一个设备,或者提供入侵另一个设备的访问路径。软件安全是一个多方面的挑战,包括安全通信、安全操作系统、安全启动、安全静态和传输数据、消除漏洞的安全编码标准和实践、稳健性测试等。下面将探讨什么是安全编码,并为您提供安全编码资源示例,包括行业标准、指南、法规以及公认的测试和验证协议。

1635991037858770.png

图1 软件安全是一个多方面且不断变化的挑战(来源:buffaloboy/Shutterstock.com)

安全编码

安全编码是指通过计算机软件开发以防止意外引入安全漏洞。通过识别不安全的编码实践,您可以在部署之前采取主动措施来减少或消除软件中的漏洞。安全软件开发是一个复杂的过程,包括许多国家和国际准则、法规和标准。安全软件开发从威胁建模开始。

威胁建模

威胁建模和了解所需的安全级别是在新项目开始阶段为确定安全代码开发目标而采取的重要步骤(图 2)。要保证安全需要一定时间和精力,但这些并不绝对。多个标准和指南采用安全级别、评分或等级来定义安全软件的功能。因此,您需要清楚了解每个项目的特定安全需求和目标。每种威胁建模方法中的常见元素包括:

●   记录数据流以识别系统易受攻击的位置。

●   系统地识别尽可能多的潜在威胁。

●   确定用于降低每个潜在威胁的可能性或影响的控制措施。

1635991060977236.png

图2 威胁建模是安全软件开发中复杂而关键的第一步(来源:Panchenko Vladimir/Shutterstock.com)

一些常用的威胁建模方法包括:

●   Microsoft 安全开发生命周期 (SDL) 是一种工程技术,可用于帮助识别会影响您应用的威胁、攻击、漏洞和对策。

●   攻击仿真和威胁分析流程 (PASTA) 是一种以风险为中心的七步方法。它能够提供一个协调业务目标和技术要求的过程,同时考虑了合规性问题和业务分析。

●   通用漏洞评分系统 (CVSS) 是一个开放框架,用于传达软件漏洞的特征和严重性。 CVSS 由三个度量标准组组成:Base、Temporal 和 Environmental。

●   混合威胁建模方法 (hTMM) 由卡内基梅隆大学软件工程研究所于 2018 年开发。它由 SQUARE(安全质量需求工程方法)、Security Cards(由华盛顿大学开发)和 Persona non Grata (PnG,在 DePaul 大学开发)的组合构成。

指导原则和规定

技术规范 ISO/IEC TS 17961 是 C 编程语言的一组编码规则。该规范定义了确保用 C 语言编写软件的安全性、可靠性、安全性和完整性最佳实践,器目的是使用软件代码的静态分析,降低合规成本。 ISO 的两个出版物对其进行了定义:

●   ISO/IEC TS 17961:2013:信息技术——编程语言、它们的环境和系统软件接口——C语言安全编码规则

●   ISO/IEC TS 17961:2013/Cor 1:2016:信息技术——编程语言、它们的环境和系统软件接口——C语言安全编码规则,技术勘误表 1

MISRA C 是一组由汽车工业软件可靠性协会 (MISRA) 开发的 C 编程语言软件开发指南,它旨在促进代码的安全性、可移植性和可靠性,特别是那些在 ISO C/C90/C99 中编程的系统。还有一套 MISRA C++ 指南,MISRA C 已发展成为被汽车、航空航天、电信、医疗设备、国防、铁路等行业的领先开发商广泛接受的最佳实践模型。为了使MISRA合规更具有意义,有必要确定:

●   使用严格的软件开发流程。

●   准确地应用了哪些准则。

●   执行方法的有效性。

●   任何偏离准则的程度。

●   在项目之外开发的任何软件组件状态。

安全编码标准

安全启动或运行前进行代码验证是安全编码越来越重要的方面,这在攻击风险或潜在影响很高的应用中尤为重要,例如航空电子设备、自动驾驶汽车、医疗和工业系统等。此外,欧洲电信标准协会 (ETSI) (TS 103 645) 和美国国家标准与技术协会 (NIST) (SP 800-193) 的新物联网设备安全标准也包括运行前进行代码验证。

ISA/IEC 62443 系列标准由国际自动化协会 ISA99 委员会制定,并被国际电工委员会 (IEC) 采用,它提供了一个灵活的框架来解决和减少工业自动化和控制系统中当前和未来的安全漏洞。 ISA/IEC 62443-3-2,专注安全风险评估、系统分区和安全级别,该标准正在开发中。

IEC 62443 要求使用静态代码分析器来执行安全编码标准,包括:

●   Common Weakness Enumeration (CWE™),这是一个社区开发的软件和硬件弱点类型列表。它可作为一种通用语言,一种安全工具的衡量标准,也是弱点识别、缓解和预防工作的基准。

●   卡内基梅隆大学软件工程研究所(Carnegie Mellon University Software Engineering Institute)的 CERT 包括常用编程语言(如 C、C++、Java、Perl 和 Android™ 平台)的编码标准。

●   Open Web Application Security Project® (OWASP®) 是一个致力于提高软件安全性的非营利基金会。

●   美国国防信息系统局 (DISA) 提供与国防部项目特别相关的安全技术实施指南 (STIG)。

一些额外的安全编码资源是:

●   常见漏洞和后门(CVE) 是在特定软件产品中发现的网络安全漏洞和后门列表。该列表链接到来自多个不同漏洞数据库的信息,用户可以更轻松地比较安全工具和服务。

●   NIST 的国家漏洞数据库 (NVD) 是美国政府基于标准的漏洞管理数据存储库,它与 CVE 列表相关联并提供附加内容,包括如何修复漏洞、严重性评分和影响评级。要计算严重性级别,必须使用通用漏洞评分系统 (CVSS),这是用于评估软件漏洞严重性的开放行业标准。

●   支付应用程序数据安全标准(Payment Application Data Security Standard)是一项全球安全标准,适用于支付应用软件的开发,它以前被称为支付应用程序最佳实践 (PABP)。

●   NIST 的 SP 800-82 可指导如何保护工业控制系统。NIST 还解决了中型公司对 ICS 安全性的担忧,并已开始扩展机器人、智能交通和化学处理等领域的测试平台。 NIST 还制定了安全内容自动化协议 (SCAP)。

测试和验证

侵入测试是完整安全审计的重要组成部分。侵入测试是对系统的授权模拟网络攻击(见图 3),该测试目的是识别弱点,包括未授权方访问系统功能和数据的可能性以及所具备的优势,从而能够完成全面的风险评估。测试通常包括网络侵入测试、应用安全测试以及围绕网络和应用的控制和流程测试。

例如,支付卡行业数据安全标准(Payment Card Industry Data Security Standard)要求定期和系统更改后进行侵入测试。业内存在一些用于进行侵入测试的标准框架和方法,其中包括开源安全测试方法手册、侵入测试执行标准、NIST SP 800-115、信息系统安全评估框架和 OWASP 测试指南等。

1635991086662573.png

图3 侵入测试应考虑网络外部试图侵入的恶意行为者(外部测试)和来自网络内部的攻击 (来源:Panchenko Vladimir/Shutterstock.com)

通用弱点枚举 (CWE™) 是社区开发软件和硬件弱点类型列表。 CWE能够在下述方面帮助开发人员和安全从业人员:

●   用通用语言描述和讨论软件和硬件的弱点。

●   检查现有软件和硬件产品的弱点。

●   评估具备这些弱点工具的覆盖范围。

●   利用通用基线标准进行弱点识别、缓解和预防工作。

●   在部署之前防止软件和硬件漏洞。

设备的评估保证级别 (EAL) 是一个从 1 到 7 的数值,它是采用国际标准化通用标准安全评估进行确定。 EAL级别越高,相应设备安全目标文档中概述的验证和测试要求就越详细。更高的EAL级别不一定代表更安全的设备,它只是表明完全的测试和验证过程。在两个设备具有相同安全目标定义的情况下,评级较高的设备应该更值得信赖。

EAL要求也可以提高,以包括比给定EAL所需最低要求更广泛的保证要求。增强的EAL可以使用“增强”一词或使用 EAL5+ 中的加号来表示。

结论

软件安全是一个多方面的挑战,在各种不同应用中,开发安全软件的重要性正在日益提高。作为回应,安全编码标准也变得越来越关键,测试和验证性能的需求同样越来越重要。如本文所示,开发人员可以访问从威胁分析到开发过程,再到测试和验证的各种工具。

关键词:

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章


用户评论

请文明上网,做现代文明人
验证码:
查看电脑版