在醫療器材研發過程中,大量的精力被投注於確保安全性和降低患者風險的考量;儘管如此,隨著不同儀器連網性能的不斷提升,安全研究人員在很多醫療儀器中都發現了安全性漏洞,其中一個例子就是在一種非常普及的輸液幫浦(infusion pump)中發現的1,400個安全弱點。

為了因應這種不利的局面,美國食品藥物管理局(FDA)發佈了關於管理醫療設備安全性的規範。此公告意在重申除了使用安全之外,訊息安全也應納入醫療設備研發過程中的關鍵考量。

針對網路安全與靜態分析的FDA指導原則

在意識到醫療儀器應當遵守更為嚴格的安全性目標後,FDA在2014年頒布了網路安全管理指導原則;隨著無線通訊、網路和網際網路在醫療設備中更進一步的普及和應用,醫療設備的安全性也面臨著前所未有的挑戰。

進一步來說,與其他儀器不同的是,醫療設備直接關係到患者的安全和隱私。風險管理(包括安全性強化和弱點管理)是醫療設備軟體開發中最重要的組成部分——而靜態分析(Static Analysis)則是這個過程中最重要的環節。

家庭護理和「穿戴式」醫療裝置數量呈現指數型成長,而它們僅是醫療設備中的一個分支。同樣,對於其他醫療和物聯網(IoT)的商業契機來說,這些發展都面臨著安全、資料安全性和隱私的考量。

FDA的指導原則涵蓋範圍較廣,並且意在建立高層級的安全性管理規範;此指導原則列舉了需要啟用自動化工具的眾多原因,其中包括以下幾點:

˙「製造商應當在設計和開發醫療設備時將訊息安全性列入考量」: 這也是軟體工具暨網路安全解決方案GrammaTech一直著重探討的一個課題——在研發的最開始就將安全性納入設計考量,而不是研發後再作為附加項目,這是非常關鍵的。以下是詳細的說明。

˙「在進行設計和開發時就應該適當的對所涵蓋資產、威脅和安全弱點的定義進行探討」: 在良好的軟體開發流程無縫整合靜態分析,並特別著重於於偵測與識別程式碼和二進位碼中的安全弱點。

˙「評估設備功能中之安全威脅和弱點對終端使用者/患者中所造成的影響,以及這些威脅與弱點被利用的可能性」: 舉例來說,透過對遭污染資料的分析,GrammaTech的CodeSonar工具能追蹤整個軟體的資料來源,並辨別來自外部的潛在安全弱點。

˙「在提交產品上市審核前,製造商應當提供與其醫療設備資安相關的文件」: 靜態分析工具能提供報告功能,以協助準備這類文件、測試完備度以及軟體是否就緒。

「安全性優先」的設計

安全性(security)並非一直是醫療儀器的首要考量因素——長時間以來,儀器間的通訊僅限於本地網路並掌握在可信賴的操作人員和設備中。然而現代化的醫療設備普遍擁有連網功能(且通常能連上網際網路), 因此這些設備也對安全性和隱私有著更高的要求。所以在研發週期的較初期階段就需要遵循安全性原則。

軟體開發週期中的軟體安全性

「安全性優先」的設計理念,意味著將整合安全性視為軟體開發週期(SDLC)中的首要考量,如圖1所示;開發者和專案經理應該在以下的關鍵階段注意各種情況。

20160926TA01P1
圖 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)──__在面臨進行中的駭客攻擊時,仍能維持醫療設備的安全運作。

靜態分析工具對IEC 62304標準和醫療設備軟體的適用性

儘管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工具在安全性設計中所扮演的角色

SAST工具在編碼和整合階段為軟體開發提供了關鍵性的支援;無論是在開發還是維護階段,持續確保程式碼品質,能大幅降低軟體安全性與品質可能帶來的成本與風險。以下是其主要優勢:

__˙靜態分析可以找出基於覆蓋(coverage-based)的測試無法發現的錯誤(bug)──__後者的單元測試一般透過軟體覆蓋程度的量測來進行,諸如聲明(statement)決策(decision)的覆蓋等;儘管已經很嚴苛,但仍有一些缺陷會通過這類測試。靜態分析工具能識別這類缺陷。

__˙靜態分析工具能在較早階段發現缺陷──__能在產品開發者手上就避免缺陷發生是最理想的情況,這樣可以節省隨著專案進展而不斷增加的測試和修復所需成本。

__˙靜態分析可以因應SOUP──__在醫療設備軟體中,未知來源軟體(SOUP)需要特別的因應方式;一款良好的靜態分析工具能夠評估第三方和商用現成軟體(包括二進位應用程式和程式庫)的品質和安全性。

__˙靜態分析可以加速上市前核准文件的建立──__將軟體單元驗收結果建檔,是證明產品遵循認證標準的關鍵;靜態分析工具擁有大量的報告功能,可符合FDA審核要求。

結論

安全性現在已經成為醫療設備軟體研發過程中的首要風險/責任管理因素;在研發初期就將安全性納入產品設計考量,不但是FDA的要求也是一個良好的習慣;對於縮短醫療設備上市時程,以及產品通過上市前核准流程,靜態分析工具扮演了重要角色。