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