医疗设备软件不可或缺的安全性设计
安全研究人员在很多医疗仪器中都发现了安全不足,为了应对这种不利的局面,美国食品药品监督管理局(FDA)发布了关于管理医疗设备安全性的规范。在医疗器材研发过程中,大量的精力被投注于确保安全性和降低患者风险的考虑。尽管如此,随着不同仪器联网性能的不断提升,安全研究人员在很多医疗仪器中都发现了安全不足,其中一个例子就是在一种常用输液泵中发现的1,400个安全漏洞。
针对网络安全与静态分析的FDA指导原则
在意识到医疗仪器应当遵守更为严格的安全性目标后,FDA在2014年颁布了网络安全管理指导原则;随着无线通信、网络和互联网在医疗设备中更进一步的普及和应用,医疗设备的安全性也面临着前所未有的挑战。
进一步来说,与其他仪器不同的是,医疗设备直接关系到患者的安全和隐私。风险管理(包括安全性强化和漏洞管理)是医疗设备软件开发中最重要的组成部分——而静态分析则是这个过程中最重要的环节。
家庭护理和“可穿戴”医疗设备数量呈现指数型成长,而它们仅是医疗设备中的一个分支。同样,对于其他医疗和物联网(IoT)的商业契机来说,这些发展都面临着安全、资料安全性和隐私的考虑。
FDA的指导原则涵盖范围较广,并且意在建立高级安全性管理规范;此指导原则列举了需要启用自动化工具的众多原因,其中包括以下几点:
• “制造商应当在设计和开发医疗设备时满足网络安全”;这也是GrammaTech公司一直着重探讨的一个课题——在研发的最开始就将安全性考虑进来,而不是研发后再作为附加项目,这是非常关键的。以下是详细的说明。
• “在进行设计和开发时就应该适当的对所涵盖资产、威胁和安全漏洞的定义进行探讨”; 静态分析与良好的软件开发流程无缝集成,并特别着重于检测与识别程序代码和二进制代码中的安全漏洞。
• “评估设备功能中的安全威胁和漏洞对最终用户/患者中所造成的影响,以及这些威胁与漏洞被利用的可能性”;举例来说,通过对遭污染数据的分析,GrammaTech 的CodeSonar工具能追踪整个软件的数据源,并辨别来自外部的潜在安全漏洞。
• “在提交产品上市审核前,制造商应当提供与其医疗设备网络安全相关的文件”;静态分析工具提供报告工具,以协助处理文件、测试完成以及软件就绪。
“安全优先”的设计
安全性(security)并非一直是医疗仪器的首要考虑因素——长时间以来,仪器间的通信仅限于本地网络并掌握在可信赖的操作人员和设备中。然而现代化的医疗设备普遍拥有联网功能(且往往是互联网), 因此这些设备也对安全性和隐私有着更高的要求。所以在研发周期的较初期阶段就需要遵循安全策略。
软件开发周期中的软件安全性
“安全优先”的设计方法,意味着将集成安全性视为软件开发周期(SDLC)中的一个最高优先级,如图1所示;开发者和项目经理应该在以下的关键阶段注意各种情况。
• 需求阶段:一旦可进行系统范围内的威胁评估,就可以了解医疗设备中的威胁面(threat surface)。在需求阶段,可以导入安全性相关的需求以及已知的“滥用案例(黑客可能会追踪的用例)”和风险分析;后面会进一步提及应该被导入并加以考虑的安全性需求。此阶段十分关键,因为在这个时间点,安全性成为一个已知的项目目标并已拥有适当水平的风险管理、调度和成本计算。
• 设计和架构:在候选架构完成时,安全性必须纳入审核项目中(之前可能并未纳入);根据已知威胁评估和安全性需求对架构进行审核,为这个开发阶段增加了一个新的环节。在这个阶段,应该建立测试计划,涵盖针对预知“滥用案例”的安全性分析。
• 代码开发:在撰写程序代码阶段,遵循安全性指南和编码标准是非常重要的;使用例如静态分析等自动化工具,是确保安全漏洞不被导入产品的关键。测试和对自动化测试(包含安全性分析)在此阶段十分重要。
• 集成和测试:在系统整体上开始成形时,子系统和系统测试可以在集成以及上市之前发现安全漏洞。自动化渗透测试工具在这个阶段十分有效,可以发现在较早开发阶段未能发现的安全漏洞;最终产品上市前的包装与配置是此阶段最后一个步骤的关键,需要确保这款开箱即用产品具备最高的安全性,可预防大多数目前市面上联网设备常见的问题。
• 部署和维护:当产品进入市场并大范围部署后,修补安全漏洞所需的费用将会大幅飙升;一款以“安全优先”设计方法出发的产品,发生安全漏洞事件的几率较低,但是供货商必须具备能持续应对安全性挑战的能力。在设计产品时至关重要的一点就是采用可更新的固件和软件,从而能迅速应对新出现的问题;不过在产品进行维护和改版时,安全性仍然是一个持续性的目标,新出现的安全漏洞和威胁也需要以新一代的方案反馈到系统设计中。
图1:叠加到软件开发周期上的安全性设计流程
安全性需求
确保医疗设备安全性需要经过许多考虑;以下列出了安全性需求的关键案例——其中有一些可能凌驾于对产品功能性的需求:
• 用户验证──根据不同的用户等级,验证用户存取数据与执行功能的权限。 • 防篡改──防止通过改变设备软硬件来规避安全防护机制的行为。 • 安全存储──确保存储的数据受到在线或离线访问保护,包括利用加密文件存储与数字版权管理(DRM)等技术。 • 安全通信──确保数据传输安全性,同时避免通过连接通道(如网络、USB端口)的有害存取;虽然网络连接通常是第一个被注意到的,别忘了还有其他可能遭遇攻击的通道。 • 可靠性和可用性──在面临进行中的黑客攻击时,仍能维持医疗设备的安全工作。
静态分析工具对IEC 62304标准和医疗设备软件的适用性
尽管IEC 62304标准没有明确要求开发工具,却列出了对严格测试、验收标准和可追溯性的要求;有鉴于目前大部分医疗设备软件项目的涵盖范围,在没有工具的情况下要完成那些功能要求是不实际的。例如:
• 第5.5.2节 对一个软件单元验证步骤的要求: 制造商需要建立相关策略、方法和步骤来验证每一个软件单元
• 第5.5.3节要求: 制造商需要在较大型软件项目的集成之前,为软件单元建立适当的验收标准,并确保软件单元符合验收标准……软件程序代码是否符合程序编写流程和编码标准?
• 第 5.5.4节提供额外验收标准: 当呈现于设计时,制造商需要依以下情况包含适合的额外验收标准:正确的事件序列;数据和控制流程;经计划的资源分配;错误处理(错误描述、隔离和复原);变量初始化;自我诊断;内存管理和内存溢出;以及边界条件。
这些验收标准中的大多数非常适合静态应用程序安全检测(SAST),即静态分析工具;实际上已经有采用静态分析的强力佐证──FDA曾使用GrammaTech的CodeSonar工具,在一连串的输液泵故障事件中,分析医疗设备软件并评估其源代码的质量。
SAST工具在安全性设计中所扮演的角色
SAST工具在编码和集成阶段为软件开发提供了关键性的支持;无论是在开发还是维护阶段,持续确保程序代码质量,能大幅降低软件安全性与质量可能带来的成本与风险。以下是其主要优势:
• 静态分析可以找出基于覆盖的测试无法发现的错误(bug)──后者的单元测试一般通过软件覆盖程度的量测来进行,诸如声明或判定覆盖等;尽管已经很严苛,但仍有一些缺陷会通过这类测试。静态分析工具能识别这类缺陷。
• 静态分析工具能在较早阶段发现缺陷──能在产品开发者手上就避免缺陷发生是最理想的情况,这样可以节省随着项目进展而不断增加的测试和修复所需成本。
• 静态分析可以应对SOUP──在医疗设备软件中,未知来源软件(SOUP)需要特别的应对方式;一款良好的静态分析工具能够评估第三方和商用现成软件(包括二进制可执行文件和库)的质量和安全性。
• 静态分析可以加速上市前核准文件的建立:将软件单元验收结果建文件,是证明产品遵循认证标准的关键;静态分析工具拥有大量的报告功能,可符合FDA审核要求。
结论
安全性现在已经成为医疗设备软件研发过程中的首要风险/责任管理因素;在研发初期就将安全性纳入到产品设计考虑,不但是FDA的要求,也是一个良好的习惯。在缩短医疗设备上市时间以及上市前的审批流程当中,静态分析工具扮演了重要角色。
推荐阅读