ni.com is currently undergoing scheduled maintenance.

Some services may be unavailable at this time. Please contact us for help or try again later.

NI LabVIEW 與 SDLC 中的安全開發:架構

概觀

​​軟體應用程式的安全機制必須採用正式方法,才能在整個開發生命週期中加入安全的思維模式。此軟體開發生命週期 (SDLC) 在開發開始前便著手準備團隊、為軟體開發建立保護措施、在軟體設計中遵循最佳安全實務,以及在發行後支援軟體。此篇技術文章為 NI LabVIEW 團隊提供相關建議,協助在其專案中採用納入安全軟體開發架構的正式 SDLC。

內容

​​介紹:LabVIEW 安全與 SDLC

​軟體開發生命週期 (SDLC) 是一種正式或非正式的方法,適用於設計、建立與維護軟體 (包括內建於硬體中的程式碼)。

​無論是否有正式記錄,每個軟體團隊都有開發流程。預期的安全開發可在整個流程中增加活動,以減少漏洞、提升維護功能,並降低修正安全問題的成本。漏洞不僅包含編碼故障所造成的錯誤,也包含安全設定、不正確的信任假設以及過時的風險分析所造成的弱點。

​在 SDLC 中越早處理安全性,最終達到相同安全程度所需的投入心力與成本就越少。這項稱為左移的原則,無論採用何種 SDLC 模型都至關重要。左移原則適用於任何程式設計環境,包括 LabVIEW—這是一種可用於開發安全應用程式的安全程式設計環境。完整應用的安全性大部分取決於開發團隊採用的 SDLC。

​有關 SDLC 與法遵的重要須知:多數法規計畫,例如,歐洲網路韌性法案 (CRA)、美國網路安全成熟度模型認證 (CMMC)、英國國防網路認證 (DCC) 等,都要求提供證據證明系統是依循本 SDLC 所述的安全實務設計,但這些計畫要求的內容遠不僅是 SDLC。如需詳細資料,請參閱這些計畫的說明文件。 

​量測方法

​本指南主要以 NIST Special Publication 800-218 安全軟體開發架構 (SSDF) 中定義的原則與實務為基礎,該架構為開發安全軟體提供技術中和的架構,且廣為公認,可支援美國政府軟體的安全需求。各項 SSDF 實務均已針對 LabVIEW 開發團隊的需求加以解讀與應用,並著重於在測試、量測、自動化與工程環境中的實際執行。 

​本文件中的建議也與其他既有的安全開發架構與業界最佳實務進行比較,包括 JKI Security Suite 與 Microsoft Security Development Lifecycle (SDL),以確保與備受肯定的軟體安全性、風險管理與軟體供應鏈保護方法保持一致。其目標是為 LabVIEW 組織提供實用的規劃藍圖,以便將網路安全整合至其開發流程中,同時產生客戶、監管機構與政府採購計畫越來越需要的資料與可追蹤性。

​整體方法

​NIST 800-218 所描述的流程涵蓋以下四個軟體開發領域:

  1. ​準備組織 (PO)—組織應確保其人員、流程與技術都能做好準備,以在組織層級執行安全軟體開發。許多組織會發現,某些 PO 實務也適用於其軟體開發的子集,例如個別開發團隊或專案。
  2. ​保護軟體 (PS)—組織應保護其軟體的所有元件不受竄改與未獲授權存取。
  3. ​生產安全的軟體 (PW)—組織應生產安全的軟體,使其發行版本中的安全漏洞降至最低。
  4. ​因應漏洞 (RV)—組織應在軟體版本中找出殘餘的漏洞,並適當做出回應以解決這些漏洞,並避免未來發生類似的漏洞。

​本文以這些主題指導 LabVIEW SSDF 的開發作業。

​準備組織

​在開始開發前,請務必採取措施來協助您的團隊採用安全開發原則、完成必要的教育訓練,並建立能支援安全開發的流程與工具。此階段包含花時間達成下列目標:

  • ​確認組織已定義並記錄特定的安全需求。
  • ​訓練各個職位的員工,以了解這些需求。
  • ​定義用於開發安全軟體的流程。
  • ​將安全要求向下傳遞至任何分包商或提供程式碼的第三方元件 (包括開放原始碼)。
  • ​實作可自動執行安全性與品質檢查的工具。
  • ​保護程式碼不受外部入侵。

適用於 LabVIEW 團隊

​這些需求對任何軟體開發團隊而言都是通用條件,但必須採取一些步驟才能針對測試團隊與 LabVIEW 團隊進行調整。

​安全團隊的關係

​許多測試團隊與其公司的安全團隊相互隔離。與他們協調建立信任關係,讓他們了解您認真對待安全。與安全團隊會議,了解他們對開發程式碼的需求。向他們展示您的專案與測試領域,並引導他們了解您的流程。了解測試實驗室運作方式並了解您所面臨的限制,對他們有幫助。相較於其他 IT 系統,您的挑戰將與眾不同,如果安全團隊了解這些差異,即可助您一臂之力。

​您也必須了解安全團隊的顧慮。當您了解他們必須遵循哪些計畫時,便能將安全指令追溯至相關需求,並能更妥善地達成原始計畫的目的。

​需求追蹤與說明文件

​需求追蹤是讓團隊準備好交付安全程式碼的重要環節。相較於儲存需求,良好的追蹤流程可以確保這些需求的可追蹤性。您的團隊應該能夠追蹤整個生命週期的需求:

​需求定義 → 設計 → 實作 → 測試 → 瑕疵修復 → 發行

​這種可追蹤性可作為客戶稽核、安全聲明 (如 CRA)、評估 (如 CMMC) 或供應商安全審查時的證據。

​GitHub Issues + Projects + Milestones 是大多數小型團隊最常見的需求追蹤方式。其他追蹤選項包括 GitLab (含免費與付費層級)、Azure DevOps、JIRA,以及其他專業軟體開發工具。這些工具能支援您建立問題,並追蹤問題是否解決。

​在所選工具內,系統地追蹤安全需求。每項需求都應符合下列條件:

  • 以 ID 編號唯一識別,每個 ID 皆有 1 項需求
  • ​分類依據類型,例如功能錯誤、安全漏洞、效能問題
  • ​指定反映其影響的嚴重程度,例如重要、高、中或低
  • ​從發現到解決皆予以追蹤

​確認需求追蹤工具之後,請記錄您的流程,將這些工具納入開發階段。在整個系統生命週期中,使用流程追蹤需求與問題。您的流程可能包含下列步驟:

  • 為每個需求指派一個唯一的識別碼;請勿將需求整合在一起。
  • ​直接在設計文件中參考需求 ID。
  • ​辨別架構圖中的哪些元件符合各項需求。
  • ​於程式碼註解、書籤、標籤與說明文件中標注需求 ID。
  • ​在儲存區提交記錄中擷取需求 ID。
  • ​在每個提取要求與合併要求中標注需求 ID。
  • ​將需求 ID 連結至單元測試,並確認所有需求均已通過測試。
  • ​在測試結果中列出需求 ID。
  • ​在安全性與程式碼檢視中記錄需求 ID。
  • ​在發行文件中識別已實作的需求 ID。
  • ​發現漏洞時,將漏洞連結至受影響的需求 ID。

​安全驗證設計

​規劃讓您的程式碼採用模組化設計。這項步驟對於 LabVIEW 特別有幫助,因為您可以測試個別模組。當您規劃模組化架構時,也可規劃開發單元測試。這些做法可提升程式碼品質,並提供更快速的方法,在進行更新後驗證程式碼,即使系統已部署亦然。 

​深入了解如何使用 NI 單元測試架構

​第三方測試工具能發揮額外價值;例如 JKI 的 Caraya 與 LUnit 產品可擴充 LabVIEW 團隊的軟體測試作業。

​第三方與分包商

​定義檢查與核准分包作業、第三方軟體與開放原始碼元件的流程。您的流程應包含檢查常見漏洞與暴露 (CVE) 等公開資料庫,以便找出您所使用元件中的已知漏洞。

​若您使用開放原始碼元件,您有責任在應用程式中使用該程式碼之前掃描漏洞。

​角色架構教育訓練

​定義團隊中的特定角色,包括安全性特定角色。確認每個角色的職責與權限。至少應將具有授權的存取權限角色 (管理員) 與使用者角色 (開發人員與操作人員) 分開定義。

​建立適用於這些角色的安全訓練。將教育訓練分配給團隊成員,並追蹤訓練完成情形。這些記錄可做為憑証檢視的證據。

​考慮使用線上提供的 NI 安全教育訓練:測試系統整合的安全考量課程。

​ISC2 等業界認證方案提供低價位入門級憑證。這些計畫對測試團隊的價值,在於提供與安全團隊溝通時共通的語言。

​領導團隊支援

​定義 SDLC 之後,請向公司領導團隊呈現並取得正式支援。此計畫至少應由核准安全預算的層級核准,以展現他們對計畫的承諾。

​資料管理與標籤

​身為組織,您可以找出可能會遇到的資料類型,並建立標籤系統。您應考慮下列資料類型:

  • ​保密資料或敏感資料 (如果貴公司適合處理該等級的資料)。
  • ​受控的非機密資訊 (CUI)—這項資訊並非機密資訊,但必須由法規保護。
  • ​ITAR 技術資訊—此資訊需要特殊處理,以確保未經許可不得匯出資訊。
  • ​出口管理條例 (EAR) 資料、出口管制資訊、NOFORN 與其他受出口限制資訊—此類資訊需要管制,以依據適用的出口法規防止未經授權的外國人士存取。
  • ​公司受保護資訊—此資訊包含若公開可能對公司造成損害的專有或機密資訊。
  • ​個人可識別資訊 (PII)—在某些國家和地區中,這些資料皆受保護,且必須透過特定方式進行保護。
  • ​公開資料:您可能擁有公開提供的資料。

​擁有明確的資料管理與標籤系統,即可適當保護資料,並對每個資料分類套用適當的限制。在開始系統開發前於組織層級定義此這些分類,可將適當控制措施套用至正確的風險領域,進而節省時間。透過對應現有的企業與 IT 標籤系統,即可簡化系統之間的資料共用方式。

​開發工具與安全工具

​確認您需要標準化的軟體與驅動程式版本與設定,以確保安全性。針對 LabVIEW,請辨別用於開發的版本。針對安裝作業建立安全設定。您可以依循 LabVIEW 安全設定指南進行。如需其他安全設定指南,請見 ni.com/security。

​為了提高可稽核性並快速設定新系統,請將開發與建置機器的設定方式自動化。建立基準安裝,並依該安裝建立映像檔。

​建立於整個開發過程中用於進行安全檢查的工具。您需要使用靜態應用安全測試 (SAST) 工具來分析原始碼,而不需執行程式以找出潛在的安全漏洞。針對 LabVIEW 圖形化程式碼,建議使用專為提供 LabVIEW 程式碼靜態分析而設計的 JKI Security Suite。或者,您也可以手動執行靜態程式碼分析,尋找安全問題。

​SAST 工具是分析程式碼漏洞的重要安全工具之一。動態應用安全性測試 (DAST) 工具也很重要,可在測試期間掃描執行中的程式碼。軟體組合分析 (SCA) 可找出開放原始碼函式庫、第三方套件與軟體元件的使用情形,並掃描這些元件的已知漏洞與授權問題。

​還有許多其他類型的工具可用於掃描程式碼中的安全問題。專案適用的工具取決於您的工具集、專案的特性,以及所使用的程式碼類型。在安全開發生命週期的這個階段,重要的是研究並確認團隊將使用的工具。

​程式碼儲存區

​安全開發需要儲存原始碼 (包含多個版本),以便團隊可以在發生程式碼故障時回復至舊版。為讓組織做好安全開發的準備,請建立程式碼儲存區,用於儲存程式碼、簽出程式碼以供開發,以及維護原始碼的版本控制。

​在程式碼儲存區中進行分支,有助於平行開發並穩定發佈。定義您將在組織中使用的分支類型。下列分支類型為標準類型,但可依您的需求調整:

  • ​量產分支—含有可供量產使用程式碼的主要穩定分支。
  • ​發行版分支—管理特定的發行版本,支援在主要分支繼續進行新開發時,針對舊版進行修補與熱修正。
  • ​功能分支—用於開發新功能、修正錯誤或進行實驗的臨時分支。
  • ​開發分支—這一分支用於在新功能合併至量產分支前,整合新功能。此分支可能包含開發中的功能,並且是多個功能分支的整合點。

​使用提供合適安全控制功能的儲存區。確保儲存區可保留完整的提交檔案記錄,以及可追蹤的變更。

​開發電腦的安全

​確保用於開發程式碼的電腦遵循基本的網路安全政策。這些基本控制措施包括密碼保護、惡意程式碼保護,以及其他基本的網路安全衛生措施。關於這些基本控制措施的範例,請見 https://www.acquisition.gov/far/52.204-21。

​為了確保可追蹤性,需記錄用來開發系統的電腦設定。應記錄的設定包括下列範例:

  • 作業系統版本與架構 (例如 Windows 10 x64)
  • ​LabVIEW 版本 (例如 LabVIEW 2023 Q3) 與 Bitness (32 位元/64 位元)
  • ​NI 驅動程式版本 (例如 NI-DAQmx 23.8、NI-VISA 23.5)
  • ​特定 NI 附加模組版本 (例如 LabVIEW Real-Time Module 或 LabVIEW FPGA Module)
  • ​NI Package Manager 摘要來源設定與關鍵套件版本
  • ​NI VI Package Manager (VIPM) 版本與 VIPC 檔案 (列出必要的 VI 組合與版本)
  • ​必要的第三方驅動程式版本
  • ​部署時所需的執行階段引擎版本

​安全證據

​多數安全計畫皆須證明您的團隊遵循 SSDF 所訂立的措施。建立儲存區以追蹤證據,並在系統開發與部署期間持續更新。系統應追蹤下列項目:

  • 教育訓練記錄
  • ​威脅模型
  • ​風險評估
  • ​程式碼檢視記錄
  • ​測試結果
  • ​SBOM
  • ​安全掃描結果
  • ​版本核准
  • ​修補程式記錄

​許多團隊執行這類安全活動但無法證明已經進行過這類活動。合規團隊會想要同時了解:您的團隊是否有正確的流程,以及您是否遵循這些流程。將這些文件集中會極大簡化稽核與合規性檢視作業。

​保護軟體

​組織準備好安全地開發程式碼後,下一個工作就是保護軟體。此步驟可確保團隊在開發與發佈期間,保護程式碼安全。

​適用於 LabVIEW 團隊

​無論使用哪一種程式設計語言,在開發流程中都必須保護軟體。由於 LabVIEW 團隊採用專業的工作流程工具進行軟體開發,這些團隊也必須採用安全的開發流程與工具。

​安全程式碼儲存區

​使用先前階段所指定的安全程式碼儲存庫,儲存與管理您的程式碼。良好的儲存區不僅能管理原始碼。同時也包含需求、使用說明、建置指令碼、測試成品與發行記錄。由於儲存區包含大量的程式碼與支援,因此使用安全儲存區非常重要;如果儲存區遭到入侵,您的軟體就會受到入侵。

​在儲存區中,您的主要分支是必須受到保護的重要資產。您的團隊應定義並遵循保護程式碼的相關政策。這些政策可能包含下列範例:

  • 分支保護規則
  • ​提取需求審查
  • ​核准需求
  • ​合併前的自動化測試
  • ​限制直接提交

​儲存區也應提供可追蹤性,從需求產生階段、開發階段到產品發佈階段,一應俱全。部分儲存庫允許對提交記錄簽署 (例如 Git)。

​儲存區應記錄軟體變更,以提供稽核追蹤。變更内容、變更人、變更原因、核准人,以及發行時間此外,版本映像檔應該會備份至安全封存區,即使儲存區遭到入侵,也能檢索程式碼。

​軟體材料清單 (SBOM)

​SBOM 提供用於開發程式碼的軟體與元件清單。在建置流程中產生 SBOM,可確保您擁有程式碼所使用元件的記錄,進而簡化辨識與修補漏洞的流程。

​從 LabVIEW 2026 Q3 開始,您可在應用建置流程中產生 SBOM。如需詳細資訊,請參閱為獨立應用程式產生軟體材料清單。

​程式碼簽署

​程式碼簽署機制可協助使用者確認軟體是由已知組織生產、發佈後尚未修改,且已通過核准發佈。在 LabVIEW 應用中,應將程式碼簽署套用至可執行檔、安裝程式、部署組合、DLL、驅動程式與更新組合。

​您可以在建置流程中按照下列指示簽署應用程式。您也可以使用 Microsoft 的 SignTool.exe 簽署軟體,就像簽署任何應用程式或檔案一樣。

​秘密資訊管理

​應用程式經常需要密碼、API 金鑰、憑證、權杖、加密金鑰、資料庫認證資訊及服務帳戶認證資訊等秘密資訊。這些秘密資訊可供存取系統與資料,並且必須在整個軟體生命週期内受到保護。

​切勿將密碼、API 金鑰、憑證或加密金鑰以硬式編碼方式直接寫入原始碼、設定檔、建置指令碼或測試公用程式。硬式編碼的秘密資訊難以輪替,可能被複製到儲存庫中,且可能透過原始碼審查、備份或對已部署應用程式進行反向工程而外洩。

​盡可能使用安全的作業系統或受硬體保護的儲存機制來儲存秘密資訊。安全或受保護儲存機制範例包括下列選項:

  • ​Windows 的 Credential Manager
  • Microsoft SecretStore
  • ​Microsoft CryptProtectData (DPAPI)
  • ​信賴平台模組 (TPM)
  • ​硬體安全模組 (HSM)
  • ​安全雲端秘密管理服務

​在授予秘密資訊存取權限時,應使用最少權限原則。只有需要存取某項秘密資訊的使用者、系統與服務,才應能取得該秘密資訊。管理員憑證與使用者憑證應分開,而且應盡可能避免共用帳號。

​應依組織政策定期更換密碼、憑證、API 金鑰與加密金鑰。建立流程,用以定義秘密資訊的產生方式、儲存位置、可存取秘密資訊的人員,以及秘密外洩時如何撤銷。

​測試系統經常使用實際的網路連線、資料庫、雲端服務與儀器。測試團隊在測試期間需要存取這些系統。盡可能使用專屬的測試憑證,而非量產憑證。分隔測試環境可降低在開發與驗證活動期間暴露營運系統的風險。

​生產安全的軟體

​此階段著重於安全地設計、實作、測試及驗證軟體。為了有效執行這項工作,團隊必須評估預期軟體使用風險與需求,並針對這些風險進行設計。最佳實務包含盡可能重複使用已知安全元件、在開發階段進行測試,以及掃描開發程式碼以找出漏洞。團隊應規劃安全使用方式,包括採用安全預設設定。

​適用於 LabVIEW 團隊

​測試與量測應用所面臨的安全挑戰,與一般軟體應用不同。LabVIEW 團隊具備條件了解這些挑戰,並開發能防禦針對其應用程式之攻擊的軟體。LabVIEW 提供許多固有的安全防護措施,但團隊必須考慮可能的攻擊並準備防禦措施。

​威脅建模與風險評估

​OWASP (Open Worldwide Application Security Project) 是一個非營利機構,提供免費的工具、指南與標準,協助使用者建立安全的軟體。OWASP 提供社群驅動的威脅建模指南;其模型提供一系列結構化步驟,可協助您界定工作範圍、判定威脅、判定因應與緩解措施,以及評估工作成果。

​對測試團隊而言,這一切始於一場討論,以了解所開發系統的預定用途及可能面臨的威脅。當中應包含首席開發人員、測試架構工程師、系統工程師、產品所有者、網路安全代表與營運人員。

​OWASP 方法包含威脅清單,包括偽造、竄改、否認、資訊洩露、阻斷服務及權限提升 (STRIDE)。竄STRIDE 威脅類別可引導團隊考量各種類型的威脅。

​測試團隊應根據自身在腦力激盪工作階段中的經驗,具體了解各種威脅對測試環境中的系統會造成什麼樣的影響:

  • 會造成測試結果遺失的原因為何?我們該如何從這類遺失中恢復?
  • ​有心人士如何損壞系統校準功能,讓系統產生不良資料?
  • ​是否有人能在未經授權的情況下控制系統中的任何儀器或裝置?
  • ​攻擊者如何透過系統造成生產停機?

​若將這些測試特定風險,與傳統的網路威脅一併納入考量,將有助於針對測試系統找出合適的防禦策略。威脅建模的輸出應該是排定優先順序的風險,以及降低這些風險所需的安全需求。這些需求會成為下一節所說明的系統設計與開發活動的相關輸入。定期進行威脅審查,可協助團隊找出新興或與逐漸浮現的威脅,並涵蓋檢視先前威脅未發現的問題。

​安全需求開發

​威脅建模可辨別系統風險。下一步是將這些風險轉換為可衡量的安全需求,並可在整個生命週期中實作、測試及追蹤這些需求。安全需求應與功能需求同樣嚴謹。

​安全需求定義系統必須提供的安全控制或行為。良好的安全需求應具體、可衡量、可測試且可追蹤。下表列出一些範例。


​安全需求應指派專屬識別符,並透過適用於功能需求的相同需求管理工具進行追蹤。

​明確定義的安全需求,應能在整個開發生命週期中追蹤。可追蹤性可證明已發現的風險已因應,並在客戶稽核、供應商安全評估與監管審查期間提供寶貴的證據。

​測試與量測系統具有在企業軟體專案中經常被忽略的安全需求。開發安全需求時,請使用標準安全類別,同時也請考量下列資料:

  • 保護測試結果免受未經授權的修改
  • ​保護校準資料與校準程序
  • ​保護儀器設定
  • ​關機或故障狀況下的硬體輸出安全處理
  • ​能控制序列編輯與測試限制修改的存取權限
  • ​保護生產資料庫與製造記錄
  • ​驗證從外部儀器、裝置與網路介面接收的資料

            ​由於不準確的量測與損毀的測試結果可能會帶來嚴重的業務後果,因此,完整性的安全需求通常與機密性的需求一樣重要。

            ​建立模組化程式碼

            ​模組化程式碼可將功能與受控介面的明確定義元件隔離,進而減少瑕疵與漏洞造成的影響。在良好的模組化設計中,每個模組只會暴露其他模組所需的功能。如此可減少進入點,並降低遭到誤用的機會。模組化程式碼的優點,在於更易於測試,因此更容易套用程式碼更新并进行驗證。

            ​建立模組化程式碼時,請将最小權限原則纳入考量。模組应该僅具有執行其功能所需的權限。舉例來說,儀器通訊功能不需要存取資料庫,因為資料庫由不同的模組負責處理。避免將資料庫控制代碼傳遞至儀器通訊模組。

            ​在不同模組之間傳遞資料時,評估通訊的可信度。若適用,請先確認來源,再接收來自其他元件的資料。

            ​模組化程式碼應該可以簡化安全審查作業。您可以審查每個模組,而不是在每次審查時審查整組程式碼。程式碼審查人員不需要了解整組程式碼,也能協助提升單一元件的安全性。

            ​程式碼模組也能簡化程式碼的重複使用。已安全開發並通過測試的模組,可放心地重複用於其他應用程式,確信其能依預期運作。

            ​LabVIEW 最佳實務

            ​建立一組最佳實務並遵循這些實務。您的程式碼審查作業應確認是否符合這些實務。雖然完整審查最佳實務超出本文件範圍,但至少應包含下列領域:

            • ​競態條件:多個執行路徑在沒有適當的同步化情況下存取共用資源時,就會出現競態條件,進而根據時序變化產生不可預測的行為。無論系統資源的可用性與時序為何,程式碼都應經過精心設計以可預測的方式執行。請謹慎使用全域資源與變數,以避免這些情況。非同步存取共用資源需要適當的同步原語 (通知器、發生事件、佇列),以確保執行緒安全的作業。
            • ​資源限制—資源消耗若不受控制,可能導致軟體停滯、系統當機,以及效能劣化,進而影響安全性與作業穩定性。LabVIEW 平行執行模型與自動記憶體管理可能會使資源耗損在超過重要臨界值前不易察覺,因此主動限制對於維持系統穩定性至關重要。實作特定的限制機制,以防止資源耗盡攻擊,並確保系統在不同負載條件下的行為可預測。應注意的具體項目包括陣列成長保護、迴圈速率控制、無限迴圈預防、網路連線間隔、記憶體使用量監控、檔案作業、UI 回應能力及佇列深度限制。
            • ​可觀測性—可觀測性是根據系統輸出,例如日誌、事件、指標、警示及稽核記錄,判定系統內部狀態、行為及安全性的能力。若要提升應用的可觀測性,就必須在設計系統時投入心力,使其既能提供此功能,又不會顯示敏感資訊。
            • ​基本記憶體管理—LabVIEW 會自動處理大多數記憶體管理作業。開發人員必須管理特定記憶體功能。針對效能關鍵的迴圈,可預先分配記憶體給陣列與資料結構。審查 VI 執行設定,以正確設定可重入性與其他設定。當不再需要資料值參考與其他參考時,請明確關閉。避免無限制的記憶體分配,例如在迴圈內無限制地建立陣列。
            • ​資料隔離與封裝—透過定義明確的公開介面設計元件,僅暴露用戶端所需的最小功能。內部資料應使用私有範圍,並搭配方法來強制執行封裝。LabVIEW 類別資料為私人資料;對於應保持隱私的資料,請勿建立直接存取器。根據邏輯責任區分功能,並在適當情況下控制存取等級。
            • ​輸入驗證—嚴格驗證所有輸入資料,尤其是來自外部來源或使用者的資料,以確保可靠性與系統完整性。輸入驗證是關鍵的安全控制措施,可防止格式不正確的資料危害系統運作或促成攻擊,並在整個處理過程中保護資料完整性。
            • ​整數處理—選擇足以滿足預期作業與未來成長需求的整數類型。LabVIEW 提供數種整數資料型態 (例如 I8、U64),其範圍與 Rollover 行為各不相同。根據預期值上限加上安全邊限來選擇整數類型,而不限於一般作業範圍。審查計數器、計時器及累加器的溢位情況,並明確測試邊界案例。
            • ​硬體介面—在不再需要硬體資源或連線 (例如 DAQmx 工作項目、VISA 工作階段、檔案參考) 時,將其關閉、解鎖、釋放或中斷。將硬體輸出設定為在應用程式關閉或發生錯誤時,轉換為已知的安全狀態。
            • ​錯誤處理—執行全方位的錯誤處理,以偵測、管理預期與非預期錯誤並製作報告。LabVIEW 內建的錯誤叢集有助於達成此一目的。使用錯誤函式合併錯誤資訊,以在路徑中保留原始錯誤及後續錯誤。
            • ​防故障設計—設計系統以妥善處理故障,並轉換至安全狀態。這包括設計安全的介面、驗證所有資料輸入、清楚向使用者傳達重要連線的狀態,以及定義程序,可在發生錯誤或關機時將硬體輸出設為已知安全狀態 (例如斷電或中斷連線)。如此可確保正確中斷與硬體介面的連線,在發生錯誤或關機時實作機制將關鍵資料緩衝區寫入磁碟、正確關閉檔案參考,並中斷與資料擷取硬體及其他儀器的連線。
            • ​VI 伺服器安全—使用 LabVIEW VI Server 進行遠端控制或通訊時,請設定相關選項以限制潛在攻擊面,並實作適當的使用者識別與憑證資訊管理。
            • ​可執行 INI VI Server 風險:LabVIEW 建置的可執行檔會產生 INI 檔,用於控制可執行權限,包括 VI Server 存取權限。例如,my-app.exe 會在同一個目錄中產生 my-app.ini。只要進行簡單的文字修改並了解應用程式結構,外部攻擊者便可能未經授權存取應用程式的人機介面控制項,並可能執行任意 VI。為了避免這種情況,請仔細管理所部署應用程式的檔案位置與權限。
            • ​生產強化—生產部署作業必須移除可能暴露敏感資訊或提供未經授權存取途徑的開發成品與除錯功能。LabVIEW 視覺化開發環境可讓您在不經意間,輕鬆在生產組建中納入除錯 VI、測試資料與診斷資訊。儲存在儲存庫中的程式碼也可能被不經意納入其中。移除除錯與測試 VI、停用專案建置規格中的除錯功能、清除敏感的預設值、移除硬式編碼的測試憑證,以及消除程式圖常數,以移除開發路徑、伺服器名稱或其他資訊,並驗證錯誤處理正常運作。
            • ​單元測試—自動化單元測試是驗證核心邏輯、資料處理、介面與錯誤管理的基礎。這可確保元件符合需求,並在程式碼基底演進時維持穩定行為。開發人員應隨著新增或修改程式碼建立單元測試,以支援整個開發生命週期中持續進行的安全性與隱私控制評估。單元測試可實作合規計畫所需的持續安全評估、瑕疵偵測及修復流程,並提供測試執行與安全控制驗證結果的證據。

            ​使用備受肯定的 LabVIEW 單元測試架構 (NI Unit Test Framework、JKI Caraya 或 LUnit)。這些工具可讓開發人員定義輸入與輸出,並驗證程式碼是否正常運作。如此一來,不需執行整個應用程式即可簡化程式碼驗證作業。

            單元測試可保護敏感功能,例如控制昂貴的設備,因為可以隔離測試模組。單元測試應精心設計為能重複執行,且理想情況下會整合至連續整合 (CI) 系統中,以確保在程式碼變更時自動執行。

            ​安全審查

            ​定期安全審查是建立安全意識開發文化的重要一環。審查可協助團隊建立安全實務、相互學習,並加強安全流程。安全審查作業在開發前即開始—審查計畫的架構與方法。接著在整個開發流程中,應繼續進行審查,以確保程式碼的開發安全無虞。審查頻率應依開發規模而定;審查應足夠頻繁,以便在大量後續開發之前修正問題。每次合併需求、提取需求或其他重要程式碼整合活動時,都應進行審查。針對大型專案可能適合安排額外的審查。

            ​只要團隊完成清單中的審查作業,安全性審查作業就能大幅提升效能。這些檢查清單應由組織建立,並根據威脅與風險分析,在每個專案開始時客制化。

            ​除了手動審查程式碼之外,還可執行自動程式碼審查。若您使用持續整合與持續交付/部署 (CI/CD) 流程,請在收件流程中納入安全掃描,以便在每次程式碼簽入時均會進行掃描。設定額外的掃描工具,每天或每週執行,以便在任何新增的安全漏洞成為程式碼的永久性部分之前找出問題。使用靜態分析、單元測試與其他安全掃描工具,以納入各種審查類型。

            ​開發工具

            ​在可能的情況下,請使用最新版本的開發軟體驅動程式。幾乎每天都會發現新的安全威脅,而開發人員會將安全修正程式納入修補程式與新軟體版本中。若無法使用最新版本,請使用仍可獲得廠商安全更新、且在系統生命週期內將持續獲得更新的軟體。 

            ​使用廠商提供的設定指南,設定您的工具以確保安全。

            ​請參閱 NI 產品可支援的軟體版本清單

            ​尋找 NI 產品指南 

            ​測試

            ​在發行產品前,請根據專案開始時確定的威脅與風險進行測試。此清單可能包含下列測試:

            • ​動態測試—應用執行時,測試軟體完整性。動態測試會尋找認證失敗、授權漏洞、注入漏洞、錯誤設定及其他可能使程式當機的方式。
            • ​模糊測試—這項測試會將非預期或格式錯誤的資料輸入軟體中。例如,假設某個控制點可能設置爲 25 度,測試時卻可能輸入 AAAAAAA…。或者 NULL。對與儀器或網路協定通訊的 LabVIEW 應用來說,這項測試特別有用,以判斷輸入是否會導致儀器當機或行為不良。
            • ​滲透測試—這項測試可由內部團隊或外部顧問執行。在這項測試中,專家會嘗試使用應用程式取得未經授權的存取權限、升級權限、存取機密資料,或是繞過控制項。這項測試一般會在主要版本之前或每年執行,視系統的風險範圍而定。

            ​由於 LabVIEW 是一種圖形化程式設計語言,因此有些傳統的安全工具無法測試 LabVIEW 程式碼。JKI Security Suite 等工具提供專為 LabVIEW 開發人員設計的安全性為主的靜態分析功能,可掃描 LabVIEW 程式碼,並且根據圖形化程式設計語言的特定安全考量來調整。 

            ​深入了解 JKI Security Suite

            ​發行閘門

            ​除非開發團隊能證明已審查威脅模型、解決重大漏洞、執行且通過單元測試、執行靜態分析、產生 SBOM、進行程式碼審查,以及簽署發行組合,否則不應核准發行。強制執行正式的發行閘門流程,能讓管理階層有一個決策點,可據以審查是否已遵循流程及軟體是否安全。

            ​安全部署與安裝

            ​開發安全軟體只是流程的一部分。若安全應用程式的部署不正確,或在安裝及設定期間移除安全控制措施,便可能變得脆弱。因此,部署流程應被視為安全軟體開發生命週期的一部分,並在軟體發佈給使用者之前定義程序、審查與驗證活動。

            ​安全預設設定

            ​應使用安全預設設定部署應用程式。使用者通常會假設預設設定代表建議的設定。任何預設停用的安全敏感選項,都可能在系統的整個生命週期中維持停用。

            ​安全預設值可能包含下列範例:

            • ​酌情要求進行認證。
            • ​停用未使用的網路服務與連接埠。
            • ​根據預設啟用加密通訊。
            • ​使用最小權限原則。
            • ​停用生產版本中的開發與除錯介面。
            • ​限制設定與管理功能的存取權限。

            ​使用者應須有意識地弱化安全設定,而非手動啟用安全保護措施。

            ​生產強化

            ​在發佈前,移除開發期間有用但會在生產環境中造成不必要風險的開發成品與功能。根據下列條件審查應用:

            • 測試 VI
            • ​除錯公用程式
            • ​診斷後門
            • ​範例憑證
            • ​硬式編碼的密碼
            • ​內部伺服器名稱
            • ​檔案系統路徑
            • ​未使用的服務
            • ​開發憑證

            ​生產系統只能暴露系統運作所需的功能。

            ​帳號與權限管理

            ​檢視系統所需的權限,並將其指派給合適的角色。除非有確認的作業需求,否則系統不應授予管理員權限。服務帳戶應僅設定為具有執行其預定功能所需的權限。考慮以角色為基礎的權限時,請考量:

            • 具有特定角色特權存取權的管理員帳戶
            • ​用於維護及更新的服務帳戶
            • ​用於存取資料的資料庫帳戶
            • ​操作人員工作站的共用憑證
            • ​限制存取權限的檔案與資料夾權限,以符合系統的威脅設定

            ​若系統儲存敏感資訊,請確認存取控制元件是否適當保護該類資訊。

            ​網路安全設定

            ​在部署前記錄所有必要的網路通訊。針對系統進行的每個連線,考量:

            • ​應使用哪些協定傳輸資料
            • ​需要透過防火牆開啟的連接埠號碼
            • ​每個通訊串流的方向
            • ​授權需求與憑證儲存空間
            • ​資料儲存與傳輸的加密需求
            • ​移除或停用不必要的通訊路徑

            ​資料跨越網路邊界時,必須受到保護。針對每一次資料傳輸,採取下列預防措施:

            • 使用 TLS 或其他安全協定。
            • ​盡可能減少暴露的服務。
            • ​限制輸入連線。
            • ​盡可能將通訊限制在授權系統中。

            ​測試系統通常會同時連接至企業網路、製造網路、雲端服務與儀器。了解並記錄這些信任的邊界是一項重要的部署活動。

            ​秘密資訊與憑證管理

            ​應用通常需要密碼、API 金鑰、憑證、權杖或加密金鑰。處理這些秘密代碼時,請注意不要:

            • ​將憑證以硬式編碼的方式寫入原始碼中
            • ​將密碼儲存在純文字設定檔中
            • ​將私鑰儲存在不受保護的位置

            ​使用下列其中一種工具或技術:

            • ​Windows 的 Credential Manager
            • ​Microsoft Secret Store
            • ​CryptProtectData (DPAPI)
            • ​信賴平台模組 (TPM)
            • ​硬體安全模組 (HSM)

            ​記錄建立、儲存、旋轉、備份與撤銷秘密資訊的方式。按照此流程進行。

            ​記錄與稽核

            ​應用程式應記錄重要的作業與安全性相關活動。所記錄的事件包含下列範例:

            • 使用者認證事件
            • ​設定變更
            • ​軟體更新
            • ​獲得授權的作業
            • ​安全故障
            • ​網路連線失敗
            • ​啟動與關機事件

            ​確認日誌未記錄任何秘密資訊,例如密碼、個人資訊或機密資訊,因為日誌可能會被非預定對象查看。

            ​記錄有助於排除故障、調查事件,以及證明是否符合客戶與法規要求。

            ​在可能的情況下整合應用記錄與 Windows 事件檢視器或 Linux Syslog 等平台記錄機制,以簡化監控、事件調查與合規報告。評估將記錄傳送至安全伺服器是否能提高保護程度與可存取性。

            ​保護稽核記錄不受未經授權的存取與修改,並定義保留記錄的時間長度。

            ​版本核准

            ​在發佈軟體之前,先執行最終的安全審查,以確認應用是否符合團隊的發佈需求。此最終審查內容包含:

            • ​已檢視與核准威脅模型
            • ​已執行安全要求
            • ​單元測試已通過
            • ​安全掃描已完成
            • ​已解決重大漏洞
            • ​已產生 SBOM
            • ​已更新文件
            • ​已檢視部署指示
            • ​發行組合已簽署

            ​發佈流程應該會產生證據,以證明這些活動已完成。為了維持完整性,這些證據記錄在發佈後應受到保護,以免遭到竄改。

            ​程式碼簽署與封裝完整性

            ​使用者應能確認發布的軟體來自預期組織,且自發佈後一直未經修改。

            ​程式碼簽署應套用至下列所有軟體類型:

            • ​可執行檔
            • ​安裝程式
            • ​驅動程式
            • ​外掛程式
            • ​程式庫
            • ​部署組合
            • ​更新組合

            ​程式碼簽署不會阻止軟體修改,但可有效偵測未經授權的修改,並確保軟體來源是預期發佈商。

            ​部署驗證

            ​安裝完成後,確認已部署的系統在預定環境中安全運作。驗證活動應確認下列功能:

            • 正在執行所需的服務
            • ​加密功能正確
            • ​使用者權限正確
            • ​記錄功能正常運作
            • ​備份正常運作
            • ​部署後仍可啟用安全控制項

            ​每次進行重大設定變更時,都應執行安全驗證。

            ​部署證明

            ​維護記錄,以證明已根據定義流程執行部署作業。這些記錄包含下列範例:

            • 經核准的部署程序
            • ​安裝記錄
            • ​安全審查檢查清單
            • ​程式碼簽署記錄
            • ​SBOM
            • ​安全掃描結果
            • ​部署驗證報告
            • ​版本核准

            ​在客戶稽核、供應商評估、法規審查與內部安全調查期間,這些記錄能提供寶貴的可追蹤性。

            ​因應漏洞

            ​軟體漏洞是軟體設計、實作、設定或作業流程中的弱點、瑕疵或缺陷,可能遭利用而危及系統或其資料的機密性、完整性或可用性。團隊所開發的程式碼或其中一個用於軟體的元件,都有可能出現漏洞。由於漏洞會為惡意行為者提供破壞系統的途徑,因此務必修復這些漏洞,並將修復部署至受影響的系統。

            ​適用於 LabVIEW 團隊

            ​測試產業在因應漏洞方面面臨了長久的挑戰。許多測試專案都會透過單次前期撥款模式獲得資助,並未為系統的後續維護編列經費。這表示測試團隊沒有用於更新系統的資源,甚至無法提供安全更新。這與維持系統更新的安全需求直接衝突。

            ​其中一項重大挑戰,就是進行更新所需的驗證量。即使軟體和硬體工具並無成本,更新可能也會耗費大量成本來驗證系統在更新後是否正常運作。

            ​產業轉變

            ​隨著安全產業的變化,測試產業也必須著手改變,妥善規劃整個生命週期的測試系統,並提供資助。測試團隊可採取幾項步驟,改用完整的生命週期管理方案,包括:

            • 協商系統的長期所有權。指派負責系統生命週期的系統所有者,並確保隨著組織中的角色變化,進行所有權移轉。
            • ​設計模組化的系統。更新大型整合式程式碼的難度更高。為模組化設計的程式碼可更輕鬆地更新與測試,而不會影響整體程式碼。定義每個程式碼模組的功能,以及模組之間的通訊介面。
            • ​使用您的程式碼建立單元測試。測試需要更多程式碼開發,但這些工具可大幅降低在系統生命週期內驗證軟體更新的成本。
            • ​與客戶和主管合作,轉換為完整的生命週期思維。這可能意味著在整個生命週期內持續為專案提供經費;也可能意味著在專案初期投入更多開發與驗證資源。協助他們了解安全是專案中相當重要的一環,而且必須為其進行規劃。
            • ​建立系統的正式生命週期維護階段,包括瑕疵管理、停產規劃、安全修補程式、文件更新與客戶支援等活動。應將此維護階段視為規劃中的工程活動,而非事後考量。
            • ​將技術更新規劃納入系統生命週期。將這些項目納入產品生命週期內,如有需要,可預先向客戶收取這些計劃性更新的費用。
            • ​評估安全性故障—您的故障、整個組織的故障,以及公開記錄的故障。從中汲取的經驗可協助您的團隊做好準備,以因應未來的攻擊,並且有助於證明對持續安全措施的投資。

            ​漏洞識別

            ​我們會透過 ni.com/security 通知 NI 產品 (包括 LabVIEW、驅動程式與其他軟體) 中的漏洞。修補程式也會透過常見漏洞與暴露 (CVE) 系統回報。這些修補程式可能會修復 NI 工程師開發的軟體程式碼或我們使用的元件中的漏洞。您可以前往 ni.com/security 註冊新的修補程式通知。

            ​SBOM 也可用來自動掃描軟體。如果您是使用 LabVIEW 應用程式產生 SBOM,可以設定掃描軟體,以檢查 CVE 資料庫是否有報告問題並通知您。目前有多種軟體組合分析 (SCA) 工具可掃描 SBOM,並將其與 CVE 資料庫進行比對。

            ​如果您的最終使用者發現有漏洞,可以直接回報這個漏洞給您。如果問題發生在 NI 軟體內部,請上網至 ni.com/security 回報問題。

            ​漏洞修復

            ​重視漏洞報告至關重要。如果您的使用者回報了問題,或是您軟體堆疊中報告了漏洞,請分析漏洞,以判定其影響程度以及遭利用的可能性。這些問題會受到漏洞的性質、以及您使用受影響之軟體元件的方式的影響。如果判定遭利用的威脅非常嚴重,則需要更新軟體並向最終使用者發出修補程式。

            ​某些法規 (例如歐洲網路安全韌性法案 (CRA)) 規定您必須提供 5 年以上的安全修補程式。某些合約可能指定更長或更短的支援承諾。在初步專案提案中規劃此等級的支援,以便在完成專案後避免意外發生。

            ​作為漏洞修復流程的一部分,進行漏洞根本原因分析,以改善開發流程並在未來專案中消除類似問題。

            ​結論:在 SDLC 中整合安全軟體開發的重要性

            ​安全軟體開發並非專案結束時所執行的獨立活動。這是一組整合在系統生命週期中的做法。只要採用本指南所述的原則,LabVIEW 團隊就能減少漏洞、改善維護功能、簡化合規措施,並更有效地保護所託付的系統與資料。安全是一個持續演進的流程,您的團隊也會隨著時間逐漸成熟。立即著手建立可重複且永續的流程,以在產品生命週期內持續提升安全性。

            威脅安全要求
            未經授權修改測試結果僅限具有合適角色的認證使用者修改已儲存的測試結果。
            攔截網路流量應用程式與外部系統之間的所有通訊皆應使用加密協定。
            校準資料損毀校準資料應受保護,避免遭受未經授權的修改,且所有變更皆應記錄。
            未經授權的設備控制管理或危險設備作業必須由已驗證且已獲授權的使用者執行。